Estou saindo dessa pergunta , caso alguém queira seguir a trilha.
Basicamente, eu tenho um conjunto de dados composto por objetos em que cada objeto tem um determinado número de valores medidos anexados (dois neste caso):
Eu preciso de uma maneira de determinar a probabilidade de um novo objeto de pertencer a então eu foi aconselhado nessa questão para obter uma densidade de probabilidade f através de um estimador de densidade kernel, que eu acredito que eu já tenho .
Desde que meu objetivo é obter a probabilidade de este novo objeto ( ) de pertencer a este conjunto de dados 2D Ω , disseram-me para integrar o pdf f sobre " valores do apoio para o qual a densidade é menor que o que você observou ". A densidade "observados" é f avaliada no novo objecto p , isto é: f ( x p , y p ) . Então, eu preciso resolver a equação:
O PDF do meu conjunto de dados 2D (obtido através do módulo stats.gaussian_kde do python ) fica assim:
onde o ponto vermelho representa o novo objeto plotado sobre o PDF do meu conjunto de dados.
Então a questão é: como eu posso calcular a integral acima para os limites quando o PDF se parece com isso?
Adicionar
Fiz alguns testes para ver como o método de Monte Carlo mencionado em um dos comentários funcionou. Isto é o que eu tenho:
Os valores parecem variar um pouco mais para áreas de menor densidade, com ambas as larguras de banda mostrando mais ou menos a mesma variação. A maior variação na tabela ocorre para o ponto (x, y) = (2.4,1.5) comparando o valor da amostra 2500 vs 1000 do Silverman, que fornece uma diferença de 0.0126
ou ~1.3%
. No meu caso, isso seria amplamente aceitável.
Edit : Acabei de notar que, em 2 dimensões, a regra de Scott é equivalente à de Silverman, de acordo com a definição dada aqui .
Respostas:
Uma maneira simples é rasterizar o domínio de integração e calcular uma aproximação discreta à integral.
Há algumas coisas a serem observadas:
Certifique-se de cobrir mais do que a extensão dos pontos: você precisa incluir todos os locais onde a estimativa de densidade do kernel terá valores apreciáveis. Isso significa que você precisa expandir a extensão dos pontos em três a quatro vezes a largura de banda do kernel (para um kernel gaussiano).
O resultado varia um pouco com a resolução da varredura. A resolução precisa ser uma pequena fração da largura de banda. Como o tempo de cálculo é proporcional ao número de células na varredura, não leva quase tempo extra para executar uma série de cálculos usando resoluções mais grossas do que a pretendida: verifique se os resultados para os mais grossos estão convergindo no resultado para o melhor resolução. Caso contrário, uma resolução mais precisa pode ser necessária.
Aqui está uma ilustração para um conjunto de dados de 256 pontos:
Os pontos são mostrados como pontos pretos sobrepostos em duas estimativas de densidade do kernel. Os seis grandes pontos vermelhos são "sondas" nas quais o algoritmo é avaliado. Isso foi feito para quatro larguras de banda (um padrão entre 1,8 (verticalmente) e 3 (horizontalmente), 1/2, 1 e 5 unidades) com uma resolução de 1000 por 1000 células. A seguinte matriz de gráfico de dispersão mostra quão fortemente os resultados dependem da largura de banda para esses seis pontos de sonda, que cobrem uma ampla variedade de densidades:
A variação ocorre por dois motivos. Obviamente, as estimativas de densidade diferem, introduzindo uma forma de variação. Mais importante, as diferenças nas estimativas de densidade podem criar grandes diferenças em qualquer ponto único ("sonda"). A última variação é maior em torno das "franjas" de densidade média de aglomerados de pontos - exatamente nos locais em que esse cálculo provavelmente será mais utilizado.
Isso demonstra a necessidade de cautela substancial no uso e na interpretação dos resultados desses cálculos, porque eles podem ser muito sensíveis a uma decisão relativamente arbitrária (a largura de banda a ser usada).
Código R
O algoritmo está contido na meia dúzia de linhas da primeira função
f
,. Para ilustrar seu uso, o restante do código gera as figuras anteriores.fonte
Default
eHp5
(presumoH1
eH5
quero dizerh=1
eh=5
). ÉHp5
o valorh=1/2
? Se sim, o que éDefault
?kde2d
usandobandwidth.nrd
. Para os dados de amostra, é igual akde
também aumenta (e, portanto, preciso estender os limites de integração)? Dado que eu posso viver com um erro<10%
no valor resultante da integral, o que você acha de usar a regra de Scott?Se você tiver um número decente de observações, talvez não seja necessário fazer nenhuma integração. Diga que seu novo ponto éx0 0 . Suponha que você tenha um estimador de densidadef^ ; resumir o número de observaçõesx para qual f^( x ) < f^( x0 0) e divida pelo tamanho da amostra. Isso fornece uma aproximação à probabilidade necessária.
Isso pressupõe quef^( x0 0) não é "muito pequeno" e o tamanho da amostra é grande o suficiente (e espalhado o suficiente) para fornecer uma estimativa decente nas regiões de baixa densidade. 20000 casos parecem grandes o suficiente, para bivariadosx .
fonte