2つの変数が同じ分布に従うかどうかをテストする場合は、両方の変数を単純に並べ替えてから、それらの相関を確認するのが良いでしょうか?高い(少なくとも0.9?)場合、変数は同じ分布からのものである可能性が高いです。
ここでの分布とは、「正規」、「カイ二乗」、「ガンマ」などを意味します。
2つの変数が同じ分布に従うかどうかをテストする場合は、両方の変数を単純に並べ替えてから、それらの相関を確認するのが良いでしょうか?高い(少なくとも0.9?)場合、変数は同じ分布からのものである可能性が高いです。
ここでの分布とは、「正規」、「カイ二乗」、「ガンマ」などを意味します。
回答:
これが良いテストかどうかを調べましょう。 それは単に悪いと主張したり、あるインスタンスでうまく機能しないことを示したりするだけではありません。ほとんどのテストは状況によってはうまく機能しないため、提案されたテストが適切な選択である可能性のある状況を特定することがしばしばあります。
仮説検定と同様に、これは(a)帰無仮説と(b)仮説を区別するための検定統計量(相関係数)で構成されます。
帰無仮説は、2つの変数が同じ分布に由来するというものです。正確に言うと、私たちは、変数名聞かせてと、我々は観察していると仮定しのインスタンスと呼ばれる、およびのインスタンスと呼ばれる、。帰無仮説は、とすべてのインスタンスが独立しており、同一の分布(iid)であるということです。Y n x X x i = (x 1、x 2、… 、x n x)n y Y y i X Y
(a)すべてのインスタンスが何らかの基本分布に従ってあり、(b)すべてのインスタンスが何らかの基本分布に従ってが(c)はとは異なるというます。(したがって、間の相関、間の相関、と間の相関、またはまたはの間の分布の差をことはありません。それはもっともらしいとは思われません。)F X Y F Y F X F Y x i y i x i y j x y
提案された検定統計では、(この共通値呼び出す)を想定し、の相関係数を計算します(通常、はデータの最小)。これを呼びます。 n (x [ i ]、y [ i ])[ i ] i th t (x 、y )
この状況では、どの統計が提案されていても、置換テストをいつでも実行できます。 帰無仮説では、データの尤度は、データの順列の尤度と同じです。値。つまり、データの半分を割り当て、残りの半分を割り当てることは、純粋なランダム一致です。これは、仮定とという帰無仮説の単純で直接的な結果です。((x 1、x 2、… 、x n)、(y 1、y 2、… 、y n)) 2 n X Y F X = F Y
したがって、サンプリング分布、条件付きの観察にと、すべての値の分布であるすべてに対して達成データの順列。これに興味があるのは、(%信頼度に対応)などの特定のテストサイズに対して、のサンプリング分布から両側臨界領域を構築するためです。可能な値の最も極端な%x i y i t (2 n )!α α = 0.05 95 T 100 α T(高い相関は、高い相関が同様の分布と一致し、低い相関はそうではないためです)。これは、異なる分布からのデータを決定するために相関係数がどれくらい大きくなければならないかを決定する方法です。
なぜなら(または、必要に応じて、は、データをサイズ 2つの部分に分割する方法の数をカウントします)は、小さいでも大きくなり、計算することは実用的ではありません分布を正確にサンプリングするため、シミュレーションを使用してサンプリングします。(たとえば、場合、および)約1000個のサンプルで十分です(そして確かに私たちがやろうとしている探査のためになります)。( 2 n2nnnn=16( 2n(2n)!≈2.63×1035
調べる必要のあるものが2つあります。1つ目は、帰無仮説の下でサンプリング分布がどのように見えるかです。第二に、このテストは異なる分布をどれだけうまく識別しますか?
複雑な問題があります:サンプリング分布はデータの性質に依存します。私たちにできることは、研究に興味があるものをエミュレートするために作成された現実的なデータを見て、シミュレーションから学んだことが自分の状況に適用されることを期待することです。
例として、この作業をで実行しましたR
。それは自然に3つの部分に分類されます。
検定統計量を計算する関数。私はもう少し一般的になりたいので、私のバージョンは(ソートされた)大きいデータセットの値を線形補間して(ソートされた)小さいデータセットと一致するようにすることで、異なるサイズのデータセット()を処理します。これはすでに関数によって行われているため、結果を取得するだけです。R
qqplot
test.statistic <- function(x, y) {
transform <- function(z) -log(1-z^2)/2
fit <- qqplot(x,y, plot.it=FALSE)
transform(cor(fit$x, fit$y))
}
少しひねり-不要だが可視化に役立つ-は、null統計量の分布がほぼ対称になるように相関係数を再表現します。それtransform
がやっていることです。
サンプリング分布のシミュレーション。入力の場合、この関数は、n.iter
配列x
およびの2つのデータセットと共に反復回数を受け入れますy
。n.iter
検定統計量の値の配列を出力します。その内部動作は、非R
ユーザーに対しても透過的でなければなりません。
permutation.test <- function(n.iter, x, y) {
z <- c(x,y)
n.x <- length(x)
n.y <- length(y)
n <- length(z)
k <- min(n.x, n.y)
divide <- function() {
i <- sample.int(n, size=k)
test.statistic(z[i], z[-i])
}
replicate(n.iter, divide())
}
テストを実施するために必要なのはそれだけですが、それを研究するために、テストを何度も繰り返す必要があります。そのため、テストを1回実行し、そのコードを第3の機能層にラップします。この機能層は一般的にf
ここで名前が付けられており、繰り返し呼び出すことができます。広範な研究のために十分に一般的にするために、入力のために、シミュレートするデータセットのサイズ(n.x
およびn.y
)、各順列検定の反復回数(n.iter
)、test
検定統計量を計算する関数への参照を受け入れます(表示されます)一時的にこれをハードコーディングしたくない理由)、およびiidランダム値を生成する2つの関数、1つは()、もう1つは()です。オプションdist.x
dist.y
plot.it
何が起こっているかを確認するのに役立ちます。
f <- function(n.x, n.y, n.iter, test=test.statistic, dist.x=runif, dist.y=runif,
plot.it=FALSE) {
x <- dist.x(n.x)
y <- dist.y(n.y)
if(plot.it) qqplot(x,y)
t0 <- test(x,y)
sim <- permutation.test(n.iter, x, y)
p <- mean(sim > t0) + mean(sim==t0)/2
if(plot.it) {
hist(sim, xlim=c(min(t0, min(sim)), max(t0, max(sim))),
main="Permutation distribution")
abline(v=t0, col="Red", lwd=2)
}
return(p)
}
出力はシミュレートされた「p値」です。実際にデータに対して計算された統計よりも極端に見える統計を生成するシミュレーションの割合です。
パート(2)と(3)は非常に一般的ですtest.statistic
。他の計算に置き換えるだけで、異なるテストでこのような研究を行うことができます。以下でそれを行います。
デフォルトでは、コードは2つの一様分布から引き出されたデータを比較します。それをさせて(場合、かなり小さなデータセットであり、やや難しいテストケースを提示します)、それを均一正規比較と均一指数比較のために繰り返します。(少し超える値を持たない限り、均一分布は正規分布と区別するのは簡単ではありませんが、通常、高い歪度と長い右尾を持つ指数分布は均一分布と簡単に区別されます)
set.seed(17) # Makes the results reproducible
n.per.rep <- 1000 # Number of iterations to compute each p-value
n.reps <- 1000 # Number of times to call `f`
n.x <- 16; n.y <- 16 # Dataset sizes
par(mfcol=c(2,3)) # Lay results out in three columns
null <- replicate(n.reps, f(n.x, n.y, n.per.rep))
hist(null, breaks=20)
plot(null)
normal <- replicate(n.reps, f(n.x, n.y, n.per.rep, dist.y=rnorm))
hist(normal, breaks=20)
plot(normal)
exponential <- replicate(n.reps, f(n.x, n.y, n.per.rep, dist.y=function(n) rgamma(n, 1)))
hist(exponential, breaks=20)
plot(exponential)
左側は、と両方が均一な場合のp値のヌル分布です。ヒストグラムが均一に近いこと(「重要な」結果の範囲にある左端に特に注意を払うこと)と、実際にそうであること、およびシミュレーション中に取得された値のシーケンスが、その下に示されているように見えますが、ランダムに見えます。 それは良い。 つまり、次のステップに進んで、とが異なる分布から来たときにこれがどのように変化するかを調べることができます。
中央のプロットは、正規変量に対して一様変量テストします。多くの場合、p値は予想よりも低くなりました。これは、このテストが実際に違いを検出する傾向を示しています。しかし、それは大きなものではありません。たとえば、ヒストグラムの左端のバーは、1000回の実行(個別にシミュレートされた1000個のデータセットを含む)のうち、p値が未満であり、約110回しかなかったことを示しています。「有意」と考えると、このテストでは、基づいて均一分布と正規分布の違いを検出する可能性はわずか%にすぎません。f
それぞれから独立した値。それはかなり低い電力です。しかし、たぶんそれは避けられないので、先に進みましょう。
右側のプロットは、指数分布に対して一様分布を同様にテストします。 この結果は奇妙です。 このテストは、多くの場合、均一データと指数データは同じに見えると結論付ける傾向があります。それは均一と指数変量であることを「考える」ように思えより 2つの均一な変数よりも類似しました!何が起きてる?
問題は、指数分布からのデータがいくつかの非常に高い値を持つ傾向があることです。一様に分布した値に対してそれらの散布図を作成すると、残りすべての右上にいくつかのポイントがあります。これは非常に高い相関係数に対応します。したがって、いずれかの分布がいくつかの極値を生成するときは常に、相関係数は分布の違いを測定するためのひどい選択です。 これは、さらに悪い問題につながります。データセットのサイズが大きくなるにつれて、いくつかの極端な観測値を取得できる可能性が高くなります。したがって、データ量が増加するにつれて、このテストのパフォーマンスはますます悪化すると予想できます。 なんてひどい…。
元の質問は否定的に回答されました。ただし、ディストリビューションを区別するための有名で強力なテスト、コルモゴロフ-スミルノフテストがあります。相関係数の代わりに、QQプロットの線から最大の垂直偏差を計算します。(データが同じ分布からのものである場合、QQプロットはこの線に従う傾向があります。そうでない場合、どこかで逸脱します。KS統計はそのような最大の逸脱をピックアップします。)
ここでR
の実装は:
test.statistic <- function(x, y) {
ks.test(x,y)$statistic
}
そうです。ソフトウェアに組み込まれているため、呼び出すだけで済みます。ちょっと待って!あなたは慎重にマニュアルを読めば、あなたはそれを学ぶことができます()テストでは、p値を提供するが、p値があること(b)は(肉眼的に)間違ったときの両方x
とy
のデータセットです。データがどの分布から来たかを正確に知っており、x
それが本当かどうかを確認したいときに使用することを目的としています。したがって、このテストは、データがy
由来する分布に関する不確実性に適切に対応していません。
問題ない!順列テストフレームワークはまだ有効です。前の変更をtest.statistic
に変更することにより、前の調査を変更せずに再実行するだけです。結果は次のとおりです。
ヌルの分布は均一ではありませんが(左上)、未満ではかなり均一です。これが、その値を本当に気にするところです。その下のプロット(左下)を見ると、問題がわかります。KS統計は、いくつかの離散値を中心に集中する傾向があります。(この問題は、大規模なデータセットでは実質的になくなります。)
中央(均一vs正規)および右(均一vs指数)ヒストグラムはまさに正しいことをしています:2つの分布が異なる場合の大多数の場合、この検定は小さなp値を生成します。たとえば、ユニフォームをそれぞれの16個の値に基づいて標準と比較すると、%の確率で未満のp値が得られます。これを相関係数検定で達成された%のピドリングと比較してください。
正しいヒストグラムはあまり良くありませんが、少なくとも正しい方向にあります!我々は、それが持っていると推定均一で指数分布に差検出の%の確率%レベルとでその検出を作る%の確率(%レベルのための2つのバーため1000回の反復のうち500回で合計未満のp値)。
したがって、相関テストの問題は、この設定に固有の困難によるものではありません。相関テストのパフォーマンスが非常に悪いだけでなく、広く知られている利用可能なテストと比較しても悪いです。(許容できない、つまり、平均して、KSテストの置換バージョンよりも常にパフォーマンスが低下することを意味すると思います。これを使用する理由がないことを意味します。)
いいえ、相関はこれの良いテストではありません。
x <- 1:100 #Uniform
y <- sort(rnorm(100)) #Normal
cor(x,y) #.98
たとえば、2つの分布が両方とも正規であるかどうかを比較する良いテストを知りませんが、平均とsdが間接的に異なる可能性があります。それぞれの正規性を個別にテストできます。
変数の数が十分に多い場合、これはサイズ順に並べられた値との相関関係を示す場合があります。ただし、特に同じモデルを使用する可能性があるという信頼性を推定する手段がほとんどないため、特に有用な方法ではないようです。
経験しやすい問題は、平均値と歪度が類似しているが、中程度の数の測定値が十分に適合して相関関係が十分に見える場合の尖度の差があるモデルがある場合です。
両方の変数を異なる分布に対してモデル化して、それぞれが最も可能性が高いものを確認し、結果を比較する方が合理的と思われます。
両方の値を正規化し、それぞれを並べ替えてプロットすることにはいくつかのメリットがあるかもしれません-これにより、近似がどのように比較されるかを見ることができます-そして、両方に対して可能なモデルをプロットすることができます具体的な答え、分布の近さに関する視覚的なアイデアを期待しています。