Estou implementando vários algoritmos para estimar o melhor número de caixas a serem usadas para histogramas. A maioria dos que estou implementando está descrita na página "Histograma" da Wikipedia, na seção " Número de posições e largura " *.
Estou preso a um problema com a fórmula de Doane:
1 + log(n) + log(1 + kurtosis(data) * sqrt(n / 6.))
onde n
está o tamanho dos dados.
O problema é quando a curtose é negativa e n >> 1
porque o argumento da log
torna - se negativo.
* (essa página mudou desde que foi postada, link editado para apontar para a página como estava no momento da postagem)
Respostas:
Esta resposta sofreu alterações significativas à medida que investigo a página da Wikipedia. Eu deixei as respostas em grande parte como elas foram, mas adicionadas a elas, portanto, atualmente, isso forma uma progressão de entendimento; as últimas partes são onde está a melhor informação.
Resposta curta: a página da wikipedia - e a fórmula do OP, que parece ter sido a mesma - estão simplesmente erradas, por pelo menos três razões diferentes. Deixarei minha discussão original (que supunha que o OP e a wikipedia estavam certos), pois isso explica alguns problemas. Uma discussão melhor segue depois. O pequeno conselho: simplesmente esqueça Doane. Se você precisar usá-lo, use o que a wikipedia diz agora (eu o corrigi).
Eu acredito que a fórmula deve se referir ao excesso de curtose; minha razão para isso é que ela modifica uma fórmula para dados normais para dar conta de dados não normais, portanto, você espera que reproduza o não modificado no normal. Faz isso se você usar excesso de curtose.
Eu também sugeriria que, em qualquer caso, ele forneceria muito poucos compartimentos em tamanhos de amostra grandes, mesmo quando funcionasse como pretendido.
Você pode encontrar este documento (por CVer Rob Hyndman ):
http://www.robjhyndman.com/papers/sturges.pdf
de algum interesse. Se o argumento de Sturges estiver errado, a fórmula de Doane tem o mesmo problema ... como Rob observa claramente no jornal.
Nesse artigo (e nesta resposta ), ele concorda com a regra de Freedman-Diaconis. No artigo, ele também aponta para a abordagem mencionada por Matt Wand (ele se refere ao documento de trabalho que não parece estar online, mas o artigo subsequente está disponível se você tiver acesso):
http://www.jstor.org/discover/10.2307/2684697
[Editar: na verdade, um link para o documento de trabalho está na página do cidadão ]
Essa abordagem envolve a estimativa aproximada de funcionais específicos para obter larguras aproximadamente ótimas (em termos de erro quadrado integrado médio, MISE) para estimar a densidade subjacente. Embora eles funcionem bem e ofereçam muito mais caixas do que Sturges ou Doane em geral, às vezes eu ainda prefiro usar mais caixas, embora seja geralmente uma primeira tentativa muito boa.
Francamente, não sei por que a abordagem de Wand (ou pelo menos a regra de Fredman Diaconis) não é um padrão em todo lugar.
R oferece pelo menos o cálculo de Freedman-Diaconis do número de posições:
Vejo
?nclass.FD
Pessoalmente, para mim, são poucas caixas nos dois primeiros casos, pelo menos; Eu dobraria os dois, apesar de ser um pouco mais barulhento que o ideal. Como n se torna grande, acho que se sai muito bem na maioria dos casos.
Edição 2:
Decidi investigar o problema de distorção versus curtose em que @ PeterFlom expressou com razão perplexidade.
Acabei de dar uma olhada no artigo do Doane que eu estava vinculado (eu o li antes ... mas isso foi há quase 30 anos) - ele não faz nenhuma referência à curtose, apenas à distorção.
Parece-me que o argumento de Doane deveria estender - se felizmente à curtose, mas o erro padrão correto teria que ser usado.
No entanto, como Doane se apóia no argumento de Sturges e Sturges parece falho, talvez toda a empresa esteja condenada. De qualquer forma, editei a página de discussão do histograma na wikipedia, observando o erro.
---
fonte
A medida da curtose definida em termos do segundo e quarto momentos nunca é negativa ( veja ), então o
log(1+...)>0
.Esta quantidade é implementado no comando
kurtosis()
da biblioteca Rmoments
. Além disso, usando o comando,hist()
você pode especificar o número de quebras da seguinte formaA fórmula usada no comando
kurtosis()
é simplesmentemean((data - mean(data))^4)/mean((data - mean(data))^2)^2
.Agora, se você quiser investigar qual é a melhor `` fórmula '', precisará de um critério. Considere que isso foi discutido amplamente na literatura estatística.
fonte
log(n,2)
vez delog(n)
. MAS, a entrada da Wikipedia e outras fontes indicam que deveria serlog
.