Anda dapat menguji signifikansi, parameter model, dengan bantuan perkiraan interval kepercayaan untuk fungsi paket lme4 confint.merMod
.
bootstrap (lihat Interval Keyakinan misalnya dari bootstrap )
> 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
profil kemungkinan (lihat misalnya Apa hubungan antara kemungkinan profil dan interval kepercayaan? )
> 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
Ada juga metode 'Wald'
tetapi ini diterapkan untuk efek tetap saja.
Ada juga beberapa jenis jenis anova (rasio kemungkinan) dalam paket lmerTest
yang dinamai ranova
. Tapi sepertinya aku tidak masuk akal dari ini. Distribusi perbedaan dalam logLikelihood, ketika hipotesis nol (nol varians untuk efek acak) benar tidak didistribusikan secara chi-square (mungkin ketika jumlah peserta dan uji coba tinggi, uji rasio kemungkinan kemungkinan masuk akal).
Varians dalam kelompok tertentu
Untuk mendapatkan hasil varians dalam grup tertentu, Anda dapat melakukan reparameterisasi
# different model with alternative parameterization (and also correlation taken out)
fml1 <- "~ condition + (0 + control + experimental || participant_id) "
Di mana kami menambahkan dua kolom ke kerangka data (ini hanya diperlukan jika Anda ingin mengevaluasi 'kontrol' yang tidak berkorelasi dan 'eksperimental', fungsinya (0 + condition || participant_id)
tidak akan mengarah pada evaluasi berbagai faktor dalam kondisi sebagai tidak berkorelasi)
#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")
Sekarang lmer
akan memberikan perbedaan untuk kelompok yang berbeda
> 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
Dan Anda dapat menerapkan metode profil untuk ini. Misalnya sekarang confint memberikan interval kepercayaan untuk kontrol dan varian ekserimental.
> 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
Kesederhanaan
Anda dapat menggunakan fungsi kemungkinan untuk mendapatkan perbandingan yang lebih maju, tetapi ada banyak cara untuk membuat perkiraan di sepanjang jalan (mis. Anda bisa melakukan tes anova / lrt konservatif, tetapi apakah itu yang Anda inginkan?).
Pada titik ini membuat saya bertanya-tanya apa sebenarnya poin dari perbandingan (tidak begitu umum) antar varian. Saya bertanya-tanya apakah itu mulai menjadi terlalu canggih. Mengapa perbedaan antara varian bukan rasio antara varian (yang terkait dengan distribusi-F klasik)? Mengapa tidak melaporkan interval kepercayaan saja? Kita perlu mengambil langkah mundur, dan mengklarifikasi data dan cerita yang seharusnya diceritakan, sebelum masuk ke jalur lanjutan yang mungkin berlebihan dan tidak berhubungan dengan masalah statistik dan pertimbangan statistik yang sebenarnya menjadi topik utama.
Saya bertanya-tanya apakah seseorang harus melakukan lebih dari sekadar menyatakan interval kepercayaan (yang sebenarnya bisa mengatakan lebih dari tes hipotesis. Tes hipotesis memberikan jawaban ya tidak tetapi tidak ada informasi tentang sebaran populasi yang sebenarnya. Berikan data yang cukup yang Anda bisa membuat sedikit perbedaan untuk dilaporkan sebagai perbedaan signifikan). Untuk masuk lebih dalam ke masalah ini (untuk tujuan apa pun), saya percaya, membutuhkan pertanyaan penelitian yang lebih spesifik (didefinisikan secara sempit) untuk memandu mesin matematika untuk membuat penyederhanaan yang tepat (bahkan ketika perhitungan yang tepat mungkin dilakukan atau ketika itu bisa diperkirakan dengan simulasi / bootstrap, itupun dalam beberapa pengaturan masih memerlukan beberapa interpretasi yang sesuai). Bandingkan dengan tes eksak Fisher untuk menyelesaikan pertanyaan (khusus) (tentang tabel kontingensi),
Contoh sederhana
Untuk memberikan contoh kesederhanaan yang mungkin saya tunjukkan di bawah ini perbandingan (dengan simulasi) dengan penilaian sederhana dari perbedaan antara dua varian kelompok berdasarkan pada uji-F yang dilakukan dengan membandingkan perbedaan dalam tanggapan rata-rata individu dan dilakukan dengan membandingkan varians yang diturunkan dari model campuran.
j
Y^i,j∼N(μj,σ2j+σ2ϵ10)
σϵσjj={1,2}
Anda dapat melihat ini dalam simulasi grafik di bawah ini selain untuk skor-F berdasarkan sampel berarti skor-F dihitung berdasarkan variasi yang diprediksi (atau jumlah kesalahan kuadrat) dari model.
σj=1=σj=2=0.5σϵ=1
Anda dapat melihat bahwa ada beberapa perbedaan. Perbedaan ini mungkin karena fakta bahwa model linear efek campuran mendapatkan jumlah kesalahan kuadrat (untuk efek acak) dengan cara yang berbeda. Dan istilah kesalahan kuadrat ini tidak (lagi) dinyatakan dengan baik sebagai distribusi Chi-kuadrat sederhana, tetapi masih terkait erat dan mereka dapat diperkirakan.
σj=1≠σj=2Y^i,jσjσϵ
σj=1=0.5σj=2=0.25σϵ=1
Jadi model berdasarkan pada sarana sangat tepat. Tapi itu kurang kuat. Ini menunjukkan bahwa strategi yang tepat tergantung pada apa yang Anda inginkan / butuhkan.
Dalam contoh di atas ketika Anda menetapkan batas ekor kanan pada 2.1 dan 3.1, Anda mendapatkan sekitar 1% dari populasi dalam kasus varians yang sama (resp 103 dan 104 dari 10.000 kasus) tetapi dalam kasus varians yang tidak setara, batas-batas ini berbeda. banyak (memberikan 5334 dan 6716 kasus)
kode:
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)))