在R中是否有加权最小二乘的函数? 具体来说,我正在寻找计算截距和斜率的函数。
数据集
- 1 3 5 7 9 11 14 17 19 25 29
- 17 31 19 27 31 62 58 35 29 21 18
- 102153 104123 96564 125565 132255 115454 114555 132255 129564 126455 124578
因变量是数据集3,而数据集1和2是自变量。
在R中是否有加权最小二乘的函数? 具体来说,我正在寻找计算截距和斜率的函数。
数据集
因变量是数据集3,而数据集1和2是自变量。
当然,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。
"x ~ 1"
实际上是什么意思?Chase的回复暗示了像"y ~ x1 + x2"
这样的东西就像"依赖变量vs独立变量",还是我过度解释了? - hhhx~1
是一个仅包含截距的回归模型。这些公式是R中回归建模的基础:如果您需要进行回归分析,应该首先阅读《R入门指南》中相关章节(可能还要参考Faraway的线性建模书稿,在R网站的贡献文档部分找到)-- 还可以参考Chase的答案中提供的链接。 - Ben Bolkerdat <- 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/
lm()
函数开始使用WLS。 - Gavin Simpsonx1
和 x2
前有随机常数,例如 "y ~ \beta_{1} x1 + \beta_{2} x2+error"
,并且你假设误差与 x1
和 x2
不相关,该怎么处理呢? - hhh另一种方法是先创建一个权重矩阵。例如:
samplevar = var(ydata)
M = diag(40,1/samplevar)
此时M是一个40x40的对角矩阵。您可以通过将diag应用于M来转换为向量:
M_vector = diag(M)
然后在 lm
中使用:
lm ( YXDATAFRAME, weights=M_vector)