2016-06-29 13 views
1

predict()をRで実行する際に問題があります。CopierDataRegressionという線形モデルを作成し、説明変数の名前をXに変更しました。私はYX=6を予測することになって、私は次のコマンドを使用しています:evalの中Rの予測、コードのエラー

NewObs6 <- data.frame(X=6) 

predict(CopierDataRegression, NewObs6) 

エラー(exprの、ENVIR、enclos):オブジェクトのV2 "

何ですか

が見つかりませんが予測線コードが間違っていますか?

全コード:

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

おそらく変数の名前が変更されている可能性があります。回帰モデルを実行する前に 'NewObs6 < - data.frame(V2 = 6)'を実行するか、 'V2'の名前を' X'に変更してください。 – Sumedh

+0

それはそれがまさにそれだった。なぜこれが起こったのか知っていますか? NewObs6 < - data.frame(X = 6)を使用してコンソールでNewObs6を呼び出すと、6が出力されるためです。 – Mitty

答えて

0

あなたがモデルを装着している後に列名を変更しそうです。それは、次の行動につながる:

したがって
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 

あなたが予測変数Xがモデルを作成する前に、そう名前を付けたい場合。 predict.lmの場合、引数として渡されるdata.frameの列名は、lm()呼び出しで使用する予測子の名前と一致している必要があります。

+0

しかし、これはプロット関数には影響しません。 プロット(CopierData1 $ V2、CopierData1 $ V1) Y < - CopierData1 $ V1 X < - CopierData1 $ V2 プロット(X、Y) これは、実際にデータを正しくプロットしました。ですから、最初に列の名前を変更してコード全体でその1つの名前を参照するか、それをそのままにして、モデルと予測関数の両方が同じ名前を持つ変数配列を必要としていることを認識する必要がありますか? – Mitty