基于R中的模拟数据计算均方预测误差
calculating mean squared prediction error based on simulated data in R
我有以下数据。我的目标是通过重复 100 次使用交叉验证来计算均方预测误差 (MSPE)。
y=rnorm(250,0,2)
x1=rnorm(250,0,3)
x2=rnorm(250,1,1)
datasim=data.frame(y,x1,x2)
首先,我需要将数据拆分为训练数据和测试数据。所以我首先使用 R 中的 sample.int 函数计算了指数。根据这些指数,我将数据分为训练集和测试集。
dd=replicate(100,sample.int(n = nrow(datasim),
size = floor(.75*nrow(datasim)), replace = F))
train_set=apply(dd,2,function(y)
datasim[y, ])
test_set=apply(dd,2,function(y)
datasim[-y, ])
之后我必须使用训练数据来拟合模型。并且基于测试数据,我需要预测并获得均方预测误差(MSPE)。我不知道如何从这里开始。特别是我不知道如何 link 训练集和测试集,以便我可以预测和计算 MSPE。
我使用另一个 lapply 函数中的 lapply 函数尝试了它。
lapply(test_set, function(train_set) {
lapply(train_set,function(x)
mean((test_set$y- predict.lm(y ~ x1 + x2, data = train_set))^2)
}
))
但是 this.Can 似乎有问题有人帮我解决这个问题吗?还有比这个方法更简单的方法吗?
谢谢
要replicate
记得要传一个函数
这是让你继续前进的东西,你也应该 predict
在测试数据上,在对 predict
.
的调用中使用 newdata
首先,此函数完成所有关于拆分数据和模型的部分,请注意,您可以传递不同的 perc
,如果您想稍后更改。
sim_function <- function(datas, perc=0.75) {
idx = sample(nrow(datas), floor(perc*nrow(datas)), replace = F) # sample idx
train = datas[idx, ]
test = datas[-idx, ]
pred_lm = predict(lm(y~x1+x2,data=train), # model on train data
newdata = test[, -1]) # predict on test data
return(mean((test$y - pred_lm)^2)) # mse and return it
}
现在我们可以调用replicate
:
sim_rep <- replicate(100, sim_function(datasim)) # or sim_function(datasim, perc = 0.60) as an example
head(sim_rep)
[1] 4.664940 3.543390 3.119503 3.493320 4.182965 5.101870
数据:
set.seed(123) # always remember this when you simulate
y=rnorm(250,0,2)
x1=rnorm(250,0,3)
x2=rnorm(250,1,1)
datasim=data.frame(y,x1,x2)
我有以下数据。我的目标是通过重复 100 次使用交叉验证来计算均方预测误差 (MSPE)。
y=rnorm(250,0,2)
x1=rnorm(250,0,3)
x2=rnorm(250,1,1)
datasim=data.frame(y,x1,x2)
首先,我需要将数据拆分为训练数据和测试数据。所以我首先使用 R 中的 sample.int 函数计算了指数。根据这些指数,我将数据分为训练集和测试集。
dd=replicate(100,sample.int(n = nrow(datasim),
size = floor(.75*nrow(datasim)), replace = F))
train_set=apply(dd,2,function(y)
datasim[y, ])
test_set=apply(dd,2,function(y)
datasim[-y, ])
之后我必须使用训练数据来拟合模型。并且基于测试数据,我需要预测并获得均方预测误差(MSPE)。我不知道如何从这里开始。特别是我不知道如何 link 训练集和测试集,以便我可以预测和计算 MSPE。
我使用另一个 lapply 函数中的 lapply 函数尝试了它。
lapply(test_set, function(train_set) {
lapply(train_set,function(x)
mean((test_set$y- predict.lm(y ~ x1 + x2, data = train_set))^2)
}
))
但是 this.Can 似乎有问题有人帮我解决这个问题吗?还有比这个方法更简单的方法吗?
谢谢
要replicate
记得要传一个函数
这是让你继续前进的东西,你也应该 predict
在测试数据上,在对 predict
.
newdata
首先,此函数完成所有关于拆分数据和模型的部分,请注意,您可以传递不同的 perc
,如果您想稍后更改。
sim_function <- function(datas, perc=0.75) {
idx = sample(nrow(datas), floor(perc*nrow(datas)), replace = F) # sample idx
train = datas[idx, ]
test = datas[-idx, ]
pred_lm = predict(lm(y~x1+x2,data=train), # model on train data
newdata = test[, -1]) # predict on test data
return(mean((test$y - pred_lm)^2)) # mse and return it
}
现在我们可以调用replicate
:
sim_rep <- replicate(100, sim_function(datasim)) # or sim_function(datasim, perc = 0.60) as an example
head(sim_rep)
[1] 4.664940 3.543390 3.119503 3.493320 4.182965 5.101870
数据:
set.seed(123) # always remember this when you simulate
y=rnorm(250,0,2)
x1=rnorm(250,0,3)
x2=rnorm(250,1,1)
datasim=data.frame(y,x1,x2)