标签: pymc3

使用PYMC3回归

我在这里发布了一个IPython笔记本http://nbviewer.ipython.org/gist/dartdog/9008026

我通过标准Statsmodels OLS和PYMC3与Pandas提供的数据一起工作,顺便说一下,这部分工作得很好.

我看不出如何从PYMC3中获得更多标准参数?这些示例似乎只是使用OLS来绘制基本回归线.看来PYMC3模型数据应该能够给出回归线的参数吗?除了可能的痕迹,即什么是最高概率线?

对Alpha,beta和sigma的解释的任何进一步解释都欢迎!

另外,如何使用PYMC3模型来估计给定新x即具有某种概率的预测的y的未来值?

最后,PYMC3有一个新的GLM包装,我尝试了它似乎搞砸了?(虽然可能是我)

python bayesian pandas statsmodels pymc3

4
推荐指数
1
解决办法
1135
查看次数

pymc3 中均匀分布的区间变换是什么?

我注意到在 pymc3 中使用均匀分布时,_interval除非指定了转换,否则采样器也会扫描参数,例如:

with fitModel6:

    normMu  = pm.Uniform('normMu',lower=0,upper=1000)
Run Code Online (Sandbox Code Playgroud)

不仅会导致对 normMu 进行采样,还会导致对 normMu_interval 进行采样:

区间轨迹图

参数轨迹图

通常,当我使用统一先验作为尺度参数(如归一化)时,我当然会在对数间隔内进行采样。pymc3 是否以某种方式为我处理这个问题?

干杯

bayesian pymc3

4
推荐指数
1
解决办法
1056
查看次数

将 PyMC3 Traceplot 子图保存到图像文件

我正在尝试非常简单地将 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)

python matplotlib pymc3

4
推荐指数
1
解决办法
2160
查看次数

如何在pymc3中设置伯努利分布参数

我有一个在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会是什么.

python bayesian pymc pymc3

3
推荐指数
1
解决办法
1938
查看次数

PyMC3 中的分层建模分类变量交互

我正在尝试使用 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)的分类变量吗?

pymc3

3
推荐指数
1
解决办法
1008
查看次数

pymc3 中的贝叶斯因子

我对计算贝叶斯因子以比较 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)

python theano pymc3

3
推荐指数
1
解决办法
2807
查看次数

PyMC3回归与变化点

我看到了如何用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)

python regression pymc pymc3

3
推荐指数
1
解决办法
967
查看次数

pandas Dataframe中的百分比匹配

是否有一个函数可以告诉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或至少优雅的方式来做到这一点.

python pandas pymc3

3
推荐指数
1
解决办法
568
查看次数

用随机效应解释多级回归中的变量

我有一个看起来像下面的数据集(显示前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

3
推荐指数
1
解决办法
466
查看次数

如何向PyMC3模型添加约束?

如果我们考虑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

3
推荐指数
1
解决办法
442
查看次数