我在这里发布了一个IPython笔记本http://nbviewer.ipython.org/gist/dartdog/9008026
我通过标准Statsmodels OLS和PYMC3与Pandas提供的数据一起工作,顺便说一下,这部分工作得很好.
我看不出如何从PYMC3中获得更多标准参数?这些示例似乎只是使用OLS来绘制基本回归线.看来PYMC3模型数据应该能够给出回归线的参数吗?除了可能的痕迹,即什么是最高概率线?
对Alpha,beta和sigma的解释的任何进一步解释都欢迎!
另外,如何使用PYMC3模型来估计给定新x即具有某种概率的预测的y的未来值?
最后,PYMC3有一个新的GLM包装,我尝试了它似乎搞砸了?(虽然可能是我)
我注意到在 pymc3 中使用均匀分布时,_interval除非指定了转换,否则采样器也会扫描参数,例如:
with fitModel6:
normMu = pm.Uniform('normMu',lower=0,upper=1000)
Run Code Online (Sandbox Code Playgroud)
不仅会导致对 normMu 进行采样,还会导致对 normMu_interval 进行采样:
通常,当我使用统一先验作为尺度参数(如归一化)时,我当然会在对数间隔内进行采样。pymc3 是否以某种方式为我处理这个问题?
干杯
我正在尝试非常简单地将 PyMC3 traceplot 函数(请参阅此处)生成的子图绘制到文件中。
该函数生成子图的 numpy.ndarray (2d)。
我需要将这些子图移动或复制到 matplotlib.figure 中才能保存图像文件。我能找到的所有内容都展示了如何首先生成图形的子图,然后构建它们。
作为一个最小的示例,我从Here提取了示例 PyMC3 代码,并在其中添加了几行以尝试处理子图。
from pymc3 import *
import theano.tensor as tt
from theano import as_op
from numpy import arange, array, empty
### Added these three lines relative to source #######################
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
__all__ = ['disasters_data', 'switchpoint', 'early_mean', 'late_mean', 'rate', 'disasters']
# Time series of recorded coal mining disasters in the UK from 1851 to 1962
disasters_data = array([4, 5, 4, …Run Code Online (Sandbox Code Playgroud) 我有一个在pymc3中描述的模型,使用以下内容:
from pymc3 import *
basic_model = Model()
with basic_model:
# Priors for unknown model parameters
alpha = Normal('alpha', mu=0, sd=10)
beta = Normal('beta', mu=0, sd=10, shape=18)
sigma = HalfNormal('sigma', sd=1)
# Expected value of outcome
mu = alpha + beta[0]*X1 + beta[1]*X2 + beta[2]*X3
# Likelihood (sampling distribution) of observations
Y_obs = Normal('Y_obs', mu=mu, sd=sigma, observed=Y)
Run Code Online (Sandbox Code Playgroud)
但是,我的Ys不是正常分布的,而是二进制的(所以,伯努利,我认为).我无法弄清楚如何改变NormalY的分布,Bernoulli因为我无法弄清楚Y_obs在这种情况下params会是什么.
我正在尝试使用 PyMC3 来实现具有分类变量及其交互作用的分层模型。在 R 中,公式将采用以下形式:
y ~ x1 + x2 + x1:x2
Run Code Online (Sandbox Code Playgroud)
然而,在教程https://pymc-devs.github.io/pymc3/GLM-hierarchical/#partial-pooling-hierarchical-regression-aka-the-best-of-both-worlds他们明确说 glm 没有还没有很好地使用分层建模。
那么我将如何添加 x1:x2 项呢?它会是一个具有两个分类父级(x1 和 x2)的分类变量吗?
我对计算贝叶斯因子以比较 PyMC 3 中的两个模型感兴趣。根据此网站,在 PyMC 2 中,该过程似乎相对简单:包括伯努利随机变量和自定义似然函数,该函数返回第一个模型的似然性当伯努利变量的值为 0 时,第二个模型的似然性为 1。然而,在 PyMC 3 中,事情变得更加复杂,因为随机节点需要是 Theano 变量。
我的两个似然函数是二项式,所以我想我需要重写这个类:
class Binomial(Discrete):
R"""
Binomial log-likelihood.
The discrete probability distribution of the number of successes
in a sequence of n independent yes/no experiments, each of which
yields success with probability p.
.. math:: f(x \mid n, p) = \binom{n}{x} p^x (1-p)^{n-x}
======== ==========================================
Support :math:`x \in \{0, 1, \ldots, n\}`
Mean :math:`n p`
Variance :math:`n p (1 - p)`
======== ==========================================
Parameters
---------- …Run Code Online (Sandbox Code Playgroud) 我看到了如何用pymc3进行变点分析的例子,但似乎我错过了一些东西,因为我得到的结果远非真正的值.这是一个玩具的例子.
数据:
脚本:
from pymc3 import *
from numpy.random import uniform, normal
bp_u = 30 #switch point
c_u = [1, -1] #intercepts before and after switch point
beta_u = [0, -0.02] #slopes before & after switch point
x = uniform(0,90, 200)
y = (x < bp_u)*(c_u[0]+beta_u[0]*x) + (x >= bp_u)*(c_u[1]+beta_u[1]*x) + normal(0,0.1,200)
with Model() as sw_model:
sigma = HalfCauchy('sigma', beta=10, testval=1.)
switchpoint = Uniform('switchpoint', lower=x.min(), upper=x.max(), testval=45)
# Priors for pre- and post-switch intercepts and slopes
intercept_u1 = Uniform('Intercept_u1', lower=-10, …Run Code Online (Sandbox Code Playgroud) 是否有一个函数可以告诉pandas DataFrame中匹配的百分比或数量而不执行此类操作...
len(trace_df[trace_df['ratio'] > 0]) / len(trace_df)
0.189
len(trace_df[trace_df['ratio'] <= 0]) / len(trace_df)
0.811
Run Code Online (Sandbox Code Playgroud)
必须有更多的Pythonic或至少优雅的方式来做到这一点.
我有一个看起来像下面的数据集(显示前5行).CPA是来自不同广告航班的实验(处理)的观察结果.航班在广告系列中按层次分组.
campaign_uid flight_uid treatment CPA
0 0C2o4hHDSN 0FBU5oULvg control -50.757370
1 0C2o4hHDSN 0FhOqhtsl9 control 10.963426
2 0C2o4hHDSN 0FwPGelRRX exposed -72.868952
3 0C5F8ZNKxc 0F0bYuxlmR control 13.356081
4 0C5F8ZNKxc 0F2ESwZY22 control 141.030900
5 0C5F8ZNKxc 0F5rfAOVuO exposed 11.200450
Run Code Online (Sandbox Code Playgroud)
我适合如下的模型:
model.fit('CPA ~ treatment', random=['1|campaign_uid'])
Run Code Online (Sandbox Code Playgroud)
据我所知,这个模型简单地说:
所以一个只想得到一个 后为每个这样的变量.
但是,看看下面的结果,我还得到了以下变量的后验:1|campaign_uid_offset.它代表什么?
拟合模型和图的代码:
model = Model(df)
results = model.fit('{} ~ treatment'.format(metric),
random=['1|campaign_uid'],
samples=1000)
# Plotting the result
pm.traceplot(model.backend.trace)
Run Code Online (Sandbox Code Playgroud) python-3.x pymc3 bambi multilevel-analysis hierarchical-bayesian
如果我们考虑PyMC3的以下线性回归示例:
http://docs.pymc.io/notebooks/getting_started.html#A-Motivating-Example:-Linear-Regression
我们如何包含诸如a + b1 + b2 = 1 or a^2 + b1^2 = 25?之类的约束?
我知道我们可以使用Bound为变量创建边界,但我不知道如何添加更复杂的约束.
谢谢您的帮助!
pymc3 ×10
python ×6
bayesian ×3
pandas ×2
pymc ×2
bambi ×1
matplotlib ×1
python-3.x ×1
regression ×1
statsmodels ×1
theano ×1