Ainsi, il me semble que la fonction de pondération en lm donne aux observations plus de poids plus la valeur de «poids» de l'observation associée est grande, tandis que la fonction lme en lme fait exactement le contraire. Cela peut être vérifié avec une simulation simple.
#make 3 vectors- c is used as an uninformative random effect for the lme model
a<-c(1:10)
b<-c(2,4,6,8,10,100,14,16,18,20)
c<-c(1,1,1,1,1,1,1,1,1,1)
Si vous deviez maintenant exécuter un modèle où vous pondérez les observations en fonction de l'inverse de la variable dépendante en lm, vous ne pouvez générer le même résultat exact dans nlme que si vous pondérez uniquement la variable dépendante, sans prendre l'inverse.
summary(lm(b~a,weights=1/b))
summary(lme(b~a,random=~1|c,weights=~b))
Vous pouvez inverser cela et voir que l'inverse est vrai - spécifier les poids = b dans lm nécessite des poids = 1 / b pour obtenir un résultat lme correspondant.
Donc, je comprends bien, je veux juste une validation sur une chose et poser une question sur une autre.
- Si je veux pondérer mes données en fonction de l'inverse de la variable dépendante, est-il correct de coder uniquement les poids = ~ (variable dépendante) dans lme?
- Pourquoi lme est-il écrit pour gérer les poids complètement différemment de lm? Quel est le but de ceci autre que de générer de la confusion?
Toute idée serait appréciée!
lm()
nécessaire pour être compatible avec S et divers livres, nlme ne l'a pas fait, et il visait à être plus flexible, permettant à l'hétérogénéité d'être modélisée de manière plus flexible que ce qui estlm
permis.Réponses:
Q1
Danss2( v ) s2( v ) = | v | v
lme
la notationweights = ~ b
, lavarFixed
fonction de variance serait utilisée avec un seul argumentb
. Cette fonction ajouterait au modèle une fonction de variance qui a la forme, où prend les valeurs de l'argument vecteur .b
Par conséquent, vous devez utiliserεje= 1 /bje
weights = ~ I(1/b)
inlme()
pour avoir la variance de .Dans
lm
ce que vous passezweights
semble être l'exact opposé;weights
est inversement proportionnelle à la variance.Je ne suis pas sûr à 100% de ce que vous entendez par le poids de mes données , mais si vous voulez dire fournir la variance hétérogène des observations, alors je pense que vous voulez
weights = ~ I(1/b)
.Q2
Mon intuition (il faudrait demander aux auteurs respectifs des deux fonctions) est que c'est beacuse
lm()
etlme()
ont été écrits par des personnes très différentes pour faire des choses très différentes.lm()
devait (devait être) être compatible avec S et divers livres, nlme ne l’a pas fait, et il visait à être plus flexible, permettant de modéliser l’hétérogénéité de manière plus flexible que ne lelm
permet l’utilisation de fonctions de variance via l’varFunc
infrastructure.la source
b
. Il semblerait préférable de simplement dire que la variance augmente avecb
.varPower()
par exemple, aurait la varianceb
varExp()
lm()
, notez le libellé selon lequel la variance est proportionnelle à l'inverse deweights
. Dans lelme
code dont nous avons discuté,b
est la variance. Après votre explication, je ne pense pas que vous le vouliez vraiment ... Notez également que si la variance augmente avec la réponse moyenne, alors un GLMM peut être approprié et le package lme4 conviendrait car il peut modéliser directement la relation moyenne-variance , plutôt que via une modification de la matrice de covariance - ce que fait lelme
code.