円に均一に分布した点をどのように生成できますか?


8

Rで450のデータポイントを生成しようとしています。半径が異なる(1、2.8、および5の)円形バンドにそれぞれ分散した3つの異なるセット150があります。

特に、The Elements of Statistical Learningのp546の最初のグラフを再現したいと思っています。 ここに画像の説明を入力してください

このデータを生成する可能性があるRコードの支援に感謝します。

ありがとう!


たとえば、Lovisolo、da Silvaを参照してください。超球面上の点の均一分布と、ベクトルビットプレーンエンコーディングへの応用。記事には準備ができたコードはありませんが、アルゴリズムはあります。PDFが見つからない場合は、メールでお知らせください。
ttnphns 2013

球に均一にポイントを生成する方法はstats.stackexchange.com/questions/7977/…で説明されてます。このメソッドは、他のすべての次元に直接一般化します。しかし、この質問のタイトルは質問自体とはほとんどまたは何の関係もないように見えます。この質問自体は、半径方向の付加的な「ガウスノイズ」とともに円の均一な分布を要求します。そのため、タイトルを編集して「ハイパースフィア」を「サークル」に変更しました。
whuber

回答:


11

θ[0,2π)rx=rcosθy=rsinθ

d+1dXiNd+1(0,I)

Yi=Xi/||Xi||,

||.||

Rでは、(2-)球の表面に生成してみましょう:

x <- matrix(rnorm(300),nc=3)
y <- x/sqrt(rowSums(x^2))
head(y)
           [,1]        [,2]       [,3]
[1,]  0.9989826 -0.03752732 0.02500752
[2,] -0.1740810  0.08668104 0.98090887
[3,] -0.7121632 -0.70011994 0.05153283
[4,] -0.5843537 -0.49940138 0.63963192
[5,] -0.7059208  0.20506946 0.67795451
[6,] -0.6244425 -0.70917197 0.32733262

head(rowSums(y^2))
[1] 1 1 1 1 1 1

これは、わずかに異なる2つの角度からのデータです。

球上の均一分散データの3Dプロット

その後、好きな他の半径にスケーリングできます。

低次元ではより高速な方法がありますが、通常の乱数ジェネレーターが適度に高速であれば、高次元ではかなり良い方法です。

CRANには、CircStatsおよびを含む循環統計用のパッケージがいくつかありますcircular。CRANには、n球にn> 1の均一な分布を生成するものがあると思われますが、それについては知りません。


これは、上記のコメントで参照した記事で使用されているアプローチの最初のステップです。著者は3つの段階を使用します。1)非常に多くの通常のデータポイントを生成し、それらを単位半径に再スケーリングします。2)k-meansクラスタリングを使用して、超球をタイリングするために必要なkポインの多くのポイントを置き換えます。タイリングは、これまでのところ均一に近いです。3)各ポイントに特別なシフトを適用して、ほぼ正確な均一性を実現します。私はかつてそのアルゴリズムをコード化されたが、SPSSではなく、R.に
ttnphns

ステップ2と3は、球体に適切なメッシュを生成したいが、ランダムな点を生成したくない場合に便利だと思います... [@Glen_bいい答えです!]
Elvis

@ttnphns私は、点が等間隔に近いものではなく、表面上に均一に分布している点について質問するように質問しました。
Glen_b-2013

しかし、私はOPがこれを要求していることを理解しました。ランダムデータは、実際に均一であることにはほど遠いものです。
ttnphns 2013

1
はい、もちろん。曖昧さをなくすために、疑わしい「均一/正規」の分布を持つのではなく、「均一/正規」分布から来ると言うのが常に賢明です。
ttnphns 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.