python - PyMC3:多元正态下的回归
问题描述
我最近开始学习pymc3,我想预测多元正态模型。有 N 组 M 个连续数据,我想根据观察到的数据 x_ob 和 y_ob 预测每组的参数 a、b 及其相关性。我假设x和y是双曲线关系,参数a和b是相关的并且是正态分布的。
这是我到目前为止所拥有的。
# Generate data
np.random.seed(10)
N = 10
M = 5
idx = np.arange(N*M)//M
x_ob = np.arange(N*M)%M+1
a,b = 1,2.5
ro = 0.7
s1,s2=0.1,0.1
cov = [[s1**2,ro*s1*s2],[ro*s1*s2,s2**2]]
ax,bx = np.random.multivariate_normal([a,b],cov,N).T
noise = np.random.normal(1,0.05,N*M)
def func(x,a,b):
return a*x/(x+b)
y_ob = func(x_ob, ax[idx], bx[idx])*noise
# MCMC
with pm.Model() as model:
# model
ab0 = pm.Uniform('ab0', lower=0, upper=5, shape=2)
sd = pm.Uniform("sd",lower=0,upper=1, shape=2)
rh = pm.Uniform("rh",lower=-1,upper=1)
cov = pm.Deterministic("cov", pm.math.stack(([sd[0]**2,sd[0]*sd[1]*rh],[sd[0]*sd[1]*rh,sd[1]**2])))
ab = pm.MvNormal('ab', mu=ab0, cov=cov, shape=(N,2))
a = ab[:,0]
b = ab[:,1]
# error
eps_cv = pm.Uniform('eps', lower=0, upper=1)
# observation
y0= func(x_ob,a[idx], b[idx])
y = pm.Normal('y', mu=y0 , sd=eps_cv*y0, observed=y_ob)
prior_samples = pm.sample_prior_predictive(100)
pm.model_to_graphviz(model)
这会引发错误:Bad input argument to theano function with name "C:\Users\user\Anaconda3\envs\pymc\lib\site-packages\pymc3\distributions\distribution.py:431" at index 0 (0-based )。维数错误:预期为 1,得到 2,形状为 (100, 2)。
由于我发现 sample_prior_predictive["ab"] 包括 NAN,我认为 ab 的形状是错误的,但我不知道。我应该怎么做?
提前致谢。
解决方案
推荐阅读
- node.js - 将 Webpack 4 升级到 5:在 10% 处构建停滞不前构建 0/1 条目 1/1 依赖项 0/1 模块
- mysql - 如何设置多个值
- php - 在每个id php的单独行上显示一个id的所有记录
- python - 如何修复“没有名为 websocket 的模块”错误?
- dart - 我如何测试飞镖 NoSuchMethodError
- python - pytest:断言测试没有输出
- python - Python NumPy 计算总和
- akka - 什么时候可以通过初始创建一个actor来重新排序初始消息?
- r - 如何根据列宽分配绘图图的宽度?
- javascript - 如何在画布的左上角以绝对坐标计算对象的未缩放和未旋转中心