问题描述
这是我发布的第一个问题,如果结构不完美,请见谅!我一直在尝试了解 Fisher information,因此决定编写一个 Python 脚本,该脚本可以对单变量正态分布的 mu 和 sigma 进行 MLE 估计。
当我假设我们知道 sigma 或 mu 时,代码给出了我所期望的,但是当我为这两个参数运行它时,我得到的 FI 矩阵与解析解的预期不同,enter image description here此处概述的图像描述如下: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)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)