Pregunta 1. ¿Cuál sería la mejor manera de calcular el error estándar entre los sujetos? ¿Sería simplemente realizar el ajuste para cada sujeto, y luego tomar la desviación estándar de los ajustes?
Opción 1: Utilizar los mínimos cuadrados ponderados. El teorema de Gauss Markov nos dice que el estimador del error estándar ponderado de la varianza inversa será el mejor estimador lineal insesgado (BLUE). Obsérvese que, aunque el modelo de la media es correcto, y en consecuencia la estimación no ponderada es insesgada, se añade la eficiencia de utilizar el estimador iterativo de mínimos cuadrados generalizados para proporcionar una mejor estimación de los residuos. Ayuda a identificar los grados de libertad apropiados para la varianza intracluster. Como referencia, he incluido la estimación en dos etapas, pero tengo problemas para identificar la corrección correcta de los grados de libertad.
Un resultado interesante en el que estoy trabajando es la idea de que los programas informáticos con opciones para la correlación intraclúster pueden proporcionar estimaciones coherentes de la heteroscedasticidad. Es decir, independientemente de si una muestra está muy intracorrelacionada o es muy variable, el efecto neto es una ponderación a la baja de esa muestra, por lo que se puede obtener el mismo error estándar óptimo en ambos casos.
Utilizando residuos no ponderados para estimar la varianza del cluster, estoy encontrando que es difícil identificar el grado de libertad apropiado para la estimación de la varianza intracluster. Estoy añadiendo mi código a continuación para que otros lo verifiquen. $n-1$ es demasiado conservador, y $n-2$ es demasiado conservador.
Opción 2: Utilizar el estimador de la varianza sándwich (consistente con la heteroscedasticidad) o el bootstrap.
Pregunta 2: ¿Cómo sería la forma del error estándar del ajuste, y cuál es la intuición que hay detrás? ¿Seguiría siendo hiperbólico? Creo que no, pero en realidad no estoy seguro.
La distribución límite de la distribución de errores sigue siendo normal siempre que la muestra "crezca más rápido" en términos de número de puntos temporales que de número de sujetos, o al menos de forma que la heteroscedasticidad a nivel de sujeto esté algo acotada. La intuición es que se trata de un resultado del teorema del límite central de Lyapunov.
require(gee)
`%covers%` <- function(x, y) x[1] < y & y < x[2]
sse.df <-function(x, df=1) {
sum({x-mean(x)}^2)/{length(x)-df}
}
confint.gee <- function (object, parm, level = 0.95, ...)
{
cf <- coef(object)
pnames <- names(cf)
if (missing(parm))
parm <- pnames
else if (is.numeric(parm))
parm <- pnames[parm]
a <- (1 - level)/2
a <- c(a, 1 - a)
# pct <- format.perc(a, 3)
pct <- paste0(formatC(100*a, format='f', digits=1), '%')
fac <- qnorm(a)
ci <- array(NA, dim = c(length(parm), 2L), dimnames = list(parm,
pct))
# ses <- sqrt(diag(vcov(object)))[parm]
ses <- sqrt(diag(object$robust.variance))[parm]
ci[] <- cf[parm] + ses %o% fac
ci
}
do.one <- function() {
s1 <- 1
s2 <- 1
nc <- 8
nt <- 20
i <- rep(1:8, each=nt)
e <- rnorm(nc, 0, s1)[i] + rnorm(nc*nt, 0, s2)
x <- rep(seq(-3, 3, length.out = nt), times=nc)
y <- 2*x + e
r <- lm.fit(cbind(1,x), y)$residuals
wls <- lm(y ~ x, weights=rep(1/tapply(r^2, i, sse.df, df=1), each=nt))
gls <- gls(y ~ x, correlation=corCompSymm(form=~1|i))
gee <- gee(y ~ x, id = i)
c( ## coverage of 80% CIs
confint(wls, parm='x', level = .8) %covers% 2,
confint(gee, parm='x', level = .8) %covers% 2,
confint(gls, parm='x', level= 0.8) %covers% 2,
vcov(wls)[2,2]^.5,
gee$robust.variance[2,2]^.5,
vcov(gls)[2,2]^.5
)
}
set.seed(123)
out <- replicate(500, do.one())
## 80% coverage of CIs
rowMeans(out[1:3, ])
par(mfrow=c(1,3))
hist(out[4, ], xlab='Sigma two-pass', main='')
hist(out[5, ], xlab='Sigma GEE', main='')
hist(out[6, ], xlab='Sigma GLS', main='')
Nos da una cobertura del 70% para el WLS de 2 grados de libertad y del 74% para el GEE. y del 82,54% para el GLS. Los histogramas de las estimaciones del error estándar muestran una distribución muy normal en todos los casos.