用PyMC3进行贝叶斯统计分析(代码+实例)

 

问题类型1:参数估计

真实值是否等于X?

给出数据,对于参数,可能的值的概率分布是多少?

例子1:抛硬币问题

硬币扔了n次,正面朝上是h次。

参数问题

想知道 p 的可能性。给定 n 扔的次数和 h 正面朝上次数,p 的值很可能接近 0.5,比如说在 [0.48,0.52]?

说明

  • 参数的先验信念:p∼Uniform(0,1)
  • 似然函数:data∼Bernoulli(p)

import pymc3 as pm
import numpy.random as npr
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from collections import Counter
import seaborn as snssns.set_style('white')
sns.set_context('poster')%load_ext autoreload
%autoreload 2
%matplotlib inline
%config InlineBackend.figure_format = 'retina'
import warnings
warnings.filterwarnings('ignore')
from random import shuffle
total = 30
n_heads = 11
n_tails = total - n_heads
tosses = [1] * n_heads + [0] * n_tails
shuffle(tosses)

可视化数据:

def plot_coins():fig = plt.figure()ax = fig.add_subplot(1,1,1)ax.bar(list(Counter(tosses).keys()), list(Counter(tosses).values()))ax.set_xticks([0, 1])ax.set_xticklabels(['tails', 'heads'])ax.set_ylim(0, 20)ax.set_yticks(np.arange(0, 21, 5))        return figfig = plot_coins()
plt.show()

 建立模型:

with pm.Model() as coin_model:# Specify prior using Uniform object.p_prior = pm.Uniform('p', 0, 1)  # Specify likelihood using Bernoulli object.like = pm.Bernoulli('likelihood', p=p_prior, observed=tosses)     # "observed=data" is key for likelihood.

MCMC Inference Button 

with coin_model:step = pm.Metropolis()      # focus on this, the Inference Button:coin_trace = pm.sample(2000, step=step)

结果:

pm.traceplot(coin_trace)
plt.show()

pm.plot_posterior(coin_trace[100:], color='#87ceeb',rope=[0.48,0.52], point_estimate='mean', ref_val=0.5)
plt.show()

 

 

例子2:化学活性问题

我有一个新开发的分子X; X在阻止流感方面的效果有多好?

实验

  • 测试X的浓度范围,测量流感活动
  • 根据实验结果计算 IC50:导致病毒复制率减半的X浓度。

数据

import numpy as np
import pandas as pdchem_data = [(0.00080, 99),
(0.00800, 91),
(0.08000, 89),
(0.40000, 89),
(0.80000, 79),
(1.60000, 61),
(4.00000, 39),
(8.00000, 25),
(80.00000, 4)]chem_df = pd.DataFrame(chem_data)
chem_df.columns = ['concentration', 'activity']
chem_df['concentration_log'] = chem_df['concentration'].apply(lambda x:np.log10(x)) 

参数问题

给出数据,化学品的IC50 值是多少, 以及其周围的不确定性?

说明

可视化数据

def plot_chemical_data(log=True):fig = plt.figure(figsize=(10,6))ax = fig.add_subplot(1,1,1)       if log:ax.scatter(x=chem_df['concentration_log'], y=chem_df['activity'])ax.set_xlabel('log10(concentration (mM))', fontsize=20)    else:ax.scatter(x=chem_df['concentration'], y=chem_df['activity'])ax.set_xlabel('concentration (mM)', fontsize=20)ax.set_xticklabels([int(i) for i in ax.get_xticks()], fontsize=18)ax.set_yticklabels([int(i) for i in ax.get_yticks()], fontsize=18)plt.hlines(y=50, xmin=min(ax.get_xlim()), xmax=max(ax.get_xlim()), linestyles='--',)    return figfig = plot_chemical_data(log=True)
plt.show()

with pm.Model() as ic50_model:beta = pm.HalfNormal('beta', sd=100**2)ic50_log10 = pm.Flat('IC50_log10')  # Flat prior# MATH WITH DISTRIBUTION OBJECTS!measurements = beta / (1 + np.exp(chem_df['concentration_log'].values - ic50_log10))y_like = pm.Normal('y_like', mu=measurements, observed=chem_df['activity'])  ic50 = pm.Deterministic('IC50', np.power(10, ic50_log10))# MCMC Inference Button 
with ic50_model:step = pm.Metropolis()ic50_trace = pm.sample(10000, step=step)
pm.traceplot(ic50_trace[2000:], varnames=['IC50_log10', 'IC50'])  # live: sample from step 2000 onwards.
plt.show()

 

pm.plot_posterior(ic50_trace[4000:], varnames=['IC50'], color='#87ceeb', point_estimate='mean')
plt.show()

 该化学物质的IC50在约 [2mM,2.4mM](95%HPD)

问题类型2:实验组之间的比较

实验组和对照组的不同

例子1:药物IQ问题

药物治疗是否影响 IQ Scores

数据(包括对照实验数据)

drug = [  99.,  110.,  107.,  104., 省略]
placebo = [  95.,  105.,  103.,   99., 省略]def ECDF(data):x = np.sort(data)y = np.cumsum(x) / np.sum(x)        return x, ydef plot_drug():fig = plt.figure()ax = fig.add_subplot(1,1,1)x_drug, y_drug = ECDF(drug)ax.plot(x_drug, y_drug, label='drug, n={0}'.format(len(drug)))x_placebo, y_placebo = ECDF(placebo)ax.plot(x_placebo, y_placebo, label='placebo, n={0}'.format(len(placebo)))ax.legend()ax.set_xlabel('IQ Score')ax.set_ylabel('Cumulative Frequency')ax.hlines(0.5, ax.get_xlim()[0], ax.get_xlim()[1], linestyle='--')        return figfig = plot_drug()
plt.show()

 

from scipy.stats import ttest_indttest_ind(drug, placebo)# Ttest_indResult(statistic=2.2806701634329549, pvalue=0.025011500508647616)

 

实验

  • 随机将参与者分配给两个实验组:
    • +drug vs. -drug
  • 测量每个参与者的 IQ Scores

说明

建模: 

y_vals = np.concatenate([drug, placebo])
labels = ['drug'] * len(drug) + ['placebo'] * len(placebo)data = pd.DataFrame([y_vals, labels]).T
data.columns = ['IQ', 'treatment']
with pm.Model() as kruschke_model: # Linking Distribution Objects together is done by # passing objects into other objects' parameters.mu_drug = pm.Normal('mu_drug', mu=0, sd=100**2)mu_placebo = pm.Normal('mu_placebo', mu=0, sd=100**2)sigma_drug = pm.HalfCauchy('sigma_drug', beta=100)sigma_placebo = pm.HalfCauchy('sigma_placebo', beta=100)nu = pm.Exponential('nu', lam=1/29) + 1drug_like = pm.StudentT('drug', nu=nu, mu=mu_drug, sd=sigma_drug, observed=drug)placebo_like = pm.StudentT('placebo', nu=nu, mu=mu_placebo, sd=sigma_placebo, observed=placebo)diff_means = pm.Deterministic('diff_means', mu_drug - mu_placebo)pooled_sd = pm.Deterministic('pooled_sd', np.sqrt(np.power(sigma_drug, 2) + np.power(sigma_placebo, 2) / 2))effect_size = pm.Deterministic('effect_size', diff_means / pooled_sd)with kruschke_model:kruschke_trace = pm.sample(10000, step=pm.Metropolis())

 结果:

pm.traceplot(kruschke_trace[2000:], varnames=['mu_drug', 'mu_placebo'])
plt.show()

 

pm.plot_posterior(kruschke_trace[2000:], color='#87ceeb',varnames=['mu_drug', 'mu_placebo', 'diff_means'])
plt.show()

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491395.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为: 即将发布5G+VR的颠覆式智能眼镜

来源:VR每日必看6月27日MWC19上海期间,华为手机业务总裁何刚在全球终端峰会发表演讲,提及华为终端在5G时代的全场景战略是“18N”。“1”就是华为手机,“8”则囊括了TV、平板、PC、耳机、车机、手表、眼镜、音响八项终端产品&…

OpenCV的数据类型——基础数据类型

OpenCV有很多数据类型,从组织结构的角度来看,OpenCV的基础类型类型主要分为三类。第一类是直接从C原语中继承的基础数据类型;第二类是辅助对象;第三类是大型数据类型。本文主要介绍OpenCV的基础数据类型。 目录 Point类 Scalar…

Cell:重大突破!三位学术大咖,打造全新“DNA显微镜”

来源:中国生物技术网传统上,科学家们使用光、X射线和电子来观察组织和细胞的内部。如今,科学家们能够在整个大脑中追踪线状的神经纤维,甚至可以观察活的小鼠胚胎如何产生原始心脏中的跳动细胞。但是这些显微镜无法看到的是&#x…

Science Robotics近日刊登CMU重大突破,无需手术,普通人就能用意念操控机械臂!...

来源:机器人大讲堂导读顶尖学术期刊《科学》旗下的Science Robotics本月19号刊登了脑机接口(BCI)领域的一项突破成果。美国卡内基梅隆大学的贺斌教授带领其研究团队与明尼苏达大学合作,成功开发出第一款非侵入式的意念控制机械臂&…

一文读懂全球自动驾驶传感器市场格局!

来源:智驾未来自动驾驶汽车作为汽车未来的重要发展方向,成为汽车零部件产业链的重要增长点。国内外的汽车零部件供应商积极布局自动驾驶传感器领域,在车载摄像头、毫米波雷达和激光雷达三大核心部件,以及产业链上下游的拓展为零部…

MIT对话马斯克:关于自动驾驶、爱和未来世界|厚势汽车

来源:价值中国编译不论是在新能源汽车、私人航空航天、共通交通、还是在人工智能领域,埃隆马斯克天马行空的创想和脚踏实地的奋斗让人震惊不已。简直就是一个活着得的非物质文化遗产。马斯克在全球范围内收割了无数粉丝。不论是企业家、工程师、科技研究…

OpenCV矩阵操作

矩阵类的成员函数可以进行很多基本的矩阵操作,在之前已经介绍过。除此之外,也有很多操作被表示为“友元”函数,它们的输入为矩阵类型,或者输出为矩阵类型,或者输入输出同为矩阵类型。下面将对这些函数及其参数进行详细…

关于机器意识的对话

来源: 人机与认知实验室S教授德高望重,建立了一个关于人工智能的微信群,吸引了很多关心人工智能的专业人士参与讨论。群中常有热烈的讨论。前些天恰好有一场关于机器意识的对话。感觉比较有意思,觉得放任这些讨论在微信群里被遗忘…

OpenCV绘图和注释

OpenCV的绘图函数可以在任意深度的图像上工作,但在大多数情况下,它们只对图像的前三个通道有影响BGR,如果是单通道图像,则默认只影响第一个通道。大多数绘图函数都支持操作对象的颜色、宽度、线型和亚像素对齐等参数。 艺术线条 …

012.对netmap API的解读

一.简要说明: 1.netmap API主要为两个头文件netmap.h 和netmap_user.h ,当解压下载好的netmap程序后,在./netmap/sys/net/目录下,本文主要对这两个头文件进行分析。 2.我们从netmap_user.h头文件开始看起。 二.likely()和unlikely…

【学术笔记】探索大脑静息态活动中的动态信息

来源:脑科学2019年6月18日下午,来自加州大学河滨分校(The University of California, Riverside) Bourns工程学院的生物工程系主任Xiaoping Hu (胡小平)教授应北京大学麦戈文脑研究所方方老师的邀请来到北京大学,在王克桢楼1113室为老师和同学…

OpenCV中的函数子

随着OpenCV的发展,封装了越来越多的功能,而往往这些功能不是一个函数就能完成的,实现为一组函数又会导致整个库的函数变得杂乱无章,因此常常使用一个新的对象类型来实现这个新功能。通过重载operator()来生成对象或函数子。下面主…

查找会议论文的会议地址

有时候会议论文conference proceedings引用格式中要求出现会议地址,如下所示 查找会议地址的方法为直接搜索该会议论文,以ieee为例,会议地址信息在该论文的首页信息中: Conference Location: Arlington, VA, USA中的三项就分别对应…

OpenCV可移植图形工具HighGUI实现图像和视频操作

OpenCV把用于操作系统、文件系统以及摄像机等硬件设备交换的函数纳入了HighGUI(High-level Graphical User Interface)模块中。有了HighGUI模块,我们可以方便地打开窗口、显示图像、读出或写入图像相关的文件、鼠标事件和键盘事件。下面将对三…

华为内部深度解读,关于5G发展的28个核心问题

来源 | 腾讯深网关于5G技术动态与商用进展业界最关心的核心问题,华为5G产品线相关负责人近日对《深网》等进行了详细解读,以下是《深网》整理的问答实录:一、5G先进性与行业应用1. 5G到底是什么?和4G比有什么不一样?从…

OpenCV鼠标事件和滑动条事件

鼠标事件 ① 鼠标事件是通过传统的回调函数机制来完成。 void your_mouse_callback(int event, int x, int y, int flags, void* param) 其中,第一个参数要指明事件,第二个和第三个参数是鼠标事件的位置,第四个参数是标志位,第…

GSMA:中国有望成为全球领先的5G市场之一

来源:GSMA移动智库近日,GSMA(全球移动通信协会)发布首个《中国移动经济发展报告2019》。报告称,中国的移动生态系统在2018年为中国经济创造了5.2万亿元 (7,500亿美元) 的附加值,相当于2018年中国GDP的5.5%。…

canal —— 阿里巴巴mysql数据库binlog的增量订阅消费组件

阿里巴巴mysql数据库binlog的增量订阅&消费组件canal ,转载自 https://github.com/alibaba/canal 最新更新 canal QQ讨论群已经建立,群号:161559791 ,欢迎加入进行技术讨论。canal消费端项目开源: Otter(分布式数据库同步系统…

OpenCV的滤波与卷积

目录 预备知识 滤波、核和卷积 边界外推和边界处理 阈值化操作 Otsu算法 自适应阈值 平滑 简单模糊和方框型滤波器 中值滤波器 高斯滤波器 双边滤波器 导数和梯度 索贝尔导数 Scharr滤波器 拉普拉斯变换 图像形态学 膨胀和腐蚀 通用形态学函数 开操作和闭操…

中国科协发布20个重大科学问题和工程技术难题

来源:晓艳的科技坊6月30日,中国科协在第二十一届中国科协年会闭幕式上发布了2019年20个对科学发展具有导向作用、对技术和产业创新具有关键作用的前沿科学问题和工程技术难题。   中国科学院院士、中国科协名誉主席韩启德表示,中国科协重大…