-2

このスレッドを読んでくれてありがとう。私はRに比較的慣れていないので、この質問はばかげているように思えるかもしれません。

だから、私は製品価格に関するデータセットを持っています。これは 240 x 1,000 のマトリックスです。各列は固有の製品を表し、各行は特定の月の 1,000 の価格情報を示します。データセットを再サンプリングして、同じ次元の新しいマトリックスを取得しようとしています。

  • 私のデータは「データ」として保存されます

  • ブートストラップされた結果を空の 240x1,000 マトリックスである「newdata」に保存したいと思います

これが私のコードです:

for (month in 1:num.months)
{  
  for (n in 1:num.products)
  {
    newdata[month, n] <- mean(sample(data[month, ], 
                                size = num.productss,
                     replace = TRUE));
  }
 }

これは機能しますが、For ループによって処理が非常に遅くなります。apply、sapply、tapplyなどを使用して速度を向上させる方法を誰かが指摘できれば幸いです。ありがとう。

4

1 に答える 1

0

独自のサンプリング方法を作成する前に、R で既に利用可能なブートストラップ関数とパッケージを試してみることをお勧めします。

ただし、これによりリストが得られ、各要素は元からサンプリングされたマトリックスになります。タイミングが含まれています:

> m = matrix(rnorm(24000),nrow=1000,ncol=24)
> nbootstrap = 100
> 
> system.time((mboot = lapply(1:nbootstrap, function(i)
+   {
+    m[sample(1:nrow(m),replace=T),]
+ })))
   user  system elapsed 
   0.27    0.00    0.26 

> m = matrix(rnorm(24000),nrow=1000,ncol=24)
> nbootstrap = 1000
> 
> system.time((mboot = lapply(1:nbootstrap, function(i)
+   {
+    m[sample(1:nrow(m),replace=T),]
+ })))
   user  system elapsed 
   1.45    0.03    1.59 

> m = matrix(rnorm(240000),nrow=1000,ncol=240)
> nbootstrap = 100
> 
> system.time((mboot = lapply(1:nbootstrap, function(i)
+   {
+    m[sample(1:nrow(m),replace=T),]
+ })))
   user  system elapsed 
   0.97    0.05    1.02 

> m = matrix(rnorm(240000),nrow=1000,ncol=240)
> nbootstrap = 1000
> 
> system.time((mboot = lapply(1:nbootstrap, function(i)
+   {
+    m[sample(1:nrow(m),replace=T),]
+ })))
   user  system elapsed 
   6.60    1.20    7.97 
于 2012-07-05T23:46:21.647 に答える