Valore P per il termine di interazione in modelli di effetti misti usando lme4


10

Sto analizzando alcuni dati comportamentali usando lme4in R, principalmente seguendo gli eccellenti tutorial di Bodo Winter , ma non capisco se sto gestendo correttamente le interazioni. Peggio ancora, nessun altro coinvolto in questa ricerca utilizza modelli misti, quindi sono un po 'alla deriva quando si tratta di assicurarsi che le cose siano giuste.

Piuttosto che inviare una richiesta di aiuto, ho pensato che avrei dovuto fare del mio meglio per interpretare il problema e quindi chiedere le tue correzioni collettive. Alcuni altri lati sono:

  • Durante la scrittura, ho trovato questa domanda , dimostrando che nlmepiù direttamente dai valori p per i termini di interazione, ma penso che sia ancora valido chiedere in relazione lme4.
  • Livius'la risposta a questa domanda ha fornito collegamenti a molte altre letture, che cercherò di ottenere nei prossimi giorni, quindi commenterò con tutti i progressi che ne conseguiranno.

Nei miei dati, ho una variabile dipendente dv, una conditionmanipolazione (0 = controllo, 1 = condizione sperimentale, che dovrebbe risultare in un valore superiore dv) e anche un prerequisito, etichettato appropriate: le prove codificate 1per questo dovrebbero mostrare l'effetto, ma le prove codificate 0potrebbero no, perché manca un fattore cruciale.

Ho anche incluso due intercettazioni casuali, per subjecte per target, che riflettono i dvvalori correlati all'interno di ogni soggetto e all'interno di ciascuno dei 14 problemi risolti (ogni partecipante ha risolto sia una versione di controllo che una versione sperimentale di ciascun problema).

library(lme4)
data = read.csv("data.csv")

null_model        = lmer(dv ~ (1 | subject) + (1 | target), data = data)
mainfx_model      = lmer(dv ~ condition + appropriate + (1 | subject) + (1 | target),
                         data = data)
interaction_model = lmer(dv ~ condition + appropriate + condition*appropriate +
                              (1 | subject) + (1 | target), data = data)
summary(interaction_model)

Produzione:

## Linear mixed model fit by REML ['lmerMod']
## ...excluded for brevity....
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  subject  (Intercept) 0.006594 0.0812  
##  target   (Intercept) 0.000557 0.0236  
##  Residual             0.210172 0.4584  
## Number of obs: 690, groups: subject, 38; target, 14
## 
## Fixed effects:
##                                Estimate Std. Error t value
## (Intercept)                    0.2518     0.0501    5.03
## conditioncontrol               0.0579     0.0588    0.98
## appropriate                   -0.0358     0.0595   -0.60
## conditioncontrol:appropriate  -0.1553     0.0740   -2.10
## 
## Correlation of Fixed Effects:
## ...excluded for brevity.

ANOVA mostra quindi interaction_modeldi essere significativamente più in forma rispetto a mainfx_model, da cui concludo che esiste una significativa interazione presente (p = .035).

anova(mainfx_model, interaction_model)

Produzione:

## ...excluded for brevity....
##                   Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)  
## mainfx_model       6 913 940   -450      901                          
## interaction_model  7 910 942   -448      896  4.44      1      0.035 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Da lì, isola un sottoinsieme dei dati per i quali appropriateviene soddisfatto il requisito (ovvero, appropriate = 1), e per esso si adatta un modello nullo e un modello che include conditioncome effetto, confronto di nuovo i due modelli utilizzando ANOVA, e lo, trovo che conditionè un predittore significativo.

good_data = data[data$appropriate == 1, ]
good_null_model   = lmer(dv ~ (1 | subject) + (1 | target), data = good_data)
good_mainfx_model = lmer(dv ~ condition + (1 | subject) + (1 | target), data = good_data)

anova(good_null_model, good_mainfx_model)

Produzione:

## Data: good_data
## models:
## good_null_model: dv ~ (1 | subject) + (1 | target)
## good_mainfx_model: dv ~ condition + (1 | subject) + (1 | target)
##                   Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)  
## good_null_model    4 491 507   -241      483                          
## good_mainfx_model  5 487 507   -238      477  5.55      1      0.018 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Controlla questa domanda per ulteriori informazioni sui valori p in lme4: stats.stackexchange.com/questions/118416/…
Tim

L'uso di lmerTest :: anova () ti darà le tabelle anova con valori p per ogni termine. Ciò consentirebbe di esaminare direttamente l'interazione, anziché confrontare i modelli generali. Vedi questa risposta alla domanda @Tim collegata a: stats.stackexchange.com/a/118436/35304
Kayle Sawyer

Risposte:


3

Non vedo molto da dire qui. Penso che tu abbia fatto un buon lavoro.

Esistono diversi modi in cui le persone hanno discusso per testare gli effetti e ottenere valori p per complicati modelli di effetti misti. C'è una buona panoramica qui . La cosa migliore è usare metodi ad alta intensità computazionale (bootstrap o metodi bayesiani), ma questo è più avanzato per la maggior parte delle persone. Il secondo metodo migliore (e più conveniente) è utilizzare un test del rapporto di verosimiglianza. Questo è ciò che anova()(tecnicamente ? Anova.merMod () ) sta facendo. È importante utilizzare solo un test del rapporto di verosimiglianza dei modelli che sono stati adattati con la massima verosimiglianza massima , piuttosto che con la verosimiglianza massima limitata(REML). D'altra parte, per il modello finale e per l'interpretazione, si desidera utilizzare REML. Questo è fonte di confusione per molte persone. Nel tuo output, vediamo che adatta i tuoi modelli con REML (questo perché l'opzione è impostata di TRUEdefault in lmer(). Ciò significherebbe che il tuo test non è valido, tuttavia, poiché si tratta di un errore così comune, anova.merMod()contiene un refitargomento che il valore predefinito è impostato TRUEe non è stato modificato, quindi la lungimiranza degli sviluppatori di pacchetti ti ha salvato lì.

Per quanto riguarda la tua strategia di decompressione dell'interazione, ciò che hai fatto va bene. Basta tenere presente che l'interazione utilizza tutti i dati per il suo test. È possibile avere un'interazione significativa ma nessuno dei test stratificati può essere significativo, il che confonde alcune persone. (Non sembra essere successo a te, però.)


0

Anch'io sono un principiante e seguo i consigli di Zuur et al. Uso lmeil nlmepacchetto invece di lme4quando devo aggiungere una struttura gerarchica di errori a un modello altrimenti lineare. La mia risposta potrebbe essere molto lontana.

Due commenti:

(1) Non sono sicuro che abbia senso testare conditionnel sottoinsieme appropriate==1solo quando . Se si desidera ottenere valori p per gli effetti principali, è possibile utilizzare Anovadal pacchetto "auto":

require(car)
Anova(M,type="III")# type III Sum of Squares. M was fitted using method=REML

Se si desidera risolvere l'interazione, è possibile eseguire i confronti accoppiati direttamente (?) O fare ciò che si è fatto ma su entrambi i sottoinsiemi (ovvero anche con il sottoinsieme in cui appropriate==0).

(2) Potresti prima selezionare la struttura dell'errore invece di supporre che (1 | subject) + (1 | target)sia la migliore struttura dell'errore. Da quello che hai scritto, ho capito che conditionè un fattore entro soggetto, mentre appropriateè un fattore tra soggetto o tra obiettivo. Potresti voler aggiungere pendenze per fattori all'interno del soggetto e / o all'interno del bersaglio, ad esempio: dv ~ condition + appropriate + (1+condition | subject) + (1 | target)aggiunge una pendenza casuale per il fattore all'interno del soggetto condition. Non sono necessarie pendenze per i fattori tra soggetti / target.

Saluti


Grazie. Non Anovapretenderemo solo che le correlazioni tra soggetto e bersaglio non ci siano? Il motivo per cui ripeto l'analisi con solo dati dove appropriate==1è che un certo numero di materiali utilizzati hanno dimostrato di essere problematici dopo il test, quindi "inappropriati". Infine, non ho usato pendenze casuali per il semplice motivo che il modello si adatta meglio senza di loro.
Eoin
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.