0

R で実行すると、 0.1 から 0.0001 の間で

runif(100,max=0.1, min=1e-10)

100 個の一様分布確率変数が得られます。したがって、0.0001 と最小値 ( ) の間にランダムな値はありません。間隔全体(最小値と最大値の間)で均一な確率変数を生成する方法は?min=1e-10

4

2 に答える 2

3

たぶん、あなたはそれを見た可能性が十分にあるほど十分に生成していません:

> range(runif(100,max=0.1,min=exp(-10)))
[1] 0.00199544 0.09938462
> range(runif(1000,max=0.1,min=exp(-10)))
[1] 0.0002407759 0.0999674631
> range(runif(10000,max=0.1,min=exp(-10)))
[1] 5.428209e-05 9.998912e-02

それらはどのくらいの頻度で発生しますか?

> sum(runif(10000,max=0.1,min=exp(-10)) < .0001)
[1] 5

その 10000 のサンプルで 5 です。したがって、100 のサンプルで 1 を取得する可能性は... (実際には、数と一様分布の特性から正確に計算できます)。

于 2016-09-27T07:09:13.937 に答える
2

(に置き換えるようにexp(-10)編集1e-10)

の最大値0.1と最小1e-10値が与えられた場合、任意の値が より小さい確率1e-4は次の式で与えられます。

(1e-4 - 1e-10) / (0.1 - 1e-10) = 9.99999e-04

この分布からの 100 個のランダム値がすべてより大きい1e-4確率

(1 - 9.99999e-04) ^ 100 = 0.90479

約90.5%。したがって、この分布からの 100 個の数字の抽選で、 未満の数字が見られなかったことにまったく驚くべきではありません1e-4。これは、理論的には 90.5% 以上の確率で予想されます。これはシミュレーションでも確認できます。

set.seed(47) # for replicability
# 100,000 times, draw 100 numbers from your uniform distribution
d = replicate(n = 1e5, runif(100, max = 0.1, min = 1e-10))
# what proportion of the 100k draws have no values less than 1e-4?
mean(colSums(d < 1e-4) == 0)
# [1] 0.90557
# 90.56% - very close to our calculated 90.48%

より正確にするために、さらに多くの複製を繰り返すことができます

# same thing, 1 million replications
d2 = replicate(n = 1e6, runif(100, max = 0.1, min = 1e-10))
mean(colSums(d2 < 1e-4) == 0)
# [1] 0.90481

したがって、1MM のレプリケーションでrunif()は、ほぼ正確に期待に応えています。で期待外れ0.90481 - 0.90479 = 0.00002です。runif破られたという証拠は絶対にないと言っていいでしょう。

一部のレプリケーションのヒストグラムをプロットすることもできます。最初の 20 個は次のとおりです。

par(mfrow = c(4, 5), mar = rep(0.4, 4))
for (i in 1:20) {
    hist(d[, i], main = "", xlab  = "", axes = F, 
         col = "gray70", border = "gray40")
}

かなり均一に見える

ヒストグラムにはそれぞれ 10 本のバーが表示されているため、各バーはほぼ.01幅広になっています (合計範囲が約 0.1 であるため)。興味のある範囲は0.0001広いです。ヒストグラムでそれを確認するには、プロットごとに 1,000 本のバーをプロットする必要があります。これは、バーの数の 100 倍です。値が 100 個しかない場合、1,000 個のビンを使用してもあまり意味がありません。もちろん、ほぼすべてのビンが空になり、特に最下位のビンは、上で計算したように約 90% の時間で空になります。

さらに非常に低いランダム値を取得するには、(a) 一様分布からより多くの数を引き出すか、(b) 分布を 0 に近い重みを持つ分布に変更するかの 2 つの選択肢があります。指数分布を試すことはできますか? それとも、ハードな上限も必要な場合は、ベータ分布をスケーリングできますか? あなたの他の選択肢は、ランダムな値をまったく使用しないことです。おそらく、等間隔の値seqが必要で、探しているものですか?

于 2016-09-27T08:05:54.593 に答える