使用带有分类变量和平方根变换变量之间的交互项的predict()

时间:2017-05-12 00:35:10

标签: r regression transformation categorical-data interaction

我试图使用predict()预测响应变量的值。我的回归包括一个分类变量和一个变换变量(平方根变换)之间的单个交互项。我已经使用下面的mtcars数据集来确保示例是可重现的,并且我已对其进行了注释,因此您知道我的想法是什么。

attach(mtcars)
#take square root of weight
sqrt_wt = sqrt(wt)
#create new data frame from desired variables
df=data.frame(sqrt_wt,mpg,cyl)
#eliminate NAs caused by square root transformation
df1=df[complete.cases(df),]
#fit a regression with an interaction term (square root of weight vs.   number of cylinders as a factor)
fit1=lm(mpg~as.factor(cyl)*sqrt_wt,data=df1)
#create data frame of desired inputs for sqrt_wt
new.cars <- data.frame(sqrt_wt=c(1.7, 2.4))
#try to predict
predict(fit1,new.cars)

但后来我收到了这个错误。

#Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) : 
#variable lengths differ (found for 'sqrt_wt')
#In addition: Warning message:#  'newdata' had 2 rows but variables found have 32 rows

有什么想法吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

在进行预测时,您需要在模型中使用的所有输入,否则无法进行预测。由于您有互动,因此预测会针对cylsqrt_wt的每个组合进行更改。在您的代码中,您指定的两个值看起来都是sqrt_wt,并且您缺少伴随cyl

View(new.cars)

只需在您的测试版中加入cyl即可。您可以在测试集中添加任意数量的观察结果。考虑您感兴趣的sqrt_wtcyl的所有组合。

new.car <- data.frame(sqrt_wt = 1.7, cyl = 6)
predict(fit1,new.car)