0

私は失敗分析を行っています。そのために、いくつかの異なるシナリオといくつかのランダムな試行を試したいと思っています。これまでのところ、モザイク パッケージでこれを行っており、うまく機能しています。ある特定のシナリオでは、さまざまな分布から (半) 乱数のベクトルを生成したいと考えています。今のところ問題ありません。

今、このベクトルに負の数を定義したいと思います。たとえば、25 個の数値のベクトルに 0 ~ 5 個の負の数値を含めたいとします。最初にランダムに5つ取得するようなものを使用できると思いrbinom(n=25,prob=5/25,size=1)ましたが、もちろん5/25、25回は5つ以上になる可能性があります. これは行き止まりのようです。いくつかの for ループを使用して実行できますが、おそらくもっと簡単な方法が存在します。私はあらゆる種類のサンプル、シーケンス、シャッフルの組み合わせを試しましたが、今のところうまくいきません。

誰かアイデアや提案はありますか?

4

2 に答える 2

3

すべての要素が >= 0 であるベクトル x がある場合、ポアソンから引き出されたとしましょう:

x = rpois(25, lambda=3)

次のようにして、負のランダムな 5 を作成できます。

x * sample(rep(c(1, -1), c(length(x) - 5, 5)))

これは次の理由で機能します。

rep(c(1, -1), c(length(x) - 5, 5))

になります

#  [1]  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1 -1 -1 -1 -1 -1

単純にsample(rep(c(1, -1), c(length(x) - 5, 5)))ランダムにシャッフルします。

sample(rep(c(1, -1), c(length(x) - 5, 5)))
#  [1]  1  1 -1  1  1  1  1  1  1  1  1 -1  1  1  1 -1 -1  1  1  1 -1  1  1  1  1
于 2013-10-08T17:51:53.407 に答える
0

5 つの負の値を保証し、任意の連続分布で機能する、非常に簡単な解決策を提案できます。アイデアは、ベクトルをソートし、6 番目に大きいものを各値から差し引くことです。

x <- rnorm(25)
res <- sort(x, T)[6] - x
#### [1]  0.4956991  1.5799885  2.4207497  1.1639569  0.2161187  0.2443917 -0.4942884 -0.2627706  1.5188197
#### [10]  0.0000000  1.6081025  1.4922573  1.4828059  0.3320079  0.3552913 -0.6435770 -0.3106201  1.5074491
#### [19]  0.6042724  0.3707655 -0.2624150  1.1671077  2.4679686  1.0024573  0.2453597
sum(res<0)
#### [1] 5

離散分布でも機能しますが、同点がない場合に限ります..

于 2016-09-22T20:17:57.597 に答える