2016-06-29 9 views
1

Ich habe ein Problem mit predict() in R laufen. Ich erstellte ein lineares Modell namens CopierDataRegression und benannte die erklärende Variable X. Ich soll Y vorherzusagen, wann X=6 und ich verwendet, um die folgenden Befehle:Vorhersage in R, Fehler in Code

NewObs6 <- data.frame(X=6) 

predict(CopierDataRegression, NewObs6) 

Fehler bei eval (ausdr, envir, enclos): Objekt 'V2' nicht

gefunden

Was ist falsch mit dem Zeilencode vorhersagen?

Voll Code:

CopierData1 <- read.table("Ch1_20_data.txt") 
# V1 is total number of minutes (explanatory) V2 is number of copiers serviced (predictor). 

CopierDataRegression <- lm(V1~V2, data=CopierData1) 

plot(CopierData1$V2, CopierData1$V1) 
Y <- CopierData1$V1 
X <- CopierData1$V2 
plot(X, Y) 

NewObs6 <- data.frame(V2=6) 
predict(CopierDataRegression, NewObs6) 
+2

Es ist wahrscheinlich aufgrund der Umbenennung der Variablen. Entweder 'NewObs6 <- data.frame (V2 = 6)' oder den Namen von 'V2' in' X' ändern, bevor das Regressionsmodell ausgeführt wird. – Sumedh

+0

Genau das war es. Weißt du, warum das passiert ist? Denn wenn ich NewObs6 <- data.frame (X = 6) und dann NewObs6 in der Konsole verwendet habe, gibt es 6 aus. – Mitty

Antwort

0

Es scheint, dass Sie die Spaltennamen geändert nach Sie das Modell eingebaut haben. Das wäre in der folgenden Verhalten führen:

df = data.frame(X = 1:10, Y = rnorm(10)) 
fit = lm(Y ~ X, df) 
predict(fit, data.frame(X=3)) 
     1 
0.861924 
# change the column name *after* creating the lm object 
colnames(df) = c("A", "B") 
predict(fit, data.frame(A=3)) 
Error in eval(expr, envir, enclos) : object 'X' not found 

Deshalb, wenn Sie die Prädiktorvariablen X tun, bevor die Erstellung des Modells nennen wollen. Denken Sie daran, dass für predict.lm der Spaltenname des data.frame, den Sie als Argument übergeben, mit dem Namen des Prädiktors übereinstimmen muss, den Sie im lm()-Aufruf verwenden.

+0

Aber das scheint die Plot-Funktion nicht zu beeinflussen. Grundstück (CopierData1 $ V2, CopierData1 $ V1) Y <- CopierData1 $ V1 X <- CopierData1 $ V2 Grundstück (X, Y) Diese aufgetragen tatsächlich die Daten korrekt. Also, ist es die beste Vorgehensweise, zuerst Spalten umzubenennen und dann auf diesen einen Namen im gesamten Code Bezug zu nehmen oder sollte ich es in Ruhe lassen und mir nur bewusst sein, dass die Modell- und Vorhersagefunktion beide das Variablen-Array benötigen, um denselben Namen zu haben? – Mitty