Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 利用STATSM模型计算伽马GLM的尺度/色散_Python_Statistics_Statsmodels - Fatal编程技术网

Python 利用STATSM模型计算伽马GLM的尺度/色散

Python 利用STATSM模型计算伽马GLM的尺度/色散,python,statistics,statsmodels,Python,Statistics,Statsmodels,我在使用statsmodels的GLM函数获取模拟数据的色散参数时遇到问题 import statsmodels.api as sm import matplotlib.pyplot as plt import scipy.stats as stats import numpy as np np.random.seed(1) # Generate data x=np.random.uniform(0, 100,50000) x2 = sm.add_constant(x) a = 0.5

我在使用statsmodels的GLM函数获取模拟数据的色散参数时遇到问题

import statsmodels.api as sm
import matplotlib.pyplot as plt 
import scipy.stats as stats 
import numpy as np

np.random.seed(1)

# Generate data
x=np.random.uniform(0, 100,50000)
x2 = sm.add_constant(x)
a = 0.5
b = 0.2
y_true = 1/(a+(b*x))
# Add error 
scale = 2 # the scale parameter I'm trying to obtain
shape = y_true/scale # given that, for Gamma, mu = scale*shape
y = np.random.gamma(shape=shape, scale=scale)

# Run model
model = sm.GLM(y, x2, family=sm.families.Gamma()).fit() 

model.summary()
下面是上面的总结:

请注意,系数估计值是正确的(0.5和0.2),但刻度(21.995)与刻度I设置(2)相差很远


有人能指出我的误解/做错了什么吗?谢谢

正如约瑟夫在评论中指出的,statsmodels使用了一种不同的参数化

GLM中的
scale
在本例中仅为pearson_chi2/df_resid。我不知道这和通常的伽马参数化有什么关系。statmodels GLM不通过最大似然估计比例。据我所知,GLM参数化对应于
y=np.random.gamma(shape=1/scale,scale=y_true*scale)
。此外,如果将x的上限减小到10,然后结果看起来更好,因为它避免了均值的小值。我只是在模式匹配GLM和GAMMA loglike函数。Statsmodels并没有真正使用这种等价性,只使用GLM平均离散参数化,因此记录和支持重新参数化仍然是不完整的。(快速搜索)第2节证实了这一点。在单参数族GLM版本中,我们将Gamma形状参数视为固定参数,Gamma比例参数与平均值相关,即期望值。这与statsmodels中的实现相对应。