Tengo un histograma 2D para dos vectores, s1 y s2 generada con el hist3 en Matlab:
[hist2D, binC] = hist3([s1' s2']);
Lo normalizo haciendo que su volumen total sea igual a la unidad, de la siguiente manera:
L = binC{1}(2) - binC{1}(1);
B = binC{2}(2) - binC{2}(1);
totalVolume = sum(sum(hist2D.*L*B));
prob2D = hist2D/totalVolume;
Pregunta: ¿Es esta la forma correcta de normalizar un histograma 2D?
También he normalizado los histogramas 1D para s1 y s2 como se muestra a continuación.
[hist1, binCentres1] = hist(s1);
binWidth1 = binCentres1(2) - binCentres1(1);
prob1 = hist1 / (sum(hist1) * binWidth1);
%same for s2
Pregunta: ¿Cómo puedo obtener los histogramas marginales (1D) a partir del histograma 2D normalizado?
He intentado hacerlo de la siguiente manera:
prob1M = sum(prob2D, 2); %extract marginal for s1
prob2M = sum(prob2D, 1); %extract marginal for s2
Si estuviera haciendo esto correctamente, esperaría prob1 sea igual a prob1M . I parece estar en el camino correcto porque los gráficos de barras (abajo) se ven similares, pero escalados en el eje vertical. Tal vez estoy haciendo las normalizaciones mal?
Intenté normalizar prob1M también, usando:
prob1M = prob1M / (sum(prob1M) * binWidth1);
Pregunta: ¿Sigue siendo necesaria la normalización si se obtienen los marginales de un histograma 2D normalizado? ¿Por qué / por qué no?
Tras la normalización, el área de prob1 y prob1M es igual a 1, donde zona se calcula como:
area = sum(binWidth1.*prob1)
%same for prob1M
Sin embargo, prob1 y prob1M (y prob2 y prob2M ) siguen siendo ligeramente diferentes:
prob1 = 0.9412 0.4412 0.3235 0.3235 0.2941 0.3235 0.3235 0.4118 0.4706 1.1471
prob1M = 0.9706 0.4706 0.3824 0.3235 0.3235 0.3235 0.3530 0.3824 0.4412 1.0295
Gracias por sus sugerencias.