Pourquoi est-ce que j'obtiens les mêmes résultats pour OLS et GLS dans R?


8

Lorsque j'exécute ce code:

require(nlme)

a <- matrix(c(1,3,5,7,4,5,6,4,7,8,9))

b <- matrix(c(3,5,6,2,4,6,7,8,7,8,9))

res <- lm(a ~ b)

print(summary(res))

res_gls <- gls(a ~ b)

print(summary(res_gls))

J'obtiens les mêmes coefficients et la même signification statistique sur les coefficients:

Loading required package: nlme

Call:
lm(formula = a ~ b)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.7361 -1.1348 -0.2955  1.2463  3.8234 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept)   2.0576     1.8732   1.098   0.3005  
b             0.5595     0.2986   1.874   0.0937 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

Residual standard error: 2.088 on 9 degrees of freedom
Multiple R-squared: 0.2807, Adjusted R-squared: 0.2007 
F-statistic: 3.512 on 1 and 9 DF,  p-value: 0.09371 

Generalized least squares fit by REML
  Model: a ~ b 
  Data: NULL 
      AIC      BIC    logLik
  51.0801 51.67177 -22.54005

Coefficients:
                Value Std.Error  t-value p-value
(Intercept) 2.0576208 1.8731573 1.098477  0.3005
b           0.5594796 0.2985566 1.873948  0.0937

 Correlation: 
  (Intr)
b -0.942

Standardized residuals:
       Min         Q1        Med         Q3        Max 
-1.3104006 -0.5434780 -0.1415446  0.5968911  1.8311781 

Residual standard error: 2.087956 
Degrees of freedom: 11 total; 9 residual

Pourquoi cela arrive-t-il? Dans quels cas les estimations OLS sont-elles les mêmes que les estimations GLS?


5
Un modèle GLS permet de corréler les erreurs et / ou d'avoir des variances inégales. Si vous ne spécifiez pas une telle corrélation ou différence de variance résiduelle avec les options correlationou weightsau sein de la glsfonction, les résultats de GLS sont égaux à ceux de lm.
COOLSerdash

2
OK, merci, cela a du sens. Donc, fondamentalement, j'ai eu les mêmes résultats parce que j'ai dit glsd'agir comme ça lm. Une autre question est de savoir ce que je devrais mettre correlationet weights.
Akavall

Réponses:


13

Vous avez obtenu les mêmes résultats car vous n'avez pas spécifié de structure spéciale de variance ou de corrélation dans la glsfonction. Sans ces options, un GLS se comporte comme un OLS. L'avantage d'un modèle GLS par rapport à une régression normale est la possibilité de spécifier une structure de corrélation (option correlation) ou de permettre à la variance résiduelle de différer (option weights). Permettez-moi de montrer cela avec un exemple.

library(nlme)

set.seed(1500)

x <- rnorm(10000,100,12) # generate x with arbitrary values

y1 <- 10 + 15*x + rnorm(10000,0,5) # the first half of the dataset

y2 <-  -2 - 5*x + rnorm(10000,0,15) # the 2nd half of the data set with 3 times larger residual SD (15 vs. 5)

y <- c(y1, y2)
x.new <- c(x, x)

dummy.var <- c(rep(0, length(y1)), rep(1, length(y2))) # dummy variable to distinguish the first half of the dataset (y1) from the second (y2)

# Calculate a normal regression model   

lm.mod <- lm(y~x.new*dummy.var)

summary(lm.mod)

Coefficients:
                 Estimate Std. Error   t value Pr(>|t|)    
(Intercept)      10.27215    0.94237    10.900   <2e-16 ***
x.new            14.99691    0.00935  1603.886   <2e-16 ***
dummy.var       -12.07076    1.33272    -9.057   <2e-16 ***
x.new:dummy.var -19.99891    0.01322 -1512.387   <2e-16 ***

# Calculate a GLS without any options

gls.mod.1 <- gls(y~x.new*dummy.var)

summary(gls.mod.1)

Coefficients:
                    Value Std.Error    t-value p-value
(Intercept)      10.27215 0.9423749    10.9003       0
x.new            14.99691 0.0093504  1603.8857       0
dummy.var       -12.07076 1.3327194    -9.0572       0
x.new:dummy.var -19.99891 0.0132234 -1512.3868       0

# GLS again, but allowing different residual variance for y1 and y2

gls.mod.2 <- gls(y~x.new*dummy.var, weights=varIdent(form=~1|dummy.var))

summary(gls.mod.2)

 Parameter estimates:
       0        1 
1.000000 2.962565 

Coefficients:
                    Value Std.Error   t-value p-value
(Intercept)      10.27215 0.4262268    24.100       0
x.new            14.99691 0.0042291  3546.144       0
dummy.var       -12.07076 1.3327202    -9.057       0
x.new:dummy.var -19.99891 0.0132234 -1512.386       0

# Perform a likelihood ratio test

anova(gls.mod.1, gls.mod.2)

          Model df      AIC      BIC    logLik   Test  L.Ratio p-value
gls.mod.1     1  5 153319.4 153358.9 -76654.69                        
gls.mod.2     2  6 143307.2 143354.6 -71647.61 1 vs 2 10014.15  <.0001

Le premier modèle GLS ( gls.mod.1) et le modèle de régression linéaire normal ( lm.mod) donnent exactement les mêmes résultats. Le modèle GLS permettant différents écarts-types résiduels ( gls.mod.2) estime que l'écart-type résiduel y2est environ 3 fois plus grand que l'écart-type résiduel, y1ce qui est exactement ce que nous avons spécifié lorsque nous avons généré les données. Les coefficients de régression sont pratiquement les mêmes, mais les erreurs standard ont changé. Le test du rapport de vraisemblance (et AIC) suggère que le modèle GLS avec les différentes variances résiduelles ( gls.mod.2) correspond mieux aux données que le modèle normal ( lm.modou gls.mod.1).


Structures de variance et de corrélation dans gls

Vous pouvez spécifier plusieurs structures de variance dans la glsfonction et l'option weights. Voir ici pour une liste. Pour une liste des structures de corrélation pour l'option, correlationvoir ici .


Qu'est-ce qui détermine la structure de variance à choisir?
Rafael

@Rafael Dans ce cas, j'ai simulé les données et je savais quelle structure de variance prendre. En pratique, j'essaierais différentes structures de variance basées sur la connaissance du sujet et des graphiques exploratoires. Les différents modèles avec différentes structures de variance peuvent ensuite être comparés à l'aide de tests de rapport de vraisemblance. Je ne sais pas s'il existe une procédure recommandée "standard" pour choisir la structure de la variance.
COOLSerdash

Salut COOLSerdash, merci pour votre réponse. Je vais essayer différentes structures et comparaisons de modèles en utilisant le test LR.
Rafael

1

et pour être clair, en cas de corrélation sérielle des résidus, vous pouvez simplement utiliser l'estimation OLS de celui-ci, par exemple gls(..., cor=corAR1(0.6)), ici le 0.6, ainsi que l'ordre provient d'OLS, vous pouvez les calculer en utilisant la arfonction pour les résidus d'OLS

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.