È possibile verificare la significatività, dei parametri del modello, con l'aiuto di intervalli di confidenza stimati per i quali il pacchetto lme4 ha la confint.merModfunzione.
bootstrap (vedi ad esempio Intervallo di confidenza da 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
profilo di verosimiglianza (vedi ad esempio Qual è la relazione tra verosimiglianza del profilo e intervalli di confidenza? )
> 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
C'è anche un metodo, 'Wald'ma questo è applicato solo agli effetti fissi.
Esistono anche alcuni tipi di espressioni anova (rapporto di verosimiglianza) nel pacchetto lmerTest denominato ranova. Ma non riesco a dare un senso a questo. La distribuzione delle differenze in LogLikelihood, quando l'ipotesi nulla (varianza zero per l'effetto casuale) è vera non è distribuita chi- quadro (probabilmente quando il numero di partecipanti e prove è alto, il test del rapporto di verosimiglianza potrebbe avere senso).
Varianza in gruppi specifici
Per ottenere risultati per la varianza in gruppi specifici, è possibile modificare la parametrizzazione
# different model with alternative parameterization (and also correlation taken out)
fml1 <- "~ condition + (0 + control + experimental || participant_id) "
Dove abbiamo aggiunto due colonne al frame di dati (questo è necessario solo se si desidera valutare il "controllo" non correlato e "sperimentale" la funzione (0 + condition || participant_id)non porterebbe alla valutazione dei diversi fattori in condizioni come non correlati)
#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")
Ora lmerdarà varianza per i diversi gruppi
> 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
E puoi applicare i metodi del profilo a questi. Ad esempio, ora confint fornisce intervalli di confidenza per il controllo e la varianza sperimentale.
> 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
Semplicità
Potresti usare la funzione di verosimiglianza per ottenere confronti più avanzati, ma ci sono molti modi per fare approssimazioni lungo la strada (ad esempio potresti fare un test anova / lrt conservativo, ma è quello che vuoi?).
A questo punto mi chiedo quale sia effettivamente il punto di questo confronto (non così comune) tra le varianze. Mi chiedo se inizi a diventare troppo sofisticato. Perché la differenza tra varianze invece del rapporto tra varianze (che si riferisce alla classica distribuzione F)? Perché non segnalare solo intervalli di confidenza? Dobbiamo fare un passo indietro e chiarire i dati e la storia che dovrebbe raccontare, prima di intraprendere percorsi avanzati che possono essere superflui e perdere il contatto con la questione statistica e le considerazioni statistiche che sono in realtà l'argomento principale.
Mi chiedo se si dovrebbe fare molto di più che semplicemente dichiarare gli intervalli di confidenza (che in realtà potrebbero dire molto di più di un test di ipotesi. Un test di ipotesi dà un sì nessuna risposta ma nessuna informazione sulla diffusione effettiva della popolazione. Dati sufficienti che puoi fare una leggera differenza da segnalare come differenza significativa). Per approfondire la questione (per qualsiasi scopo), credo, a mio avviso, una domanda di ricerca più specifica (definita in modo restrittivo) al fine di guidare il macchinario matematico a effettuare le opportune semplificazioni (anche quando un calcolo esatto potrebbe essere fattibile o quando potrebbe essere approssimato da simulazioni / bootstrap, anche se in alcune impostazioni richiede comunque un'interpretazione appropriata). Confronta con l'esatto test di Fisher per risolvere esattamente una (particolare) domanda (sulle tabelle di contingenza),
Semplice esempio
Per fornire un esempio della semplicità possibile, mostro di seguito un confronto (mediante simulazioni) con una semplice valutazione della differenza tra le due varianze di gruppo sulla base di un test F fatto confrontando le varianze nelle risposte medie individuali e confrontando il modello misto derivava varianze.
j
Y^i,j∼N(μj,σ2j+σ2ϵ10)
σϵσjj={1,2} ) è uguale, allora il rapporto per la varianza per 40 significa nella condizione 1 e la varianza per i 40 mezzi nella condizione 2 è distribuita secondo la distribuzione F con gradi di libertà 39 e 39 per numeratore e denominatore.
Puoi vederlo nella simulazione del grafico sotto dove, a parte il punteggio F basato sul campione, un punteggio F viene calcolato in base alle variazioni previste (o somme di errore al quadrato) dal modello.

σj=1=σj=2=0.5σϵ=1
Puoi vedere che c'è qualche differenza. Questa differenza può essere dovuta al fatto che il modello lineare a effetti misti sta ottenendo le somme dell'errore al quadrato (per l'effetto casuale) in modo diverso. E questi termini di errore al quadrato non sono (più) ben espressi come una semplice distribuzione Chi al quadrato, ma sono ancora strettamente correlati e possono essere approssimati.
σj=1≠σj=2Y^i,jσjσϵ

σj=1=0.5σj=2=0.25σϵ=1
Quindi il modello basato sui mezzi è molto esatto. Ma è meno potente. Ciò dimostra che la strategia corretta dipende da ciò che si desidera / è necessario.
Nell'esempio sopra quando si impostano i confini della coda destra su 2.1 e 3.1 si ottiene circa l'1% della popolazione in caso di varianza uguale (rispettivamente 103 e 104 dei 10.000 casi) ma in caso di varianza diseguale questi confini differiscono molto (dando 5334 e 6716 dei casi)
codice:
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)))