7

我有一个使用以下内容在 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)

但是,我Y的 s 不是正态分布的,而是二进制的(所以,我认为是伯努利)。我不知道如何将NormalY 的分布更改为Bernoulli虽然,因为我不知道Y_obs在这种情况下参数是什么。

4

1 回答 1

11

您正在寻找的是逻辑回归。在这里,您使用逻辑函数将线性模型的输出转换为概率。

在您的示例中,可以按如下方式指定:

import pyMc3 as pm
import theano.tensor as T
basic_model = pm.Model()

def logistic(l):
    return 1 / (1 + T.exp(-l))

with basic_model:
    # Priors for unknown model parameters
    alpha = pm.Normal('alpha', mu=0, sd=10)
    beta = pm.Normal('beta', mu=0, sd=10, shape=18)

    # Expected value of outcome
    mu = alpha + beta[0]*X1 + beta[1]*X2 + beta[2]*X3

    # Likelihood (sampling distribution) of observations
    Y_obs = pm.Bernoulli('Y_obs', p=logistic(mu), observed=Y)
于 2015-09-15T15:04:09.070 回答