如何在 R 中的函数 lm 中使用权重?

机器算法验证 r 回归
2022-01-22 03:32:14

谁能提供一些关于如何weights在 Rlm函数中使用参数的指示?比如说,您试图在交通数据上拟合一个模型,并且您有数百行,每行代表一个城市(具有不同的人口)。如果您希望模型根据总体规模调整每个观测值的相对影响,您可以简单地指定weights=[the column containing the city's population]吗?那是可以进入的向量weights吗?或者您是否需要完全使用不同的 R 函数/包/方法?

很想知道人们是如何解决这个问题的——在我看到的任何线性建模教程中都没有看到它。谢谢!

2个回答

我认为 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(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))

第二条线产生与第三条线相同的截距和斜率(与第一条线的结果不同),通过给予一个观测值相对于其他两个观测值的权重两倍,类似于复制第三条观测值的影响。