Jak używać wag w funkcji lm w R?

21

Czy ktoś mógłby zaoferować jakieś wskazówki, jak używać weightsargumentu w lmfunkcji R. Powiedzmy, na przykład, że próbujesz dopasować model do danych o ruchu drogowym i miałeś kilkaset wierszy, z których każdy reprezentował miasto (o innej populacji). Jeśli chciałbyś, aby model dostosował względny wpływ każdej obserwacji na podstawie wielkości populacji, czy możesz po prostu określić weights=[the column containing the city's population]? Czy to rodzaj wektora, w który można wejść weights? A może musiałbyś całkowicie użyć innej funkcji / pakietu / podejścia R?

Ciekawe, jak ludzie sobie z tym radzą - nie widziałem, żeby było to omówione w żadnym tutorialu modelowania liniowego, który tam widziałem. Dzięki!

Andrzej
źródło

Odpowiedzi:

17

Myślę, że strona pomocy R z lmodpowiedziami na twoje pytanie całkiem nieźle. Jedynym wymaganiem dla wag jest to, że dostarczony wektor musi mieć taką samą długość jak dane. Możesz nawet podać tylko nazwę zmiennej w zbiorze danych, R zajmie się resztą, zarządzaniem NA itp. Możesz także użyć formuł w weightargumencie. Oto przykład:

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

Zauważ, że wagi muszą być dodatnie, w przeciwnym razie R spowoduje błąd.

mpiktas
źródło
ale czy wagi muszą sumować się do jednego? Otrzymuję różne wyniki w moim lmpodsumowaniu, jeśli są skalowane vs nie ...
Palace Chan
Nie, wagi nie muszą sumować się do jednego. Co różni się w lmpodsumowaniu? Współczynniki czy błędy standardowe?
mpiktas
Reszty i ich błąd standardowy są różne, ale współczynniki i ich błędy nie.
Palace Chan
3

To, co sugerujesz, powinno działać. Sprawdź, czy to ma 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))

Druga linia tworzy taki sam punkt przecięcia i nachylenie jak trzecia linia (różniąca się od wyniku pierwszej linii), podając jedną obserwację względnie dwukrotnie większą niż każda z pozostałych dwóch obserwacji, podobnie jak wpływ duplikacji trzeciej obserwacji.

Henz
źródło
Próbowałem tego, ale stwierdziłem, że dane summarywyjściowe są różne dla 2. i 3. wiersza, szczególnie dla wartości p współczynnika. Zastanawiam się, że tak się stanie, jeśli 2 instrukcje odnoszą się do tego samego zestawu danych.
Zadałem