7 votos

Normalización de un histograma 2D y obtención de los marginales

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?

Bar Graphs fro prob1 and prob1M

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.

2voto

davidsheldon Puntos 211

Si se normaliza un histograma, no es necesario tener en cuenta el ancho de la bandeja. Se puede ver así: Cuando se estima un histograma a partir de datos continuos, básicamente se discretizan primero (fijando cada valor en el centro de la bandeja que está más cerca de él) y luego se genera un histograma discreto para los datos discretizados. Éste se normaliza simplemente dividiendo por la suma de todos sus elementos.

Cuando se tiene en cuenta la anchura de la bandeja, ya no se estima un histograma, sino una aproximación constante a la densidad. Si haces eso, entonces también tienes que tener en cuenta el ancho de la bandeja para marginar. Esto significa que su código para los marginales debe ser

prob1M = sum(prob2D, 2)*L;

Edición: Histograma, distribución de probabilidad discreta, densidad

Como parece que hay cierta confusión sobre los histogramas, intento aclararlo.

Veamos primero los datos discretos, por ejemplo, los enteros del 1 al 10. Cuando se observa $m$ muestras de una variable aleatoria que toma valores entre 1 y 10 se puede construir un histograma. Si se normaliza ese histograma (dividiéndolo por $m$ ), se obtiene una distribución de probabilidad discreta $p_1,...,p_{10}$ . No hay ninguna anchura de bandeja, ya que las distribuciones de probabilidad discretas se normalizan mediante la suma, es decir $\sum_{i=1}^{10}p_i = 1$ .

Cuando se binarizan los datos continuos, lo que se hace realmente es (1) discretizarlos primero y (2) binarlos. Digamos que tenemos $m$ muestras de una variable aleatoria $X$ que toma valores en $[0,10]$ . Al construir un histograma, primero asignamos cada valor al centro de la bandeja más cercana, es decir $1.34$ se asigna a $1.5$ , $0.1$ se asigna a $0.5$ y así sucesivamente. Después, volvemos a construir un histograma y lo normalizamos. Sin embargo, ahora los valores del histograma tienen un significado diferente. Por ejemplo, cuando miramos la primera bandeja para los valores entre $0$ y $1$ , entonces este contiene toda la probabilidad de los valores $X$ que acaban en esa papelera, es decir, si $q$ es la verdadera densidad subyacente, entonces $p_{1} = \int_0^1 q(x) dx$ . Por lo tanto, el valor del histograma normalizado ya contiene implícitamente la anchura de la bandeja. Además, en realidad no hay nada que integrar, ya que el histograma vuelve a recorrer valores discretos, es decir $0.5, 1.5, ..., 9.5$ .

Ahora, si quieres usar el histograma para obtener una densidad continua, una que integra a uno, hay que tener en cuenta la anchura del contenedor. Puede hacerlo definiendo $$p(x) = \sum_{i=1}^{10} \frac{p_i}{\Delta} \cdot I_i.$$

$I_i$ es una función que es una en el $i$ y cero en caso contrario. $\Delta$ es la anchura del contenedor que sería $\Delta = 1$ en nuestro ejemplo. Esta función se integra a uno. Para nuestro ejemplo $$\int_0^{10} p(x) dx = \int_0^{10} \sum_{i=1}^{10} \frac{p_i}{\Delta} \cdot I_i dx = \sum_{i=1}^{10} \frac{p_i}{\Delta} \cdot \underbrace{\int_0^{10} \sum_{i=1}^{10} I_i dx}_{=\Delta} = \sum_{i=1}^{10} p_i = 1. $$

Lo que se hace es aproximar la densidad real mediante una función constante a trozos.

Si desea estimar la información mutua, puede utilizar los valores del histograma en sí, sin la anchura de la bandeja. Para una densidad continua se tiene $p_i = \int_{ith\:bin} q(x)dx = \Delta \cdot \xi_i$ donde $\xi_i$ es un valor de la papelera tal que la igualdad se mantiene. Como se puede escribir como un producto, la anchura de la bandeja en el cociente se cancela y la suma converge a la integral de Riemann para la información mutua.

0voto

jldugger Puntos 7490

Considerando el fenómeno del "Triángulo de Pascal como un entero" (se puede encontrar en google)... y que no puedo calcular o estar seguro de que esta respuesta está probada... Si las líneas del triángulo de Pascal son una prueba para los primos Entonces ... (tal vez) se puede obtener y probar la línea N de esta manera: Usando aritmética de enteros de precisión arbitraria, en base N, calcula N a la potencia de (1000 a la potencia del número de dígitos del número catalán, más 1), recordando que el 1000+1=10...01 está en base N y debe haber un número par de ceros en él.

Las potencias aritméticas enteras de precisión arbitraria se pueden realizar fácilmente en Binario cuando el algoritmo de Multiplicación Binaria utiliza "shift-and-multiply" en lugar de "shift-and-add". Pero no te confundas con este método de "potencias fáciles". porque debe hacerse en Base N, y el fenómeno que se sugiere buscar puede producir todas las potencias con una sola fracción en cualquier base, y hace P-Triángulo como si fueran las potencias de 11 en CUALQUIER base entera arbitraria. Qué manera es más rápida debe decidir qué manera de calcularlo.

El cálculo producirá tarde o temprano la línea N, en Base N, y se sabrá que N es primo si el número calculado como línea N tiene 1 seguido de N y múltiplos de N, separados por ceros. Simple ejemplo: 100001 a la potencia de 7 debe ser 1000070002100035000210000700001. (Base 10) Obviamente sobreestimo el número a elevar a la N para la prueba de primos porque los acarreos son evitar, y debe haber ceros pares dentro del "11", y no puedo adivinar por el momento cuánta precisión se necesitaría. Debería haber usado base 7 como ejemplo, y si lo hiciera, se obtendría el resultado obviamente probado como 1001 a la potencia 7, base 7 = 1010030050030010001, lo cual, creo, demuestra que es primo, ya que los múltiplos de 7, base 7 son múltiplos de "10". (1,10,30,50,30,10,1 en órdenes de magnitud debidamente alineados por coeficiente binomial)

Hablo en nombre del descubridor del fenómeno.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X