0

次のデータがあります。

 seed(1) 
 X <- data.frame(matrix(rnorm(2000), nrow=10))#### the dataset

次のコードは、それぞれ 5 列の 1000 個のブートストラップ データセット "x" と 1000 個のブートストラップ データセット "y" を作成します。

 colnums_boot <- replicate(1000,sample.int(200,10))
 output<-lapply(1:1000, function(i){
 Xprime <- X[,colnums_boot[1:5,i]]
 Yprime <- X[,colnums_boot[6:10,i]]
 xy <- list(x=Xprime,y=Yprime )
 } )

この特定のコードを適用したいデータフレーム " xy " のリストのリストを取得しましたが、リストのインデックス操作がわかりません。

出力「xy」から

最初のリスト [1] を考えると、

$x and

$y

コードを適用したい:

 X= cor($x) 
 Y= cor($y) separately and then 
 sapply(1:10, function(row) cor(X[row,], Y[row,]))

リスト[1]の各行「r1」に単一の値が与えられます。

これをリスト全体に適用し、それぞれ list[1] 、 list[2] から r1 、 r2 などを取得し、1000 まで取得し、最終的にデータフレームとして作成したいと思います。最終的には、10 x 1000 次元のデータフレームになります。

4

1 に答える 1

1

Xprime、Yprime ビットを書いた質問が見つかりません。消さなくてよかった…?私の記憶が正しければ、行列を処理する方がはるかに効率的であるため、これを提案しました。

Z <- as.matrix(X)
Xprime2 <- array(,dim=c(10,5,1000))
Yprime2 <- array(,dim=c(10,5,1000))
Xprime2[] <- Z[,colnums_boot[1:5,]]
Yprime2[] <- Z[,colnums_boot[6:10,]]

とにかく、@KarlFornerがコメントしたように、セットアップでは、これによりX列とY列の間の相関関係が得られます

lapply(output,function(ll) cor(ll$x,ll$y))

同じ 200 個のベクトル間の相関を計算することになるため、これはブートストラップ時にも潜在的に非効率的です。cor(X)それらを前もって計算してから、そこから値を取得する方が理にかなっていると思います...

それをdata.frameに入れる限り、それが何を意味するのかはっきりしません。

于 2013-09-23T16:44:11.767 に答える