为什么线性拟合的结果在 R 和 Excel(Gnumeric Spreadsheet 和 WPS)中具有相同的小数据?

Why does the result of a linear fit differ in R and Excel(Gnumeric Spreadsheet and WPS) with the same small data?

当我在 R 和类似 Excel 的电子表格软件中对我的数据进行简单的线性拟合时,我遇到了一个奇怪的问题,例如Gnumeric 电子表格和 WPS。

下面的数据是19对x和y

93.37262737 56200
101.406044  62850
89.27322677 56425
86.9458042  43325
70.54645355 42775
85.1936032  38375
72.10985    38376
73.54055944 22950
78.092  15225
71.30285    12850
70.03953023 18125
66.31068931 14200
93.39847716 13925
66.09695152 13225
70.6549 18125
76.43348868 14125
71.37531234 14875
85.7953977  19275
95.65012506 45375

并保存在名为 'data.csv'

的文件中

我在 x 和 y 之间进行线性拟合。 R 脚本如下:

data<-read.csv("data.csv",col.names=c("x","y"))

# plot data
plot(data$x,data$y)
#Fit
lmodelx<-lm(data$y~data$x)
abline(lmodelx)

summary(lmodelx)

结果如下:

Call:
lm(formula = data$y ~ data$x)

Residuals:
   Min     1Q Median     3Q    Max 
-27855  -7151  -1314   6947  23014 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept) -48212.8    23691.0  -2.035  0.05876 . 
data$x         963.5      296.8   3.246  0.00506 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 13240 on 16 degrees of freedom
Multiple R-squared:  0.3971,    Adjusted R-squared:  0.3594 
F-statistic: 10.54 on 1 and 16 DF,  p-value: 0.005061

您可以看到倍数 R 平方:0.3971,调整后 R 平方:0.3594,截距系数为 -48212.8,斜率为 963.5342。所以公式是 y = 963.5342 * x + -48212.8 调整后的 R 平方 (R2) 是 0.3594.

但是如果我在 Gnumeric Spreadsheet 中拟合模型,结果是:

也就是说公式应该是 y = 1052.88214782179 *x + -54588.8186095881 和 R2 =

如果我用 WPS Spredsheet 拟合模型,结果是:

这也说明公式应该是 y = 1052.9x - 54589 和 R2 = 0.44763

在 Excel 中,结果是:

公式也是 y = 1052.x - 54589 和 R2 = 0.447.

那么问题来了,像这样简单的拟合这样定义明确的过程在 R 中与其他软件有何不同?

因为在我看来这个最小二乘拟合已经定义了,那么为什么 R 会以不同的方式来做呢?

我应该用什么?

根据您的汇总数据,我会说您在 R 中某处丢失了一行,因为您只有 16 个自由度。 运行 你的数据 我在下面得到了与其他电子表格结果相匹配的答案。

Call:
lm(formula = data$y ~ data$x)

Residuals:
   Min     1Q Median     3Q    Max 
-29824  -6660  -1028   8520  23087 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept) -54588.8    22859.7  -2.388  0.02882 * 
data$x        1052.9      283.7   3.712  0.00173 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 13250 on 17 degrees of freedom
Multiple R-squared:  0.4476,    Adjusted R-squared:  0.4151 
F-statistic: 13.78 on 1 and 17 DF,  p-value: 0.001733

嗯,如果您使用 gtwebb 指出的相同数据,答案实际上是 "the same"。但是,如果您问 "which one to use",那么需要注意一件重要的事情:excel 弄错了。它无法正确进行舍入。它说

y = 1052.x - 54589 ... and
R2 = 0.447

但这是错误的。由 R 计算的截距为 1052.882 - 您可以将其四舍五入为 1053 或 1052.9 或 1052.88,但您无法获得 10521052.。由 R 计算得出的 R2 是 0.4476318——您可以将其四舍五入为 0.45、0.448 或 0.4476,但您无法说 0.447 是正确的值。我不明白它是如何找到截距的正确舍入值 (-54588.819 -> -54589),也许你在某处犯了错误?

无论如何,信息很明确:不要使用 excel 进行任何计算(数据输入没问题)。