1

モンテカルロシミュレーションを設定していて、180か国と12の期間のダミー変数のセットを作成しようとしています。大量のデータポイントがある場合、Excelファイルから取得せずに時間と国の固定効果のダミー変数を作成するより短い方法はありますか?

例えば

   F.T(1)  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0. 1, 0, 0,
     0, 0, 0, 0, 0, 0, 0, 0, 0......(Extends until 180 countries)
   F.T(2)  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0. 0, 1, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0......(Extrends until 180 countries)

どんな助けでも大歓迎です。

4

2 に答える 2

3

選択した乱数ジェネレーターでレプリケートを使用すると、うまくいくはずです。これは、prob = 1/2 の単純な二項分布を使用した例です。

replicate(12, rbinom(180, 1, .5), simplify=FALSE)
于 2013-03-06T04:14:41.730 に答える
1

12回rbinom呼び出すのではなく、最初にすべてのデータを作成してからマトリックスに変換する方が簡単/高速になると思います。rbinomあれは:

set.seed(45)
t <- rbinom(180*12, 1, 0.5)
dim(t) <- c(180, 12)

違いがあるかどうかを確認するために、ここにベンチマークがあります

# I use simplify = TRUE here.
FUN1 <- function(n, a) {
    set.seed(45)
    replicate(n, rbinom(a, 1, .5), simplify = TRUE)
}
FUN2 <- function(n, a) {
    set.seed(45)
    t <- rbinom(n*a, 1, 0.5)
    dim(t) <- c(a, n)
    t
}
require(rbenchmark)
benchmark(t1 <- FUN1(1000, 12000), t2 <- FUN2(1000, 12000), 
            order="elapsed", replications=5)

#                      test replications elapsed relative user.self sys.self
# 2 t2 <- FUN2(1000, 12000)            5   3.991    1.000     3.859    0.111
# 1 t1 <- FUN1(1000, 12000)            5   5.337    1.337     4.785    0.472


identical(t1, t2)
# [1] TRUE

コメントで質問に答えるには:

w  <- rep(diag(12)[1:9, ], N)
dim(w) <- c(9, 12*N)
w <- t(w)
colnames(w) <- paste0("t", 1:9)

またはさらに良い:

w2 <- do.call(rbind, replicate(N, diag(12)[, 1:9], simplify = FALSE))
colnames(w2) <- paste0("t", 1:9)
于 2013-03-06T07:49:46.927 に答える