Passgenauigkeit für 2D-Histogramme


19

Ich habe zwei Datensätze, die Sternparameter darstellen: einen beobachteten und einen modellierten. Mit diesen Sets erstelle ich ein sogenanntes Zwei-Farben-Diagramm (TCD). Ein Beispiel ist hier zu sehen:

Histogramme

A sind die beobachteten Daten und B die aus dem Modell extrahierten Daten (egal, welche schwarzen Linien, welche Punkte die Daten darstellen). Ich habe nur ein A- Diagramm, kann aber so viele verschiedene B- Diagramme erzeugen, wie ich möchte, und was ich brauche, ist um den zu behalten, der am besten zu A passt .

Was ich also brauche, ist eine zuverlässige Methode, um die Übereinstimmung von Diagramm B (Modell) mit Diagramm A (beobachtet) zu überprüfen .

Im Moment erstelle ich für jedes Diagramm ein 2D-Histogramm oder -Gitter (so nenne ich es, vielleicht hat es einen genaueren Namen), indem ich beide Achsen bündle (jeweils 100 Bins). Dann gehe ich jede Zelle des Gitters durch und ich finde den absoluten Unterschied in der Anzahl zwischen A und B für diese bestimmte Zelle. Nachdem ich alle Zellen durchlaufen habe, summiere ich die Werte für jede Zelle und erhalte einen einzigen positiven Parameter, der die Anpassungsgüte ( ) zwischen A und B darstellt . Je näher an Null, desto besser ist die Passform. Grundsätzlich sieht dieser Parameter folgendermaßen aus:gf

; wo a i j die Anzahl der Sterne in Diagramm istAfür diese bestimmte Zelle (bestimmt durch i j ) und b i j ist die Nummer fürB.gf=ij|aijbij|aijijbij

So sehen die Zählungsunterschiede in jeder Zelle in dem von mir erstellten Raster aus (beachten Sie, dass ich in diesem Bild nicht die absoluten Werte von ( a i j - b i j ) verwende, sondern ich tun sie verwenden , wenn die Berechnung g f Parameter):(aijbij)(aijbij)gf

hess

Das Problem ist, dass mir geraten wurde, dass dies möglicherweise kein guter Schätzer ist, vor allem, weil ich, abgesehen davon, dass diese Anpassung besser ist als diese andere, weil der Parameter niedriger ist , wirklich nichts mehr sagen kann.


Wichtig :

(danke @PeterEllis dafür, dass du das angesprochen hast)

1- Punkte in B sind nicht eins zu eins mit Punkten in A verbunden . Das ist eine wichtige Sache im Auge zu behalten , wenn für den besten Sitz der Suche: die Anzahl der Punkte in A und B ist nicht unbedingt die gleiche und die Güte der Anpassung Tests sollte auch für diese Diskrepanz und versucht , es zu minimieren.

2- Die Anzahl der Punkte in jedem B- Datensatz (Modellausgabe), die ich versuche, an A anzupassen, ist nicht festgelegt.


Ich habe den Chi-Quadrat- Test in einigen Fällen gesehen:

i(OiEi)2/EiOiEi

EiEi

Ich habe auch gelesen, dass einige Leute einen Log-Likelihood-Poisson- Test empfehlen , der in solchen Fällen angewendet wird, in denen es sich um Histogramme handelt. Wenn dies korrekt ist, würde ich es sehr begrüßen, wenn jemand mir erklären könnte, wie ich diesen Test in diesem speziellen Fall verwenden kann (denken Sie daran, dass meine statistischen Kenntnisse ziemlich schlecht sind, also halten Sie es bitte so einfach wie möglich :)


Haben die Punkte in B eine Eins-zu-Eins-Beziehung zu den Punkten in A (z. B. ist jeder ein bestimmter Stern) oder ist er abstrakter?
Peter Ellis

Hallo @PeterEllis, keine Punkte in B sind nicht eins zu eins mit Punkten in A verbunden . In der Tat , das ist ein andere wichtige Sache im Auge zu behalten , wenn für den besten Sitz der Suche: die Anzahl der Punkte in A und B ist nicht notwendigerweise gleich.
Gabriel

Hallo - interessante Frage, ich werde versuchen, eine richtige Antwort zu schreiben. Hat jede Version von B die gleiche Anzahl von Punkten oder variieren sie auch?
Peter Ellis

Sie variieren ebenfalls, nur die Anzahl der Punkte in A bleibt konstant. Du hast KEINE Ahnung, wie sehr du mir helfen würdest, wenn du mir hilfst, das herauszufinden, @PeterEllis.
Gabriel

Diese Frage hat große Ähnlichkeit mit diesem Thema: stats.stackexchange.com/questions/71036/… Wo ich eine Antwort gegeben habe.
L Fischman

Antworten:


14

OK, ich habe diese Antwort gründlich überarbeitet. Ich denke, anstatt Ihre Daten zu bündeln und die Anzahl in jedem Bin zu vergleichen, ist der Vorschlag, den ich in meiner ursprünglichen Antwort begraben habe, eine Schätzung der 2D-Kerneldichte zu erstellen und diese zu vergleichen, eine viel bessere Idee. Noch besser, es gibt eine Funktion kde.test () in Tarn Duongs ks-Paket für R, die dies ganz einfach macht.

In der Dokumentation zu kde.test finden Sie weitere Details und die Argumente, die Sie optimieren können. Aber im Grunde macht es so ziemlich genau das, was Sie wollen. Der zurückgegebene p-Wert gibt die Wahrscheinlichkeit an, dass die beiden zu vergleichenden Datensätze unter der Nullhypothese generiert werden, dass sie aus derselben Verteilung generiert wurden. Je höher der p-Wert, desto besser ist die Übereinstimmung zwischen A und B. Siehe mein Beispiel unten, in dem leicht erkannt wird, dass B1 und A unterschiedlich sind, B2 und A jedoch plausibel gleich sind (wie sie generiert wurden). .

# 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)

Bildbeschreibung hier eingeben

> 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

MEINE URSPRÜNGLICHE ANTWORT UNTEN WIRD NUR BEHALTEN, WEIL ES JETZT LINKS ZU IHM GIBT, WAS ANDERNfalls keinen Sinn ergibt

Erstens kann es andere Wege geben, dies zu tun.

Justel et al haben eine multivariate Erweiterung des Kolmogorov-Smirnov-Tests für die Anpassungsgüte vorgelegt, die meines Erachtens in Ihrem Fall verwendet werden könnte, um zu testen, wie gut jeder Satz modellierter Daten zum Original passt. Ich konnte keine Implementierung finden (zB in R), aber vielleicht habe ich nicht genau genug nachgesehen.

Alternativ kann es eine Möglichkeit geben, dies zu tun, indem eine Kopula sowohl an die Originaldaten als auch an jeden Satz modellierter Daten angepasst wird und diese Modelle dann verglichen werden. Es gibt Implementierungen dieses Ansatzes in R und an anderen Orten, aber ich bin nicht besonders vertraut mit ihnen, also habe ich es nicht versucht.

Um Ihre Frage jedoch direkt zu beantworten, haben Sie einen vernünftigen Ansatz gewählt. Mehrere Punkte liegen auf der Hand:

  • Sofern Ihr Datensatz nicht größer ist als es aussieht, glaube ich, dass ein 100 x 100-Raster zu viele Fächer enthält. Ich kann mir intuitiv vorstellen, dass Sie zu dem Schluss kommen, dass die verschiedenen Datensätze unterschiedlicher sind als aufgrund der Genauigkeit Ihrer Bins. Das bedeutet, dass Sie viele Bins mit einer geringen Anzahl von Punkten haben, auch wenn die Datendichte hoch ist. Dies ist jedoch letztendlich eine Frage des Urteils. Ich würde Ihre Ergebnisse auf jeden Fall mit verschiedenen Ansätzen zum Binning überprüfen.

  • Nachdem Sie die Gruppierung vorgenommen und Ihre Daten in eine Kontingenztabelle mit zwei Spalten und einer Zeilenzahl umgewandelt haben, die der Anzahl der Klassen entspricht (in Ihrem Fall 10.000), besteht das Standardproblem des Vergleichs von zwei Spalten von zählt. Entweder ein Chi-Quadrat-Test oder die Anpassung eines Poisson-Modells würde funktionieren, aber wie Sie sagen, ist es aufgrund der großen Anzahl von Nullzählungen umständlich. Jedes dieser Modelle wird normalerweise angepasst, indem die Summe der Quadrate der Differenz, gewichtet mit dem Kehrwert der erwarteten Anzahl von Zählungen, minimiert wird. Wenn dies gegen Null geht, kann es zu Problemen kommen.

Bearbeiten - den Rest dieser Antwort halte ich jetzt nicht mehr für einen angemessenen Ansatz.

ng×2

ng×2ng

Ich habe einige Daten so simuliert, dass sie ein bisschen wie Ihre aussahen, und dabei festgestellt, dass dieser Ansatz sehr effektiv war, um zu identifizieren, welche meiner "B" -Datensätze aus demselben Prozess wie "A" generiert wurden und welche geringfügig voneinander abweichen. Sicher effektiver als das bloße Auge.

  • ng×2ein Problem, wenn Sie nur die Summe der absoluten Differenzen oder der quadratischen Differenzen verwenden (wie Sie ursprünglich vorgeschlagen haben). Es ist jedoch wichtig, dass jede Ihrer Versionen von B eine andere Anzahl von Punkten hat. Grundsätzlich tendieren größere B-Datensätze dazu, niedrigere p-Werte zurückzugeben. Ich kann mir mehrere mögliche Lösungen für dieses Problem vorstellen. 1. Sie können alle Ihre B-Sätze von Daten auf dieselbe Größe reduzieren (die Größe des kleinsten Ihrer B-Sätze), indem Sie eine Zufallsstichprobe dieser Größe aus allen B-Sätzen ziehen, die größer als diese Größe sind. 2. Sie können zunächst eine zweidimensionale Schätzung der Kerneldichte an jeden Ihrer B-Sätze anpassen und dann Daten aus dieser Schätzung simulieren, die gleich groß sind. 3. Sie könnten eine Art Simulation verwenden, um die Beziehung zwischen p-Werten und Größe zu ermitteln und diese zur "Korrektur" zu verwenden. Die p-Werte, die Sie aus der obigen Prozedur erhalten, sind also vergleichbar. Es gibt wahrscheinlich auch andere Alternativen. Welche Sie ausführen, hängt davon ab, wie die B-Daten generiert wurden, wie unterschiedlich die Größen sind usw.

Ich hoffe, das hilft.


Ich habe ein paar kleine Tippfehler korrigiert. Ich hoffe es macht dir nichts aus. Es kann eine Möglichkeit geben, Dinge zu formatieren, um die Hauptideen ein wenig hervorzuheben, insbesondere im letzten Aufzählungspunkt. Aber ich wollte auch nicht übereifrig sein. Prost. :)
Kardinal

kein Problem. Ich hatte Probleme damit, meinen letzten Aufzählungspunkt zu formatieren - was ich wollte, war eine Hierarchie von nummerierten Listen unter einem Aufzählungspunkt. Aber ich konnte nicht finden, wie das geht.
Peter Ellis

Ja, ich habe auch kurz damit rumgespielt, weil es so aussah, als ob du es beabsichtigt hättest. Ich konnte nicht schnell herausfinden, wie das geht, und war sehr zögernd, Änderungen am Layout vorzunehmen. Deshalb dachte ich, ich würde stattdessen nur einen Kommentar abgeben. :)
Kardinal

1
Ich empfehle Wilcox 'Buch als allgemeinen Statistik-Text, der R verwendet (siehe meine Antwort stats.stackexchange.com/questions/25632/… ). Obwohl er den genauen Text von Fisher nicht abdeckt, gibt es genug Details zu dem spezifischen Text im Web, was sinnvoller ist, wenn Sie den Hintergrund in diesem Buch zu ähnlichen Tests haben. Es gibt vielleicht einen besseren Text zu dieser Art von Anpassungsproblemen, aber ich denke, Wilcox 'Buch ist großartig als allgemeines Intro, das Sie schnell auf ein hohes Niveau bringt.
Peter Ellis

1
Beeindruckend. Du hast das verdammt nochmal beantwortet. Wenn es ein "best of stackexchange" gäbe, wäre das drin.
Colin K
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.