Effects
Pakiet zapewnia bardzo szybki i wygodny sposób kreślenia wyników liniowego modelu efektu mieszanego uzyskanego przez lme4
pakiet . Te effect
przedziały ufności oblicza funkcyjne (CIS) bardzo szybko, ale jak wiarygodne są te przedziały ufności?
Na przykład:
library(lme4)
library(effects)
library(ggplot)
data(Pastes)
fm1 <- lmer(strength ~ batch + (1 | cask), Pastes)
effs <- as.data.frame(effect(c("batch"), fm1))
ggplot(effs, aes(x = batch, y = fit, ymin = lower, ymax = upper)) +
geom_rect(xmax = Inf, xmin = -Inf, ymin = effs[effs$batch == "A", "lower"],
ymax = effs[effs$batch == "A", "upper"], alpha = 0.5, fill = "grey") +
geom_errorbar(width = 0.2) + geom_point() + theme_bw()
Zgodnie z CI obliczonymi przy użyciu effects
opakowania, partia „E” nie pokrywa się z partią „A”.
Jeśli spróbuję tego samego przy użyciu confint.merMod
funkcji i metody domyślnej:
a <- fixef(fm1)
b <- confint(fm1)
# Computing profile confidence intervals ...
# There were 26 warnings (use warnings() to see them)
b <- data.frame(b)
b <- b[-1:-2,]
b1 <- b[[1]]
b2 <- b[[2]]
dt <- data.frame(fit = c(a[1], a[1] + a[2:length(a)]),
lower = c(b1[1], b1[1] + b1[2:length(b1)]),
upper = c(b2[1], b2[1] + b2[2:length(b2)]) )
dt$batch <- LETTERS[1:nrow(dt)]
ggplot(dt, aes(x = batch, y = fit, ymin = lower, ymax = upper)) +
geom_rect(xmax = Inf, xmin = -Inf, ymin = dt[dt$batch == "A", "lower"],
ymax = dt[dt$batch == "A", "upper"], alpha = 0.5, fill = "grey") +
geom_errorbar(width = 0.2) + geom_point() + theme_bw()
Widzę, że wszystkie elementy CI pokrywają się. Otrzymuję również ostrzeżenia wskazujące, że funkcja nie mogła obliczyć wiarygodnych CI. Ten przykład i mój aktualny zestaw danych każą mi podejrzewać, że effects
pakiet korzysta ze skrótów w obliczeniach CI, które mogą nie zostać całkowicie zatwierdzone przez statystyków. Jak wiarygodne są elementy CI zwracane przez effect
funkcję z effects
pakietu dla lmer
obiektów?
Co próbowałem: patrząc na kod źródłowy zauważyłem, że effect
funkcja zależy od Effect.merMod
funkcji, która z kolei kieruje do Effect.mer
funkcji, która wygląda następująco:
effects:::Effect.mer
function (focal.predictors, mod, ...)
{
result <- Effect(focal.predictors, mer.to.glm(mod), ...)
result$formula <- as.formula(formula(mod))
result
}
<environment: namespace:effects>
mer.to.glm
funkcja wydaje się obliczać macierz wariancji-kowariancji z lmer
obiektu:
effects:::mer.to.glm
function (mod)
{
...
mod2$vcov <- as.matrix(vcov(mod))
...
mod2
}
To z kolei jest prawdopodobnie używane w Effect.default
funkcji do obliczania CI (mogłem źle zrozumieć tę część):
effects:::Effect.default
...
z <- qnorm(1 - (1 - confidence.level)/2)
V <- vcov.(mod)
eff.vcov <- mod.matrix %*% V %*% t(mod.matrix)
rownames(eff.vcov) <- colnames(eff.vcov) <- NULL
var <- diag(eff.vcov)
result$vcov <- eff.vcov
result$se <- sqrt(var)
result$lower <- effect - z * result$se
result$upper <- effect + z * result$se
...
Nie wiem wystarczająco dużo o LMM, aby ocenić, czy jest to właściwe podejście, ale biorąc pod uwagę dyskusję dotyczącą obliczania przedziału ufności dla LMM, podejście to wydaje się podejrzanie proste.
Odpowiedzi:
Wszystkie wyniki są zasadniczo takie same ( dla tego konkretnego przykładu ). Niektóre różnice teoretyczne to:
lsmeans
,effects
,confint(.,method="Wald")
; z wyjątkiemlsmeans
tych metod ignorują efekty o skończonej wielkości („stopnie swobody”), ale w tym przypadku nie robi to żadnej różnicy (df=40
jest praktycznie nie do odróżnienia od nieskończonegodf
)Myślę, że wszystkie te podejścia są rozsądne (niektóre są bardziej przybliżone niż inne), ale w tym przypadku nie robi to żadnej różnicy, z której korzystasz. Jeśli jesteś zaniepokojony, wypróbuj kilka kontrastujących metod na swoich danych lub na symulowanych danych, które przypominają twoje, i zobacz, co się stanie ...
(PS: I nie umieszczać zbyt dużej wagi na fakt, że przedziały ufności
A
iE
nie pokrywają Trzeba zrobić właściwej procedury porównywania parami do przeprowadzenia wiarygodnych wniosków o różnicach między tym. Konkretnej pary szacunków. ..)95% CI:
Kod porównawczy:
źródło
effects
w takim przypadku mogę użyć nakładania się pakietu i CI?multcomp
pakiecie, ale wymaga to przynajmniej trochę opieki)Wygląda na to, że to, co zrobiłeś w drugiej metodzie, to obliczenie przedziałów ufności dla współczynników regresji, a następnie przekształcenie ich w celu uzyskania CI dla prognoz. Ignoruje to kowariancje między współczynnikami regresji.
Spróbuj dopasować model bez przechwytywania, aby
batch
efekty były faktycznie przewidywaniami iconfint
zwróciły potrzebne interwały.Dodatek 1
Zrobiłem dokładnie to, co zasugerowałem powyżej:
Wydaje się, że te interwały pokrywają się z wynikami
effects
.Dodatek 2
Inną alternatywą jest pakiet lsmeans . Uzyskuje stopnie swobody i dostosowaną macierz kowariancji z pakietu pbkrtest .
effect
effect
confint
Wyniki
effect
ilsmeans
są podobne, ale z niesymetrycznym sytuacji wielu czynników,lsmeans
przez standardowe średnich niewykorzystane czynników o równych masach, podczaseffect
wag obserwowana częstotliwości (dostępny jako opcjalsmeans
).źródło
effects
pakietu można ufaćlmer
obiektom. Rozważam wykorzystanie wyników w publikacji i chcę mieć pewność, że współczynniki CI obliczane są przy użyciu zatwierdzonej metody dla LMM..sig01
i.sigma
przezconfint
, czy te przedziały ufności dla wariancji ? czy przedział ufności odchylenia standardowego ?lmer
Ostateczną odpowiedź znajdziesz w dokumentacji . Jednak ludzie zwykle używają notacji, takich jaksigma
odniesienia do odchyleń standardowych i /sigma.square
lubsigma^2
odchylenia.