计算正态单变量分布的 Fisher 信息矩阵

问题描述

这是我发布的第一个问题,如果结构不完美,请见谅!我一直在尝试了解 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 (将#修改为@)