Por que obtenho os mesmos resultados para OLS e GLS em R?


8

Quando executo este código:

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))

Eu obtenho os mesmos coeficientes e a mesma significância estatística nos coeficientes:

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

Por que isso está acontecendo? Em quais casos as estimativas do OLS são iguais às estimativas do GLS?


5
Um modelo GLS permite que os erros sejam correlacionados e / ou tenham variações desiguais. Se você não especificar tal correlação ou diferença de variação residual com as opções correlationou weightsdentro da glsfunção, os resultados do GLS serão iguais aos de lm.
COOLSerdash

2
OK, obrigado, isso faz sentido. Então, basicamente, eu tive os mesmos resultados, porque eu disse glspara agir assim lm. Outra questão é o que devo colocar correlatione weights.
Akavall

Respostas:


13

Você obteve os mesmos resultados porque não especificou uma estrutura especial de variação ou correlação na glsfunção. Sem essas opções, um GLS se comporta como um OLS. A vantagem de um modelo GLS sobre uma regressão normal é a capacidade de especificar uma estrutura de correlação (opção correlation) ou permitir que a variação residual seja diferente (opção weights). Deixe-me mostrar isso com um exemplo.

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

O primeiro modelo GLS ( gls.mod.1) e o modelo de regressão linear normal ( lm.mod) produzem exatamente os mesmos resultados. O modelo GLS, que permite diferentes desvios padrão residuais ( gls.mod.2), estima que o DP residual y2seja cerca de 3 vezes maior que o DP residual, y1exatamente o que especificamos quando geramos os dados. Os coeficientes de regressão são praticamente os mesmos, mas os erros padrão foram alterados. O teste da razão de verossimilhança (e AIC) sugere que o modelo GLS com as diferentes variações residuais ( gls.mod.2) ajusta os dados melhor do que o modelo normal ( lm.modou gls.mod.1).


Estruturas de variância e correlação em gls

Você pode especificar várias estruturas de variação na glsfunção e na opção weights. Veja aqui uma lista. Para uma lista de estruturas de correlação para a opção, correlationconsulte aqui .


O que determina a estrutura de variação a ser escolhida?
Rafael

@ Rafael Nesse caso, simulei os dados e soube qual estrutura de variação tomar. Na prática, tentaria diferentes estruturas de variação com base no conhecimento do assunto e em gráficos exploratórios. Os diferentes modelos com diferentes estruturas de variância podem ser comparados usando testes de razão de verossimilhança. Não sei se existe um procedimento recomendado "padrão ouro" para escolher a estrutura de variação.
COOLSerdash

Olá COOLSerdash, obrigado pela sua resposta. Vou tentar diferentes estruturas e comparações de modelos usando o teste LR.
Rafael

1

e, para deixar claro, em caso de correlação serial dos resíduos, você pode simplesmente usar a estimativa do OLS, por exemplo gls(..., cor=corAR1(0.6)), aqui o 0,6, assim como a ordem vem do OLS, é possível calculá-los usando a arfunção dos resíduos de OLS

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.