Comment utiliser les poids dans la fonction lm dans R?

21

Quelqu'un pourrait-il offrir des conseils sur la façon d'utiliser l' weightsargument dans la lmfonction de R ? Supposons, par exemple, que vous tentiez d'adapter un modèle aux données de trafic et que vous disposiez de plusieurs centaines de lignes, chacune représentant une ville (avec une population différente). Si vous vouliez que le modèle ajuste l'influence relative de chaque observation en fonction de la taille de la population, pourriez-vous simplement préciser weights=[the column containing the city's population]? Est-ce le genre de vecteur qui peut être utilisé weights? Ou auriez-vous besoin d'utiliser une fonction / package / approche R complètement différente?

Curieux de savoir comment les gens abordent celui-ci - je ne l'ai pas vu dans aucun des didacticiels de modélisation linéaire que j'ai vus là-bas. Merci!

Andrew
la source

Réponses:

17

Je pense que la page d'aide de R lmrépond assez bien à votre question. La seule exigence pour les poids est que le vecteur fourni doit avoir la même longueur que les données. Vous pouvez même fournir uniquement le nom de la variable dans l'ensemble de données, R se chargera du reste, la gestion NA, etc. Vous pouvez également utiliser des formules dans l' weightargument. Voici l'exemple:

x <-c(rnorm(10),NA)
df <- data.frame(y=1+2*x+rnorm(11)/2, x=x, wght1=1:11)

## Fancy weights as numeric vector
summary(lm(y~x,data=df,weights=(df$wght1)^(3/4))) 

# Fancy weights as formula on column of the data set
summary(lm(y~x,data=df,weights=I(wght1^(3/4))))

# Mundane weights as the column of the data set
summary(lm(y~x,data=df,weights=wght1))

Notez que les poids doivent être positifs, sinon R produira une erreur.

mpiktas
la source
mais les poids doivent-ils correspondre à un? J'obtiens des résultats différents dans mon lmrésumé s'ils sont mis à l'échelle vs non ...
Palace Chan
Non, les poids ne doivent pas nécessairement correspondre à un. Qu'est-ce qui est différent dans le lmrésumé? Les coefficients ou les erreurs types?
mpiktas
Les résidus et leur erreur standard diffèrent, mais les coefficients et leurs erreurs ne le sont pas.
Palace Chan
3

Ce que vous proposez devrait fonctionner. Voyez si cela a du sens:

lm(c(8000, 50000, 116000) ~ c(6, 7, 8))
lm(c(8000, 50000, 116000) ~ c(6, 7, 8), weight = c(123, 123, 246))
lm(c(8000, 50000, 116000, 116000) ~ c(6, 7, 8, 8))

La deuxième ligne produit la même interception et la même pente que la troisième ligne (distincte du résultat de la première ligne), en donnant à une observation relativement deux fois le poids de chacune des deux autres observations, semblable à l'impact de la duplication de la troisième observation.

Henri
la source
J'ai essayé cela, mais j'ai trouvé que les summarysorties sont différentes pour la 2e et la 3e ligne, en particulier pour la valeur de p du coefficient, je me demande si cela se produira si les 2 instructions se réfèrent au même ensemble de données. J'ai posté une question à ce sujet sur stackoverflow.com/questions/10268689/weighted-regression-in-r
lokheart