5

我正在对人口普查数据进行回归,其中我的因变量是预期寿命,我有八个自变量。数据是按城市汇总的,所以我有数千个观察结果。

不过,我的模型有些异方差。我想运行一个加权最小二乘法,其中每个观察值都由城市人口加权。在这种情况下,这意味着我想通过人口平方根的倒数对观察结果进行加权。然而,我不清楚什么是最好的语法。目前,我有:

Model=lm(…,weights=(1/population))

那是对的吗?或者应该是:

Model=lm(…,weights=(1/sqrt(population)))

(我在这里发现了这个问题:Weighted Least Squares - R但它没有阐明 R 如何解释权重参数。)

4

2 回答 2

3

来自?lm:“权重:在拟合过程中使用的可选权重向量。应该是NULL或数字向量。如果非NULL,加权最小二乘与权重一起使用weights(即最小化总和(w*e^2 ));否则使用普通最小二乘法。” R 不对 weights 参数做任何进一步的解释。

所以,如果你想要最小化的是(从每个点到拟合线的平方距离 * 1/sqrt(population) 那么你想要...weights=(1/sqrt(population))。如果你想最小化(从每个点到拟合线的平方距离)的总和拟合线 * 1/人口)然后你想要...weights=1/population

至于哪一个最合适......这是CrossValidated的问题!

于 2013-08-15T19:46:06.177 回答
2

为了回答你的问题,卢卡斯,我认为你想要权重 =(1/人口)。R 将权重参数化为与方差成反比,因此以这种方式指定权重相当于假设误差项的方差与城市人口成正比,这是此设置中的常见假设。

但检查假设!如果误差项的方差确实与总体大小成正比,那么如果将每个残差除以其相应样本大小的平方根,则残差应该具有恒定方差。请记住,将随机变量除以常数会导致方差除以该常数的平方。

以下是您可以检查的方法:从回归中获取残差

residuals = lm(..., weights = 1/population)$residuals

然后将残差除以总体方差的平方根:

standardized_residuals = residuals/sqrt(population)

然后比较与人口规模下半部分对应的残差之间的样本方差:

variance1 = var(standardized_residuals[population < median(population)])

对应于人口规模上半部分的残差之间的样本方差:

variance2 = var(standardized_residuals[population > median(population)])

如果这两个数字variance1variance2相似,那么你做对了。如果它们完全不同,那么可能违反了您的假设。

于 2013-08-16T05:27:38.680 回答