如何使用R中的预测基于一组新数据生成一组预测?

时间:2014-08-14 23:12:53

标签: r prediction lm

我很难理解预测功能的工作原理,可以用于不同的样本数据。例如以下代码......

my <- data.frame(x=rnorm(1000))  
my$y <- 0.5*my$x+0.5*rnorm(1000)
fit <- lm(my$y ~ my$x)   
mySample <- my[sample(nrow(my), 100),]    
predict(fit, mySample)

我理解应该根据样本返回100 y预测。但它会返回1,000行并显示警告消息:

'newdata' had 100 rows but variables found have 1000 rows

如何使用预测基于一组新数据生成一组预测?或者我使用了错误的功能?如果我问愚蠢的问题,我是一个菜鸟,所以请提前道歉。

3 个答案:

答案 0 :(得分:1)

在使用公式语法时使用$符号绝不是一个好主意(大多数时候它都是完全不必要的。当你试图进行预测时尤其如此,因为predict()函数很难完全匹配列名和data.types。所以而不是

fit <- lm(my$y ~ my$x)

使用

fit <- lm(y ~ x, my)

所以一个完整的例子就是

set.seed(15) # for reproducibility
my <- data.frame(x=rnorm(1000))  
my$y <- 0.5*my$x+0.5*rnorm(1000)
fit <- lm(y ~ x, my)
mySample <- my[sample(1:nrow(my), 100),]    
head(predict(fit, mySample))
#         694         278         298         825         366         980 
#  0.43593108 -0.67936324 -0.42168723 -0.04982095 -0.72499087  0.09627245 

答案 1 :(得分:0)

代码有些问题:您使用名为sample的变量覆盖了示例函数。你想要像mysample&lt; - sample(my \ $ x,100)......这与预测无关。根据我有限的理解,数据框是“列”列表。所以采样我的意思是创建100个(1000行)列x的样本。通过使用我的\ $ x,您现在指的是列(在数据框中),这是一个行列表。

换句话说,您是从列列表中采样(只有一个元素),但实际上您想从列x中的行列表中进行采样

答案 2 :(得分:0)

这就是你想要的吗

library(caret)
my <- data.frame(x=rnorm(1000))  
my$y <- 0.5*my$x+0.5*rnorm(1000)

## Divide data into train and test set 

 Index <- createDataPartition(my$y, p = 0.8, list = FALSE, times = 1)


 train <- my[Index, ]
 test <-  my[-Index,]

 lmfit<- train(y~x,method="lm",data=train,trControl = trainControl(method = "cv"))

 lmpredict<-predict(lmfit,test)

这是针对伪样本预测的样本内预测(预测前一步)你只需要将自变量滞后1

 Lag(x)