2016-04-19 4 views
0

RやExcelのようなスプレッドシートソフトウェアでデータに単純な線形近似を行うと、私は奇妙な問題に遭遇しました。 GnumericスプレッドシートとWPS。RとExcel(Gnumeric Spreadsheet and WPS)で線形フィットの結果が同じ小さなデータで異なるのはなぜですか?

以下のデータは、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 

の19ペアであると私はxとyの間の線形近似を行う 'data.csv'

というファイルに保存されます。 Rスクリプトは以下の通りです:0.3971、調整Rは-乗:インターセプトのための係数は0.3594、とある

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-乗複数のことを見ることができます。この結果を与える

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) 

-48212.8であり、勾配は963.5342である。式はy = 963.5342 * x + -48212.8であり、調整されたR-二乗(R2)は0.3594です。私はGnumericにスプレッドシートでモデルをフィット行う場合

しかし、結果は次のとおりです。式をyであるべきと言う

Gnumeric Spreadsheet Fiting Result

= 1052.88214782179 * X + -54588.8186095881とR2 =

Iの場合WPS Spredsheetでモデルをフィットし、結果は次のとおりです。

WPS

それはまた、式は、Y = 1052.9xなければならないと言う - 54589およびR2 = 0.44763

Excelでの結果である:

Excel

式はまた、Y = 1052.xある - 54589およびR2 = 0.447。

このような簡単なフィッティングのような明確なプロセスは、他のソフトウェアとはどのように異なっているのでしょうか?

私の意見では、この最小二乗適合はすでに定義されているので、なぜRはこれをどうやって行うのですか?

何を使用すればよいですか?

答えて

5

要約データから、あなたは16自由度しか持たないので、どこかでRの行を失ったと言います。あなたのデータを実行する私は、他のスプレッドシートの結果と一致する以下の答えを得ます。

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 
+4

read.csvは、デフォルトではheader = TRUEです。したがって、元のコードでは、データの最初の行を列名として使用しているため、1行少ないデータと異なる回帰モデルが使用されています。 – Dave2e

+0

@ Dave2eええ、私はそれをヘッダー= FALSEに変更すると問題は解決します。そして、それはすべてのそれらのスプレッドシートがR2として調整されていないR2として複数のR-二乗を使用するように見えることは興味深いです。 – sikisis

0

gtwebbが指摘しているのと同じデータを使用すると、答えは実際には「同じ」です。しかし、あなたが「どちらを使うのか」と尋ねると、注意すべき重要なことが1つあります。正しく四捨五入することはできません。それは言う

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

これは間違っています。 Rで計算されるインターセプトは1052.882で、1053または1056.9または1056.88に丸めることができますが、1052または1052.を得ることはできません。Rによって計算されるR2は0.4476318です。これを0.45または0.448または0.4476に丸めることができますが、0.447が正しい値であるとは言えません。私はそれがインターセプト(-54588.819 - > -54589)の正しい丸められた値を見つける方法を得ることができません、おそらくあなたはどこかでミスをしましたか?

いずれの場合でも、メッセージはクリアです。計算にはExcelを使用しないでください(データ入力は問題ありません)。

+0

ありがとうございました。そして、@gtwebbが言ったように間違いがありました。read.csvはデフォルトではheader = TRUEです。しかし、とにかくありがとう。うん、私はRを使い、正しく使うべきです。 – sikisis

+0

は必ずしもRである必要はありません - 例えばgnumericはExcelのような粗大エラーを生じさせていないようです - 線形回帰(丸めと同様:)は基本的なもので、ソフトウェアに関係なく同じ結果を得るべきです – lebatsnok

+0

はい、私は最終的にどこが間違っているのかがすべての結果が完全に適合していることを見出した – sikisis

関連する問題