这是我发布的第一个问题,如果结构不完美,请原谅我!我一直在尝试了解 Fisher 信息,因此决定编写一个 python 脚本,该脚本为单变量正态分布的 mu 和 sigma 提供 MLE 估计。
当我假设我们知道 sigma 或 mu 时,代码给出了我所期望的,但是当我为这两个参数运行它时,我得到的 FI 矩阵与在此处输入图像描述的分析解决方案所期望的不同,此处为图像描述此处概述:https ://www.ii.pwr.edu.pl/~tomczak/PDF/[JMT]Fisher_inf.pdf
我打算用这段代码做的事情是更好地理解如何在更复杂的情况下计算 FI 矩阵,这就是为什么我从具有多个参数的最简单的情况开始。我相信问题可能出在我正在使用的功能上,但我不确定,因为我不完全理解它们。任何帮助都感激不尽!
此外,如果需要澄清,我感谢对问题结构的建设性批评!
我希望得到一些帮助以了解我为什么会出现这种行为,谢谢!这是代码:
import numpy.linalg as lin
import autograd.numpy as np
from autograd import grad, jacobian, hessian
from scipy.optimize import minimize
import matplotlib.pyplot as plt
# Generate simulated data
np.random.seed(123)
X = np.random.normal(1, 0.1, size=(1, 100))
def normalPDF(x, mu, sigma):
num = np.exp(-1 / 2 * ((x - mu) / sigma) ** 2)
den = np.sqrt(2 * np.pi) * sigma
return num / den
def log_likelihood(params):
# return -sum([np.log(normalPDF(x=i, mu=params , sigma=1)) for i in X[0, :]])
return -sum(
[np.log(normalPDF(x=i, mu=params[0], sigma=params[1])) for i in X[0, :]]
)
# In a bivariate param world question: "Am I not supposed to get a diagonal matrix, aka no covarience?"
x0 = np.array([0.5, 1])
## When estimating just the MLE mean works exactly as supposed to
# x0 = np.array([0.5])
hessian_ = hessian(log_likelihood)
MLE = minimize(log_likelihood, x0, method="Nelder-Mead")
var = lin.inv(hessian_(MLE.x))
print(MLE)
print(var)