2017-06-13 21 views
0

私は、いくつかのタイプのペナルティリグレッション技法の動作特性を比較する関数を作成しようとしています。これを行うには、2つのタイプの回帰を繰り返すシミュレーションをRに書きたいが、毎回新しいデータを作成する。シミュレーション関数の反復データフレームを作成する

私はすでに、1つのケース(サンプルデータの1つのケースを生成するだけ)でこれを達成しましたが、シミュレーションのサンプルデータをn回繰り返して作成することでこれを一般化できません。ここでは、私が達成しようとしていることをうまく説明するサンプルコードをいくつか紹介します(私はすでにデータを生成するための関数を持っています)。

私のデータ生成関数data_funは、引数を受け取ります:n(サンプルサイズ)とsigma(分散は私の生成したデータのサンプリング分布です)としましょう。私のシミュレーション関数sim_fun(引数はnsigma)、r(私が作成したいシミュレーションデータセットの数)も呼び出してみましょう。

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テストデータに分割したいと思います。私はi番目に格納できるように、電車やテストのために空のリストを作ってみた:

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番目の列車/テストセットに追加します。

train<-list() 
test<-list() 

train[[i]] <- data[[i]][sample_index,] 
test[[i]] <- data[[i]][-sample_index,] 

しかし、これはうまくいかないと思います。私は究極的にrのデータセットをrトレーニングとテストデータセットに分けたと思います。

再現可能な例は含まれませんでした。私はあなたが与えることができるヒントをありがとう!

おかげで不要な質問申し訳ありません

+1

@李哲源ZheyuanLiありがとうございました。ちょうどタイプミス:ロットの[[私は]見逃す! – lecreprays

+0

@李哲源ZheyuanLiリッジとPLSR。私はglmnetとplsを使っています。 – lecreprays

答えて

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") 
} 
関連する問題