了解lm多个R在拟合时是一条水平线

时间:2013-05-01 15:47:09

标签: r lm

我一直在使用R和lm函数进行线性回归并报告R2。

y  = c(1,2,3,4)
x  = c(1,2,3,4)
f  = lm(y~x)
r2 = summary(f)$r.squared

然而,有人给了我这个案子 -

y = c(1,1,1,1,1)
x = c(75,33,50,33,50)

Excel报告的拦截为1,系数为0,多个R和r2为1。 R报告截距为1,系数为01e-17,多个R平方为0.3392

不是统计学家,我不理解lm()从哪个数字得到多个R平方的数字。有人可以帮我解释一下吗?

如果我将数据更改为

y = c(1,1,1,1,1)
x = c(1,1,1,1,1)

Excel仍然给出y = 1 + 0 * x r2 = 1

lm()报告斜率为NA,并且不报告多重R平方。

虽然这看起来像是一个独特的案例,但我仍然被告知我的程序调用{​​{1}}不起作用,因为它没有通过这些测试而Excel给出了'预期'答案。

由于

1 个答案:

答案 0 :(得分:2)

我想我会总结一下与我原来的问题相关的非常有用但很长的一系列评论,我将重申:当y不变时,r2的适当值是什么,即y数据可以完全适合等式y = c?

一个。 Excel报告r2为1.这是我的用户想要的,因为数据完全匹配。

湾r2值应反映模型所考虑的变化分数与零假设(即平均值)所占的变化分数。等式是

R2 = 1 - SSR/SST

其中SSR是实际值与模型(预测值)之间的平方距离之和,SST是实际值与平均值之间的平方距离之和。

当数据完全符合水平线时,与平均值没有偏差。因此,询问模型所占的偏差比例实际上是没有意义的。从等式中,可以将0除以0。

因此,R报告的值可能只不过是实际为零的值中的舍入误差。

因此,我应该检查这个条件并且不报告R2而不是报告来自R(lm)的数字或报告Excel将给出的值(1)。