2014-03-12 12 views
6

Ich versuche mit R ein lineares Modell zu erstellen und damit einige Werte vorherzusagen. Der Gegenstand ist Baseball-Statistiken. Wenn ich dies tun:

obp <- lm(offense$R ~ offense$OBP) 
predict(obp, newdata=data.frame(OBP=0.5), interval="predict") 

erhalte ich die Fehlermeldung: Meldung Warnung: ‚newdata‘ hatte 1 Zeile aber gefunden Variablen haben 20 Zeilen.

Allerdings, wenn ich dies tun:

attach(offense) 
obp <- lm(R ~ OBP) 
predict(obp, newdata=data.frame(OBP=0.5), interval="predict") 

Es funktioniert wie erwartet und ich ein Ergebnis. Was ist der Unterschied zwischen den beiden? Wenn ich nur OBP und Offensive $ OBP drucke, sehen sie gleich aus.

Antwort

7

Im ersten Fall erhalten Sie diese Option, wenn Sie das Modell drucken:

Call: 
lm(formula = offense$R ~ offense$OBP) 

Coefficients: 
(Intercept) offense$OBP 
    -0.1102  0.5276 

Aber in der zweiten Sie diese:

Call: 
lm(formula = R ~ OBP) 

Coefficients: 
(Intercept)   OBP 
    -0.1102  0.5276 

Blick auf die Namen der Koeffizienten. Wenn Sie Ihre neuen Daten mit erstellen, die für das erste Modell nicht wirklich sinnvoll sind, werden Neudaten ignoriert und Sie erhalten nur die vorhergesagten Werte mit den Trainingsdaten. Wenn Sie verwenden, hat die Formel nur zwei Vektoren auf jeder Seite, wobei keine Namen mit data.frame verknüpft sind.

Der beste Weg, es zu tun ist:

obp <- lm(R ~ OBP, data=offense) 
predict(obp, newdata=data.frame(OBP=0.5), interval="predict") 

Und Sie werden das richtige Ergebnis, die Vorhersage für OBP=0.5 zu bekommen.

+0

Danke. Tolle Antwort. Ich war mir der Formulierung "Data = offset" nicht bewusst. –

1

Es gibt keinen Unterschied --- Sie erhalten die gleichen Koeffizienten.

Aber einige Programmierstile sind besser als andere - und Anhängen ist zu vermeiden, wie auch die ausführlichere erste Form.

Die meisten erfahrenen Benutzer tun

lm(R ~ OBP, offense) 

statt.