Como usar pesos na função lm em R?


21

Alguém poderia oferecer algumas dicas sobre como usar o weightsargumento na lmfunção de R ? Digamos, por exemplo, você estava tentando ajustar um modelo nos dados de tráfego e tinha várias centenas de linhas, cada uma representando uma cidade (com uma população diferente). Se você quisesse que o modelo ajustasse a influência relativa de cada observação com base no tamanho da população, você poderia simplesmente especificar weights=[the column containing the city's population]? É esse o tipo de vetor que pode ser inserido weights? Ou você precisaria usar uma função / pacote / abordagem R completamente diferente?

Curioso para saber como as pessoas lidam com este - não o vi coberto em nenhum dos tutoriais de modelagem linear que vi por aí. Obrigado!

Respostas:


17

Acho que a página de ajuda da R lmresponde bem à sua pergunta. O único requisito para pesos é que o vetor fornecido tenha o mesmo comprimento que os dados. Você pode até fornecer apenas o nome da variável no conjunto de dados, R cuidará do resto, gerenciamento de NA etc. Você também pode usar fórmulas no weightargumento. Aqui está o exemplo:

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

Observe que os pesos devem ser positivos, caso contrário R produzirá um erro.


mas os pesos precisam somar um? Eu obter resultados diferentes no meu lmresumo, se eles são escalados vs não ...
Palácio Chan

Não, os pesos não precisam somar um. O que é diferente no lmresumo? Os coeficientes ou os erros padrão?
mpiktas

Os resíduos e seus erros padrão diferem, mas os coeficientes e seus erros não.
Palace Chan

3

O que você sugere deve funcionar. Veja se isso faz sentido:

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

A segunda linha produz o mesmo intercepto e inclinação que a terceira linha (distinta do resultado da primeira linha), fornecendo uma observação relativamente duas vezes o peso de cada uma das outras duas observações, semelhante ao impacto de duplicar a terceira observação.


Eu tentei isso, mas achei que a summarysaída é diferente para a segunda e a terceira linha, especialmente para o valor p do coeficiente, imagino que isso acontecerá se as duas instruções se referirem ao mesmo conjunto de dados. Eu postei uma pergunta sobre isso em stackoverflow.com/questions/10268689/weighted-regression-in-r
lokheart
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.