2016-04-19 1 views
0

Ich habe ein seltsames Problem, wenn ich eine einfache lineare Anpassung für meine Daten in R und Excel-ähnliche Spreadsheet-Software z. Gnumeric Spreadsheet und WPS.Warum unterscheidet sich das Ergebnis einer linearen Anpassung in R und Excel (Gnumeric Spreadsheet und WPS) mit den gleichen kleinen Daten?

die unten aufgeführten Daten 19 Paare von x und 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 

und wird in einer Datei mit dem Namen 'data.csv'

ich eine lineare Anpassung zwischen x und y gespeichert. R Skript ist unten:

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) 

, die dieses Ergebnis gibt:

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 

Sie können sehen, dass die Multiple R-Quadrat: 0,3971, Adjusted R-Quadrat: 0,3594, und die Koeffizienten für das Intercept sind -48212,8 und die Steigung beträgt 963,5342. Also lautet die Formel y = 963.5342 * x + -48212.8 und das korrigierte R-Quadrat (R2) ist 0.3594.

Aber wenn ich das Modell in Gnumeric Tabellenkalkulation passen das Ergebnis:

Gnumeric Spreadsheet Fiting Result

Welche sagt der Formel y sein sollte = 1052,88214782179 * x + -54588,8186095881 und R2 =

Wenn ich passt das Modell mit WPS spredsheet, das Ergebnis ist:

WPS

Das sagt auch die Formel y sein sollte = 1052.9x - 54589 und R2 = 0,44763

In Excel ist das Ergebnis:

Excel

Die Formel ist auch y = 1052.x - 54589 und R2 = 0,447.

So kommt die Frage, wie ein klar definierter Prozess wie eine solche einfache Anpassung in R anders sein kann als andere Software?

Da meiner Meinung nach diese kleinste quadratische Anpassung bereits definiert ist, warum macht R das anders?

Und was soll ich verwenden?

Antwort

5

Von Ihren zusammenfassenden Daten würde ich sagen, dass Sie irgendwo eine Reihe in R verloren haben, da Sie nur 16 Freiheitsgrade haben. Beim Ausführen Ihrer Daten erhalte ich die folgende Antwort, die mit den anderen Tabellenergebnissen übereinstimmt.

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, hat header = TRUE als Standard. Der ursprüngliche Code verwendet also die erste Zeile von Daten als Spaltennamen, also die 1-Zeilen weniger Daten und ein anderes Regressionsmodell. – Dave2e

+0

@ Dave2e ja es ist das Problem wenn ich es in header = FALSE ändere die Antwort ist richtig. Und es ist interessant zu finden, dass es scheint, dass alle diese Tabellenkalkulation Mehrfach-R-Quadrat verwenden, da R2 R2 nicht angepasst hat. – sikisis

0

Nun, die Antworten sind tatsächlich "die gleichen", wenn Sie die gleichen Daten wie von gtwebb hingewiesen verwenden. Aber wenn du fragst, "welchen du benutzen sollst", dann gibt es eine wichtige Sache, die du beachten musst: Excel hat es falsch verstanden. Es kann nicht richtig gerundet werden. Es sagt

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

Aber das ist falsch. Intercept, wie von R berechnet, ist 1052.882 - Sie können es auf 1053 oder 1056.9 oder 1056.88 runden, aber es gibt keine Möglichkeit, 1052 oder 1052. zu bekommen.Und R2, wie von R berechnet, ist 0.4476318 - Sie können es auf 0,45 oder 0,448 oder 0,4476 runden, aber es gibt keine Möglichkeit zu sagen, dass 0,447 der richtige Wert ist. Ich kann nicht verstehen, wie es den korrekten gerundeten Wert für den Achsenabschnitt finden könnte (-54588.819 -> -54589), vielleicht hast du irgendwo einen Fehler gemacht?

In jedem Fall ist die Nachricht klar: Verwenden Sie nicht Excel für Berechnungen (es ist in Ordnung für die Dateneingabe).

+0

Vielen Dank, und es ist passiert, dass ich den Fehler bekam, wie @gtwebb sagte, read.csv ist Header = TRUE standardmäßig. Aber danke trotzdem. Ja, ich sollte R benutzen und es richtig benutzen. – sikisis

+0

nicht unbedingt R - zB gnumeric scheint diese groben Fehler nicht zu machen, die Excel macht - lineare Regression (sowie das Runden! :) ist etwas ziemlich Grundlegendes und Sie sollten die gleichen Ergebnisse unabhängig von der Software erhalten – lebatsnok

+0

Ja, wann Ich fand schließlich, wo es falsch ist, alle Ergebnisse sind perfekt aufeinander abgestimmt – sikisis

Verwandte Themen