2017-11-07 3 views
0

Ich evaluiere die Leistung eines numerischen deterministischen Modells, und ich evaluiere seine Vorhersage-Performance gegen beobachtete Daten. Ich machte ein Streudiagramm der beobachteten (Vsurface) vs modellierten (Vmod) Daten, passte ein lm (die rote Linie) und fügte eine 1: 1 Linie hinzu. Ich möchte den Punkt finden, an dem sich diese beiden Linien kreuzen, damit ich dokumentieren kann, wo sich das Modell von übermäßig vorhersagend zu unterschätzt verschiebt. Gibt es einen einfachen Weg, dies zu tun? Hier ist der Code für den lm:Finden Kreuzung von 1: 1-Linie und lm Linie

lm <- lm(Vmod~Vsurface, data = v) 
summary(lm) 
Call: 
lm(formula = Vmod ~ Vsurface, data = v) 

Residuals: 
    Min  1Q Median  3Q  Max 
-0.63267 -0.11995 -0.03618 0.13816 0.60314 

Coefficients: 
      Estimate Std. Error t value Pr(>|t|)  
(Intercept) 0.20666 0.06087 3.395 0.00185 ** 
Vsurface  0.43721 0.06415 6.816 1.05e-07 *** 
--- 
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 0.2232 on 32 degrees of freedom 
Multiple R-squared: 0.5921, Adjusted R-squared: 0.5794 
F-statistic: 46.45 on 1 and 32 DF, p-value: 1.047e-07 

Hier ist der Plot-Code:

ggplot(data = v, aes(x = Vsurface, y = Vmod)) + 
    geom_point(col = "slateblue2") + 
    geom_smooth(method = "lm", col = "red") + 
    geom_abline(intercept = 0, slope = 1) 

Ich bin in R Abschlag arbeiten.

+0

Gerade diese analytisch lösen. '0.43721 * x + 0.20666 = x' so' x = 0.20666/(1-0.43721) = 0.3672062' – G5W

Antwort

0

Nur ausdrücklich G5W's Kommentare zu verfassen - das Modell eine Liste ist und die Koeffizienten können wie folgt extrahiert werden:

lmodel <- lm(Vmod~Vsurface, data = v) 
x1 <- lmodel$coefficients[1]/(1-lmodel$coefficients[2]) 
### x1 is the intersection point 

Edited Schritt für Schritt:

x <- rnorm(100,10,2) 
y <- rnorm(100,15,3) 

lmodel <- lm(y ~x) 
lmodel$coefficients 

Intercept = 13.6578378
x = 0,1283835

15,66955

+0

Wenn ich dieses Skript in meine R-Markendatei hinzufüge und den Befehl print benutze, bekomme ich folgendes: numeric (0) Ich habe es versucht Ändern der x1 zu x.1 für den Fall, dass das Problem war, aber das gleiche Ergebnis. – adwillis

+0

Ich bearbeitete die Antwort, wie es einen Tippfehler hatte: "Koeffizienten" anstelle von "Koeffizienten". Für jedes Objekt - Sie können die Struktur des Objekts mit str (ObjektName) an der Konsolenlinie finden. In diesem Fall können alle Elemente unter $ ... wie jede andere Liste aufgerufen werden. – Jai

+0

Ich habe es gerade noch einmal versucht und die gleiche Antwort bekommen. Als ich mir die Struktur des x1-Objekts in der Konsole anschaute, bekam ich "num (0)". Ich bin mir immer noch nicht sicher, was ich falsch mache, aber ich möchte definitiv herausfinden, wie man den Schnittpunkt so herauszieht, weil ich eine Menge dieser Art von Analyse in meiner Arbeit machen werde. – adwillis

Verwandte Themen