2012-01-26 59 views
29

Rの値を、predict()関数を使用してモデルに変数を渡して予測しようとしています。R:numeric 'envir' argがpredict()の長さ1ではない

ここ
Error in eval(predvars, data, env) : 
    numeric 'envir' arg not of length one 

は私data frame、名前のDFです:

私は次のエラーを取得しています

df <- read.table(text = ' 
    Quarter Coupon  Total 
1 "Dec 06" 25027.072 132450574 
2 "Dec 07" 76386.820 194154767 
3 "Dec 08" 79622.147 221571135 
4 "Dec 09" 74114.416 205880072 
5 "Dec 10" 70993.058 188666980 
6 "Jun 06" 12048.162 139137919 
7 "Jun 07" 46889.369 165276325 
8 "Jun 08" 84732.537 207074374 
9 "Jun 09" 83240.084 221945162 
10 "Jun 10" 81970.143 236954249 
11 "Mar 06" 3451.248 116811392 
12 "Mar 07" 34201.197 155190418 
13 "Mar 08" 73232.900 212492488 
14 "Mar 09" 70644.948 203663201 
15 "Mar 10" 72314.945 203427892 
16 "Mar 11" 88708.663 214061240 
17 "Sep 06" 15027.252 121285335 
18 "Sep 07" 60228.793 195428991 
19 "Sep 08" 85507.062 257651399 
20 "Sep 09" 77763.365 215048147 
21 "Sep 10" 62259.691 168862119', header=TRUE) 


str(df) 
'data.frame': 21 obs. of 3 variables: 
$ Quarter : Factor w/ 24 levels "Dec 06","Dec 07",..: 1 2 3 4 5 7 8 9 10 11 ... 
$ Coupon: num 25027 76387 79622 74114 70993 ... 
$ Total: num 132450574 194154767 221571135 205880072 188666980 ... 

コード:今すぐ

model <- lm(df$Total ~ df$Coupon) 

> model 

Call: 
lm(formula = df$Total ~ df$Coupon) 

Coefficients: 
(Intercept) df$Coupon 
    107286259   1349 

、私はpredictを実行すると、I私が上に示したエラーを取得します。

> predict(model, df$Total, interval="confidence") 
Error in eval(predvars, data, env) : 
    numeric 'envir' arg not of length one 

どこが間違っているのですか?

おかげ

答えて

27

いくつかの問題がここにあります:predict()

  1. newdata引数はの予測変数を必要とします。したがって、Totalの代わりにCouponの値を渡す必要があります。これはという応答のモデルでの変数です。

  2. predictor変数は、データフレーム内の名前付き列として渡す必要があるため、 predict()は、渡された数値が何であるかを認識します。 (複数の予測変数を持つ、より複雑なモデルを考えるときは、この必要性が明確になります)。

  3. これを行うには、元の通話では、式で直接使用するのではなく、data引数でdfを渡す必要があります。 (このようにして、newdataの列の名前は、式のRHSの名前と一致することができます)。組み込まれ、それらの変更で

、これは動作します:

model <- lm(Total ~ Coupon, data=df) 
new <- data.frame(Coupon = df$Coupon) 
predict(model, newdata = new, interval="confidence") 
+5

+1彼らは本当に、元のデータフレームから 'Coupon'値を渡す必要はありません。たぶん、彼らは本当に 'Total'の値で応答を予測したいと思うかもしれません。しかし、それらの値は、モデルとマッチするように名前が 'Coupon'でなければなりません。 – joran

+2

@joran - その点を作ることに感謝します。通常、モデルのフィットに使用されたもの以外の 'Coupon'の値を渡したいと思うでしょう。モデルのポイントの予測値を求めたい場合は、 'predict(model、interval =" confidence ")' –

+0

@ JoshO'Brienと言ってください。チャンピオンのように働いた。 – mikebmassey

関連する問題