Supposons que j'ai participants, chacun donnant une réponse 20 fois, 10 dans une condition et 10 dans une autre. J'adapte un modèle linéaire à effets mixtes comparant dans chaque condition. Voici un exemple reproductible simulant cette situation en utilisant le lme4
package dans R
:
library(lme4)
fml <- "~ condition + (condition | participant_id)"
d <- expand.grid(participant_id=1:40, trial_num=1:10)
d <- rbind(cbind(d, condition="control"), cbind(d, condition="experimental"))
set.seed(23432)
d <- cbind(d, simulate(formula(fml),
newparams=list(beta=c(0, .5),
theta=c(.5, 0, 0),
sigma=1),
family=gaussian,
newdata=d))
m <- lmer(paste("sim_1 ", fml), data=d)
summary(m)
Le modèle m
produit deux effets fixes (une interception et une pente pour la condition) et trois effets aléatoires (une interception aléatoire par participant, une pente aléatoire par participant pour la condition et une corrélation intercept-pente).
Je voudrais comparer statistiquement la taille de la variance d'interception aléatoire par participant parmi les groupes définis par condition
(c.-à-d. Calculer la composante de variance surlignée en rouge séparément dans les conditions de contrôle et expérimentales, puis tester si la différence de taille des composantes est différent de zéro). Comment pourrais-je faire cela (de préférence en R)?
PRIME
Disons que le modèle est légèrement plus compliqué: les participants éprouvent chacun 10 stimuli 20 fois chacun, 10 dans une condition et 10 dans une autre. Ainsi, il existe deux ensembles d'effets aléatoires croisés: les effets aléatoires pour le participant et les effets aléatoires pour le stimulus. Voici un exemple reproductible:
library(lme4)
fml <- "~ condition + (condition | participant_id) + (condition | stimulus_id)"
d <- expand.grid(participant_id=1:40, stimulus_id=1:10, trial_num=1:10)
d <- rbind(cbind(d, condition="control"), cbind(d, condition="experimental"))
set.seed(23432)
d <- cbind(d, simulate(formula(fml),
newparams=list(beta=c(0, .5),
theta=c(.5, 0, 0, .5, 0, 0),
sigma=1),
family=gaussian,
newdata=d))
m <- lmer(paste("sim_1 ", fml), data=d)
summary(m)
Je voudrais comparer statistiquement l'ampleur de la variance d'interception aléatoire par participant à travers les groupes définis par condition
. Comment pourrais-je faire cela, et le processus est-il différent de celui dans la situation décrite ci-dessus?
ÉDITER
Pour être un peu plus précis sur ce que je recherche, je veux savoir:
- La question «est-ce que les réponses moyennes conditionnelles à l'intérieur de chaque condition (c.-à-d. Les valeurs d'interception aléatoire dans chaque condition) sont sensiblement différentes les unes des autres, au-delà de ce à quoi nous nous attendions en raison d'une erreur d'échantillonnage»? Une question bien définie (c.-à-d., Cette question même théoriquement responsable)? Sinon, pourquoi pas?
- Si la réponse à la question (1) est oui, comment pourrais-je y répondre? Je préférerais une
R
implémentation, mais je ne suis pas lié aulme4
package - par exemple, il semble que leOpenMx
package ait la capacité d'accueillir des analyses multi-groupes et multi-niveaux ( https: //openmx.ssri.psu. edu / openmx-features ), et cela semble être le genre de question à laquelle il faudrait répondre dans un cadre SEM.
la source
Réponses:
Il existe plusieurs façons de tester cette hypothèse. Par exemple, la procédure décrite par @amoeba devrait fonctionner. Mais il me semble que le moyen le plus simple et le plus rapide de le tester est d'utiliser un bon vieux test de rapport de vraisemblance comparant deux modèles imbriqués. La seule partie potentiellement délicate de cette approche consiste à savoir comment configurer la paire de modèles afin que l'abandon d'un seul paramètre teste proprement l'hypothèse souhaitée de variances inégales. Ci-dessous, j'explique comment faire cela.
Réponse courte
Passez au codage de contraste (somme à zéro) pour votre variable indépendante, puis effectuez un test de rapport de vraisemblance comparant votre modèle complet à un modèle qui force la corrélation entre les pentes aléatoires et les intersections aléatoires à 0:
Explication visuelle / intuition
Pour que cette réponse ait un sens, vous devez avoir une compréhension intuitive de ce que les différentes valeurs du paramètre de corrélation impliquent pour les données observées. Considérez les lignes de régression spécifiques au sujet (variant au hasard). Fondamentalement, le paramètre de corrélation contrôle si les lignes de régression des participants "s'étalent vers la droite" (corrélation positive) ou "s'étalent vers la gauche" (corrélation négative) par rapport au pointX=0 , où X est votre indépendant codé par contraste. variable. L'un ou l'autre de ces facteurs implique une variance inégale dans les réponses moyennes conditionnelles des participants. Ceci est illustré ci-dessous:
Dans ce graphique, nous ignorons les multiples observations que nous avons pour chaque sujet dans chaque condition et au lieu de cela, nous traçons simplement les deux moyennes aléatoires de chaque sujet, avec une ligne les reliant, représentant la pente aléatoire de ce sujet. (Il s'agit de données provenant de 10 sujets hypothétiques, et non des données publiées dans le PO.)
Dans la colonne de gauche, où il existe une forte corrélation négative d'interception de pente, les lignes de régression s'étendent vers la gauche par rapport au pointX=0 . Comme vous pouvez le voir clairement sur la figure, cela conduit à une plus grande variance des moyennes aléatoires des sujets dans la condition X=−1 que dans la condition X=1 .
La colonne de droite montre l'image miroir inversée de ce motif. Dans ce cas, il y a une plus grande variance dans les moyennes aléatoires des sujets dans la conditionX=1 que dans la condition X=−1 .
La colonne du milieu montre ce qui se passe lorsque les pentes aléatoires et les intersections aléatoires ne sont pas corrélées. Cela signifie que les lignes de régression se déploient vers la gauche exactement autant qu'elles se déploient vers la droite, par rapport au pointX=0 . Cela implique que les variances des moyennes des sujets dans les deux conditions sont égales.
Il est crucial ici que nous ayons utilisé un schéma de codage de contraste de somme à zéro, pas des codes fictifs (c'est-à-dire ne définissant pas les groupes àX=0 contre X=1 ). C'est seulement sous le schéma de codage de contraste que nous avons cette relation dans laquelle les variances sont égales si et seulement si la corrélation pente-ordonnée à l'origine est 0. La figure ci-dessous essaie de construire cette intuition:
Ce que cette figure montre est le même ensemble de données exact dans les deux colonnes, mais avec la variable indépendante codée de deux manières différentes. Dans la colonne de gauche, nous utilisons des codes de contraste - c'est exactement la situation de la première figure. Dans la colonne de droite, nous utilisons des codes fictifs. Cela modifie le sens des interceptions - maintenant les interceptions représentent les réponses prédites des sujets dans le groupe témoin. Le panneau du bas montre la conséquence de ce changement, à savoir que la corrélation interception de pente n'est plus nulle part proche de 0, même si les données sont les mêmes dans un sens profond et les variances conditionnelles sont égales dans les deux cas. Si cela ne semble toujours pas très logique, étudier ma réponse précédente où je parle davantage de ce phénomène peut aider.
Preuve
Soityijk la j ème réponse du i ème sujet sous la condition k . (Nous n'avons ici que deux conditions, donc k est juste soit 1 soit 2.) Alors le modèle mixte peut être écrit
yijk=αi+βixk+eijk,
où αi sont les sujets ' interceptions aléatoires et ont la variance σ2α , βi sont la pente aléatoire des sujets et ont une variance σ2β , eijk est le terme d'erreur au niveau de l'observation, et cov(αi,βi)=σαβ .
Nous souhaitons montrer quevar(αi+βix1)=var(αi+βix2)⇔σαβ=0.
En commençant par le côté gauche de cette implication, nous avonsvar(αi+βix1)σ2α+x21σ2β+2x1σαβσ2β(x21−x22)+2σαβ(x1−x2)=var(αi+βix2)=σ2α+x22σ2β+2x2σαβ=0.
Les codes de contraste de somme à zéro impliquent quex1+x2=0 et x21=x22=x2 . Ensuite, nous pouvons encore réduire la dernière ligne de ce qui précède à
σ2β(x2−x2)+2σαβ(x1+x1)σαβ=0=0,
c'est ce que nous voulions prouver. (Pour établir l'autre sens de l'implication, nous pouvons simplement suivre ces mêmes étapes à l'envers.)
Pour le répéter, cela montre que si la variable indépendante est codée en contraste (somme à zéro) , alors les variances des moyennes aléatoires des sujets dans chaque condition sont égales si et seulement si la corrélation entre les pentes aléatoires et les intersections aléatoires est de 0. La clé Le point à retenir de tout cela est que tester l'hypothèse nulle selon laquelleσαβ=0 testera l'hypothèse nulle des variances égales décrites par l'OP.
Cela ne fonctionne PAS si la variable indépendante est, disons, codée fictivement. Plus précisément, si nous introduisons les valeursx1=0 et x2=1 dans les équations ci-dessus, nous constatons que
var(αi)=var(αi+βi)⇔σαβ=−σ2β2.
la source
(1 | subject)
dummy
Vous pouvez tester la signification des paramètres du modèle à l'aide d' intervalles de confiance estimés pour lesquels le package lme4 a le
confint.merMod
fonction.bootstrapping (voir par exemple Intervalle de confiance du bootstrap )
profil de vraisemblance (voir par exemple Quelle est la relation entre la probabilité de profil et les intervalles de confiance? )
Il y a aussi une méthode
'Wald'
mais elle n'est appliquée qu'aux effets fixes.Il existe également une sorte d'expression de type anova (rapport de vraisemblance) dans le package
lmerTest
nomméranova
. Mais je n'arrive pas à donner un sens à cela. La distribution des différences de logLik vraisemblance, lorsque l'hypothèse nulle (variance nulle pour l'effet aléatoire) est vraie, n'est pas distribuée en chi carré (peut-être lorsque le nombre de participants et d'essais est élevé, le test du rapport de vraisemblance pourrait avoir un sens).Variance dans des groupes spécifiques
Pour obtenir des résultats de variance dans des groupes spécifiques, vous pouvez reparamétrer
Lorsque nous avons ajouté deux colonnes à la base de données (cela n'est nécessaire que si vous souhaitez évaluer un `` contrôle '' et un `` expérimental '' non corrélés, la fonction
(0 + condition || participant_id)
ne conduirait pas à l'évaluation des différents facteurs en condition de non corrélés)Donnera maintenant la
lmer
variance pour les différents groupesEt vous pouvez leur appliquer les méthodes de profil. Par exemple maintenant confint donne des intervalles de confiance pour le contrôle et la variance exerimentale.
Simplicité
Vous pouvez utiliser la fonction de vraisemblance pour obtenir des comparaisons plus avancées, mais il existe de nombreuses façons de faire des approximations le long de la route (par exemple, vous pouvez faire un test anova / lrt conservateur, mais est-ce ce que vous voulez?).
À ce stade, cela me fait me demander quel est réellement le point de cette comparaison (pas si courante) entre les variances. Je me demande si ça commence à devenir trop sophistiqué. Pourquoi la différence entre les variances au lieu du ratio entre les variances (qui se rapporte à la distribution F classique)? Pourquoi ne pas simplement signaler les intervalles de confiance? Nous devons prendre du recul et clarifier les données et l'histoire qu'elles sont censées raconter, avant de s'engager dans des voies avancées qui peuvent être superflues et en contact lâche avec la question statistique et les considérations statistiques qui sont en fait le sujet principal.
Je me demande si l'on devrait faire bien plus que simplement énoncer les intervalles de confiance (ce qui peut en fait en dire bien plus qu'un test d'hypothèse. Un test d'hypothèse donne oui non, mais aucune information sur la répartition réelle de la population. Avec suffisamment de données, vous pouvez faire une légère différence à signaler comme différence significative). Pour approfondir la question (à quelque fin que ce soit), je crois qu'une question de recherche plus spécifique (étroitement définie) doit guider la machine mathématique à effectuer les simplifications appropriées (même lorsqu'un calcul exact pourrait être faisable ou lorsque il pourrait être approximé par des simulations / bootstrapping, même dans certains cas, cela nécessite encore une interprétation appropriée). Comparez avec le test exact de Fisher pour résoudre une question (particulière) (sur les tableaux de contingence) exactement,
Exemple simple
Pour donner un exemple de la simplicité possible, je montre ci-dessous une comparaison (par simulations) avec une évaluation simple de la différence entre les deux variances de groupe basée sur un test F fait en comparant les variances dans les réponses moyennes individuelles et fait en comparant les variances dérivées du modèle mixte.
si la variance de l'erreur de mesureσϵ σj j={1,2}
Vous pouvez le voir dans la simulation du graphique ci-dessous où, à part le score F basé sur l'échantillon, un score F est calculé en fonction des variances prévues (ou sommes d'erreur quadratique) du modèle.
L'image est modélisée avec 10 000 répétitions en utilisantσj=1=σj=2=0.5 σϵ=1
Vous pouvez voir qu'il y a une différence. Cette différence peut être due au fait que le modèle linéaire à effets mixtes obtient les sommes d'erreur quadratique (pour l'effet aléatoire) d'une manière différente. Et ces termes d'erreur au carré ne sont pas (plus) bien exprimés sous la forme d'une simple distribution du Chi au carré, mais restent étroitement liés et peuvent être approximés.
Le modèle basé sur les moyennes est donc très exact. Mais c'est moins puissant. Cela montre que la bonne stratégie dépend de ce que vous voulez / avez besoin.
Dans l'exemple ci-dessus, lorsque vous définissez les limites de la queue droite à 2,1 et 3,1, vous obtenez environ 1% de la population en cas de variance égale (respectivement 103 et 104 des 10000 cas), mais en cas de variance inégale, ces limites diffèrent beaucoup (donnant 5334 et 6716 des cas)
code:
la source
sim_1 ~ condition + (0 + condition | participant_id)"
auquel cas vous obtenez une paramétrisation en deux paramètres (un pour chaque groupe) plutôt que deux paramètres un pour l'interception et un pour l'effet (qui doivent être combinés pour les groupes).car::linearHypothesisTest
( math.furman.edu/~dcs/courses/math47/R/library/car/html/… ), ce qui permet à l'utilisateur de tester des hypothèses arbitraires avec un modèle ajusté. Cependant, je devrais utiliser la méthode de @ amoeba pour obtenir les deux interceptions aléatoires dans le même modèle ajusté afin qu'elles puissent être comparées avec cette fonction. Je suis également un peu incertain quant à la validité de la méthode.Un moyen relativement simple pourrait être d'utiliser des tests de rapport de vraisemblance via
anova
comme décrit dans lalme4
FAQ .Nous commençons avec un modèle complet dans lequel les variances ne sont pas contraintes (c'est-à-dire que deux variances différentes sont autorisées), puis nous ajustons un modèle contraint dans lequel les deux variances sont supposées égales. Nous les comparons simplement avec
anova()
(notez que je les fixeREML = FALSE
bienREML = TRUE
qu'avecanova(..., refit = FALSE)
soit complètement réalisable ).Cependant, ce test est probablement conservateur . Par exemple, la FAQ dit:
Il existe plusieurs alternatives:
Créez une distribution de test appropriée, qui consiste généralement en un mélange deχ2 distributions. Voir, par exemple,
Self, SG et Liang, K.-Y. (1987). Propriétés asymptotiques des estimateurs du maximum de vraisemblance et tests de rapport de vraisemblance dans des conditions non standard. Journal de l'American Statistical Association, 82 (398), 605. https://doi.org/10.2307/2289471 Cependant, c'est assez compliqué.
Simulez la distribution correcte en utilisant
RLRsim
(comme également décrit dans la FAQ).Je vais démontrer la deuxième option dans ce qui suit:
Comme nous pouvons le voir, la sortie suggère qu'avec
REML = TRUE
nous, nous aurions obtenu des résultats exacts. Mais cela est laissé au lecteur comme exercice.Concernant le bonus, je ne sais pas si
RLRsim
permet le test simultané de plusieurs composants, mais si c'est le cas, cela peut être fait de la même manière.Réponse au commentaire:
Je ne suis pas sûr que cette question puisse recevoir une réponse raisonnable.
Les pentes aléatoires affectent-elles donc l'interception aléatoire? Dans un certain sens, cela pourrait avoir un sens, car ils permettent à chaque niveau du facteur de regroupement un effet complètement idiosyncrasique pour chaque condition. Au final, nous estimons deux paramètres idiosyncratiques pour deux conditions. Cependant, je pense que la distinction entre le niveau global capturé par l'interception et l'effet spécifique à la condition capturé par la pente aléatoire est importante et que la pente aléatoire ne peut pas vraiment affecter l'interception aléatoire. Cependant, il permet toujours à chaque niveau du facteur de regroupement d'être idiosyncratique séparément pour chaque niveau de la condition.
Néanmoins, mon test fait toujours ce que la question d'origine veut. Il teste si la différence de variances entre les deux conditions est nulle. S'il est nul, alors les variances dans les deux conditions sont égales. En d'autres termes, ce n'est que s'il n'y a pas besoin d'une pente aléatoire que la variance dans les deux conditions est identique. J'espère que cela à du sens.
la source
contr.treatment
) pour lesquels la condition de contrôle est la référence (c'est-à-dire pour laquelle l'interception aléatoire est calculée). La paramétrisation que je propose, j'utilise des contrastes de somme (c.-à-d.contr.sum
) Et l'ordonnée à l'origine est la grande moyenne. J'ai l'impression qu'il est plus logique de tester si la différence est nulle lorsque l'ordonnée à l'origine est la grande moyenne au lieu de la condition de contrôle (mais l'écrire fait suggère que cela pourrait être relativement sans conséquence). Vous pouvez lire les pages 24 à 26 de: singmann.org/download/publications/…condition
: elle permet à l'ordonnée à l'origine aléatoire de varier selon les niveaux decondition
. Est-ce vrai?m_full
vsm_full2b
. C'est-à-dire: les variances des réponses moyennes conditionnelles des participants dans A vs B sont inégales si la corrélation aléatoire de pente d'interception est non nulle --- surtout, sous la paramétrisation du codage du contraste de la somme à zéro . Il n'est pas nécessaire de tester la variance de pente aléatoire. Essayer de penser comment expliquer cela succinctement ...Votre modèle
déjàpermet à la variance entre sujets dans la condition de contrôle de différer de la variance entre sujets dans la condition expérimentale. Cela peut être rendu plus explicite par une re-paramétrisation équivalente:
La matrice de covariance aléatoire a maintenant une interprétation plus simple:
Ici, les deux variances sont précisément les deux variances qui vous intéressent: la variance [entre sujets] des réponses moyennes conditionnelles dans la condition de contrôle et la même dans la condition expérimentale. Dans votre jeu de données simulé, ils sont de 0,25 et 0,21. La différence est donnée par
et est égal à 0,039. Vous voulez tester s'il est significativement différent de zéro.
ÉDITER: J'ai réalisé que le test de permutation que je décris ci-dessous est incorrect; cela ne fonctionnera pas comme prévu si les moyens en condition contrôle / expérimentale ne sont pas les mêmes (car alors les observations ne sont pas échangeables sous le nul). Il serait peut-être préférable de démarrer des sujets (ou des sujets / objets dans le cas Bonus) et d'obtenir l'intervalle de confiance pour
delta
.Je vais essayer de corriger le code ci-dessous pour ce faire.
Suggestion originale basée sur la permutation (fausse)
Je trouve souvent que l'on peut se sauver beaucoup de problèmes en faisant un test de permutation. En effet, dans ce cas, il est très facile à mettre en place. Permutons les conditions de contrôle / expérimentales pour chaque sujet séparément; alors toute différence de variance doit être éliminée. Répéter cela plusieurs fois donnera la distribution nulle pour les différences.
(Je ne programme pas en R; tout le monde, n'hésitez pas à réécrire ce qui suit dans un meilleur style R.)
L'exécution de ceci donne la valeur de pp = 0,7 . On peut augmenter
nrep
à 1000 environ.Exactement la même logique peut être appliquée dans votre cas Bonus.
la source
sim_1 ~ 0 + condition + (0 + dummy(condition, "control") + dummy(condition, "experimental") | participant_id)
formulation et obtenir le même résultat que dans ma réponse.En examinant ce problème sous un angle légèrement différent et en partant de la forme «générale» du modèle mixte linéaire, nous avonsyje j k= μ + αj+ djej+ejejk,dje∼N(0,Σ),eijk∼N(0,σ2)
where αj is the fixed effect of the j 'th condition and di=(di1,…,diJ)⊤ is a random vector (some call it vector-valued random effect, I think) for the i 'th participant in the j 'th condition.yi1k and yi2k which I'll denote as A and B in what follows. So the covariance matrix of the two-dimensional random vector di is of the general form
In your example we have two conditions
with non-negativeσ2A and σ2B .
Let's first see how the re-parameterized version ofΣ looks when we use sum contrasts.
The variance of the intercept, which corresponds to the grand mean, is
The variance of the contrast is
And the covariance between the intercept and the contrast is
Thus, the re-parameterizedΣ is
Setting the covariance parameterσ12 to zero we get
which, as @Jake Westfall derived slightly differently, tests the hypothesis of equal variances when we compare a model without this covariance parameter to a model where the covariance parameter is still included/not set to zero.
Notably, introducing another crossed random grouping factor (such as stimuli) does not change the model comparison that has to be done, i.e.,
anova(mod1, mod2)
(optionally with the argumentrefit = FALSE
when you use REML estimation) wheremod1
andmod2
are defined as @Jake Westfall did.Taking outσ12 and the variance component for the contrast σ22 (what @Henrik suggests) results in
which tests the hypothesis that the variances in the two conditions are equal and that they are equal to the (positive) covariance between the two conditions.
When we have two conditions, a model that fits a covariance matrix with two parameters in a (positive) compound symmetric structure can also be written as
or (using the categorical variable/factor
condition
)with
whereσ21 and σ22 are the variance parameters for the participant and the participant-condition-combination intercepts, respectively. Note that this Σ has a non-negative covariance parameter.
Below we see that
mod1
,mod3
, andmod4
yield equivalent fits:With treatment contrasts (the default in R) the re-parameterizedΣ is
whereσ21 is the variance parameter for the intercept (condition A ), σ22 the variance parameter for the contrast (A−B ), and σ12 the corresponding covariance parameter.
We can see that neither settingσ12 to zero nor setting σ22 to zero tests (only) the hypothesis of equal variances.
However, as shown above, we can still useΣ for this model.
mod4
to test the hypothesis as changing the contrasts has no impact on the parameterization ofla source