Ви можете перевірити значущість параметрів моделі за допомогою оцінених довірчих інтервалів, для яких пакет lme4 має confint.merMod
функцію.
завантажувальна програма (див., наприклад, Інтервал впевненості з завантажувальної програми )
> 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
профіль ймовірності (див. наприклад, яка залежність між вірогідністю профілю та довірчими інтервалами? )
> 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
Існує також метод, 'Wald'
але він застосовується лише для фіксованих ефектів.
Існує також якийсь тип вираження anova (коефіцієнт ймовірності) в пакеті, lmerTest
який названий ranova
. Але я, здається, не маю сенсу з цього. Розподіл відмінностей у logLikelihood, коли нульова гіпотеза (нульова дисперсія для випадкового ефекту) є істинною, не розподіляється в квадраті (можливо, коли кількість учасників і випробувань висока, тест на коефіцієнт ймовірності може мати сенс).
Різниця в конкретних групах
Щоб отримати результати для дисперсії в конкретних групах, ви могли б переузначити розмір
# different model with alternative parameterization (and also correlation taken out)
fml1 <- "~ condition + (0 + control + experimental || participant_id) "
Там, де ми додали два стовпці до фрейму даних (це потрібно лише в тому випадку, якщо ви хочете оцінити некорельований «контроль» та «експериментальний», функція (0 + condition || participant_id)
не призведе до оцінки різних факторів у стані як некорельованих)
#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")
Тепер lmer
дамо дисперсію для різних груп
> 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
І ви можете застосувати методи профілів до них. Наприклад, тепер confint дає інтервали довіри для контролю та експериментальної дисперсії.
> 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
Простота
Ви можете скористатися функцією ймовірності для отримання більш розширених порівнянь, але існує багато способів зробити наближення по дорозі (наприклад, ви могли б зробити консервативний тест anova / lrt-test, але це те, що ви хочете?).
У цей момент мене змушує замислитися, що насправді сенс цього (не настільки поширеного) порівняння між дисперсіями. Цікаво, чи не починає вона надто вишукано. Чому різниця між дисперсіями замість співвідношення між дисперсіями (що стосується класичного F-розподілу)? Чому б не просто повідомити про довірчі інтервали? Нам потрібно зробити крок назад і уточнити дані та історію, яку він повинен розповісти, перш ніж переходити до прогресивних шляхів, які можуть бути зайвими і неміцними у зв'язку зі статистичним питанням та статистичними міркуваннями, які насправді є основною темою.
Цікаво, чи варто робити набагато більше, ніж просто зазначати інтервали довіри (що насправді може означати набагато більше, ніж тест гіпотези. Тест на гіпотезу дає відповідь "так", але немає інформації про фактичне поширення населення. Надаючи достатньо даних, які ви можете внести будь-яку незначну різницю, яку слід повідомити як про значну різницю). Для більш глибокого вивчення справи (з будь-якою метою) потрібно, я вважаю, більш конкретний (вузько визначений) дослідницький питання, щоб керувати математичним механізмом, щоб зробити належні спрощення (навіть коли точний розрахунок може бути здійсненним або коли це можна наблизити за допомогою симуляції / завантаження, навіть тоді в деяких налаштуваннях все-таки потрібна відповідна інтерпретація). Порівняйте з точним тестом Фішера, щоб точно вирішити (конкретне) питання (щодо таблиць на випадок надзвичайних ситуацій),
Простий приклад
Щоб навести приклад простоти, яка можлива, я показую нижче порівняння (за допомогою моделювання) з простою оцінкою різниці між двома груповими дисперсіями на основі F-тесту, зробленого шляхом порівняння дисперсій у середніх середніх відповідях та виконаних шляхом порівняння змішані моделі отримують відхилення.
j
Y^i , j∼ N( мкj, σ2j+ σ2ϵ10)
σϵσjj = { 1 , 2 }
Це можна побачити на моделюванні графіку нижче, коли окрім F-балу на основі вибірки F-бал розраховується на основі прогнозованих відхилень (або сум квадратичної помилки) від моделі.
σj = 1= σj = 2= 0,5σϵ= 1
Ви можете бачити, що є якась різниця. Ця різниця може бути пов'язана з тим, що лінійна модель змішаних ефектів отримує суми похибки квадрата (для випадкового ефекту) по-іншому. І ці терміни помилок у квадраті не (більше) добре виражені у вигляді простого розподілу Chi-квадрата, але все ще тісно пов’язані між собою і їх можна наблизити.
σj = 1≠ σj = 2Y^i , jσjσϵ
σj = 1= 0,5σj = 2= 0,25σϵ= 1
Тож модель на основі засобів дуже точна. Але вона менш потужна. Це показує, що правильна стратегія залежить від того, що ви хочете / потребуєте.
У наведеному вище прикладі, коли ви встановлюєте правильні межі хвоста у 2.1 та 3.1, ви отримуєте приблизно 1% сукупності у випадку рівної дисперсії (респ. 103 та 104 з 10 000 випадків), але у випадку неоднакової дисперсії ці межі відрізняються багато (даючи 5334 та 6716 справ)
код:
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)))