es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Estimación paramétrica de PDF: histograma vs verosimilitud

Dada una muestra de una distribución y asumiendo que es Gaussiana (distribución normal con mu y sigma desconocidos), la tarea es encontrar los parámetros media (mean) y desviación estándar (standard deviation) que la describen mejor.

¿Cuál es la diferencia matemática y por qué arroja resultados diferentes? Y si son diferentes, ¿por qué y cuándo usar cada método? Creo que ambos son paramétricos y se pueden utilizar en los mismos casos.

  1. Realizar un ajuste de curva de mínimos cuadrados con distribuciones normales en los parámetros mu, sigma.
  2. Maximizar la verosimilitud = suma de la función de densidad de probabilidad (PDF) (mu, sigma) sobre las muestras.
import numpy as np
from matplotlib import pyplot as plt
from scipy.stats import norm

<h1>definir la media y la desviación estándar verdaderas para la distribución normal Gaussiana</h1>

mean = 5.0
std = 2.0

<h1>generar variables aleatorias (muestras) y obtener el histograma</h1>

samples = np.random.normal(loc=mean, scale=std, size=100)
hist, bin_edges = np.histogram(samples, density=True)
midpoints = (bin_edges[:-1] + bin_edges[1:])/2.

<h1>ajustar la distribución Gaussiana para encontrar la media y la desviación estándar</h1>

def func(x, mean, std):
    return norm.pdf(x, loc=mean, scale=std)

from scipy.optimize import curve_fit

popt, pcov = curve_fit(func, midpoints, hist)
fit_mean, fit_std = popt

print("media y desviación estándar ajustadas:", fit_mean, fit_std)
print("media y desviación estándar de la muestra:", np.mean(samples), np.std(samples))

<h1>enfoque de log-verosimilitud negativa</h1>

def normaldistribution_negloglikelihood(params):
    mu, sigma = params
    return -np.log(np.sum(norm.pdf(samples, loc=mu, scale=sigma)))
    #return -np.sum(norm.pdf(samples, loc=mu, scale=sigma))

from scipy.optimize import minimize

result = minimize(normaldistribution_negloglikelihood, x0=[0,1], bounds=((None,None), (1e-5,None)))#, method='Nelder-Mead')

if result.success:
    fitted_params = result.x
    #print("parámetros ajustados:", fitted_params)
else:
    raise ValueError(result.message)

nll_mean, nll_std = fitted_params
print("media y desviación estándar de la NLL:", nll_mean, nll_std)

<h1>gráfica</h1>

plt.plot(midpoints, hist, label="histograma de muestras")

x = np.linspace(-5, 15, 500)
plt.plot(x, norm.pdf(x, loc=mean, scale=std), label="PDF verdadera")
plt.plot(x, norm.pdf(x, loc=fit_mean, scale=fit_std), label="PDF ajustada")
plt.plot(x, norm.pdf(x, loc=nll_mean, scale=nll_std), label="estimador NLL")

plt.legend()
plt.show()

gráfica

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    La diferencia matemática entre el ajuste de curva de mínimos cuadrados y el enfoque de log-verosimilitud negativo radica en la forma en que estiman los parámetros de la distribución gaussiana. El ajuste de curva de mínimos cuadrados minimiza la suma de las diferencias al cuadrado entre el histograma y la función gaussiana ajustada, mientras que el enfoque de log-verosimilitud negativo maximiza la función de verosimilitud, que es el producto de las funciones de densidad de probabilidad (PDF) de cada punto de muestra.

    Si bien ambos métodos se pueden utilizar en muchos casos, el enfoque de log-verosimilitud negativo suele preferirse cuando se trata de muestras pequeñas o cuando se tiene conocimiento previo sobre los parámetros de distribución. Esto se debe a que maximiza directamente la función de verosimilitud de las muestras, que es equivalente a minimizar la divergencia de Kullback-Leibler entre las distribuciones verdaderas y estimadas, proporcionando así una mejor estimación de los parámetros de distribución. En contraste, el ajuste de curva de mínimos cuadrados puede ser más apropiado cuando el tamaño de la muestra es grande o cuando la estimación de la media es más importante que la de la desviación estándar.

Comments are closed.