Intro
J'ai des participants qui touchent à plusieurs reprises des surfaces contaminées avec E. coli dans deux conditions ( A = porter des gants, B = pas de gants). Je veux savoir s'il y a une différence entre la quantité de bactéries au bout de leurs doigts avec et sans gants mais aussi entre le nombre de contacts. Les deux facteurs sont intra-participants.
Méthode expérimentale:
Les participants (n = 35) touchent chaque carré une fois avec le même doigt pour un maximum de 8 contacts (voir figure a).
Je tamponne ensuite le doigt du participant et mesure les bactéries sur le bout du doigt après chaque contact. Ils utilisent ensuite un nouveau doigt pour toucher un nombre différent de surfaces et ainsi de suite de 1 à 8 contacts (voir figure b).
Voici les vraies données: les vraies données
Les données ne sont pas normales, voir la distribution marginale des bactéries | NumberContacts ci-dessous. x = bactérie. Chaque facette est un nombre différent de contacts.
MODÈLE
Essayer de lme4 :: glmer basé sur les suggestions d'amibe en utilisant Gamma (link = "log") et polynôme pour NumberContacts:
cfug<-glmer(CFU ~ Gloves + poly(NumberContacts,2) + (-1+NumberContacts|Participant),
data=(K,CFU<4E5),
family=Gamma(link="log")
)
plot(cfug)
NB. Le gamma (link = "inverse") ne fonctionnera pas en disant que la réduction de moitié des pas PIRLS n'a pas réussi à réduire la déviance.
Résultats:
qqp (resid (cfug))
Question:
Mon modèle glmer est-il correctement défini pour incorporer les effets aléatoires de chaque participant et le fait que tout le monde fait à la fois l'expérience A puis l'expérience B ?
Une addition:
L'autocorrélation semble exister entre les participants. C'est probablement parce qu'ils n'ont pas été testés le même jour et que le flacon de bactéries se développe et diminue au fil du temps. Est-ce que ça importe?
acf (CFU, lag = 35) montre une corrélation significative entre un participant et le suivant.
NumberContacts
comme facteur numérique et inclure des termes polynomiaux quadratiques / cubiques. Ou regardez dans les modèles mixtes additifs généralisés.CFU ~ Gloves * poly(NumberContacts,2) + (Gloves * poly(NumberContacts,2) | Participant)
ou quelque chose comme ça.CFU ~ Gloves * poly(NumberContacts,2) + (Gloves + poly(NumberContacts,2) | Participant)
ou peut-être enlevez les gants de làCFU ~ Gloves * poly(NumberContacts,2) + (poly(NumberContacts,2) | Participant)
...Gloves * poly(NumberContacts,2) + (poly(NumberContacts,2) | Participant)
c'est un modèle assez décent.Réponses:
Quelques parcelles pour explorer les données
Ci-dessous, huit, un pour chaque nombre de contacts de surface, des tracés xy montrant des gants par rapport à l'absence de gants.
Chaque individu est tracé avec un point. La moyenne et la variance et la covariance sont indiquées par un point rouge et l'ellipse (distance de Mahalanobis correspondant à 97,5% de la population).
Vous pouvez voir que les effets ne sont que faibles par rapport à la répartition de la population. La moyenne est plus élevée pour «pas de gants» et la moyenne change un peu plus haut pour plus de contacts de surface (ce qui peut être significatif). Mais l'effet n'est que de petite taille ( réduction globale du log ), et il y a beaucoup d'individus pour qui il y a en fait un plus grand nombre de bactéries avec les gants.14
La petite corrélation montre qu'il y a en effet un effet aléatoire des individus (s'il n'y a pas eu d'effet de la personne alors il ne devrait pas y avoir de corrélation entre les gants appariés et pas de gants). Mais ce n'est qu'un petit effet et un individu peut avoir des effets aléatoires différents pour les «gants» et «pas de gants» (par exemple, pour tous les points de contact différents, l'individu peut avoir systématiquement un nombre plus élevé / plus faible de «gants» que de «pas de gants») .
Le graphique ci-dessous présente des graphiques distincts pour chacun des 35 individus. L'idée de cette intrigue est de voir si le comportement est homogène et aussi de voir quel type de fonction semble convenir.
Notez que le «sans gants» est en rouge. Dans la plupart des cas, la ligne rouge est plus élevée, plus de bactéries pour les cas «sans gants».
Je crois qu'un tracé linéaire devrait être suffisant pour saisir les tendances ici. L'inconvénient du tracé quadratique est que les coefficients seront plus difficiles à interpréter (vous ne verrez pas directement si la pente est positive ou négative car le terme linéaire et le terme quadratique ont tous deux une influence sur cela).
Mais plus important encore, vous voyez que les tendances diffèrent beaucoup entre les différents individus et qu'il peut donc être utile d'ajouter un effet aléatoire non seulement pour l'interception, mais aussi pour la pente de l'individu.
Modèle
Avec le modèle ci-dessous
.
Cela donne
code pour obtenir des tracés
chimiométrie :: fonction drawMahal
5 x 7 parcelle
Terrain 2 x 4
la source
Tout d'abord, bon travail sur votre graphique; il donne une représentation claire des données, vous pouvez donc déjà voir le type de motif dans les données en fonction du nombre de contacts et de l'utilisation ou de l'absence de gants. En regardant ce graphique, je pense que vous obtiendrez de bons résultats avec un modèle log-polynomial de base, avec des effets aléatoires pour les participants. Le modèle que vous avez choisi semble raisonnable, mais vous pouvez également envisager d'ajouter un terme quadratique pour le nombre de contacts.†
Quant à savoir s'il faut utiliser
MASS:glmmPQL
oulme4:glmer
pour votre modèle, je crois comprendre que ces deux fonctions s'adapteront au même modèle (tant que vous définissez l'équation, la distribution et la fonction de lien du modèle de la même manière), mais elles utilisent différentes méthodes d'estimation pour trouver l'ajustement. Je peux me tromper, mais d'après ce que je comprends de la documentation, onglmmPQL
utilise la quasi-vraisemblance pénalisée comme décrit dans Wolfinger et O'Connell (1993) , alors que l'onglmer
utilise la quadrature de Gauss-Hermite. Si cela vous inquiète, vous pouvez ajuster votre modèle avec les deux méthodes et vérifier qu'elles donnent les mêmes estimations de coefficient et de cette façon, vous aurez une plus grande confiance que l'algorithme d'ajustement a convergé vers les vrais MLE des coefficients.Cette variable a un ordre naturel qui apparaît à partir de vos graphiques pour avoir une relation fluide avec la variable de réponse, vous pouvez donc raisonnablement la traiter comme une variable numérique. Si vous deviez l'inclure,
factor(NumberContacts)
vous ne contraindriez pas sa forme et vous ne perdriez pas beaucoup de degrés de liberté. Vous pouvez même utiliser l'interactionGloves*factor(NumberContacts)
sans perdre trop de degrés de liberté. Cependant, il convient de se demander si l'utilisation d'une variable factorielle impliquerait un surajustement des données. Étant donné qu'il existe une relation assez fluide dans votre graphique, une simple fonction linéaire ou quadratique obtiendrait de bons résultats sans surajustement.Vous avez déjà placé votre variable de réponse sur une échelle logarithmique en utilisant une fonction de lien logarithmique, donc un effet d'interception pour
Participant
donne un effet multiplicatif sur la réponse. Si vous deviez lui donner une pente aléatoire en interaction,NumberContacts
cela aurait un effet basé sur la puissance sur la réponse. Si vous le souhaitez, vous pouvez l'obtenir avec(~ -1 + NumberContacts|Participant)
ce qui supprimera l'interception mais ajoutera une pente en fonction du nombre de contacts.En cas de doute, essayez d'ajuster un modèle avec cette transformation et voyez comment elle se compare à d'autres modèles en utilisant des statistiques de qualité d'ajustement appropriées. Si vous allez utiliser cette transformation, il serait préférable de laisser le paramètre tant que paramètre libre et de le laisser être estimé dans le cadre de votre modèle, plutôt que de pré-spécifier une valeur.λ
Commencez par regarder votre tracé résiduel pour voir s'il existe des preuves d'hétéroscédasticité. Sur la base des graphiques que vous avez déjà inclus, il me semble que ce n'est pas un problème, vous n'avez donc pas besoin d'ajouter de pondération pour la variance. En cas de doute, vous pouvez ajouter des poids à l'aide d'une simple fonction linéaire, puis effectuer un test statistique pour voir si la pente de la pondération est plate. Cela équivaudrait à un test formel d'hétéroscédasticité, ce qui vous donnerait une sauvegarde de votre choix.
Si vous avez déjà inclus un terme à effet aléatoire pour le participant, ce serait probablement une mauvaise idée d'ajouter un terme d'auto-corrélation sur le nombre de contacts. Votre expérience utilise un doigt différent pour différents nombres de contacts, vous ne vous attendez donc pas à une autocorrélation dans le cas où vous avez déjà comptabilisé le participant. L'ajout d'un terme d'autocorrélation en plus de l'effet participant signifierait que vous pensez qu'il existe une dépendance conditionnelle entre le résultat de différents doigts, en fonction du nombre de contacts, même pour un participant donné.
la source
En effet, il est raisonnable de soutenir que les mesures prises par un participant ne sont pas indépendantes de celles prises par un autre participant. Par exemple, certaines personnes pourraient avoir tendance à appuyer sur leur doigt avec plus (ou moins) de force, ce qui affecterait toutes leurs mesures sur chaque nombre de contacts.
L'ANOVA à mesures répétées bidirectionnelles serait donc un modèle acceptable à appliquer dans ce cas.
Alternativement, on pourrait également appliquer un modèle à effets mixtes avec
participant
comme facteur aléatoire. Il s'agit d'une solution plus avancée et plus sophistiquée.la source