Python PyMC多元线性回归

Python PyMC多元线性回归,python,linear-regression,pymc,Python,Linear Regression,Pymc,我正在尝试拟合多条共享相同截距的直线 将numpy导入为np 导入pymc #观察 a_actual=np.array([[2,5,7.]]).T b_实际值=3。 t=np.arange(100) obs=np.随机.正常(a_实际*t+b_实际) #PyMC模型 def model_linear(): b=pymc.Uniform('b',值=1.,下限=0,上限=200) a=[] s=[] r=[] 对于范围内的i(len(a_实际值)): s、 追加(pymc.Uniform('sig

我正在尝试拟合多条共享相同截距的直线

将numpy导入为np
导入pymc
#观察
a_actual=np.array([[2,5,7.]]).T
b_实际值=3。
t=np.arange(100)
obs=np.随机.正常(a_实际*t+b_实际)
#PyMC模型
def model_linear():
b=pymc.Uniform('b',值=1.,下限=0,上限=200)
a=[]
s=[]
r=[]
对于范围内的i(len(a_实际值)):
s、 追加(pymc.Uniform('sigma_{}'。格式(i),值=1,下限=0,上限=100))
a、 追加(pymc.Uniform('a{}'。格式(i),值=1,下限=0,上限=200))
r、 追加(pymc.Normal('r_{}'。格式(i),mu=a[i]*t+b,tau=1/s[i]**2,value=obs[i],observed=True))
return[pymc.Container(a),b,pymc.Container(s),pymc.Container(r)]
model=pymc.model(model_linear())
map=pymc.map(模型)
map.fit()
映射。将_还原为_max()
计算的MAP估计值与实际值相差甚远。这些值对
sigmas
a
的上下限非常敏感,对
a
的实际值也非常敏感(例如
a=[.2,5,7]
将给出很好的估计),或者对要进行回归的行数非常敏感

这是执行线性回归的正确方法吗


ps:我尝试对sigmas使用指数先验分布,但结果并不好。

我认为使用MAP可能不是最好的选择。如果您能够进行适当的采样,那么考虑用

替换示例代码的最后3行。
MCMClinear = pymc.MCMC( model)
MCMClinear.sample(10000,burn=5000,thin=5)
linear_output=MCMClinear.stats()

为此打印
linear\u输出
可以非常准确地推断参数。

您不能只运行3个单独的线性回归吗?我不能,因为每个观测都需要共享相同的截距(
b
)。我的真实模型比那更复杂;这是我问题的简化版本。是的,MCMC采样工作正常,并给出了良好的结果。我只是想知道为什么MAP估计值对可变边界或简单模型上观察值的实际值如此敏感。使用该库(也基于scipy的优化包)可以为相同的问题提供良好的结果。