python - 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):
  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 是它的预期值。

关于python - PyMC 最简单的线性模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22239121/

相关文章:

python - 在 python 中对 GLM 进行 Anova 测试

一个numpy数组中元素的python位置与另一个数组中相等元素的位置

python - 如何使用 AWS SessionToken 从 pyspark 中的 S3 读取数据?

python - python pandas 中的季节性数据选择

matlab - 拟合数据分布 - MATLAB

c# - 从数据绘制具有正态分布叠加的直方图

python - 统计模型 : simulate data and run simple linear regression

python - 添加具有颜色属性的边/节点

c++ - 查找数字数组中最大差异的算法

python - 尝试使用 scipy 拟合学生 t 分布时出现异常