Qualidade do ajuste para histogramas 2D

19

Eu tenho dois conjuntos de dados representando parâmetros de estrelas: um observado e um modelado. Com esses conjuntos, crio o que é chamado de diagrama de duas cores (TCD). Uma amostra pode ser vista aqui:

histogramas

A são os dados observados e B os dados extraídos do modelo (não importa as linhas pretas, os pontos representam os dados). Eu tenho apenas um diagrama A , mas posso produzir quantos diagramas B diferentes quiser e o que eu preciso é para manter aquele que melhor se encaixa a .

Então, o que eu preciso é de uma maneira confiável de verificar a qualidade do ajuste do diagrama B (modelo) ao diagrama A (observado).

No momento, o que faço é criar um histograma ou grade 2D (é assim que eu o chamo, talvez tenha um nome mais apropriado) para cada diagrama, dividindo os dois eixos (100 posições para cada). Depois, percorro cada célula da grade e encontro a diferença absoluta nas contagens entre A e B para essa célula em particular. Depois de ter passado por todas as células, que soma os valores para cada uma das células e portanto, acabar com um único parâmetro positivo representando a qualidade de ajuste ( ) entre A e B . Quanto mais próximo de zero, melhor o ajuste. Basicamente, é assim que esse parâmetro se parece:gf

; onde um i j é o número de estrelas em diagrama deumpara que cula particular (determinado por i j ) e b i j é o número deB.gf=Euj|umaEuj-bEuj|umaEujEujbEuj

É assim que essas diferenças nas contagens de cada célula se parecem na grade que eu criei (observe que não estou usando valores absolutos de ( a i j - b i j ) nesta imagem, mas Eu os uso ao calcular o parâmetro g f ):(umaEuj-bEuj)(umaEuj-bEuj)gf

hess

O problema é que fui avisado de que esse pode não ser um bom estimador, principalmente porque, além de dizer que esse ajuste é melhor que o outro, porque o parâmetro é mais baixo , não posso dizer mais nada.


Importante :

(obrigado @ PeterEllis por trazer isso à tona)

1- Pontos de B não estão relacionados um-para-um com pontos em um . É importante ter isso em mente ao procurar o melhor ajuste: o número de pontos em A e B não é necessariamente o mesmo e o teste de qualidade do ajuste também deve explicar essa discrepância e tentar minimizá-la.

2- O número de pontos em cada conjunto de dados B (saída do modelo) que tento ajustar em A não é fixo.


Eu já vi o teste do qui-quadrado usado em alguns casos:

Eu(OEu-EEu)2/EEuOEuEEu

EEuEEu

Além disso, li algumas pessoas que recomendam que um teste de Poisson com probabilidade de log seja aplicado em casos como este em que histogramas estão envolvidos. Se isso estiver correto, eu realmente apreciaria se alguém pudesse me instruir sobre como usar esse teste para este caso em particular (lembre-se, meu conhecimento de estatística é muito ruim, portanto, mantenha-o o mais simples possível :)

Gabriel
fonte
Os pontos em B têm uma relação individual com os pontos em A (por exemplo, cada um é uma estrela em particular) ou é mais abstrato do que isso?
Peter Ellis
Oi @PeterEllis, há pontos em B não estão relacionados um-para-um com pontos em A . De fato, é outra coisa importante a ter em mente ao procurar o melhor ajuste: o número de pontos em A e B não é necessariamente igual.
6119 Gabriel
Oi - pergunta interessante, vou tentar escrever uma resposta adequada. Cada versão de B tem o mesmo número de pontos ou também varia?
Peter Ellis
Também variam, apenas o número de pontos em A permanece constante. Você não tem idéia do quanto você me ajudaria se me ajudasse a descobrir isso @ PeterEllis.
Gabriel12
Esta pergunta tem uma forte semelhança com este tópico: stats.stackexchange.com/questions/71036/… Onde forneci uma resposta.
L Fischman

Respostas:

14

OK, revi amplamente esta resposta. Acho que, em vez de agrupar seus dados e comparar contagens em cada compartimento, a sugestão que eu enterrei na minha resposta original de ajustar uma estimativa de densidade de kernel em 2D e compará-los é uma idéia muito melhor. Melhor ainda, há uma função kde.test () no pacote ks de Tarn Duong para R que faz isso fácil como pie.

Consulte a documentação do kde.test para mais detalhes e os argumentos que você pode ajustar. Mas basicamente faz exatamente o que você deseja. O valor p que ele retorna é a probabilidade de gerar os dois conjuntos de dados que você está comparando sob a hipótese nula de que eles estavam sendo gerados a partir da mesma distribuição. Portanto, quanto maior o valor-p, melhor o ajuste entre A e B. Veja meu exemplo abaixo, onde é fácil perceber que B1 e A são diferentes, mas que B2 e A são plausivelmente iguais (é assim que eles foram gerados) .

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

insira a descrição da imagem aqui

> 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

MINHA RESPOSTA ORIGINAL ABAIXO, É MANTENDO SOMENTE PORQUE AGORA HÁ LINKS DE ELE EM QUALQUER LUGAR QUE NÃO FAZEM SENTIDO

Primeiro, pode haver outras maneiras de fazer isso.

Justel e cols. Propuseram uma extensão multivariada do teste de adequação de Kolmogorov-Smirnov, que eu acho que poderia ser usado no seu caso, para testar a adequação de cada conjunto de dados modelados ao original. Não consegui encontrar uma implementação disso (por exemplo, no R), mas talvez não parecesse o suficiente.

Como alternativa, pode haver uma maneira de fazer isso ajustando uma cópula aos dados originais e a cada conjunto de dados modelados e comparando esses modelos. Existem implementações dessa abordagem no R e em outros lugares, mas eu não estou especialmente familiarizado com elas, portanto não tentei.

Mas, para abordar sua pergunta diretamente, a abordagem adotada é razoável. Vários pontos se sugerem:

  • A menos que seu conjunto de dados seja maior do que parece, acho que uma grade de 100 x 100 possui muitos compartimentos. Intuitivamente, posso imaginar que você conclua que os vários conjuntos de dados são mais diferentes do que apenas porque a precisão de seus compartimentos significa que você tem muitos compartimentos com baixo número de pontos, mesmo quando a densidade de dados é alta. No entanto, isso no final é uma questão de julgamento. Certamente, eu verificaria seus resultados com diferentes abordagens ao binning.

  • Depois de fazer o binning e converter os dados em (com efeito) uma tabela de contingência com duas colunas e número de linhas igual ao número de posições (10.000 no seu caso), você tem um problema padrão de comparação de duas colunas de contagens. Um teste do qui-quadrado ou o ajuste de algum tipo de modelo de Poisson funcionaria, mas como você diz, há constrangimento por causa do grande número de contagens zero. Um desses modelos é normalmente adequado, minimizando a soma dos quadrados da diferença, ponderada pelo inverso do número esperado de contagens; quando isso se aproxima de zero, pode causar problemas.

Editar - o restante desta resposta agora não acredito mais ser uma abordagem apropriada.

ng×2

ng×2ng

Simulei alguns dados para parecer um pouco com o seu e descobri que essa abordagem era bastante eficaz para identificar quais dos meus conjuntos de dados "B" foram gerados a partir do mesmo processo que "A" e quais eram ligeiramente diferentes. Certamente mais eficaz que o olho nu.

  • ng×2um problema se você usar apenas a soma das diferenças absolutas ou quadráticas, conforme proposto originalmente). No entanto, importa que cada uma das suas versões de B tenha um número diferente de pontos. Basicamente, conjuntos de dados B maiores tendem a retornar valores p mais baixos. Eu posso pensar em várias soluções possíveis para esse problema. 1. Você pode reduzir todos os seus conjuntos de dados B para o mesmo tamanho (o tamanho do menor dos conjuntos B), colhendo uma amostra aleatória desse tamanho de todos os conjuntos B maiores que esse tamanho. 2. Você pode primeiro ajustar uma estimativa bidimensional da densidade do kernel para cada um dos seus conjuntos B e depois simular os dados dessa estimativa com tamanhos iguais. 3. você pode usar algum tipo de simulação para descobrir a relação dos valores-p com o tamanho e usá-la para "corrigir" os valores-p obtidos do procedimento acima para que sejam comparáveis. Provavelmente existem outras alternativas também. Qual deles dependerá de como os dados B foram gerados, quão diferentes são os tamanhos etc.

Espero que ajude.

Peter Ellis
fonte
Fiz algumas pequenas correções de erros de digitação; Espero que você não se importe. Pode haver uma maneira de formatar as coisas para extrair as idéias principais um pouco mais proeminentemente, principalmente no último tópico. Mas eu também não queria ser excessivamente zeloso. Felicidades. :)
cardeal
sem probs. Eu lutei com uma boa maneira de fazer a formatação do meu último ponto de marcador - o que eu queria era uma hierarquia de lista numerada sob um ponto de marcador. Mas não consegui encontrar como fazer isso.
Peter Ellis #
Sim, eu brinquei com isso também, brevemente, porque era o que parecia que você pretendia. Eu não conseguia descobrir rapidamente como fazer isso e estava muito hesitante em fazer alterações por atacado no layout, então achei que apenas comentaria. :)
cardeal
1
Eu recomendo o livro de Wilcox como um texto geral de estatísticas que usa R (veja minha resposta stats.stackexchange.com/questions/25632/… ). Embora ele não cubra o texto exato de Fisher, há detalhes suficientes sobre o texto específico na Web que farão mais sentido se você tiver o histórico desse livro em testes semelhantes. Pode haver um texto melhor sobre esse tipo específico de problema de ajuste, mas acho que o livro de Wilcox é ótimo como introdução geral que rapidamente leva você a um nível alto.
Peter Ellis
1
Uau. Você respondeu muito bem a essa coisa. Se houvesse um "melhor intercâmbio de pilha", isso estaria nele.
Colin K