2Dヒストグラムの適合度


19

星のパラメーターを表す2つのデータセットがあります。観測されたデータとモデル化されたデータです。これらのセットを使用して、2色図(TCD)と呼ばれるものを作成します。サンプルは次のとおりです。

ヒストグラム

Aは観測されたデータであり、Bはモデルから抽出されたデータです(黒い線は気にせず、ドットはデータを表します)Aダイアグラムは1つしかありませんが、必要な数の異なるBダイアグラムを作成できます。Aに最適なものを保持するため。

したがって、私が必要とするのは、ダイアグラムB(モデル)からダイアグラムA(観察)への適合度をチェックする信頼できる方法です。

今私がしていることは、両方の軸をビニングすることで各ダイアグラムの2Dヒストグラムまたはグリッド(私はそれを呼んでいますが、より適切な名前かもしれません)を作成します(それぞれ100ビン)その後、グリッドの各セルを通過しますそして、その特定のセルのABのカウントの絶対差を見つけます。すべてのセルを処理した後、各セルの値を合計するため、ABの間の適合度()を表す単一の正のパラメーターになります。ゼロに最も近いほど、適合度が高くなります。基本的に、これはそのパラメータがどのように見えるかです:gf

gf=ij|aijbij|; ここで、はその特定のセル(決定)のダイアグラムAの星の数であり、はBの数です。aijijbij

これは、各セルのカウントの差が、作成したグリッドでどのように見えるかです絶対値を使用していないことに注意してくださいしかし、この画像では私が行う計算する際にそれらを使用し)パラメータを:(aijbij)(aijbij)gf

ヘス

問題は、これが適切な推定量ではないかもしれないとアドバイスされたことです。主に、パラメータが低いためにこの適合が他の適合よりも優れていると言う以外は、私は本当に何も言えません。


重要

(これを提示してくれた@PeterEllisに感謝)

1- Bのポイントは、Aのポイントと1対1で関連付けられていません。これは、最適なフィットを検索する際に留意すべき重要なことです。ABのポイントの数は必ずしも同じではなく、適合度テストもこの不一致を考慮して最小化しようとします。

2-すべてのBデータセット(モデル出力)のポイント数は、Aに合わせようとしてますが固定されていません


私はいくつかのケースで使用されるカイ二乗検定を見てきました:

i(OiEi)2/Ei ; ここで、は観測頻度(モデル)、は予想頻度(観測)です。OiEi

しかし、問題は次のとおりですがゼロの場合はどうすればよいですか?上の画像でわかるように、その範囲でこれらのダイアグラムのグリッドを作成すると、がゼロのセルがたくさんあります。EiEi

また、ヒストグラムが関係するこのような場合に対数尤度ポアソン検定を適用することを推奨する人もいます。これが正しい場合、誰かがこの特定のケースにそのテストを使用する方法を教えてくれれば本当に感謝しています(統計の私の知識はかなり貧弱なので、できるだけ簡単にしてください:)


Bのポイントは、Aのポイントと1対1の関係にありますか(たとえば、それぞれが特定の星です)、それよりも抽象的ですか?
ピーターエリス

こんにちは、@ PeterEllis、BのポイントはAのポイントと1対1で関連付けられていません。実際、これは最適な検索を行う際に留意すべきもう1つの重要なことです。ABのポイントの数は必ずしも等しくありません
ガブリエル

こんにちは-興味深い質問です。適切な答えを書きます。Bの各バージョンは同じポイント数ですか、それとも変化しますか?
ピーターエリス

それらも変化し、Aの点の数だけが一定ままです。@PeterEllisを見つけ出すのを手伝ってくれたら、どれだけ助けてくれるかわからない。
ガブリエル

この質問は、このトピックと非常によく似ています:stats.stackexchange.com/questions/71036/…ここで答えを提供しました。
Lフィッシュマン(Fishman)

回答:


14

わかりました、この答えを大幅に修正しました。データをビニングして各ビンのカウントを比較するよりも、2Dカーネル密度の推定値をあてはめて比較するという元の答えに埋もれていた提案の方がはるかに良い考えだと思います。さらに良いことに、Tarn DuongのR用のksパッケージには、これをパイとして簡単に実行する関数kde.test()があります。

詳細と調整可能な引数については、kde.testのドキュメントを参照してください。しかし、基本的にそれはあなたが望むものをほとんど正確に行います。返されるp値は、同じ分布から生成されたという帰無仮説の下で比較している2つのデータセットを生成する確率です。したがって、p値が高いほど、AとBの間の適合度が高くなります。以下の例を参照してください。 。

# generate some data that at least looks a bit similar
generate <- function(n, displ=1, perturb=1){
    BV <- rnorm(n, 1*displ, 0.4*perturb)
    UB <- -2*displ + BV + exp(rnorm(n,0,.3*perturb))
    data.frame(BV, UB)
}
set.seed(100)
A <- generate(300)
B1 <- generate(500, 0.9, 1.2)
B2 <- generate(100, 1, 1)
AandB <- rbind(A,B1, B2)
AandB$type <- rep(c("A", "B1", "B2"), c(300,500,100))

# plot
p <- ggplot(AandB, aes(x=BV, y=UB)) + facet_grid(~type) + 
    geom_smooth() +     scale_y_reverse() + theme_grey(9)
win.graph(7,3)
p +geom_point(size=.7)

ここに画像の説明を入力してください

> library(ks)
> kde.test(x1=as.matrix(A), x2=as.matrix(B1))$pvalue
[1] 2.213532e-05
> kde.test(x1=as.matrix(A), x2=as.matrix(B2))$pvalue
[1] 0.5769637

私の元の答えは、他の場所からのリンクがあり、それが意味をなさないためです。

まず、これについては他の方法もあります。

Justelらは、モデル化されたデータの各セットが元のデータにどの程度適合するかをテストするために、あなたのケースで使用できると思われる適合度のコルモゴロフ-スミルノフテストの多変量拡張を提案しました。私はこれの実装を見つけることができませんでした(例えば、Rで)が、おそらく私は十分に一見しませんでした。

または、コピュラを元のデータとモデル化されたデータの各セットの両方に適合させ、それらのモデルを比較することにより、これを行う方法があります。Rや他の場所にこのアプローチの実装がありますが、私はそれらに特に精通していないので、試していません。

しかし、あなたの質問に直接対処するために、あなたが取ったアプローチは合理的なものです。いくつかのポイントが示唆しています。

  • データセットが見た目よりも大きい場合を除き、100 x 100グリッドではビンが多すぎると思います。直感的には、ビンの精度のために、データの密度が高い場合でも、さまざまなデータのセットが異なるという結論をあなたが持っていることを想像することができます。しかし、これは最終的には判断の問題です。ビンニングに対するさまざまなアプローチを使用して、確かに結果を確認します。

  • ビニングを実行し、データを(実際には)ビンの数(この場合は10,000)に等しい2つの列と行の数を含む分割表に変換すると、2つの列を比較する標準的な問題が発生します。カウントの。カイ二乗検定または何らかのポアソンモデルのフィッティングのいずれかが機能しますが、あなたが言うように、多数のゼロカウントのために厄介です。通常、これらのモデルのいずれかは、予想されるカウント数の逆数で重み付けされた差の二乗和を最小化することにより適合します。これがゼロに近づくと、問題が発生する可能性があります。

編集-この答えの残りの部分は、今では適切なアプローチではないと信じています。

このような状況では、Fisherの正確なテストは役に立たないか、適切ではないと思うので、クロスタブの行の限界合計は固定されていません。それはもっともらしい答えを与えるだろうが、その使用を実験デザインからの元の派生と調和させることは難しいと思う。コメントとフォローアップの質問が意味をなすように、元の回答をここに残します。さらに、OPのデータをビニングし、平均絶対差または二乗差に基づいたテストでビンを比較するという望ましいアプローチに答える方法がまだあるかもしれません。このようなアプローチでは、以下に示す使用して独立性をテストします。つまり、列Aが列Bと同じ比率である結果を探します。ng×2

上記の問題の解決策は、フィッシャーの正確検定を使用して適用することだと思います。ここで、はビンの総数です。テーブル内の行数のために完全な計算は実用的ではない可能性がありますが、モンテカルロシミュレーションを使用してp値の適切な推定値を取得できます(フィッシャーのテストのR実装では、テーブルのオプションとしてこれを提供します2 x 2より大きく、他のパッケージもそうだと思います)。これらのp値は、(モデルの1つからの)データの2番目のセットが、ビンを通じて元と同じ分布を持っている確率です。したがって、p値が高いほど、適合度は高くなります。 n gng×2ng

いくつかのデータをシミュレートして、ユーザーのデータに少し似たものにし、このアプローチが、「A」と同じプロセスから生成された「B」データセットと、わずかに異なるデータセットを識別するのに非常に効果的であることがわかりました。肉眼よりも確かに効果的です。

  • このアプローチは中の変数の独立性をテストして分割表、それがAの点の数は、それがそのノートものの(Bのものと異なっていることが問題ではないですng×2最初に提案したように、絶対差の合計または差の二乗だけを使用する場合の問題)。ただし、Bの各バージョンのポイント数が異なることは重要です。基本的に、大きなBデータセットは低いp値を返す傾向があります。この問題に対するいくつかの可能な解決策を考えることができます。1.そのサイズよりも大きいすべてのBセットからそのサイズのランダムサンプルを取得することにより、すべてのBセットのデータを同じサイズ(Bセットの最小のサイズ)に縮小できます。2.最初に2次元のカーネル密度推定値を各Bセットに適合させ、次にその推定値から等しいサイズのデータ​​をシミュレートできます。3.何らかの種類のシミュレーションを使用して、p値とサイズの関係を計算し、それを使用して「修正」することができます。上記の手順で得られるp値を比較できるようにします。おそらく他の選択肢もあります。どちらを行うかは、Bデータの生成方法、サイズの違いなどによって異なります。

お役に立てば幸いです。


私はいくつかの小さなタイプミスを修正しました。気にしないでください。特に最後の箇条書きでは、主要なアイデアをもう少し顕著に引き出すために、物事をフォーマットする方法があるかもしれません。しかし、私も熱心になりたくありませんでした。乾杯。:)
枢機

問題ありません。私は最後の箇条書きの書式設定を行う良い方法に苦労しました-私が望んでいたのは、箇条書きの下の番号付きリストの階層でした。しかし、私はそれを行う方法を見つけることができませんでした。
ピーターエリス

ええ、私もそれを簡単にいじりました。それがあなたが意図したように見えたからです。その方法をすぐに理解できなかったため、レイアウトを大幅に変更することを非常にためらいました。そのため、代わりにコメントするだけだと思いました。:)
枢機

1
Rを使用する一般的な統計テキストとしてWilcoxの本をお勧めします(私の答えstats.stackexchange.com/questions/25632/…を参照)。彼はフィッシャーの正確なテキストを隠していませんが、ウェブ上の特定のテキストには十分な詳細があり、同様のテストに関する本の背景を知っていれば、より理にかなっています。この特定の種類の適合度の問題に関するより良いテキストがあるかもしれませんが、Wilcoxの本は、すぐに高レベルに導く一般的なイントロとして素晴らしいと思います。
ピーターエリス

1
ワオ。あなたはこのことから一体と答えました。「最高のスタック交換」があった場合、これはその中にあります。
コリンK
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.