¿Cómo usar pesos en la función lm en R?

21

¿Alguien podría ofrecer algunos consejos sobre cómo usar el weightsargumento en la lmfunción de R ? Digamos, por ejemplo, que estaba tratando de ajustar un modelo en los datos de tráfico, y tenía varios cientos de filas, cada una de las cuales representaba una ciudad (con una población diferente). Si desea que el modelo ajuste la influencia relativa de cada observación en función del tamaño de la población, ¿podría simplemente especificar weights=[the column containing the city's population]? ¿Es ese el tipo de vector que puede entrar weights? ¿O necesitaría usar una función / paquete / enfoque de R completamente diferente?

Curioso por escuchar cómo las personas abordan este tema, no lo vi cubierto en ninguno de los tutoriales de modelado lineal que vi por ahí. ¡Gracias!

Andrés
fuente

Respuestas:

17

Creo que la página de ayuda de R lmresponde a su pregunta bastante bien. El único requisito para los pesos es que el vector suministrado debe tener la misma longitud que los datos. Incluso puede proporcionar solo el nombre de la variable en el conjunto de datos, R se encargará del resto, la administración de NA, etc. También puede usar fórmulas en el weightargumento. Aquí está el ejemplo:

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

Tenga en cuenta que los pesos deben ser positivos, de lo contrario R producirá un error.

mpiktas
fuente
¿Pero los pesos tienen que sumar uno? Obtengo resultados diferentes en mi lmresumen si están escalados frente a no ...
Palace Chan
No, los pesos no necesitan sumar uno. ¿Qué es diferente en el lmresumen? ¿Los coeficientes o los errores estándar?
mpiktas
Los residuos y su error estándar difieren pero los coeficientes y sus errores no.
Palacio Chan
3

Lo que sugieres debería funcionar. Vea si esto tiene 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))

La segunda línea produce la misma intersección y pendiente que la tercera línea (distinta del resultado de la primera línea), al dar una observación relativamente el doble del peso de cada una de las otras dos observaciones, similar al impacto de duplicar la tercera observación.

Enrique
fuente
Intenté eso, pero descubrí que la summarysalida es diferente para la segunda y tercera línea, especialmente para el valor p del coeficiente, me pregunto si esto sucederá si las 2 declaraciones se refieren al mismo conjunto de datos.
Publiqué