我正在寻找在pymc3中实施CMPoisson模型的人的要点。不幸的是,有两个步骤我不确定。在模型的主楼。
(要点可以在这里找到:https://gist.github.com/dadaromeo/33e581d9e3bcbad83531b4a91a87509f)
在构建测试数据时,他使用两步过程来计算数据:
n,d = 1000, 4
X = np.abs(np.random.randn(n,d))
y = np.round(X.sum(axis=1)).astype(int)
我正在尝试解决为什么使用两步过程?它是创建类似泊松但具有CMPoisson分布特征的数据吗?
在pymc3模型中,使用X数组计算参数:
with cmp_model:
alpha = pm.Normal("alpha", mu=1)
beta = pm.Normal("beta", mu=1, shape=d)
lam = alpha + tt.dot(X,beta)
nu = pm.HalfNormal("nu", sd=10)
like = CMPoisson("like", lamda=lam, nu=nu, observed=y)
为什么?当我使用真实数据(看起来像y)时,我不确定我的相应X值来自何处?
非常感谢任何帮助!
答案 0 :(得分:0)
你是对的第一步。他只是为他的问题生成合成数据。关于第二步,他正在进行CMPoisson回归,即像“常规”线性回归,但可能性不是高斯分布。
我认为你没有任何X.如果是这样,那么你的模型应该是这样的:
with cmp_model:
lam = pm.HalfNormal("lam", sd=10)
nu = pm.HalfNormal("nu", sd=10)
like = CMPoisson("like", lamda=lam, nu=nu, observed=y)
我不熟悉Conway-maxwell分布,但它似乎用于模拟过分散的数据,这些数据不能很好地解决Poisson分布问题。如果您发现它有用,PyMC3具有负二项分布,也用于模拟过度分散的计数数据。