Analizuję zbiór danych, w którym dane są zgrupowane w kilku grupach (miejscowości w regionach). Zbiór danych wygląda następująco:Używanie klastrowej macierzy kowariancji w 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
chcę mój lm() szacuje, w celu uwzględnienia intraclass korelacji w grupach i do tego celu używam funkcji cl()
że bierze lm()
i zwraca solidne klastrowego macierz kowariancji (oryginalna 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)
}
teraz
output <- lm(y ~ x, data = df)
clcov <- cl(output, df$groups)
coeftest(output, clcov, nrow(df) - 1)
daje mi szacunki mi potrzeba. Problem polega na tym, że chcę użyć modelu do prognozowania i potrzebuję, aby standardowy błąd prognozy został obliczony przy użyciu nowej macierzy kowariancji clcov
. Oznacza to, że muszę
predict(output, se.fit = TRUE)
ale stosując clcov
zamiast vcov(output)
. Coś takiego jak vcov() <-
byłoby idealne.
Oczywiście, mógłbym napisać własną funkcję do przewidywania, ale zastanawiam się, czy istnieje bardziej praktyczna metoda, która pozwala mi używać metod do podpisu lm
(jak ramię :: sim).
Musisz podać nieco więcej. Na czym polega ta funkcja klastra? Dlaczego standardowe błędy wychodzące z lm() nie są prawidłowe? Nie mogę naprawdę podążać za tym, co próbujesz zrobić. Być może potrzebujesz bardziej uogólnionego modelu, np. Glm, glmm lub gam/gamm. Pozostało niewiele do zrobienia w przypadku standardowych błędów prostych funkcji LM, chyba że używa się ich w zupełnie innym kontekście. Ale potrzebujemy kontekstu ... –
@Joris Edytowałem pytanie. Mam nadzieję, że teraz jest jaśniej. Proszę zauważyć, że wyraźnie unikałem modelu 'glmm'. – griverorz