python - 如何计算 scipy 中分布的 AIC?

标签 python scipy statistics

我有:

from scipy import stats
data = stats.gamma.rvs(2, loc=1.5, scale=2, size=100000)

所以我做了一个合适的

fitted_params = scipy.stats.gamma.fit(data)

我如何从中计算 AIC? AIC = 2*k - 2*ln(L) 其中 k 是拟合参数的数量,L 是最大对数似然函数

k = len(fitted_params)
aic = 2*k - 2*(logLik)

logLik 会是?

我找到了这个片段:

logLik = -np.sum( stats.norm.logpdf(data, loc=yPred, scale=sd) ) 

来自 Maximum Likelihood Estimate

我的功能也将是:

# calc SD of fitted distribution
sd = std(loc=fitted_params[1], scale=fitted_params[2])

# sample values from fitted dist same length as original data array
yPred = rvs(fitted_params[0], loc=fitted_params[1], scale=fitted_params[2], size=len(data), random_state=None)

# calc the log likelihood 
logLik = -np.sum( stats.gamma.logpdf(data, loc=yPred, scale=sd) ) 

最佳答案

可能性实际上是在给定参数的情况下观察数据的概率。因此,如果您有一些参数值,即您的拟合值,那么可能性就是数据的概率,其中密度用拟合值参数化。

因此,您所做的几乎是正确的。由于您是从 Gamma 分布中抽样的,因此您还应该使用该分布计算可能性。 IE。而不是

logLik = -np.sum( stats.norm.logpdf(data, loc=yPred, scale=sd) ) 

logLik = np.sum( stats.gamma.logpdf(data, fitted_params[0], loc=fitted_params[1], scale=fitted_params[2]) ) 

然后您只需使用 AIC 方程式即可得到它。

关于python - 如何计算 scipy 中分布的 AIC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37023916/

相关文章:

python - 如何连接或组合具有重叠键的默认字典的两个默认字典?

Python SQLite 返回值

python - 在Tkinter python中相对于父窗口放置子窗口

python - 在 python 请求中发送原始数据

python - 构建 scipy 错误 cythonize 失败

python - 来自边缘列表的 Scipy 稀疏矩阵

python - 在 OS X Lion : initialization from incompatible pointer type 上安装 PIL

威尔逊分数区间的 Python 实现?

statistics - R 定性和定量变量的回归 lm

r - 如何将我构建的模型拟合到另一个数据集并获得残差?