2016-12-05 62 views
-1

ここではいくつかの回答を読んだことがありますが、私は答えを見つけ出すことができませんでした。R警告:newdataの行は15行ですが、見つかった変数には22行があります

マイRコードは次のとおりです。

colors <- bmw[bmw$Channel=="Colors" & bmw$Hour=20,] 
colors_test <- tail(colors, 89) 
colors_train <- head(colors, 810) 

colors_train_agg <- aggregate(colors_train$Impressions, list(colors_train$`Position of Ad in Break`), FUN=mean, na.rm=TRUE) 
colnames(colors_train_agg) <- c("ad_position", "avg_impressions") 
lm_colors <- lm(colors_train_agg$avg_impressions ~ poly(colors_train_agg$ad_position, 12)) 
summary(lm_colors) 

colors_test_agg <- aggregate(colors_test$Impressions, list(colors_test$`Position of Ad in Break`), FUN=mean, na.rm=TRUE) 
colnames(colors_test_agg) <- c("ad_position", "avg_impressions") 
new.df <- data.frame(colors_test_agg$ad_position) 
colnames(new.df) <- c("ad_position") 
colors_test_test <- predict(lm_colors, newdata=new.df) 

だから私はトレーニングやテストデータの両方で正確に同じ列名を持っています。

Warning message: 'newdata' had 15 rows but variables found have 22 rows

いくつかのいずれかが間違っているものを提案することができます:私はまだ警告を受けますか?また、私はそれを正しい方法で行っているかどうかを知りたい。

また、モデルの精度を計算する方法についてのいくつかの指摘が高く評価されます。ありがとう!

+2

は 'LM(avg_impressions〜ポリ(ad_position、12)、データを好みます= colors_train_agg) ' –

+0

いくつかの次元を指定すると、行の不一致が問題になります。 'lapply(リスト(colors_test、colors_train、colors_train_agg、colors_test_agg)、dim)' –

+0

データを提供できますか? –

答えて

5

ソリューション:

lm_colors <- lm(avg_impressions ~ poly(ad_position, 13), data=colors_train_agg) 

理由:model.matrix()predict()内のデータを獲得するために行列を生成する方法 あなたは自分を比較することができます。したがって、model(df$var1~df$var2)を渡すとき、model.matrix()df$var1df$var2を探して行列を生成しますが、これはトレーニングデータ(df)の次元を持ちます。 (あなたは原因を知ることに興味を持っている場合)、ステップの下に通過model中とnewdata

で異なる名前を持っていることの問題:

model1 <- lm(var1~var2, data = df) 
model2 <- lm(df$var1~df$var2) 
debug(predict) 
predict(model1, newdata = df1) 
predict(model2, newdata = df1) 
関連する問題