为模拟函数创建迭代数据帧

时间:2017-06-13 00:25:47

标签: r iteration simulation

我正在尝试创建一个比较几种惩罚回归技术的操作特性的函数。要做到这一点,我想在R中编写一个模拟,它重复两种类型的回归,但每次都是新数据。

我已经完成了单个案例的完成(即只生成1个样本数据),但是我很难通过为我的模拟创建n个重复的样本数据来概括这一点。这里有一些示例代码,可以说明我想要完成的任务(注意我已经有了生成数据的函数)。

让我们调用我的数据生成函数data_fun,它接受​​参数:n(样本大小)和sigma(方差re:我生成的数据的抽样分布)。让我们调用我的模拟函数sim_fun,它也会带有参数:nsigma,还有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训练和测试数据集。

对不起,我没有提供可重现的例子。我感谢您提供的任何建议!

由于

1 个答案:

答案 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")
}