Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于相同的小数据,为什么R和Excel(Gnumeric电子表格和WPS)中的线性拟合结果不同?_R_Excel_Data Fitting - Fatal编程技术网

对于相同的小数据,为什么R和Excel(Gnumeric电子表格和WPS)中的线性拟合结果不同?

对于相同的小数据,为什么R和Excel(Gnumeric电子表格和WPS)中的线性拟合结果不同?,r,excel,data-fitting,R,Excel,Data Fitting,当我在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.03

当我在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)
可以看到,倍数R平方:0.3971,调整后的R平方:0.3594,截距系数为-48212.8,斜率为963.5342。因此,公式为y=963.5342*x+-48212.8,调整后的R平方(R2)为0.3594

但如果我在Gnumeric电子表格中拟合模型,结果是:

也就是说公式应该是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指出的相同数据,答案实际上是“相同的”。但如果你问“使用哪一个”,那么有一件重要的事情需要注意:excel搞错了。它不能正确地进行舍入。上面说

y = 1052.x - 54589 ... and
R2 = 0.447
但这是错误的。由R计算的截距为1052.882-您可以将其四舍五入到1053或1052.9或1052.88,但无法获得
1052
1052.
。R2,由R计算,是0.4476318,你可以把它四舍五入到0.45,0.448,0.4476,但是你不能说0.447是正确的值。我不知道它如何找到截距的正确四舍五入值(-54588.819->-54589),也许你在某个地方出错了


在任何情况下,信息都是明确的:不要使用excel进行任何计算(数据输入可以)

read.csv,默认为header=TRUE。因此,原始代码使用第一行数据作为列名,因此减少了1行数据和一个不同的回归模型。@Dave2e是的,如果我将其更改为header=FALSE,则问题在于答案是正确的。有趣的是,所有这些电子表格似乎都使用了多重R平方作为R2,而不是调整后的R2。谢谢,碰巧我犯了错误,正如@gtwebb所说,read.csv默认为header=TRUE。不过还是谢谢你。是的,我应该使用R并正确使用它。不一定是R——例如gnumeric似乎没有像Excel那样产生这些严重的错误——线性回归(以及舍入!)是一个相当基本的东西,不管使用什么软件,你都应该得到相同的结果是的,当我最终发现哪里有错时,所有的结果都完全吻合
y = 1052.x - 54589 ... and
R2 = 0.447