Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有PyMC的最简线性模型_Python_Statistics_Statsmodels_Pymc - Fatal编程技术网

Python 具有PyMC的最简线性模型

Python 具有PyMC的最简线性模型,python,statistics,statsmodels,pymc,Python,Statistics,Statsmodels,Pymc,假设我尝试使用以下数据估计一个简单的y=m*x问题的斜率: x_data = np.array([0,1,2,3]) y_data = np.array([0,1,2,3]) 很明显,坡度为1。然而,当我在PyMC中运行这个时,我得到10 slope = pm.Uniform('slope', lower=0, upper=20) @pm.deterministic def y_gen(value=y_data, x=x_data, slope=slope, observed=True)

假设我尝试使用以下数据估计一个简单的
y=m*x
问题的斜率:

x_data = np.array([0,1,2,3])
y_data = np.array([0,1,2,3])
很明显,坡度为1。然而,当我在PyMC中运行这个时,我得到10

slope  = pm.Uniform('slope',  lower=0, upper=20)

@pm.deterministic
def y_gen(value=y_data, x=x_data, slope=slope, observed=True):
  return slope * x

model = pm.Model([slope])
mcmc  = pm.MCMC(model)
mcmc.sample(100000, 5000)

# This returns 10
final_guess = mcmc.trace('slope')[:].mean()
但它应该是1


注意:以上是PyMC2。您需要定义一个可能性,请尝试以下操作:

import pymc as pm
import numpy as np

x_data = np.linspace(0,1,100)
y_data = np.linspace(0,1,100)

slope  = pm.Normal('slope',  mu=0, tau=10**-2)
tau    = pm.Uniform('tau', lower=0, upper=20)

@pm.deterministic
def y_gen(x=x_data, slope=slope):
  return slope * x

like = pm.Normal('likelihood', mu=y_gen, tau=tau, observed=True, value=y_data)

model = pm.Model([slope, y_gen, like, tau])
mcmc  = pm.MCMC(model)
mcmc.sample(100000, 5000)

# This returns 10
final_guess = mcmc.trace('slope')[:].mean()

它返回10,因为您只是从统一的先验值中采样,10是该值的预期值。

您需要设置
value=y\u data,observed=True
,以获取可能性。另外,还有一个小问题,您不需要实例化模型对象。只需将节点(或对locals()的调用)传递给MCMC即可

我不得不说,你使用的是哪一版本的Pymc?@dartdog-我刚刚更新了帖子。谢谢@twiecki-但是当我运行你的示例时,我得到了一个不同的错误:
ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()