Как использовать веса в функции lm в R?


21

Может ли кто-нибудь предложить несколько советов о том, как использовать weightsаргумент в lmфункции R ? Скажем, например, вы пытались вписать модель в данные о трафике, и у вас было несколько сотен рядов, каждый из которых представлял город (с разным населением). Если вы хотите, чтобы модель корректировала относительное влияние каждого наблюдения в зависимости от численности населения, не могли бы вы просто указать weights=[the column containing the city's population]? Это тот тип вектора, который может войти в weights? Или вам нужно было бы полностью использовать другую R-функцию / пакет / подход?

Любопытно услышать, как люди справляются с этим - не видел, чтобы оно было освещено ни в одном из учебных пособий по линейному моделированию, которые я там видел. Благодарность!

Ответы:


17

Я думаю, что страница справки R lmотвечает на ваш вопрос довольно хорошо. Единственное требование к весам состоит в том, что предоставленный вектор должен иметь ту же длину, что и данные. Вы даже можете указать только имя переменной в наборе данных, R позаботится об остальном, управлении NA и т. Д. Вы также можете использовать формулы в weightаргументе. Вот пример:

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))

Обратите внимание, что веса должны быть положительными, иначе R приведет к ошибке.


но весить нужно суммировать до одного? Я получаю разные результаты в моем lmрезюме, если они масштабируются, а не ...
Дворец Чан

Нет, весам не нужно суммировать до одного. Что отличается в lmрезюме? Коэффициенты или стандартные ошибки?
mpiktas

Остатки и их стандартная ошибка различаются, а коэффициенты и их ошибки - нет.
Дворец Чан

3

То, что вы предлагаете, должно работать. Посмотрите, имеет ли это смысл:

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))

Вторая строка производит тот же перехват и наклон, что и третья линия (отличная от результата первой линии), давая одному наблюдению относительно удвоенный вес каждого из двух других наблюдений, аналогично влиянию дублирования третьего наблюдения.


Я попробовал это, но обнаружил, что summaryвыходные данные для 2-й и 3-й строки различны, особенно для p-значения коэффициента. Интересно, это произойдет, если 2 оператора ссылаются на один и тот же набор данных. Я разместил вопрос об этом на stackoverflow.com/questions/10268689/weighted-regression-in-r
lokheart
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.