我很难理解预测功能的工作原理,可以用于不同的样本数据。例如以下代码......
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
如何使用预测基于一组新数据生成一组预测?或者我使用了错误的功能?如果我问愚蠢的问题,我是一个菜鸟,所以请提前道歉。
答案 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)