Cantorディストリビューションからサンプリングする方法は?


19

Cantorディストリビューションからサンプリングする最良の方法は何でしょうか?cdfのみがあり、反転することはできません。


4
実際には、誰かが数学でそれを尋ねた:math.stackexchange.com/questions/1115907/...
RUser4512

興味深いフォローアップの質問を次に示します。標準偏差とは何ですか?モーメント生成関数とは何ですか?彼らはどのように制服のための対応と比較しない分布?:-)01
whuber

5
ここに戻るmath.stackexchangeの投稿を参照して皆さんが作成した無限ループが好きです:p
Tasos Papastylianou

回答:


23

簡単:ユニフォームからのサンプルバイナリから三元に配布及び再コーディング、「2」としてそれぞれ「1」を解釈します。(これは逆確率変換アプローチです:実際にCDFを逆にします!)01

図

これは、Rほぼすべてのコンピューティング環境に簡単に移植できるように書かれた実装です。

binary.to.ternary <- function(x) {
  y <- 0
  x <- round(2^52 * x)
  for (i in 1:52) {
    y <- y + 2*(x %% 2)
    y <- y/3
    x <- floor(x/2)
  }
  y
}

n <- 1000
x <- runif(n)
y <- binary.to.ternary(x)
plot(ecdf(y), pch=".")

3
今年の初め、私は少しでより完全な実装を開始したgithub.com/Henrygb/CantorDist.R機能をrCantor()qCantor()pCantor()とあまり意味dCantor()
ヘンリー

1
@Henry何をdcantor実装しますか?Timが指摘しているように、この分布には密度はありません。個別の原子もありません。これは、連続的ではあるが絶対的に連続的ではない分布の典型的な例です。(私はqcantor、BTW の実装が好きです。行列乗算を利用するため、おそらく高速です。)
whuber

1
実際の分布の有限近似のみを扱っていることに留意する必要があります。10桁の3桁の精度の数値(実際にはもっと長くなる)があり、0.0222020002を生成して、数値がさらに拡張される変数を「表す」としましょう。同じコメントが連続的なrvを持つ実数値rvに適用されますが、有限長近似が表すことができるすべての「表現された」値も「セット内」にあります。実際のCantorディストリビューションでは、その10桁のシーケンスのほとんどすべての「継続」はセットに含まれていません。... ctd
Glen_b -Reinstate Monica

1
@whuber 2番目の文では、乱数を生成するすべての方法が有限精度であることを明確に認めました。あなたがそれを繰り返すことを選んだこと、そしてあなたがそれを強調したことは、そこに私の実際のポイントを見逃したことを示唆しています。有限の精度で連続変量を表す場合、そのような有限近似表すことができる実際の値は、「セット内」で生成したいものです。このような変数を有限精度で表現すると、そのような有限近似で表現できる実際の値はほとんどすべてセットに含まれません。むしろ別のケースです。... ctd
Glen_b -Reinstate Monica

1
ctd ...あなたの投稿に対する批判は暗示されていません。特に読者がシミュレートすることによってCantorセットのプロパティを推測しようとしている場合は、読者が見落とす可能性があり、考慮する必要があるかもしれません。
Glen_b-モニカを
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.