2016-01-14 140 views
0

R predict.lm函數給出錯誤大小的輸出。如何解決R predict.lm錯誤的輸出長度?

stocks = read.csv("some-file.csv", header = TRUE) 

## 75% of the sample size 
smp_size <- floor(0.75 * nrow(stocks)) 

## set the seed to make your partition reproductible 
set.seed(123) 
train_ind <- sample(seq_len(nrow(stocks)), size = smp_size) 

train <- stocks[train_ind, ] 
test <- stocks[-train_ind, ] 

model = lm (train$Open ~ train$Close, data=train) 
model 
predicted<-predict.lm(model, test$Open) 
length(test$Open) 
length(predicted) 
length(test$Close) 

> length(test$Open) 
[1] 16994 
> length(predicted) 
[1] 50867 
> length(test$Close) 
[1] 16994 

爲什麼發生這種情況?預測函數的輸出長度應該等於測試$ Open的長度,對不對?

回答

0

我不能說lm會如何解釋你的train$Opentrain$Close,但我可以說你的data=stocks是你的問題。所以,我可以告訴你,LM是從哪裏獲取數據的,以及爲什麼它不是火車組的長度。你想model <- lm(Open ~ Close, data=train

+0

改變了它的話,但是同樣的問題繼續存在。 而且它顯示我錯誤'>預測<-predict.lm(型號,newdata =測試$打開) 錯誤的eval(predvars ,data,env): 數字'envir'arg不是長度爲' –

+0

@VishwajeetVatharkar,你有沒有看過lm的幫助?你爲什麼繼續使用? – doctorG

0

問題在於predicted<-predict.lm(model, test$Open)應該

predicted<-predict.lm(model, test) 

的響應在predict.lm無論如何刪除了

line 15:  Terms <- delete.response(tt) 

用於實際上它應該是測試$關閉您的模型無論如何。

你得到了什麼是爲設置爲用途不同,你並沒有提供所有的任何數據(該代碼delted響應後,訓練的結果。 用一個例子虹膜

train_ind <- sample(seq_len(nrow(iris)),size=100) 
train <- iris[train_ind,] 
test <- iris[-train_ind,] 
model=lm(Sepal.Length ~Sepal.Width,data=train) 
model 
predicted1 <-predict.lm(model,test) 
length(predicted) 
#fake response to keep dataframe structure 
predicted2 <-predict.lm(model, predict.lm(model,data.frame(Sepal.Width=test$Sepal.Width)) 
length(predicted2) 
predicted1-predicted2 

最後的輸出幾行

length(predicted) 
[1] 50 
> predicted2 <- predict.lm(model,data.frame(Sepal.Width=test$Sepal.Width) 
> length(predicted2) 
[1] 50 
> predicted1-predicted2 
    4 5 9 10 12 17 19 25 26 32 33 36 37 40 41 47 49 53 61 67 68 69 74 76 78 79 81 83 84 85 87 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
92 94 98 105 110 112 113 114 122 125 127 128 132 133 137 140 141 142 145 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+0

它給出警告等'>預測<-predict.lm(模型,試驗) 警告消息: 「newdata」具有16994行,但發現變量具有50980行' 並且仍然問題仍然存在 –

+0

所以,對於'第二個參數predict.lm'應該是測試數據輸入(X變量)吧? –

+0

不,它應該是測試集,這將給出相同的結果,並避免錯誤。至少您需要添加測試$ Close ..您的來自其他評論的警告來自哪裏? – CAFEBABE