L'argument des poids dans lm et lme est très différent dans R- est-ce que je les utilise correctement?


8

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.

  1. 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?
  2. 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!


1
La réponse à 2. est qu'ils ont été écrits par des personnes très différentes pour faire des choses très différentes. 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 est lmpermis.
Gavin Simpson

Réponses:


12

Q1

Dans lmela notation weights = ~ b, la varFixedfonction de variance serait utilisée avec un seul argument b. Cette fonction ajouterait au modèle une fonction de variance qui a la forme, où prend les valeurs de l'argument vecteur .s2(v)s2(v)=|v|vb

Par conséquent, vous devez utiliser weights = ~ I(1/b)in lme()pour avoir la variance de .εje=1/bje

Dans lmce que vous passez weightssemble être l'exact opposé; weightsest 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()et lme()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 le lmpermet l’utilisation de fonctions de variance via l’ varFuncinfrastructure.


C'est assez clair. Par `` pondérer mes données '', je veux dire que le modèle doit tenir compte du fait que de grands résidus devraient être attendus à partir de grandes observations, et correspondre à quelque chose qui s'apparente au pourcentage des moindres carrés, plutôt qu'aux moindres carrés ordinaires. AUSSI - J'ai supprimé la publication croisée sur le débordement de la pile, désolé!
colin

Vous voudrez peut-être alors regarder d'autres fonctions de variance dans nlme . Ce que vous faites, c'est que les variances de vos observations sont exactement la valeur (absolue) de b. Il semblerait préférable de simplement dire que la variance augmente avec b. varPower()par exemple, aurait la varianceσ^2×|b|2δavec estimé un paramètre de modèle. C'est OK si ne prend pas 0 valeur. Si elle peut prendre 0 valeur, alors la fonction peut être meilleure, là la variance est . δbvarExp()vuner(εje)=σ^2×e2δ×bje
Gavin Simpson

Dans lm(), notez le libellé selon lequel la variance est proportionnelle à l'inverse de weights. Dans le lmecode 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 le lmecode.
Gavin Simpson

Enfin, désolé si j'avais l'air grincheux sur Stack Overflow . Ce n'était pas intentionnel. J'ai juste oublié que vous ne pouvez pas voter pour fermer en tant qu'OT et migrer vers Cross Validated . Vous devez laisser un commentaire expliquant pourquoi mais j'avais déjà laissé le premier commentaire. Ne choisissez pas un site SE pour votre question en fonction du nombre d'yeux qui le verront. Choisissez le lieu le plus approprié. Il n'y a rien de mal à promouvoir votre question sur Cross Validated pour obtenir plus d'yeux, vous pouvez même publier le lien vers celle-ci dans la salle de discussion publique R sur Stack Overflow . La publication croisée ou la publication de questions OT dilue la ressource si nous en avons trop, d'où des votes serrés, etc.
Gavin Simpson
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.