如何在r中设置异方差数据的加权最小二乘?

Luc*_*aia 5 regression r least-squares

我正在对人口普查数据进行回归,其中我的因变量是预期寿命,我有八个自变量.数据汇总为城市,因此我有数千个观测值.

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

Model=lm(…,weights=(1/population))
Run Code Online (Sandbox Code Playgroud)

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

Model=lm(…,weights=(1/sqrt(population)))
Run Code Online (Sandbox Code Playgroud)

(我在这里发现了这个问题:加权最小二乘 - R但它没有说明R如何解释权重参数.)

小智 2

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

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

您可以通过以下方式检查这一点:通过以下方式从回归中获取残差

residuals = lm(..., weights = 1/population)$residuals
Run Code Online (Sandbox Code Playgroud)

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

standardized_residuals = residuals/sqrt(population)
Run Code Online (Sandbox Code Playgroud)

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

variance1 = var(standardized_residuals[population < median(population)])
Run Code Online (Sandbox Code Playgroud)

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

variance2 = var(standardized_residuals[population > median(population)])
Run Code Online (Sandbox Code Playgroud)

如果这两个数字variance1variance2相似,那么您就做对了。如果它们截然不同,那么您的假设可能会被违反。