更新:2011年4月7日この回答は非常に長くなり、問題の複数の側面をカバーしています。しかし、私はこれまで、それを別々の答えに分けることに抵抗してきました。
この例では、ピアソンののパフォーマンスに関する説明を一番下に追加しました。χ2
Bruce M. Hillは、おそらくZipfのような文脈での推定に関する「論説的」な論文を執筆しました。彼は1970年代半ばにいくつかの論文を書いた。ただし、「Hill estimator」(現在は呼び出されています)は基本的にサンプルの最大次数統計に依存しているため、存在する打ち切りのタイプによっては、問題が発生する可能性があります。
主な論文は次のとおりです。
BM Hill、分布の裾について推論するための単純で一般的なアプローチ、Ann。統計 、1975年。
データが本当にZipfであり、その後に切り捨てられる場合、次数分布とZipfプロットの間の適切な対応を利用すると有利です。
具体的には、次数分布は、各整数応答が見られる回数の経験的分布、つまり
di=#{j:Xj=i}n.
これを対数対数プロットのに対してプロットすると、スケーリング係数に対応する勾配を持つ線形トレンドが得られます。i
一方、サンプルを最大から最小に並べ替えてランクに対して値をプロットするZipfプロットをプロットすると、異なる勾配の異なる線形トレンドが得られます。ただし、勾配は関連しています。
がZipf分布のスケーリング則係数である場合、最初のプロットの勾配はで、2番目のプロットの勾配はです。以下は、およびプロット例です。左側のペインは次数分布で、赤い線の傾きはです。右側はZipfプロットで、重ねられた赤い線は傾きを持っています。- α - 1 /(α - 1 )α = 2 、N = 10 6 - 2 - 1 /(2 - 1 )= - 1α−α−1/(α−1)α=2n=106−2−1/(2−1)=−1
したがって、データが切り捨てられてしきい値より大きい値は表示されないが、データがZipf分布であり、がかなり大きい場合、次数分布からを推定できます。非常に単純なアプローチは、対数-対数プロットに線を当てはめ、対応する係数を使用することです。τ αττα
小さな値が表示されないようにデータが切り捨てられた場合(たとえば、大きなWebデータセットに対して多くのフィルタリングが行われる方法)、Zipfプロットを使用して対数対数スケールで勾配を推定し、次に「スケールアウト指数」。Zipfプロットからの勾配の推定がます。次に、スケーリング則係数の簡単な推定値は
α =1-1β^
α^=1−1β^.
@csgillespieは、このトピックに関して、ミシガン州のMark Newmanが共同執筆した最近の1つの論文を発表しました。彼はこれについて多くの同様の記事を発表しているようです。以下は、興味深い他の参考文献と一緒に別のものです。ニューマンは統計的に最も賢明なことをしないことがありますので、注意してください。
MEJニューマン、べき法則、パレート分布とジップの法則、Contemporary Physics 46、2005、pp。323-351。
M. Mitzenmacher、「べき法則と対数正規分布の生成モデルの簡単な歴史」、インターネット数学。、巻。1、いいえ。2、2003、pp.226-251。
K.ナイト、Hill推定量の単純な変更、ロバスト性とバイアス低減への応用 2010年。
補遺:
これは、元の質問の下のコメントに記載されているように、ディストリビューションからサイズサンプルを取得した場合に予想されることを示すための簡単なシミュレーションです。10 5R105
> x <- (1:500)^(-0.9)
> p <- x / sum(x)
> y <- sample(length(p), size=100000, repl=TRUE, prob=p)
> tab <- table(y)
> plot( 1:500, tab/sum(tab), log="xy", pch=20,
main="'Truncated' Zipf simulation (truncated at i=500)",
xlab="Response", ylab="Probability" )
> lines(p, col="red", lwd=2)
結果のプロットは
プロットから、(またはその程度)の次数分布の相対誤差が非常に良いことがわかります。正式なカイ2乗検定を実行できますが、これはデータが事前に指定された分布に従うことを厳密に示しているわけではありません。それはあなたが彼らがそうではないと結論付ける証拠がないことをあなたに告げるだけです。i≤30
それでも、実際的な見地からは、そのような計画は比較的説得力があるはずです。
補遺2:以下のコメントでマウリツィオが使用する例を考えてみましょう。および、最大値を持つ切り捨てられたZipf分布を想定します。n = 300α=2x m a x = 500n=300000xmax=500
ピアソンの統計を2つの方法で計算します。標準的な方法は、統計
するですここで、はサンプルの値観測されたカウントであり、。X 2 = 500 Σ iが= 1(O I - E I )2χ2 OIIEI=N、P、I=NI-α/Σ 500 J = 1 J-α
X2=∑i=1500(Oi−Ei)2Ei
OiiEi=npi=ni−α/∑500j=1j−α
Maurizioのスプレッドシートに示されているように、最初にサイズ40のビンにカウントをビニングすることによって形成された2番目の統計も計算します(最後のビンには、20個の個別の結果値の合計のみが含まれます。
この分布からサイズ 5000個の個別のサンプルを描画し、これら2つの異なる統計を使用して値を計算します。pnp
値のヒストグラムは下にあり、非常に均一であることがわかります。経験的なタイプIのエラー率はそれぞれ0.0716(標準、非ビニング法)および0.0502(ビニング法)であり、どちらも、選択したサンプルサイズ5000のターゲット0.05値と統計的に有意に異なります。p
こちらがコードです。R
# Chi-square testing of the truncated Zipf.
a <- 2
n <- 300000
xmax <- 500
nreps <- 5000
zipf.chisq.test <- function(n, a=0.9, xmax=500, bin.size = 40)
{
# Make the probability vector
x <- (1:xmax)^(-a)
p <- x / sum(x)
# Do the sampling
y <- sample(length(p), size=n, repl=TRUE, prob=p)
# Use tabulate, NOT table!
tab <- tabulate(y,xmax)
# unbinned chi-square stat and p-value
discrepancy <- (tab-n*p)^2/(n*p)
chi.stat <- sum(discrepancy)
p.val <- pchisq(chi.stat, df=xmax-1, lower.tail = FALSE)
# binned chi-square stat and p-value
bins <- seq(bin.size,xmax,by=bin.size)
if( bins[length(bins)] != xmax )
bins <- c(bins, xmax)
tab.bin <- cumsum(tab)[bins]
tab.bin <- c(tab.bin[1], diff(tab.bin))
prob.bin <- cumsum(p)[bins]
prob.bin <- c(prob.bin[1], diff(prob.bin))
disc.bin <- (tab.bin - n*prob.bin)^2/(n * prob.bin)
chi.stat.bin <- sum(disc.bin)
p.val.bin <- pchisq(chi.stat.bin, df=length(tab.bin)-1, lower.tail = FALSE)
# Return the binned and unbineed p-values
c(p.val, p.val.bin, chi.stat, chi.stat.bin)
}
set.seed( .Random.seed[2] )
all <- replicate(nreps, zipf.chisq.test(n, a, xmax))
par(mfrow=c(2,1))
hist( all[1,], breaks=20, col="darkgrey", border="white",
main="Histogram of unbinned chi-square p-values", xlab="p-value")
hist( all[2,], breaks=20, col="darkgrey", border="white",
main="Histogram of binned chi-square p-values", xlab="p-value" )
type.one.error <- rowMeans( all[1:2,] < 0.05 )