データがパレート分布に適合しているかどうかを知る方法は?


10

220の数値を持つベクトルのサンプルがあります。これが私のデータのヒストグラムへのリンクです。。そして、私のデータがパレート分布に適合するかどうかを確認したいのですが、その分布でQQプロットを表示したくありませんが、正規性のアンダーソンダーリング検定(ad.test)など、Rのp値で正確な答えが必要です。どうすればできますか?できるだけ具体的にご記入ください。


1
統計的検定の結果から、データにパレート分布があることがわかりません。実際、それが実際のデータである場合、パレート分布を持たないことかなり確実です。すべてのテストは、あなたが持っているパレートであることからの偏差をピックアップするのに十分なデータがあるかどうかを示します。つまり、それがすべて拒否された場合、「そうです、サンプルサイズは、すでに知っていることを伝えるのに十分な大きさでした」です。なぜあなたは実際の質問に答えることができないような演習を行うのですか?
Glen_b-モニカを2013

あなたの質問は本当に「プログラムRにプロシージャXを実行させるために、コードのどの行を書くか」にすぎませんか?次に、ここではトピックから外れています。それは可能性があるプログラミングの質問としての資格。質問に統計的側面がある場合(「これで実行しても意味があるか」など)は、その側面を明確にして強調する必要があります
Glen_b -Reinstate Monica

1
次に、アンダーソンダーリングテスト(または、@ Zenが上記で提案したコルモゴロフスミルノフ)に進みます。これらは完全に指定された分布のテストです。つまり、テストで必要なプロパティを使用するには、すべてのパラメーターを事前に(推定ではなく)指定する必要があります。したがって、事前に指定されたパラメーターがないため、この演習ではどちらも使用できません。(おそらくあなたは他の誰かの提案でこれをしているでしょう。仲介人を介して誰かに誤解を説明することは非常に困難です。)
Glen_b -Renicate Monica

このテストの目的は何ですか?たとえば、拒否するか拒否するかに応じて、どのようなアクションが変わりますか?
Glen_b-2013

動機に関係なく、常にQQプロットを確認する必要があります。また、「正確な」P値をフェチ化するべきではありません。別のテストでは、別の「正確な」P値が得られます。
Nick Cox

回答:


12

(PS)まず、Glen_bは、そのようなテストの有用性に関する上記のコメントで正しいと思います。実際のデータは確かに正確にパレート分布ではなく、ほとんどの実用的なアプリケーションでは、「パレート近似はどれほど良いのか?」–そして、QQプロットは、そのような近似の品質を示すための良い方法です。

pks.test

Rコードの数行を次に示します。

最初に、パレート分布を処理するための基本的な関数を定義します。

# distribution, cdf, quantile and random functions for Pareto distributions
dpareto <- function(x, xm, alpha) ifelse(x > xm , alpha*xm**alpha/(x**(alpha+1)), 0)
ppareto <- function(q, xm, alpha) ifelse(q > xm , 1 - (xm/q)**alpha, 0 )
qpareto <- function(p, xm, alpha) ifelse(p < 0 | p > 1, NaN, xm*(1-p)**(-1/alpha))
rpareto <- function(n, xm, alpha) qpareto(runif(n), xm, alpha)

次の関数は、パラメーターのMLEを計算します(Wikipediaの正当化)。

pareto.mle <- function(x)
{
  xm <- min(x)
  alpha <- length(x)/(sum(log(x))-length(x)*log(xm))
  return( list(xm = xm, alpha = alpha))
}

p

pareto.test <- function(x, B = 1e3)
{
  a <- pareto.mle(x)

  # KS statistic
  D <- ks.test(x, function(q) ppareto(q, a$xm, a$alpha))$statistic

  # estimating p value with parametric bootstrap
  B <- 1e5
  n <- length(x)
  emp.D <- numeric(B)
  for(b in 1:B)
  {
    xx <- rpareto(n, a$xm, a$alpha);
    aa <- pareto.mle(xx)
    emp.D[b] <- ks.test(xx, function(q) ppareto(q, aa$xm, aa$alpha))$statistic
  }

  return(list(xm = a$xm, alpha = a$alpha, D = D, p = sum(emp.D > D)/B))
}

さて、例えば、パレート分布からのサンプル:

> # generating 100 values from Pareto distribution
> x <- rpareto(100, 0.5, 2)
> pareto.test(x)
$xm
[1] 0.5007593

$alpha
[1] 2.080203

$D
         D 
0.06020594 

$p
[1] 0.69787

χ2(2)

> # generating 100 values from chi square distribution
> x <- rchisq(100, df=2)
> pareto.test(x)
$xm
[1] 0.01015107

$alpha
[1] 0.2116619

$D
        D 
0.4002694 

$p
[1] 0

このテストが公平であるとは主張していません。サンプルが小さい場合、バイアスが存在する可能性があります。パラメトリックブートストラップは、パラメーター推定の不確実性を十分に考慮していません(この戦略を使用して、未知の分散を持ついくつかの通常の変数の平均がゼロである場合に単純にテストするとどうなるかを考えてください)。

PS ウィキペディアはこれについて少し述べています。:ここでは同様の戦略が提案されたために他の二つの質問です混合物のためのフィットテストの良さガンマ分布のためのフィットテストの良さ


3
この方法でパラメーターの推定のための検定統計量の分布を調整する場合、それはKS検定ではありません(たとえKS統計に基づいていても)-それは特定のタイプのリリーフォース検定です。これはもはやノンパラメトリックではありませんが、与えられた分布のシミュレーションを介して構築することができます。Lillieforsは、1960年代に戻って、特に通常および指数関数的にこれを行いました。
Glen_b-2013

このコメントをありがとう@Glen_b知らなかった。
Elvis

問題ない; それはあなたがしていることの内容については何も変更しません(それはそのままで結構です)、それは呼び出されるべきものだけです。
Glen_b-2013

@Glen_b回答に大幅な変更を加えました。ありがとうございます。
Elvis、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.