Estoy analizando un conjunto de datos en el que los datos se agrupan en varios grupos (ciudades en regiones). El conjunto de datos se parece a:Uso de la matriz de covarianzas agrupadas en predict.lm()
R> df <- data.frame(x = rnorm(10),
y = 3*rnorm(x),
groups = factor(sample(c('0','1'), 10, TRUE)))
R> head(df)
x y groups
1 -0.8959 1.54 1
2 -0.1008 -2.73 1
3 0.4406 0.44 0
4 0.0683 1.62 1
5 -0.0037 -0.20 1
6 -0.8966 -2.34 0
Quiero que mi lm() calcula a cuenta de la correlación intraclase en grupos y para ello estoy usando una función cl()
que toma un lm()
y devuelve la matriz de covarianza agrupada robusta (original here):
cl <- function(fm, cluster) {
library(sandwich)
M <- length(unique(cluster))
N <- length(cluster)
K <- fm$rank
dfc <- (M/(M-1))*((N-1)/(N-K-1))
uj <- apply(estfun(fm), 2, function(x) tapply(x, cluster, sum));
vcovCL <- dfc * sandwich(fm, meat = crossprod(uj)/N)
return(vcovCL)
}
Ahora,
output <- lm(y ~ x, data = df)
clcov <- cl(output, df$groups)
coeftest(output, clcov, nrow(df) - 1)
me da las estimaciones que necesito. El problema ahora es que quiero usar el modelo para la predicción, y necesito que el error estándar de la predicción se calcule con la nueva matriz de covarianza clcov
. Es decir, necesito
predict(output, se.fit = TRUE)
pero utilizando en lugar de clcov
vcov(output)
. Algo así como un vcov() <-
sería perfecto.
Por supuesto, podría escribir mi propia función para hacer predicciones, pero me pregunto si hay un método más práctico que me permita usar métodos para la firma lm
(como arm :: sim).
Debe especificar un poco más. ¿Para qué es esa función de clúster? ¿Por qué los errores estándar que salen de lm() no son válidos? Realmente no puedo seguir lo que tratas de hacer. Es muy posible que necesite un modelo más general, por ejemplo, glm, glmm o gam/gamm. Queda muy poco por hacer en los errores estándar de las funciones simples de lm, a menos que los use en un contexto completamente diferente. Pero luego necesitamos el contexto ... –
@Joris He editado la pregunta. Espero que esté más claro ahora. Tenga en cuenta que estoy evitando explícitamente un modelo 'glmm'. – griverorz