Largeur de bac optimale pour un histogramme bidimensionnel

8

Il existe de nombreuses règles pour sélectionner une largeur de bac optimale dans un histogramme 1D (voir par exemple )

Je cherche une règle qui applique la sélection de largeurs optimales de bacs égaux sur des histogrammes bidimensionnels .

Existe-t-il une telle règle? Peut-être qu'une des règles bien connues pour les histogrammes 1D peut être facilement adaptée, si oui, pourriez-vous donner quelques détails minimaux sur la façon de le faire?

Gabriel
la source
Optimal pour quel usage? Veuillez également noter que les histogrammes 2D souffriront des mêmes problèmes que ceux rencontrés dans les histogrammes ordinaires , vous voudrez donc peut-être porter votre attention sur des alternatives telles que les estimations de densité du noyau.
whuber
1
Y a-t-il une raison pour laquelle vous n'adapteriez pas quelque chose de simple comme (n)règle ou formule de Sturges à votre problème directement? Le long de chaque dimension, vous avez de toute façon le même nombre de lectures. Si vous voulez quelque chose d'un peu plus sophistiqué (par exemple, la règle Freedman-Diaconis), vous pouvez "naïvement" prendre le maximum entre le nombre de casiers renvoyés pour chaque dimension indépendamment. Vous regardez essentiellement dans un KDE discrétisé (2d) de toute façon, c'est peut-être votre meilleur choix de toute façon.
usεr11852
Dans le but de ne pas avoir à choisir une largeur de bac manuellement donc subjectivement? Pour sélectionner une largeur qui décrira les données sous-jacentes avec pas trop de bruit et pas trop lissées? Je ne suis pas sûr de comprendre votre question. "Optimal" est-il un mot trop vague? Quelles autres interprétations pouvez-vous voir ici? Sinon, comment aurais-je pu formuler la question? Oui, je connais KDE mais j'ai besoin d'un histogramme 2D.
Gabriel
@ usεr11852 Pourriez-vous développer votre commentaire dans une réponse, peut-être avec plus de détails?
Gabriel
@Glen_b pourriez-vous mettre cela sous la forme d'une réponse? Ma connaissance des statistiques est assez limitée et beaucoup de choses que vous dites me passent par dessus la tête, donc autant de détails que possible seraient appréciés.
Gabriel

Réponses:

4

Mon conseil serait généralement qu'il est encore plus critique qu'en 1-D de lisser dans la mesure du possible, c'est-à-dire de faire quelque chose comme l'estimation de la densité du noyau (ou une autre méthode similaire, comme l'estimation log-spline), qui a tendance à être beaucoup plus efficace que d'utiliser histogrammes. Comme le souligne Whuber, il est tout à fait possible de se laisser berner par l'apparition d'un histogramme, en particulier avec peu de casiers et des échantillons de petite à moyenne taille.

Si vous essayez d'optimiser l'erreur quadratique moyenne intégrée (MISE), par exemple, il existe des règles qui s'appliquent dans les dimensions supérieures (le nombre de cases dépend du nombre d'observations, de la variance, de la dimension et de la "forme"), pour l'estimation de la densité du noyau et les histogrammes.

[En effet, bon nombre des problèmes pour l'un sont également des problèmes pour l'autre, donc certaines des informations contenues dans cet article wikipedia seront pertinentes.]

Cette dépendance à la forme semble impliquer que pour choisir de manière optimale, vous devez déjà savoir ce que vous tracez. Cependant, si vous êtes prêt à faire des hypothèses raisonnables, vous pouvez les utiliser (ainsi, par exemple, certaines personnes pourraient dire "approximativement gaussiennes"), ou bien vous pouvez utiliser une certaine forme d'estimateur "plug-in" de fonctionnel.

Baguette, 1997[1] couvre le boîtier 1-D. Si vous êtes en mesure d'obtenir cet article, jetez un œil à ce qui s'y trouve est également pertinent pour la situation dans les dimensions supérieures (dans la mesure où les types d'analyse qui sont effectués). (Il existe sous forme de document de travail sur Internet si vous n'avez pas accès au journal.)

L'analyse dans les dimensions supérieures est un peu plus compliquée (de la même manière qu'elle procède des dimensions 1D aux dimensions R pour l'estimation de la densité du noyau), mais il y a un terme dans la dimension qui entre dans la puissance de n.

Sec 3.4 Eqn 3.61 (p83) de Scott, 1992[2] donne la largeur de bin optimale asymptotiquement:

h=R(fk)1/2(6i=1dR(fi)1/2)1/(2+d)n1/(2+d)

R(f)=Rdf(x)2dx est un terme de rugosité (pas le seul possible), et je crois fi est la dérivée de f par rapport à la ith terme en x.

Donc, pour 2D, cela suggère des largeurs de bin qui diminuent n1/4.

Dans le cas de variables normales indépendantes, la règle approximative est hk3.5σkn1/(2+d), où hk est la largeur de bin dans la dimension k, le indique la valeur asymptotiquement optimale, et σk est l'écart type de la population en dimension k.

Pour la normale bivariée avec corrélation ρ, la largeur de bin est

hi=3.504σi(1ρ2)3/8n1/4

Lorsque la distribution est asymétrique, ou à queue lourde, ou multimodale, il en résulte généralement des largeurs de bacs beaucoup plus petites; par conséquent, les résultats normaux seraient souvent au mieux des limites supérieures lors de la liaison avec.

Bien sûr, il est tout à fait possible que vous ne soyez pas intéressé par l'erreur quadratique intégrée moyenne, mais par un autre critère.

[1]: Wand, MP (1997),
"Choix basé sur les données de la largeur de la trame d'histogramme",
American Statistician 51 , 59-64

[2]: Scott, DW (1992),
Multivariate Density Estimation: Theory, Practice, and Visualization ,
John Wiley & Sons, Inc., Hoboken, NJ, États-Unis.

Glen_b -Reinstate Monica
la source
Glen, quel est le σkparamètre dans votre réponse?
Gabriel
1
Mes excuses; J'ai ajouté le sens tel que je le comprends - population sd en dimensionk. (J'avais un lien vers un pdf dans un commentaire auparavant, mais après avoir compris plus tard qu'il s'agissait d'un chapitre d'un livre - la référence Scott dans ma réponse - j'ai supprimé le lien.)
Glen_b -Reinstate Monica
4

Étant donné que vous avez un numéro fixe N de données (c'est-à-dire que vous avez un nombre égal de lecture sur les deux dimensions), vous pouvez immédiatement utiliser:

  1. La règle de racine carrée arrondie (N), (c'est-à-dire la manière Excel :))
  2. Règle de Sturges (log2N+1),
  3. Une autre règle basée uniquement sur le nombre de points de données disponibles (par exemple, la règle de Rick).

Pour trouver le nombre commun de bacs M dans chaque dimension.

D'un côté, vous voudrez peut-être essayer quelque chose de plus robuste comme la règle Freedman – Diaconis qui définit essentiellement la bande passanteh égal à:

h=2IQR(x)N1/3,

où IQR est la plage interquartile de vos donnéesx. Vous calculez ensuite le nombre de bacsM le long de chaque dimension comme étant égal à:

M=(max(x)min(x))/h.

Vous faites cela dans les deux dimensions de vos données x; cela vous donne deux nombres, éventuellement différents, de bacs qui "devraient" être utilisés dans chaque dimension. Vous prenez naïvement le plus gros pour ne pas "perdre" d'informations.

Pourtant, une quatrième option serait d'essayer de traiter votre échantillon comme nativement bidimensionnel, de calculer la norme pour chacun des points d'échantillonnage, puis d'appliquer la règle Freedman – Diaconis sur les normes de l'échantillon. c'est à dire.:

xnew=x12+x22

OK, voici du code et un tracé pour les procédures que je décris:

rng(123,'twister');     % Fix random seed for reproducibility
N = 250;                % Number of points in our sample

A = random('normal',0,1,[N,2]);  % Generate a N-by-2 matrix with N(0,1)
A(:,2) = A(:,2) * 5;             % Make the second dimension more variable


% The sqrt(N) rule:    
nbins_sqrtN = floor(sqrt(N));

% The Sturges formula:    
nbins_str = ceil(log2(N) +1);

% The Freedman–Diaconis-like choice:    
IQRs = iqr(A);              % Get the IQ ranges across each dimension
Hs = 2* IQRs* N^(-1/3);     % Get the bandwidths across each dimension
Ranges = range(A);          % Get the range of values across each dimension
% Get the suggested number of bins along each dimension
nbins_dim1 = ceil(Ranges(1)/Hs(1)); % 12 here
nbins_dim2 = ceil(Ranges(2)/Hs(2)); % 15 here
% Get the maximum of the two
nbins_fd_1 = max( [nbins_dim1, nbins_dim2]);


% The Freedman–Diaconis choice on the norms

Norms = sqrt(sum(A.^2,2));        % Get the norm of each point in th 2-D sample
H_norms = 2* iqr(Norms)* N^(-1/3);% Get the "norm" bandwidth
nbins_fd_2 = ceil(range(Norms)/ H_norms);   % Get number of bins 

[nbins_sqrtN nbins_str nbins_fd_1 nbins_fd_2]

% Plot the results / Make bivariate histograms
% I use the hist3 function from MATLAB
figure(1);
subplot(2,2,1);
hist3(A,[ nbins_sqrtN nbins_sqrtN] );
title('Square Root rule');

subplot(2,2,2);
hist3(A,[ nbins_str nbins_str] );
title('Sturges formula rule');

subplot(2,2,3);
hist3(A,[ nbins_fd_1 nbins_fd_1]);
title('Freedman–Diaconis-like rule');

subplot(2,2,4);
hist3(A,[ nbins_fd_2 nbins_fd_2]);
title('Freedman–Diaconis rule on the norms');

entrez la description de l'image ici

Comme d'autres l'ont noté, le lissage est presque certainement plus approprié dans ce cas (c'est-à-dire obtenir un KDE). J'espère que cela vous donne une idée de ce que j'ai décrit dans mon commentaire concernant la généralisation directe (avec tous les problèmes que cela pourrait entraîner) des règles d'exemple 1D aux règles d'exemple 2D. Notamment, la plupart des procédures supposent un certain degré de «normalité» dans l'échantillon. Si vous avez un échantillon qui n'est clairement pas distribué normalement (par exemple, il est leptokurtotique), cette procédure (même en 1-D) échouera assez mal.

usεr11852
la source
1
Je suis content que vous ayez trouvé cela utile Gabriel mais je proposerais d'accepter la réponse de Glen_b. Bien qu'elles soient pratiques, les méthodes décrites dans ma réponse sont des heuristiques généralisées à partir du cas 1-D; Je les ai ajoutés pour illustrer les points que j'ai soulevés dans mon commentaire. J'apprécie vraiment le pouce levé (vous pouvez donc encore me voter comme donnant une réponse utile si vous ne l'avez pas déjà fait :)) mais la bonne réponse est celle de Glen_b.
usεr11852