有没有办法 运行 GLM.from_formula 没有拦截(PyMC3)?
Is there a way to run GLM.from_formula without the intercept (PyMC3)?
这可能是个愚蠢的问题,但我搜索了 pyMC3 文档和论坛,似乎找不到答案。我正在尝试从我知道先验不应该有截距的数据集创建线性回归模型。目前我的实现是这样的:
formula = 'Y ~ ' + ' + '.join(['X1', 'X2'])
# Define data to be used in the model
X = df[['X1', 'X2']]
Y = df['Y']
# Context for the model
with pm.Model() as model:
# set distribution for priors
priors = {'X1': pm.Wald.dist(mu=0.01),
'X2': pm.Wald.dist(mu=0.01) }
family = pm.glm.families.Normal()
# Creating the model requires a formula and data
pm.GLM.from_formula(formula, data = X, family=family, priors = priors)
# Perform Markov Chain Monte Carlo sampling
trace = pm.sample(draws=4000, cores = 2, tune = 1000)
正如我所说,我知道我不应该拦截,但我似乎无法找到一种方法来告诉 GLM.from_formula() 不要寻找拦截。大家有解决办法吗?提前致谢!
我真的很困惑它 运行 有一个拦截,因为 the default in the code for GLM.from_formula
是将 intercept=False
传递给构造函数。也许是因为 patsy
解析器默认添加拦截?
无论哪种方式,都可以通过 patsy 公式明确包含或排除拦截,即分别使用 1
或 0
。也就是说,你想要:
formula = 'Y ~ 0 + ' + ' + '.join(['X1', 'X2'])
这可能是个愚蠢的问题,但我搜索了 pyMC3 文档和论坛,似乎找不到答案。我正在尝试从我知道先验不应该有截距的数据集创建线性回归模型。目前我的实现是这样的:
formula = 'Y ~ ' + ' + '.join(['X1', 'X2'])
# Define data to be used in the model
X = df[['X1', 'X2']]
Y = df['Y']
# Context for the model
with pm.Model() as model:
# set distribution for priors
priors = {'X1': pm.Wald.dist(mu=0.01),
'X2': pm.Wald.dist(mu=0.01) }
family = pm.glm.families.Normal()
# Creating the model requires a formula and data
pm.GLM.from_formula(formula, data = X, family=family, priors = priors)
# Perform Markov Chain Monte Carlo sampling
trace = pm.sample(draws=4000, cores = 2, tune = 1000)
正如我所说,我知道我不应该拦截,但我似乎无法找到一种方法来告诉 GLM.from_formula() 不要寻找拦截。大家有解决办法吗?提前致谢!
我真的很困惑它 运行 有一个拦截,因为 the default in the code for GLM.from_formula
是将 intercept=False
传递给构造函数。也许是因为 patsy
解析器默认添加拦截?
无论哪种方式,都可以通过 patsy 公式明确包含或排除拦截,即分别使用 1
或 0
。也就是说,你想要:
formula = 'Y ~ 0 + ' + ' + '.join(['X1', 'X2'])