0

R. 800 サンプルにデータ セットがあり、10 から 20 の間でランダムに生成された 12 の観測値があります。これから、2 つのオプションがあります。ランダムに生成された数が 15 未満の場合、選択はオプション 1 と 15 を超える場合です。オプション B. ここで、オプション A が真である正規分布として、オプション 1 の平均値と sd から一連のデータを生成したいと考えています。

Run1 <- replicate(800, rnorm(12, mean=16, sd=3.1))

オプション A が TRUE であるかどうかを示す他のコードをリンクして、Run1 の値を生成する方法がわかりません。

編集:私は基本的に現在、上記の引数(オプションA - 平均= 16、sd = 3.1およびオプションB - 平均= 18、sd = 3.3)に対してTRUEとFALSEで構成されるマトリックスを持っています。ここで、Aは15未満の値に対してTRUEです15 を超える値の場合は FALSE です。したがって、このような行列が導出されます (完全な行列の小さなサンプルにすぎません)。

  [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  

[1,] TRUE TRUE FALSE TRUE FALSE FALSE TRUE
[2,] TRUE TRUE FALSE FALSE TRUE TRUE TRUE

したがって、私が今欲しいのは、上記のオプション A 値の正規分布から A が TRUE の場合の平均値 (行列 A) と、B の平均値を提供する 2 つの行列 (A 用と B 用) です。上記で詳述したオプション B 値の正規分布からの FALSE (行列 B) は、対応する行列で値が生成されるべきでない場合に、理想的には N/A または同様の値を示します。

そして最後に、これら 2 つの行列を組み合わせて 3 番目の最終行列を形成したいと思います。面倒に思えるかもしれませんが、必要です。

ありがとう

4

1 に答える 1

1

これを行う 1 つの方法は、適切なサイズの行列を作成し、行インデックスを使用して適切な行に値を入力することです ...

set.seed(101)
runifvals <- runif(800,10,20)
result <- matrix(nrow=800,ncol=12)
lowvals <- runifvals<=15
## sum(lowvals) is the number of rows of data we have to generate for case A ...
result[lowvals,]  <- rnorm(sum(lowvals)*12, 16,3.1)
result[!lowvals,] <- rnorm(sum(!lowvals)*12,18,3.3)

これは、結果が 800x12 の行列であることに問題がないことを前提としています (ただし、これはおそらく一般的に最も便利な形式です)。

NAが埋め込まれた2つの別々のマトリックスが本当に必要な場合は編集します(これは奇妙/無駄に思えますが、何でも...):

matA <- matB <- matrix(NA,nrow=800,ncol=12)
matA[lowvals,]  <- rnorm(sum(lowvals)*12, 16,3.1)
matB[!lowvals,] <- rnorm(sum(!lowvals)*12,18,3.3)
于 2012-07-30T00:19:00.537 に答える