Lme4 paketinin fonksiyona sahip olduğu tahmini güven aralıkları yardımıyla model parametrelerinin önemini test edebilirsiniz confint.merMod
.
önyükleme (bkz. örneğin , önyüklemeden gelen güven aralığı )
> confint(m, method="boot", nsim=500, oldNames= FALSE)
Computing bootstrap confidence intervals ...
2.5 % 97.5 %
sd_(Intercept)|participant_id 0.32764600 0.64763277
cor_conditionexperimental.(Intercept)|participant_id -1.00000000 1.00000000
sd_conditionexperimental|participant_id 0.02249989 0.46871800
sigma 0.97933979 1.08314696
(Intercept) -0.29669088 0.06169473
conditionexperimental 0.26539992 0.60940435
olabilirlik profili (bkz. örneğin profil olasılığı ile güven aralıkları arasındaki ilişki nedir? )
> confint(m, method="profile", oldNames= FALSE)
Computing profile confidence intervals ...
2.5 % 97.5 %
sd_(Intercept)|participant_id 0.3490878 0.66714551
cor_conditionexperimental.(Intercept)|participant_id -1.0000000 1.00000000
sd_conditionexperimental|participant_id 0.0000000 0.49076950
sigma 0.9759407 1.08217870
(Intercept) -0.2999380 0.07194055
conditionexperimental 0.2707319 0.60727448
Bir yöntem de vardır, 'Wald'
ancak bu yalnızca sabit efektlere uygulanır.
Ayrıca lmerTest
adlandırılan pakette bir tür anova (olasılık oranı) ifade türü vardır ranova
. Ama bundan anlam ifade edemiyorum. Boş hipotez (rastgele etki için sıfır varyans) doğrudur log benzeri, farklılıkların dağılımı değil ki-kare (katılımcılar ve deneme sayısı mantıklı olabilir olabilirlik oran testi yüksektir muhtemelen zaman) dağıttı.
Belirli gruplarda varyans
Belirli gruplarda varyans sonuçları elde etmek için yeniden parametrelendirebilirsiniz
# different model with alternative parameterization (and also correlation taken out)
fml1 <- "~ condition + (0 + control + experimental || participant_id) "
Veri çerçevesine iki sütun eklediğimizde (bu yalnızca ilişkili olmayan 'kontrol' ve 'deneysel' değerlendirmek istiyorsanız gereklidir; işlev (0 + condition || participant_id)
, ilişkisiz olmayan durumdaki farklı faktörlerin değerlendirilmesine yol açmaz)
#adding extra columns for control and experimental
d <- cbind(d,as.numeric(d$condition=='control'))
d <- cbind(d,1-as.numeric(d$condition=='control'))
names(d)[c(4,5)] <- c("control","experimental")
Şimdi lmer
farklı gruplar için varyans verecek
> m <- lmer(paste("sim_1 ", fml1), data=d)
> m
Linear mixed model fit by REML ['lmerModLmerTest']
Formula: paste("sim_1 ", fml1)
Data: d
REML criterion at convergence: 2408.186
Random effects:
Groups Name Std.Dev.
participant_id control 0.4963
participant_id.1 experimental 0.4554
Residual 1.0268
Number of obs: 800, groups: participant_id, 40
Fixed Effects:
(Intercept) conditionexperimental
-0.114 0.439
Ve profil yöntemlerini bunlara uygulayabilirsiniz. Mesela artık çatışma kontrol ve zahmetli varyans için güven aralıkları vermektedir.
> confint(m, method="profile", oldNames= FALSE)
Computing profile confidence intervals ...
2.5 % 97.5 %
sd_control|participant_id 0.3490873 0.66714568
sd_experimental|participant_id 0.3106425 0.61975534
sigma 0.9759407 1.08217872
(Intercept) -0.2999382 0.07194076
conditionexperimental 0.1865125 0.69149396
Basitlik
Olabilirlik işlevini daha gelişmiş karşılaştırmalar elde etmek için kullanabilirsiniz, ancak yol boyunca yaklaşık tahminler yapmanın birçok yolu vardır (örneğin, muhafazakar bir anova / lrt testi yapabilirsiniz, ancak istediğiniz şey bu mu?).
Bu noktada, varyanslar arasındaki bu (çok yaygın olmayan) karşılaştırmanın gerçekte ne olduğunu merak etmemi sağlıyor. Çok sofistike olmaya başlayıp başlamadığını merak ediyorum. Neden fark varyanslar yerine arasındaki oran (klasik F-dağılımı ile ilgilidir) değişkenler arasındaki? Neden sadece güven aralıklarını bildirmiyorsunuz? İstatistiksel konu ve aslında ana konu olan istatistiksel değerlendirmelerle gereksiz ve gevşek bir dokunuş olabilecek gelişmiş yollara girmeden önce bir adım geriye gitmeli ve anlatması gereken verileri ve hikayeyi açıklığa kavuşturmalıyız.
Birinin sadece güven aralıklarını belirtmekten çok daha fazlasını yapması gerekip gerekmediğini merak ediyorum (aslında bir hipotez testinden çok daha fazlasını söyleyebilir. Hipotez testi evet cevap vermez, ancak popülasyonun gerçek yayılımı hakkında bilgi vermez. önemli bir fark olarak bildirilmek üzere küçük bir fark yaratmalıdır). Konuyu daha derinlemesine incelemek (herhangi bir amaç için), sanırım, matematiksel makineyi uygun basitleştirmeleri yapmak için (kesin bir hesaplama mümkün olduğunda veya ne zaman bile olsa) yönlendirmek için daha spesifik (dar olarak tanımlanmış) bir araştırma sorusu gerektirir. simülasyonlar / önyükleme ile yakınlaştırılabilir, o zaman bile bazı ayarlarda hala uygun bir yorum gerektirir). (Özel) bir soruyu (olasılık tabloları hakkında) tam olarak çözmek için Fisher'in kesin testiyle karşılaştırın,
Basit örnek
Mümkün olan basitliğin bir örneğini sağlamak için, bireysel ortalama yanıtlardaki varyansları karşılaştırarak yapılan ve karşılaştırılarak yapılan bir F testine dayanan iki grup varyansı arasındaki farkın basit bir değerlendirmesiyle aşağıda bir simülasyonu (simülasyonlarla) göstereceğim. karışık modelden türetilmiş varyanslar.
F testi için iki gruptaki bireylerin değerlerinin (ortalamalarının) varyansını karşılaştırıyoruz. Bu araçlar, koşulunun şu şekilde dağıtılması içindir:j
Y^i,j∼N(μj,σ2j+σ2ϵ10)
ölçüm hatası varyansı tüm bireyler ve koşullar için eşitse ve iki koşulun varyansı ( ) varyans oranına eşitse koşul 1'deki 40 araç için ve koşul 2'deki 40 araç için varyans, pay ve payda için serbestlik 39 ve 39 dereceleriyle F-dağılımına göre dağıtılır.σ j j = { 1 , 2 }σϵσjj={1,2}
Bunu, aşağıdaki grafiğin simülasyonunda görebilirsiniz; burada örnek üzerinden dayalı F-skoru, modelden tahmin edilen varyanslara (veya kare hatalarının toplamlarına) göre bir F-skoru hesaplanır.
Görüntü ve kullanılarak 10.000 tekrarla modellenmiştir .σ ϵ = 1σj=1=σj=2=0.5σϵ=1
Bazı farklar olduğunu görebilirsiniz. Bu fark, karma efektler doğrusal modelinin, kare hata toplamlarını (rastgele etki için) farklı bir şekilde elde etmesinden kaynaklanabilir. Ve bu kare hata terimleri (artık) basit bir Chi-kare dağılımı olarak iyi ifade edilmemekte, ancak yine de yakından ilişkilidir ve yakınlaştırılabilir.
Sıfır hipotezi doğru olduğunda (küçük) farkın yanı sıra, sıfır hipotezinin doğru olmadığı durum daha ilginçtir. Özellikle . ortalamalarının dağılımı sadece bu değil aynı zamanda ölçüm hatasına de bağlıdır . Karışık efektler modelinde bu ikinci hata 'filtrelenir' ve rastgele efektler model sapmalarına dayanan F-skorunun daha yüksek bir güce sahip olması beklenir., Y i , j σ j σ sσj=1≠σj=2Y^i,jσjσϵ
Görüntü , ve kullanılarak 10.000 tekrar ile modellenmiştir .σ j = 2 = 0,25 σ ϵ = 1σj=1=0.5σj=2=0.25σϵ=1
Yani araçlara dayanan model çok kesindir. Ama daha az güçlü. Bu, doğru stratejinin neye / neye ihtiyacınız olduğuna bağlı olduğunu gösterir.
Yukarıdaki örnekte, sağ kuyruk sınırlarını 2.1 ve 3.1 olarak ayarladığınızda, eşit varyans durumunda (10000 vakadan 103 ve 104) nüfusun yaklaşık% 1'ini elde edersiniz, ancak eşit olmayan varyans durumunda bu sınırlar farklılık gösterir çok (5334 ve 6716 dava veren)
kod:
set.seed(23432)
# different model with alternative parameterization (and also correlation taken out)
fml1 <- "~ condition + (0 + control + experimental || participant_id) "
fml <- "~ condition + (condition | participant_id)"
n <- 10000
theta_m <- matrix(rep(0,n*2),n)
theta_f <- matrix(rep(0,n*2),n)
# initial data frame later changed into d by adding a sixth sim_1 column
ds <- expand.grid(participant_id=1:40, trial_num=1:10)
ds <- rbind(cbind(ds, condition="control"), cbind(ds, condition="experimental"))
#adding extra columns for control and experimental
ds <- cbind(ds,as.numeric(ds$condition=='control'))
ds <- cbind(ds,1-as.numeric(ds$condition=='control'))
names(ds)[c(4,5)] <- c("control","experimental")
# defining variances for the population of individual means
stdevs <- c(0.5,0.5) # c(control,experimental)
pb <- txtProgressBar(title = "progress bar", min = 0,
max = n, style=3)
for (i in 1:n) {
indv_means <- c(rep(0,40)+rnorm(40,0,stdevs[1]),rep(0.5,40)+rnorm(40,0,stdevs[2]))
fill <- indv_means[d[,1]+d[,5]*40]+rnorm(80*10,0,sqrt(1)) #using a different way to make the data because the simulate is not creating independent data in the two groups
#fill <- suppressMessages(simulate(formula(fml),
# newparams=list(beta=c(0, .5),
# theta=c(.5, 0, 0),
# sigma=1),
# family=gaussian,
# newdata=ds))
d <- cbind(ds, fill)
names(d)[6] <- c("sim_1")
m <- lmer(paste("sim_1 ", fml1), data=d)
m
theta_m[i,] <- m@theta^2
imeans <- aggregate(d[, 6], list(d[,c(1)],d[,c(3)]), mean)
theta_f[i,1] <- var(imeans[c(1:40),3])
theta_f[i,2] <- var(imeans[c(41:80),3])
setTxtProgressBar(pb, i)
}
close(pb)
p1 <- hist(theta_f[,1]/theta_f[,2], breaks = seq(0,6,0.06))
fr <- theta_m[,1]/theta_m[,2]
fr <- fr[which(fr<30)]
p2 <- hist(fr, breaks = seq(0,30,0.06))
plot(-100,-100, xlim=c(0,6), ylim=c(0,800),
xlab="F-score", ylab = "counts [n out of 10 000]")
plot( p1, col=rgb(0,0,1,1/4), xlim=c(0,6), ylim=c(0,800), add=T) # means based F-score
plot( p2, col=rgb(1,0,0,1/4), xlim=c(0,6), ylim=c(0,800), add=T) # model based F-score
fr <- seq(0, 4, 0.01)
lines(fr,df(fr,39,39)*n*0.06,col=1)
legend(2, 800, c("means based F-score","mixed regression based F-score"),
fill=c(rgb(0,0,1,1/4),rgb(1,0,0,1/4)),box.col =NA, bg = NA)
legend(2, 760, c("F(39,39) distribution"),
lty=c(1),box.col = NA,bg = NA)
title(expression(paste(sigma[1]==0.5, " , ", sigma[2]==0.5, " and ", sigma[epsilon]==1)))