Efekt paketi ile daha yaşlı nesneler için güven aralıkları ne kadar güvenilirdir?


36

EffectsPaket için çok hızlı ve kolay bir yol sağlar karışık etki modeli sonuçlar doğrusal çizilmesi ile elde edilen lme4bir paket . effectFonksiyon hesaplar güven aralığı (GA) çok hızlı bir şekilde, ama nasıl güvenilir bunlar güven aralıkları nelerdir?

Örneğin:

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

görüntü tanımını buraya girin

effectsPaket kullanılarak hesaplanan CI'lere göre , "E" grubu, "A" grubu ile örtüşmemektedir.

Aynı confint.merModişlevi ve varsayılan yöntemi kullanarak denersem:

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

görüntü tanımını buraya girin

Bütün CI'lerin çakıştığını görüyorum. Ayrıca, işlevin güvenilir CI'leri hesaplayamadığına dair uyarılar da alıyorum. Bu örnek ve gerçek veri setim, effectspaketin CI hesaplamasında tamamen istatistikçiler tarafından onaylanmayan kısayollar aldığından şüphelenmemi sağlıyor . CI'ler effectişlev tarafından effectspaketten alınan lmernesneler için ne kadar güvenilirdir ?

Neyi denedim: Kaynak koduna baktığımda, effectfonksiyonun Effect.merModfonksiyona bağlı olduğunu, bunun da Effect.merfonksiyona yöneldiğini ve bunun gibi göründüğünü fark ettim :

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.glmfonksiyon lmernesneden Variance-Covariate Matrix değerini hesaplıyor gibi görünüyor :

effects:::mer.to.glm

function (mod) 
{
...
mod2$vcov <- as.matrix(vcov(mod))
...
mod2
}

Bu, sırayla, muhtemelen Effect.defaultCI'leri hesaplamak için kullanılır (bu bölümü yanlış anlamış olabilirim):

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

Bunun doğru bir yaklaşım olup olmadığına karar vermek için LMM'ler hakkında yeterince bilgim yok, ancak LMM'ler için güven aralığı hesaplama konusundaki tartışmaları göz önüne alındığında, bu yaklaşım şüphesiz basit görünüyor.


1
Uzun kod satırlarınız olduğunda, bunları birden fazla satıra ayırırsanız, tümünü görmek için kaydırmaya gerek kalmadan bunu çok takdir ediyorum.
rvl

1
@rvl Kodun şimdi daha okunaklı olması gerekir.
Mikko

Yanıtlar:


52

Sonuçların tümü temelde aynıdır ( bu özel örnek için ). Bazı teorik farklılıklar:

  • @rvl'nin belirttiği gibi, parametreler arasındaki kovaryansı hesaba katmadan CI'leri yeniden yapılandırmanız sadece yanlış (üzgünüm)
  • parametreler için güven aralıkları (bir kuadratik log-olabilirlik yüzeyini varsayarak) Wald güven aralıkları temel alabilir: lsmeans, effects, confint(.,method="Wald"); dışında lsmeans, bu yöntemler sonlu boyutlu efektleri ("serbestlik dereceleri") dikkate almaz, ancak bu durumda herhangi bir fark df=40yaratmaz ( pratik olarak sonsuzdan ayırt edilemez df)
  • ... veya profil güven aralıklarında (varsayılan yöntem; sonlu boyutlu efektleri yok sayar ancak karesel olmayan yüzeylere izin verir)
  • ... veya parametrik açılışta (altın standart - modelin doğru olduğunu varsayar [yanıtlar Normal, rasgele etkiler Normalde dağıtılır, veriler koşullu olarak bağımsızdır, vb.], ancak aksi halde az varsayım yapar)

Tüm bu yaklaşımların makul olduğunu düşünüyorum (bazıları diğerlerinden daha fazla tahmin edilir), fakat bu durumda hangisini kullandığınızı fark etmez. Endişeleniyorsanız, verilerinizde veya kendinize benzeyen benzetilmiş verilerde çeşitli kontrast yöntemleri deneyin ve neler olduğunu görün ...

(Not: Ben güven aralıkları gerçeği çok fazla ağırlık koymak olmaz Ave E. Örtüşme yoktur Bu arasındaki farklar hakkında güvenilir çıkarımlar yapmak için uygun bir ikili karşılaştırma işlemini yapmak zorundayız belirli tahminlerinin çifti. ..)

% 95 CI:

görüntü tanımını buraya girin

Karşılaştırma kodu:

library(lme4)
fm2 <- lmer(strength ~ batch - 1 + (1 | cask), Pastes)
c0 <- confint(fm2,method="Wald")
c1 <- confint(fm2)
c2 <- confint(fm2,method="boot")
library(effects)
library(lsmeans)
c3 <- with(effect("batch",fm2),cbind(lower,upper))
c4 <- with(summary(lsmeans(fm2,spec="batch")),cbind(lower.CL,upper.CL))
tmpf <- function(method,val) {
    data.frame(method=method,
               v=LETTERS[1:10],
               setNames(as.data.frame(tail(val,10)),
                        c("lwr","upr")))
}
library(ggplot2); theme_set(theme_bw())
allCI <- rbind(tmpf("lme4_wald",c0),
      tmpf("lme4_prof",c1),
      tmpf("lme4_boot",c2),
      tmpf("effects",c3),
               tmpf("lsmeans",c4))
ggplot(allCI,aes(v,ymin=lwr,ymax=upr,colour=method))+
    geom_linerange(position=position_dodge(width=0.8))

ggsave("pastes_confint.png",width=10)

2
Bu cevabı, doğru olan nokta olarak kabul ediyorum ve farklı yöntemler arasında güzel bir karşılaştırma yapıyor. Ancak, daha fazla bilgi için rlv'nin mükemmel cevabını inceleyin.
Mikko

Mükemmel ve çok yardımcı bir cevap için teşekkür ederiz. Birinin grupları / grupları karşılaştırmak için CI kullanamadığını doğru anlıyor muyum, ancak etkileri karşılaştırmak mümkün. İki tedavim olduğunu, birkaç kişiyi ve birey içinde birkaç ölçüm yaptığımı söyleyin. Her birini x ölçüm içerdiğinden, bireyleri rastgele etki olarak kullanırdım. Daha sonra bu iki tedavinin farklı bir tepkiyle sonuçlanıp sonuçlanmadığını bilmek istedim. effectsBu durumda paket ve CI örtüşme kullanabilir miyim ?
Mikko

5
Bu, herhangi bir standart model tabanlı yaklaşımla ilgili daha genel bir sorudur. Ayrı bir soruya değebilir. (1) Genel olarak, tedaviler arasındaki farklar hakkındaki soruları yanıtlama şekli, modeli modelde ayarlamaktır; böylece odak tedavileri arasındaki fark, modeldeki bir kontrast (yani tahmini bir parametredir) ve ardından bir p-değeri hesaplamaktır. veya belirli bir alfa seviyesindeki güven aralıklarının sıfır olup olmadığını kontrol edin. (devam)
Ben Bolker

4
(2) üst üste binen CI'ler en iyi ihtimalle parametreler arasındaki farklar için muhafazakar ve yaklaşık bir kriterdir (bu konuda yayınlanan birkaç makale vardır). (3) Bir karşılaştırma çokluğu olan ve olmayan bağımsızlığı (bunun için uygun şekilde kontrol etmek için olmasıdır ikili karşılaştırmalar ile ayrı / ortogonal bir sorun, var olabilir yöntemler ile, örneğin, yapılması multcomppaketi, fakat en az bir A birazcık bakım)
Ben Bolker

1
Ne için? Yeni bir soru sormak isteyebilirsiniz.
Ben Bolker

20

İkinci yöntemde yaptığınız şey, regresyon katsayıları için hesaplanan güven aralıklarını hesaplamak, daha sonra da tahminler için CI'leri elde etmek üzere dönüştürmek gibi görünüyor. Bu, regresyon katsayıları arasındaki kovaryansları yok sayar.

Modele müdahale etmeden takmayı deneyin, böylece batchetkiler aslında tahminler confintolacak ve ihtiyacınız olan aralıkları geri getirecektir.

Zeyilname 1

Yukarıda önerdiğim şeyi yaptım:

> fm2 <- lmer(strength ~ batch - 1 + (1 | cask), Pastes)
> confint(fm2)
Computing profile confidence intervals ...
           2.5 %    97.5 %
.sig01  0.000000  1.637468
.sigma  2.086385  3.007380
batchA 60.234772 64.298581
batchB 57.268105 61.331915
batchC 60.018105 64.081915
batchD 57.668105 61.731915
batchE 53.868105 57.931915
batchF 59.001439 63.065248
batchG 57.868105 61.931915
batchH 61.084772 65.148581
batchI 56.651439 60.715248
batchJ 56.551439 60.615248

Bu aralıklar gelen sonuçlarla uyuşmuyor gibi görünüyor effects.

Ek 2

Diğer bir alternatif de lsmeans paketidir. Pbkrtest paketinden serbestlik dereceleri ve ayarlanmış bir kovaryans matrisi elde eder .

> library("lsmeans")
> lsmeans(fm1, "batch")
Loading required namespace: pbkrtest
 batch   lsmean       SE    df lower.CL upper.CL
 A     62.26667 1.125709 40.45 59.99232 64.54101
 B     59.30000 1.125709 40.45 57.02565 61.57435
 C     62.05000 1.125709 40.45 59.77565 64.32435
 D     59.70000 1.125709 40.45 57.42565 61.97435
 E     55.90000 1.125709 40.45 53.62565 58.17435
 F     61.03333 1.125709 40.45 58.75899 63.30768
 G     59.90000 1.125709 40.45 57.62565 62.17435
 H     63.11667 1.125709 40.45 60.84232 65.39101
 I     58.68333 1.125709 40.45 56.40899 60.95768
 J     58.58333 1.125709 40.45 56.30899 60.85768

Confidence level used: 0.95 

Bunlar, effectsonuçlara paralel olarak daha fazladır : standart hatalar aynıdır, ancak effectfarklı df kullanır confint. Ek 1'deki sonuçlar, kullanarak yapılan asimptotik bile daha dardır . Yani şimdi bunların çok güvenilir olmadığını düşünüyorum .±1.96×se

Elde edilen effectve lsmeansbuna benzer, ancak dengesiz bir çok faktörlü durumla, lsmeansvarsayılan olarak, eşit ağırlıktaki kullanılmayan faktörlerin ortalamaları effect, gözlenen frekansların ağırlıkları (seçenek olarak mevcuttur lsmeans).


Bu çözüm için teşekkür ederim. Tam olarak aynı olmasa da, aralıklar artık daha benzer. Yanıtınız, hala effectspaketten alınan CI'lerin lmernesneler için güvenilir olup olmadığı sorusuna yanıt vermiyor . Sonuçları bir yayında kullanmayı düşünüyorum ve CI'lerin LMM'ler için onaylanmış bir yöntem kullanılarak hesaplandığından emin olmak istiyorum.
Mikko

Lütfen şunu söyler misiniz: Zeyilname 1inizde ilk iki parametrenin ürettiği .sig01ve .sigmaürettiği confint, varyans için olan güven aralığı nedir? veya standart sapmanın güven aralığı ?
ABC

Bunlar, modelde hangi şekilde etiketlendiği için CI'dir. lmerKesin bir cevap için belgelere bakmalısınız . Bununla birlikte, insanlar genellikle sigmastandart sapmalara sigma.squareya da sapmalara atıfta bulunmak gibi notasyonlar kullanırlar sigma^2.
rvl

En yaşlı, izleyici veya mertool kullanmak daha mı iyi?
Skan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.