3

Linux マシンのテキスト ファイルには、値とカウントのペアが約 1 億あります。同じ分布に従うペアをさらに生成するために、どのような式を使用するかを理解したいと思います。

ざっと調べてみると、権力法っぽいですが、もう少し厳密にする必要があります。Rはこれを簡単に行うことができますか? もしそうなら、どのように?他にもっとうまくいくものはありますか?

4

3 に答える 3

4

実際のべき乗則分布があるかどうかを確認するには、度数の両対数プロットを作成し、それらがほぼ直線上に並んでいるかどうかを確認します。直線がある場合は、データの記述方法の詳細について、パレート分布に関するこの記事を読むことをお勧めします。

于 2009-06-17T16:26:29.580 に答える
4

少しコストがかかりますが、次のようにサンプルの分布を正確に模倣できます (基になる母集団分布に関する仮説は必要ありません)。

「キー <= X の最上位エントリ」をすばやく検索できるファイル構造が必要です。たとえば、Sleepycat の Berkeley データベースには、そのための btree 構造があります。SQLite はさらに簡単ですが、それほど高速ではないかもしれません (ただし、キーにインデックスがあれば問題ないはずです)。

キーがその時点までの累積カウントであるペアの形式でデータを配置します (値の昇順に並べ替えます)。K を最高のキーと呼びます。

サンプルとまったく同じ分布に従うランダム ペアを生成するには、0 から K の間のランダムな整数 X を生成し、そのファイル構造で前述の「<= の最高値」を使用して検索し、対応する値を使用します。

R でこれをすべて行う方法がわからない - あなたの靴では、Python/R ブリッジを試して、Python でロジックと制御を行い、R 自体で統計のみを行いますが、それは個人的な選択です!

于 2009-06-17T15:04:11.373 に答える
1

カテゴリ値の分布を理解することに興味があると思います。

「新しい」データを生成する最良の方法は、R の sample() 関数を使用して既存のデータからサンプリングすることです。これにより、既存のカウントによって示される確率分布に従う値が得られます。

些細な例を挙げると、小さな町の有権者データのファイルがあり、値は有権者の所属政党であり、カウントは有権者の数であるとします。

affils <- as.factor(c('democrat','republican','independent'))
counts <- c(552,431,27)
## Simulate 20 new voters, sampling from affiliation distribution
new.voters <- sample(affils,20, replace=TRUE,prob=counts)
new.counts <- table(new.voters)

実際には、おそらく R の read.csv() 関数を使用して、1 億行の値とカウントを取り込むことになります。「values\t counts」というラベルの付いたヘッダー行があると仮定すると、そのコードは次のようになります。

dat <- read.csv('values-counts.txt',sep="\t",colClasses=c('factor','numeric'))
new.dat <- sample(dat$values,100,replace=TRUE,prob=dat$counts)

1 つの注意点: ご存知かもしれませんが、R はすべてのオブジェクトをメモリに保持するため、1 億行のデータに十分な空き容量があることを確認してください (文字列を要素として格納すると、フットプリントを減らすことができます)。

于 2009-06-27T08:54:55.430 に答える