solution :
lm_colors <- lm(avg_impressions ~ poly(ad_position, 13), data=colors_train_agg)
Reason :
you can compare yourselves how model.matrix() generates the matrix to score the data inside predict(). So when we pass model(df$var1~df$var2), model.matrix() looks for df$var1 and df$var2 to generate the matrix- but this has dimensions of training data (df). Problem of having different names in the model and in newdata
go through below steps( if you are interested in knowing the cause) :
model1 <- lm(var1~var2, data = df)
model2 <- lm(df$var1~df$var2)
debug(predict)
predict(model1, newdata = df1)
predict(model2, newdata = df1)