Formule de Doane pour le regroupement d'histogrammes

9

J'implémente divers algorithmes pour estimer le meilleur nombre de casiers à utiliser pour les histogrammes. La plupart de ceux que j'implémente sont décrits sur la page Wikipedia "Histogramme" dans la section " Nombre de bacs et largeur " *.

Je suis coincé sur un problème avec la formule de Doane:

1 + log(n) + log(1 + kurtosis(data) * sqrt(n / 6.))

nest la taille des données.

Le problème est quand le kurtosis est négatif et n >> 1parce que l'argument du logdevient négatif.

* (cette page a changé depuis qu'elle a été publiée, lien modifié pour pointer vers la page telle qu'elle était au moment de la publication)

Ruggero Turra
la source
1
Savez-vous si cette formule utilise un kurtosis ou un excès de kurtosis (c.-à-d. La distance normale a-t-elle 4 ou 0)?
Peter Flom
@PeterFlom: dans l'article original ( amstat.tandfonline.com/doi/pdf/10.1080/00031305.1976.10479172 ) le kurtosis est défini comme le Skewness, mais je ne suis pas expert. Le papier original est également très différent de la formule wikipedia
Ruggero Turra
1
Euh, quoi? Le kurtosis est défini comme l'asymétrie? Cela n'a aucun sens; ils sont très différents. Je ne peux pas accéder au journal, mais il semble que quelque chose soit gâché quelque part.
Peter Flom
@PeterFlom La distribution normale devrait avoir un kurtosis de 3 et non 4.
Glen_b -Reinstate Monica
@PeterFlom J'ai enquêté sur le problème d'asymétrie vs kurtosis - voir "Edit 2" dans ma réponse.
Glen_b -Reinstate Monica

Réponses:

11

Cette réponse a subi des changements importants lorsque j'examine la page wikipedia. J'ai laissé les réponses en grande partie telles qu'elles étaient mais y ai ajouté, donc à l'heure actuelle, cela forme une progression de la compréhension; les dernières parties sont celles où se trouvent les meilleures informations.

Réponse courte: la page wikipedia - et la formule de l'OP, qui semble avoir été la même - sont tout simplement erronées, pour au moins trois raisons différentes. Je vais laisser ma discussion d'origine (qui supposait que l'OP et wikipedia avaient raison) car cela explique certains problèmes. Une meilleure discussion suivra plus tard. Le petit conseil: oubliez simplement Doane. Si vous devez l' utiliser, utilisez ce que wikipedia dit maintenant (je l'ai corrigé).


Je crois que la formule doit faire référence à un excès de kurtosis; ma raison en est qu'il modifie une formule pour les données normales pour tenir compte des données non normales de sorte que vous vous attendez à ce qu'il reproduise celui non modifié à la normale. Il le fait si vous utilisez un excès de kurtosis.

0n

Je suggérerais également que dans tous les cas, cela donnera beaucoup trop peu de casiers à des échantillons de grande taille, même quand cela fonctionne comme prévu.

Vous pouvez trouver ce document (par le CVer régulier Rob Hyndman ):

http://www.robjhyndman.com/papers/sturges.pdf

d'intérêt. Si l'argument de Sturges est faux, la formule de Doane a le même problème ... comme le note clairement Rob dans le document.

Dans cet article (et dans cette réponse ), il fait un signe de tête à la règle Freedman-Diaconis. Dans le document, il souligne également l'approche mentionnée par Matt Wand (il se réfère au document de travail qui ne semble pas être en ligne, mais le document suivant est disponible si vous y avez accès):

http://www.jstor.org/discover/10.2307/2684697

[Modifier: en fait, un lien vers le document de travail se trouve sur la page citeseer ]

Cette approche consiste à estimer approximativement des fonctionnelles particulières afin d'obtenir des largeurs de bacs approximativement optimales (en termes d'erreur quadratique moyenne intégrée, MISE) pour estimer la densité sous-jacente. Bien que ceux-ci fonctionnent bien et donnent beaucoup plus de bacs que Sturges ou Doane en général, parfois je préfère toujours utiliser plus de bacs, bien que ce soit généralement une très bonne première tentative.

Franchement, je ne sais pas pourquoi l'approche de Wand (ou à tout le moins la règle Fredman Diaconis) n'est pas un défaut à peu près partout.

R propose au moins le calcul Freedman-Diaconis du nombre de bacs:

 nclass.FD(rnorm(100))
[1] 11
 nclass.FD(runif(100))
[1] 6
 nclass.FD(rt(100,1))
[1] 71

Voir ?nclass.FD

Personnellement, pour moi, c'est trop peu de bacs dans les deux premiers cas au moins; Je doublerais ces deux malgré le fait que cela pourrait être un peu plus bruyant qu'optimal. Comme n devient grand, je pense que cela fonctionne très bien dans la plupart des cas.


Modifier 2:

J'ai décidé d'enquêter sur le problème d'asymétrie vs kurtosis auquel @PeterFlom a à juste titre exprimé sa perplexité.

Je viens de jeter un coup d'œil au document de Doane auquel il est lié (je l'avais lu auparavant ... mais c'était il y a presque 30 ans) - il ne fait aucune référence à la kurtosis, seulement à l'asymétrie.

Ke=log2(1+g1σg1)

Keg1b1

σg1=6(n-2)(n+1)(n+3)6n

σg1. On dirait qu'il a été joué plusieurs fois avant de finir là-bas; Je serais intéressé si quelqu'un le retrouvait.

Il me semble que l' argument de Doane devrait s'étendre avec bonheur à Kurtosis, mais l' erreur standard correcte devrait être utilisée.

Cependant, puisque Doane s'appuie sur Sturges et l'argument de Sturges semble être erroné, peut-être que toute l'entreprise est condamnée. Dans tous les cas, j'ai édité la page de discussion Histogramme sur wikipedia en notant l'erreur.

---

b1

Glen_b -Reinstate Monica
la source
b1
De petites erreurs de cette ampleur (l'absence de valeur absolue) ne se produisent pas si rarement dans les journaux - en dehors des statistiques que j'ai vues beaucoup plus évidentes (et plus flagrantes). Quant à la notation, elle est en fait assez courante; eg1 , eg2 , eg3 ... Je pourrais pointer vers des dizaines
Glen_b -Reinstate Monica
2

La mesure de kurtosis définie en termes de deuxième et quatrième moments n'est jamais négative ( voir ), puis la log(1+...)>0.

Cette quantité est mis en oeuvre dans la commande kurtosis()de la bibliothèque de R moments. De plus, en utilisant la commande, hist()vous pouvez spécifier le nombre de pauses comme suit

library(moments)

n <- 250
data <- rnorm(n)

# Sturges formula log_2(n) + 1
hist(data,breaks = "Sturges")

# Doane's formula    
Doane <- 1 + log(n) + log(1 + kurtosis(data) * sqrt(n / 6.))
hist(data,breaks = Doane)

La formule utilisée dans la commande kurtosis()est simple mean((data - mean(data))^4)/mean((data - mean(data))^2)^2.

Maintenant, si vous voulez rechercher quelle est la `` meilleure '' formule, vous aurez besoin d'un critère. Considérez que cela a été largement discuté dans la littérature statistique.

Miles Davis
la source
ce que je ne sais pas, c'est quelle est la définition de kurtosis dans la formule de Doane
Ruggero Turra
Il y a un lien vers la définition de kurtosis dans l'entrée wikipedia que vous avez publiée. Soit dit en passant, c'est la même que celle que j'ai publiée. Il est estimé comme le quatrième moment central de l'échantillon divisé par le carré du deuxième moment central de l'échantillon. Veuillez voir ma modification pour le code.
Miles Davis
1
encore une fois, je ne sais pas si la vôtre est la bonne formule de Doane, si vous regardez le papier par exemple, il utilise log2 au lieu de log
Ruggero Turra
Eh bien, c'est la "formule de Doane" que vous avez publiée ¬¬ . Quoi qu'il en soit, cela peut être corrigé de manière triviale en utilisant log(n,2)au lieu de log(n). MAIS, l'entrée wikipedia ainsi que d'autres sources indiquent que cela devrait être le cas log.
Miles Davis