Як використовувати ваги у функції lm в R?


21

Чи може хтось запропонувати деякі покажчики, як використовувати weightsаргумент у lmфункції R ? Скажімо, ви, наприклад, намагалися встановити модель на дані про трафік, і у вас було кілька сотень рядків, кожен з яких представляв місто (з різним населенням). Якби ви хотіли, щоб модель коригувала відносний вплив кожного спостереження на основі чисельності популяції, ви могли б просто вказати weights=[the column containing the city's population]? Це такий тип вектора, в який можна потрапити weights? Або вам доведеться повністю використовувати іншу функцію / пакет / підхід?

Цікаво почути, як люди вирішують цю проблему - не бачили її висвітлено в жодному з навчальних посібників лінійного моделювання, які я бачив там. Спасибі!

Відповіді:


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.