【发布时间】:2021-01-18 07:28:03
【问题描述】:
任务
我的数据如下所示:
我想使用 statsmodels 将广义线性模型 (glm) 从伽马系列拟合到此。使用这个模型,对于我的每个观察,我想计算观察到小于(或等于)该值的值的概率。换句话说我要计算:
P(y
我的问题
-
如何从
statsmodels中的拟合 glm 中获取形状和比例参数?根据this question,statsmodels 中的 scale 参数未以正常方式参数化。我可以将它直接用作scipy中伽马分布的输入吗?还是我需要先转型? -
如何使用这些参数(形状和比例)来获得概率?目前我正在使用
scipy为每个x_i生成分布并从中获取概率。请参阅下面的实现。
我目前的实现
import scipy.stats as stat
import patsy
import statsmodels.api as sm
# Generate data in correct form
y, X = patsy.dmatrices('y ~ x', data=myData, return_type='dataframe')
# Fit model with gamma family and log link
mod = sm.GLM(y, X, family=sm.families.Gamma(sm.families.links.log())).fit()
# Predict mean
myData['mu'] = mod.predict(exog=X)
# Predict probabilities (note that for a gamma distribution mean = shape * scale)
probabilities = np.array(
[stat.gamma(m_i/mod.scale, scale=mod.scale).cdf(y_i) for m_i, y_i in zip(myData['mu'], myData['y'])]
)
但是,当我执行此过程时,我得到以下结果:
目前预测的概率似乎都很高。图中的红线是预测平均值。但即使对于低于这条线的点,预测的累积概率也在 80% 左右。这让我怀疑我使用的比例参数是否确实是正确的。
【问题讨论】:
标签: python statistics regression statsmodels