加权最小二乘估计的函数

6

在R中是否有加权最小二乘的函数? 具体来说,我正在寻找计算截距和斜率的函数。

数据集

  1. 1 3 5 7 9 11 14 17 19 25 29
  2. 17 31 19 27 31 62 58 35 29 21 18
  3. 102153 104123 96564 125565 132255 115454 114555 132255 129564 126455 124578

因变量是数据集3,而数据集1和2是自变量。


5
根据你的评论,似乎你并不想要加权最小二乘法,而是想要进行多元回归分析。是否需要适当修改你的问题? - Aaron left Stack Overflow
我仍然不清楚(阅读下面的答案和评论后)权重如何成为问题的一部分。 - Ben Bolker
更多关于最小二乘法的信息可以在这里和这里找到:http://itl.nist.gov/div898/handbook/pmd/section1/pmd141.htm 和 http://itl.nist.gov/div898/handbook/pmd/section1/pmd143.htm。 - hhh
3个回答

12

当然,lm()这个基本的线性模型拟合函数,有一个 weights=选项。下面是一个快速示例:

R> df <- data.frame(x=1:10)
R> lm(x ~ 1, data=df)            ## i.e. the same as mean(df$x)

Call:
lm(formula = x ~ 1, data = df)

Coefficients:
(Intercept)  
        5.5  

R> lm(x ~ 1, data=df, weights=seq(0.1, 1.0, by=0.1))

Call:
lm(formula = x ~ 1, data = df, weights = seq(0.1, 1, by = 0.1))

Coefficients:
(Intercept)  
          7  

R> 

通过更加重视后续观测结果,序列1到10的平均数从5.5移动到了7。


不确定是否理解。如果我有3个数据集,如何估计截距和斜率。数据集1):1 3 5 7 9 11 14 17 19 25 29 数据集2:17 31 19 27 31 62 58 35 29 21 18 数据集3:102153 104123 96564 125565 132255 115454 114555 132255 129564 126455 124578,依赖变量是数据集3,数据集1和2是自变量。 - HazelnutCoffee
3
现在我们不跟随了。你想使用哪些重量? - Aaron left Stack Overflow
哪些权重最能预测Y。 - HazelnutCoffee
3
那么看起来你并不想使用加权最小二乘法。 - Aaron left Stack Overflow
1
@Dirk:能否详细解释一下"x ~ 1"实际上是什么意思?Chase的回复暗示了像"y ~ x1 + x2"这样的东西就像"依赖变量vs独立变量",还是我过度解释了? - hhh
1
@hhh: x~1 是一个仅包含截距的回归模型。这些公式是R中回归建模的基础:如果您需要进行回归分析,应该首先阅读《R入门指南》中相关章节(可能还要参考Faraway的线性建模书稿,在R网站的贡献文档部分找到)-- 还可以参考Chase的答案中提供的链接。 - Ben Bolker

5
首先,创建您的数据集。我将它们放入一个单独的数据框中,但这并非绝对必要。
dat <- data.frame(x1 = c(1,3,5,7,9,11,14,17,19,25, 29)
                  , x2 = c(17, 31, 19, 27, 31, 62, 58, 35, 29, 21, 18)
                  , y  = c(102153, 104123, 96564, 125565, 132255, 115454
                           , 114555, 132255, 129564, 126455, 124578)
                  )

其次,估计模型:

> lm(y ~ x1 + x2, data = dat)

Call:
lm(formula = y ~ x1 + x2, data = dat)

Coefficients:
(Intercept)           x1           x2  
  104246.37       906.91        85.76

第三步,按照@Dirk的建议添加必要的权重。

第四步,最重要的是 - 阅读一两篇有关R语言回归分析的教程。Google搜索可以找到这个: http://www.jeremymiles.co.uk/regressionbook/extras/appendix2/R/


2
@RyanB - 我会将您的数据添加到您的问题中,以便它们都在同一个地方。此外,如果这回答了您的问题,请点击复选标记“接受”它,让未来的其他人知道这对您有所帮助。 - Chase
2
@RyanB,请注意@Chase和@Aaron使用的术语——如果您没有提供一些权重,那么您所做的并不是加权最小二乘法(WLS)。@Chase展示的只是普通的最小二乘法。@Dirk的答案向您展示了如何使用lm()函数开始使用WLS。 - Gavin Simpson
1
是的,Gavin,这两个回复的组合回答了我的问题。 - HazelnutCoffee
如果你的模型中在变量 x1x2 前有随机常数,例如 "y ~ \beta_{1} x1 + \beta_{2} x2+error",并且你假设误差与 x1x2 不相关,该怎么处理呢? - hhh

0

另一种方法是先创建一个权重矩阵。例如:

samplevar = var(ydata)

M = diag(40,1/samplevar)

此时M是一个40x40的对角矩阵。您可以通过将diag应用于M来转换为向量:

M_vector = diag(M)

然后在 lm 中使用:

   lm ( YXDATAFRAME, weights=M_vector)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接