PyMC3具有出色的处理贝叶斯回归的功能,因此我一直在尝试利用PyMC3在可能为Gamma的PyMC3上运行贝叶斯伽马回归。
据我了解,在PyMC3中运行任何形式的贝叶斯回归都需要pymc3.glm.GLM()
函数,该函数采用Patsy形式的模型公式(例如y〜x_1 + x_2 + ... + x_m),数据框和分布。
但是, 问题是pymc3.glm.GLM()
函数需要一个pymc3..families
对象 (https://github.com/pymc-devs/pymc3/blob/master/pymc3/glm/families.py)才能进行分发。但是 Gamma发行版并未显示为软件包中内置的家族之一 ,因此我被困住了。还是Gamma函数族隐藏在某个地方?希望对您有所帮助!
对于上下文:
我有一个功能为[x_1, x_2, ..., x_m]
(称为X
)和目标变量(称为y
)的数据框。这是我到目前为止准备的代码,但仅需弄清楚如何获得Gamma分布即可。
import pymc3 as pm
# Combine X and y into a single dataframe
patsy_DF = X
patsy_DF['y'] = y
# Get Patsy Formula
all_columns = "+".join(X.columns)
patsy_formula = "y~" + all_columns
# Instantiate model
model = pm.Model()
# Construct Model
with model:
# Fit Bayesian Gamma Regression
pm.glm.GLM(patsy_formula, df_dummied, family=pm.families.Gamma())
# !!! ... but pm.families.Gamma() doesn't exist ... !!!
# Get MAP Estimate and Trace
map_estimate = pm.find_MAP(model=model)
trace = pm.sample(draws=2000, chains=3, start = map_estimate)
# Get regression results summary (coefficient estimates,
pm.summary(trace).round(3)