2016-12-05 5 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 (list (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)의 크기를 갖습니다. (당신은 원인을 알고에 관심이있는 경우) 아래의 단계를 통해 이동 modelnewdata

에 다른 이름을 갖는 문제 :

model1 <- lm(var1~var2, data = df) 
model2 <- lm(df$var1~df$var2) 
debug(predict) 
predict(model1, newdata = df1) 
predict(model2, newdata = df1)