我正在尝试创建一个比较几种惩罚回归技术的操作特性的函数。要做到这一点,我想在R中编写一个模拟,它重复两种类型的回归,但每次都是新数据。
我已经完成了单个案例的完成(即只生成1个样本数据),但是我很难通过为我的模拟创建n个重复的样本数据来概括这一点。这里有一些示例代码,可以说明我想要完成的任务(注意我已经有了生成数据的函数)。
让我们调用我的数据生成函数data_fun
,它接受参数:n
(样本大小)和sigma
(方差re:我生成的数据的抽样分布)。让我们调用我的模拟函数sim_fun
,它也会带有参数:n
和sigma
,还有r
,它代表我想要创建的模拟数据集的数量
要存储我生成的每个数据集,我将创建一个名为data的空列表:
data<-list()
我想从我的data_fun函数创建r个新数据集,并将它们存储在数据列表中:
sim_fun<-function(n,sigma,r){
for(i in 1:r){
data[[i]]<-data_fun(n,sigma)
}
return(data)
}
这很有效。但是,这里还有我无法弄清楚的部分:我想将data
中的每个数据集拆分为2/3训练数据和1/3测试数据。如果我只这样做一次,那么这就是我使用的代码:
library("caret")
#Determine number of observations in the training and test sets:
sample_n<-floor((2/3)*nrow(data))
#Make random sampling index
sample_index<-sample(seq_len(nrow(data)), size=sample_n)
#Sample from data
train <- data[sample_index,]
test <- data[-sample_index,]
我不知道如何做到这一点:我已经尝试为列车和测试制作空列表,以便我可以将第i个分区数据集存储到循环内的第i个列车/测试集中:
train<-list()
test<-list()
train[[i]] <- data[[i]][sample_index,]
test[[i]] <- data[[i]][-sample_index,]
但我认为这不起作用。我最终希望r
数据集分为r训练和测试数据集。
对不起,我没有提供可重现的例子。我感谢您提供的任何建议!
由于
答案 0 :(得分:0)
抱歉这个不必要的问题;只是我的错字。这段代码适用于我想要完成的任务:
#Generate empty lists to store our various outputs (depends on how many reps)
data<-list()
train<- list()
x_train<-list()
y_train<-list()
test<-list()
x_test<-list()
y_test<-list()
sample_n<-list()
#Assign argument-specified data to data list
sim_fun<-function(n,sigma,r){
for (i in 1:r){
data[[i]]<-data_fun(n,sigma)
#Define training and test data
#Separate into 2/3 training dataset, 1/3 test dataset
library("caret")
sample_n[[i]]<-floor((2/3)*nrow(data[[i]]))
#Make random sampling index
sample_index<-sample(seq_len(nrow(data[[i]])), size=sample_n[[i]])
#Sample from data
train[[i]] <- data[[i]][sample_index,]
test[[i]] <- data[[i]][-sample_index,]
x_train[[i]]<- as.matrix(train[[i]][,-1])
y_train[[i]]<- (train[[i]][,1])
x_test[[i]]<- as.matrix(test[[i]][,-1])
y_test[[i]]<- (test[[i]][,1])
}
return("insert relevant output lists")
}