2016-06-25 58 views
2

我有两个变量GY是相关的;每个变量有12个值。我计算相关性并拟合一个名为rg的线性回归模型。现在我想用这个模型来预测称为GP的第二个变量的新值。我想获得与每个GP值相对应的Y值。 GP有5个值。 当我做我得到以下错误预测:尝试从简单的线性回归预测时出错

Warning message: 
'newdata' had 5 rows but variables found have 12 rows 

我怎样才能将模型应用于GP,是否GP需要有12个值?我想不是。 predict.lm中有任何选项可以做到这一点吗?

G<-c(20,25,21,30,22,23,19,24,21,23,28,27) 
I<-c(229,235,230,242,231,233,226,232,230,232,238,236) 

#diagrama de dispersion 
qqplot(G,I) 

#regression 
rg<-lm(I ~ G) 
summary(rg) 
coef(rg[1]) 

#coeficiente de correlación 
cor(G,I) 
cp<-cor(G,I,method = c("pearson")) 
cs<-cor(G,I,method = c("spearman")) 


# newdata 
GP <- c(30,32,34,36,38) 

# predecir el valor de ingresos para estos valores 
X1<-data.frame(GP) 

Y_pred <- predict.lm(rg,X1) 

回答

2

为了使用predict方法,所述newdata数据帧的名称需要式中的匹配变量。

G <- c(20,25,21,30,22,23,19,24,21,23,28,27) 
I <- c(229,235,230,242,231,233,226,232,230,232,238,236) 

将数据打包成数据帧(名称从变量名自动拍摄):这是更好的做法是使用data参数,而不是从全局工作区拉动值。

dd <- data.frame(G,I) 
rg <- lm(I ~ G, data=dd) 

新的数据:

GP <- c(30,32,34,36,38) 
pdata <- data.frame(G=GP) ## same name as in original model 

需要注意的是,如果你不重命名变量(data.frame(GP)),你会得到一个数据帧的单变量pdata$GP,不含pdata$G一个(试试吧并看到) - 那么R会抱怨说它找不到G变量。 (请注意,predict可以在更复杂的情况下也有大量的变量使用...)

(Y_pred <- predict(rg,pdata)) 
##  1  2  3  4  5 
## 240.9580 243.4903 246.0227 248.5550 251.0874 

相关(虽然也许不是确切式两份):Trouble using predict with linear model in R

+0

有什么不同data.frame(G = GP)和data.frame(GP) 您能简单说一下吗?感谢 –

+0

'predict'的newdata参数的列名需要与公式中使用的RHS名称匹配制作lm对象。 'data.frame(GP)'不这样做; 'data.frame(G = GP)'。 –