Bontà di adattamento per istogrammi 2D


19

Ho due serie di dati che rappresentano i parametri stelle: uno osservato e uno modellato. Con questi set creo quello che viene chiamato un diagramma a due colori (TCD). Un esempio può essere visto qui:

histogramas

A essendo i dati osservati e B i dati estratti dal modello (non importa le linee nere, i punti rappresentano i dati) Ho solo un diagramma A , ma posso produrre tutti i diversi diagrammi B che voglio e quello di cui ho bisogno è per mantenere quella che meglio si adatta a .

Quindi quello di cui ho bisogno è un modo affidabile per verificare la bontà dell'adattamento del diagramma B (modello) al diagramma A (osservato).

In questo momento quello che faccio è creare un istogramma o una griglia 2D (questo è quello che io chiamo, forse ha un nome più appropriato) per ogni diagramma binning di entrambi gli assi (100 bin per ciascuno) Quindi passo attraverso ogni cella della griglia e trovo il differenza assoluta nei conteggi tra A e B per quella particolare cella. Dopo aver attraversato tutte le celle, che sommare i valori per ogni cella e così alla fine con un singolo parametro positivo che rappresenta la bontà di adattamento ( ) tra A e B . Il più vicino a zero, migliore è la misura. Fondamentalmente, questo è l'aspetto di quel parametro:gf

; dove a i j è il numero di stelle nel diagrammaAper quella particolare cella (determinato dagf=Σioj|un'ioj-Bioj|un'ioj ) e b i j è il numeroB.iojBioj

Questo è ciò che quelle differenze nella conta di ogni cella sembrano nella griglia che creo (nota che non sto usando valori assoluti di ( a i j - b i(un'ioj-Bioj) in questa immagine ma iofacciousarle per il calcolo del g f parametri):(un'ioj-Bioj)gf

hess

Il problema è che mi è stato consigliato che questo potrebbe non essere un buon stimatore, principalmente perché oltre a dire che questa misura è migliore di questa perché il parametro è più basso , non posso davvero dire altro.


Importante :

(grazie @PeterEllis per averlo segnalato)

1- Punti in B non sono legati uno-a-uno con punti in A . Questa è una cosa importante da tenere a mente quando si cerca l'adattamento migliore: il numero di punti in A e B non è necessariamente lo stesso e la bontà del test di adattamento dovrebbe anche tenere conto di questa discrepanza e cercare di minimizzarla.

2- Il numero di punti in ogni set di dati B (output del modello) che cerco di adattare ad A non è fisso.


Ho visto il test Chi-Squared usato in alcuni casi:

; dove O iΣio(Oio-Eio)2/EioOioEio

ma il problema è: cosa devo fare se è zero? Come puoi vedere nell'immagine sopra, se creo una griglia di quei diagrammi in quell'intervallo ci saràEioEio

Inoltre, ho letto che alcune persone raccomandano a di applicare un test Poisson di verosimiglianza in casi come questo in cui sono coinvolti gli istogrammi. Se questo è corretto, lo apprezzerei molto se qualcuno potesse darmi istruzioni su come utilizzare quel test in questo caso particolare (ricorda, la mia conoscenza delle statistiche è piuttosto scarsa, quindi per favore mantienila il più semplice possibile :)


I punti in B hanno una relazione uno a uno con i punti in A (ad es. Ognuno è una stella particolare) o è più astratto di quello?
Peter Ellis,

Hi @PeterEllis, nessun punto in B non sono legati uno-a-uno con punti in A . In realtà questa è un'altra cosa importante da tenere a mente quando si cerca la soluzione migliore: il numero di punti in A e B sono non necessariamente uguale.
Gabriel,

Ciao - domanda interessante, proverò a scrivere una risposta adeguata. Ogni versione di B ha lo stesso numero di punti o anch'essa varia?
Peter Ellis,

Anche loro variano, solo il numero di punti in A rimane costante. Non hai idea di quanto mi aiuteresti se mi aiutassi a capirlo @PeterEllis.
Gabriel

Questa domanda ha una forte somiglianza con questo argomento: stats.stackexchange.com/questions/71036/… dove ho fornito una risposta.
L Fischman,

Risposte:


14

OK, ho ampiamente rivisto questa risposta. Penso che piuttosto che eseguire il binning dei dati e confrontare i conteggi in ogni bin, il suggerimento che avevo nascosto nella mia risposta originale di adattamento di una stima della densità del kernel 2d e il confronto di questi è un'idea molto migliore. Ancora meglio, c'è una funzione kde.test () in Tarn Duong pacchetto ks di per R che lo rende facile come una torta.

Controlla la documentazione di kde.test per maggiori dettagli e gli argomenti che puoi modificare. Ma sostanzialmente fa esattamente quello che vuoi. Il valore p che restituisce è la probabilità di generare i due insiemi di dati che si stanno confrontando con l'ipotesi nulla che fossero generati dalla stessa distribuzione. Quindi più alto è il valore p, migliore è l'adattamento tra A e B. Vedi il mio esempio qui sotto in cui questo rileva facilmente che B1 e A sono diversi, ma che B2 e A sono plausibilmente uguali (che è il modo in cui sono stati generati) .

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

inserisci qui la descrizione dell'immagine

> 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

LA MIA RISPOSTA ORIGINALE SOTTO, È TENUTA SOLO PERCHÉ CI SONO ORA CI SONO LINK DA ALTRO QUI CHE NON RENDERANNO SENSO

Innanzitutto, potrebbero esserci altri modi per farlo.

Justel et al Hanno presentato un'estensione multivariata del test Kolmogorov-Smirnov di bontà di adattamento che penso possa essere usato nel tuo caso, per testare quanto ogni serie di dati modellati si adatta all'originale. Non sono riuscito a trovare un'implementazione di questo (ad es. In R) ma forse non sono sembrato abbastanza duro.

In alternativa, potrebbe esserci un modo per farlo montando una copula sia ai dati originali che a ciascun set di dati modellati, quindi confrontando tali modelli. Ci sono implementazioni di questo approccio in R e in altri luoghi, ma non li conosco particolarmente, quindi non ci ho provato.

Ma per rispondere direttamente alla tua domanda, l'approccio che hai adottato è ragionevole. Diversi punti si suggeriscono:

  • A meno che il tuo set di dati non sia più grande di quanto sembri, penso che una griglia 100 x 100 contenga troppi bin. Intuitivamente, posso immaginare che la conclusione dei vari insiemi di dati sia più dissimile di quanto non lo siano solo a causa della precisione dei tuoi bin significa che hai molti bin con un basso numero di punti, anche quando la densità dei dati è alta. Tuttavia, questo alla fine è una questione di giudizio. Verificherei sicuramente i tuoi risultati con diversi approcci al binning.

  • Dopo aver effettuato il binning e aver convertito i tuoi dati in (in effetti) una tabella di contingenza di conteggi con due colonne e un numero di righe pari al numero di bin (10.000 nel tuo caso), hai un problema standard nel confrontare due colonne di conteggi. O un test Chi quadrato o il montaggio di una sorta di modello di Poisson funzionerebbe, ma come dici tu c'è imbarazzo a causa del gran numero di conteggi zero. Entrambi questi modelli sono normalmente adatti minimizzando la somma dei quadrati della differenza, ponderata dall'inverso del numero atteso di conteggi; quando questo si avvicina a zero può causare problemi.

Modifica - il resto di questa risposta ora non credo più di essere un approccio appropriato.

ng×2 incrociati citata più avanti e prova per l'indipendenza cioè cerca di un esito quando colonna A aveva le stesse proporzioni colonna B.

ng×2ng

Ho simulato alcuni dati per assomigliare ai tuoi e ho scoperto che questo approccio era abbastanza efficace nell'identificare quali dei miei insiemi di dati "B" sono stati generati dallo stesso processo di "A" e quali erano leggermente diversi. Certamente più efficace dell'occhio nudo.

  • ng×2 èun problema se si utilizza solo la somma delle differenze assolute o quadrate, come inizialmente proposto. Tuttavia, è importante che ciascuna delle tue versioni di B abbia un numero diverso di punti. Fondamentalmente, i set di dati B più grandi avranno la tendenza a restituire valori p più bassi. Posso pensare a diverse possibili soluzioni a questo problema. 1. Potresti ridurre tutti i tuoi set di dati B alla stessa dimensione (la dimensione del più piccolo dei tuoi set B), prelevando un campione casuale di quella dimensione da tutti i set B più grandi di quella dimensione. 2. In primo luogo è possibile adattare una stima della densità del kernel bidimensionale a ciascuno dei set B, quindi simulare i dati di tale stima di dimensioni uguali. 3. potresti usare un qualche tipo di simulazione per elaborare la relazione tra valori p e dimensioni e usarlo per "correggere" i valori p che si ottengono dalla procedura sopra descritta, quindi sono comparabili. Probabilmente ci sono anche altre alternative. Quale fai dipenderà da come sono stati generati i dati B, da quanto sono diverse le dimensioni, ecc.

Spero possa aiutare.


Ho apportato alcune correzioni minori di refuso; Spero non ti dispiaccia. Potrebbe esserci un modo di formattare le cose per estrarre le idee principali in modo un po 'più evidente, in particolare nell'ultimo punto elenco. Ma non volevo essere troppo zelante. Saluti. :)
cardinale

nessun problema. Ho lottato con un buon modo per formattare il mio ultimo punto elenco - quello che volevo era una gerarchia di elenco numerato sotto un punto elenco. Ma non riuscivo a trovare come farlo.
Peter Ellis,

Sì, ho anche armeggiato con quello, brevemente, perché è quello che sembrava che tu intendessi. Non riuscivo a capire rapidamente come farlo ed ero molto riluttante a apportare modifiche all'ingrosso al layout, quindi ho pensato che avrei semplicemente commentato. :)
cardinale

1
Raccomando il libro di Wilcox come testo di statistiche generali che utilizza R (vedere la mia risposta stats.stackexchange.com/questions/25632/… ). Sebbene non copra il testo esatto di Fisher, ci sono abbastanza dettagli sul testo specifico sul web che avranno più senso se hai lo sfondo in quel libro su test simili. Potrebbe esserci un testo migliore là fuori su questo specifico tipo di bontà del problema di adattamento, ma penso che il libro di Wilcox sia fantastico come introduzione generale che ti porta rapidamente ad un livello elevato.
Peter Ellis,

1
Wow. Hai risposto diamine a questa cosa. Se ci fosse un "best of stackexchange", questo sarebbe in esso.
Colin K,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.