7

データフレームの操作

x
    Date      Val
    1/1/2012   7
    2/1/2012   9
    3/1/2012   20
    4/1/2012   24
    5/1/2012   50
a <- seq(as.Date(tail(x, 1)$Date), by="month", length=5)
a <- data.frame(a)
x.lm <- lm(x$Val ~ x$Date)

x.pre<-predict(x.lm, newdata=a)

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

Warning message:
'newdata' had 5 rows but variable(s) found have 29 rows 

私は何が間違っているのですか?

これがdputの出力です:

dput(x)
structure(list(Date = structure(c(14610, 14641, 14669, 14700, 
14730, 14761, 14791, 14822, 14853, 14883, 14914, 14944, 14975, 
15006, 15034, 15065, 15095, 15126, 15156, 15187, 15218, 15248, 
15279, 15309, 15340, 15371, 15400, 15431, 15461), class = "Date"), 
    Val = c(45, 51, 56, 56, 59, 60, 60, 60, 64, 65, 75, 73, 74, 
    80, 87, 91, 92, 96, 109, 108, 123, 129, 133, 143, 127, 127, 
    123, 121, 130)), .Names = c("Date", "Val"), row.names = c(NA, 
29L), class = "data.frame")
4

4 に答える 4

10

x.lmモデルに格納されている変数名は、データフレームを参照しxます。には同じ名前の変数がないaため、29個の変数がx再び使用されます。これはおそらくあなたが望んでいたものではないため、警告が表示されます。Date次の手順を実行して、モデルで指定された非修飾変数を常に使用できます。

a <- seq(as.Date(tail(x, 1)$Date), by="month", length=5)
a <- data.frame(Date = a)
x.lm <- lm(Val ~ Date, data=x)
x.pre<-predict(x.lm, newdata=a)
于 2012-08-03T21:25:29.180 に答える
1

data.frame a。という名前の列がありますa。名前の付いた列を使用してモデルを作成ValDateたので、それが探しているものです。

data.frame aあなたがその列にあなたの名前を付けてDate、あなたが行ってもいいとき:

a <- data.frame(Date=a)

その後、警告なしで実行されます。

コメントごと:

lm通話を次のように編集します。

lm(Val ~ Date, data=x)
于 2012-08-03T21:01:25.090 に答える
0

あなたが仕事をすることができないならばpredict.lm()、あなたは以下を使ってあなた自身の関数を書くことを試みるべきですfunction()

yourown_function<- function(predictor1, predictor2,...){intercept+b1*predictor1+b2*predictor2+...}

yourown_function新しいデータフレームから予測するために使用します。

newvalues<- yourown_function(predictor1=data.frame$predictor1, predictor2=data.frame$predictor2,....)

新しい値を使用して、残差、MSEなどを計算できます。

于 2015-04-22T09:41:16.653 に答える
0

x.lm <-lm(x $ Val〜x $ Date、data = x)の代わりに、x.lm <-lm(Val〜Date、data = x)を使用します。lm関数で変数名の前にあるデータセット名を削除すると役立つはずです。

于 2017-07-14T09:25:04.277 に答える