元分析的python模块,通常用于循证医学的系统综述。

PythonMeta的Python项目详细描述


蟒蛇

信息

名称=蟒蛇

版本=1.11

作者=邓宏勇(DHY)

电子邮件=dephew@126.com

url=www.pymeta.com

日期=2019.7.23(2017年首次开发)

关于

这是一个元分析包。

本模块旨在执行一些循证医学(EBM)任务,例如:

  • 组合效应度量(或,rr,rd表示计数数据,md,smd表示连续数据);
  • 异质性检验(q/chi-square检验);
  • 子群分析;
  • 绘图:森林图、漏斗图等。

本软件中的统计算法引用自: Jonathan J Deeks和Julian PT Higgins,代表Cochrane协作统计方法组。Review Manager中的统计算法,2010年8月5日。

请在任何广告中引用我的名字,比如: 邓洪永。pymeta,元分析的python模块,引用20xx xx xx xx(或您的时间);1个屏幕。可从以下网址获得:http://www.pymeta.com

这是一个正在进行的项目,因此,欢迎您提出任何问题和建议。

安装

使用pip安装和更新

pip install PythonMeta

导入

在代码中导入pythonmeta模块:

import PythonMeta

函数和类

pythonmeta包中有四个函数/类:

help()(函数):显示pythonmeta的帮助信息。

data()(类):设置并加载要分析的数据。

  • 数据类型(属性,字符串):设置数据类型:分类/计数/二进制/二分法数据为"cate",连续数据为"cont"。
  • 研究(属性,数组):存储研究数据的数组。
  • 子组(属性,数组):存储子组的数组。
  • nototal(属性,二进制):不计算总效果的标志。
  • read file(filename)(方法):读取数据文件。输入:文件名(字符串)(例如"c:\ 1.txt");输出:行数组(始终作为getData()方法的输入)。(请参见示例代码和数据文件)
  • getData(lines)(方法):将数据加载到"studies"的属性数组中。输入:lines数组(始终来自方法readfile());输出:属性'studies'。(请参见示例代码和数据文件)

meta()(类):设置并执行元分析。

  • 数据类型(属性,字符串):设置数据类型:分类/计数/二进制/二分法数据为"cate",连续数据为"cont"。注意:此属性应与data().datatype相同。
  • 研究(属性,数组):研究数据到元分析的数组。
  • 子组(属性,数组):存储子组的数组。注意:此属性应与data()相同。subgroup.
  • nototal(属性,二进制):不计算总效果的标志。注意:此属性应与data()相同。nototal.
  • 模型(属性,字符串):将效果模型设置为"固定"或"随机"。
  • 效果(属性,字符串):将效果大小设置为"或":优势比;"rr":风险比;"rd":风险差;"md":加权平均差;"smd":标准平均差。
  • 算法(属性,字符串):设置元分析的算法:"mh":mantel haenszel;"peto";"iv":逆方差;"iv-heg"(默认)、"iv-cnd"、"iv-gls":对于smd算法
  • meta(研究,nosubgrp=false)(方法):执行meta分析。输入:1,研究数组(始终来自data().getdata);2,nosubgrp标志,默认为false。输出:结果数组[[总计…],[研究1…],[子组1,…],[研究n,…]…[子组k,…]]。(有关详细信息,请参见示例代码)

fig()(类):设置并绘制结果图。

  • 大小(属性,整数):以英寸为单位设置画布大小,默认值为[6,6]。
  • dpi(属性,整数):设置数字分辨率(每英寸点数),默认80分。
  • title(属性,字符串):设置图形的标题。
  • nototal(属性,二进制):的标志不显示总效果,默认为false。
  • 森林(结果)(方法):绘制森林图。input:results数组,始终来自meta().meta(有关详细信息,请参阅示例代码)。
  • 漏斗(结果)(方法):绘制漏斗图。input:results数组,始终来自meta().meta(有关详细信息,请参阅示例代码)。

示例

示例代码:sample.py

importPythonMetaasPMAdefshowstudies(studies,dtype):#show continuous dataifdtype.upper()=="CONT":text="%-10s%-30s%-30s\n"%("Study ID","Experiment Group","Control Group")text+="%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n"%(" ","m1","sd1","n1","m2","sd2","n2")foriinrange(len(studies)):text+="%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n"%(studies[i][6],#study IDstr(studies[i][0]),#mean of group1str(studies[i][1]),#SD of group1str(studies[i][2]),#total num of group1str(studies[i][3]),#mean of group2str(studies[i][4]),#SD of group2str(studies[i][5])#total num of group2)returntext#show dichotomous datatext="%-10s%-20s%-20s\n"%("Study ID","Experiment Group","Control Group")text+="%-10s%-10s%-10s%-10s%-10s\n"%(" ","e1","n1","e2","n2")foriinrange(len(studies)):text+="%-10s%-10s%-10s%-10s%-10s\n"%(studies[i][4],#study IDstr(studies[i][0]),#event num of group1str(studies[i][1]),#total num of group1str(studies[i][2]),#event num of group2str(studies[i][3])#total num of group2)returntextdefshowresults(rults):text="%-10s%-6s%-18s%-10s"%("Study ID","n","ES[95% CI]","Weight(%)\n")foriinrange(1,len(rults)):text+="%-10s%-6d%-4.2f[%.2f%.2f]   %6.2f\n"%(# for each studyrults[i][0],#study IDrults[i][5],#total numrults[i][1],#effect sizerults[i][3],#lower of CIrults[i][4],#higher of CI100*(rults[i][2]/rults[0][2])#weight)text+="%-10s%-6d%-4.2f[%.2f%.2f]   %6d\n"%(# for total effectrults[0][0],#total effect size namerults[0][5],#total N (all studies)rults[0][1],#total effect sizerults[0][3],#total lower CIrults[0][4],#total higher CI100)text+="%d studies included (N=%d)\n"%(len(rults)-1,rults[0][5])text+="Heterogeneity: Tau\u00b2=%.3f "%(rults[0][12])ifnotrults[0][12]==Noneelse"Heterogeneity: "text+="Q(Chisquare)=%.2f(p=%s); I\u00b2=%s\n"%(rults[0][7],#Q test valuerults[0][8],#p value for Q teststr(round(rults[0][9],2))+"%")#I-square valuetext+="Overall effect test: z=%.2f, p=%s\n"%(rults[0][10],rults[0][11])#z-test value and p-valuereturntextdefmain(stys,settings):d=PMA.Data()#Load Data classm=PMA.Meta()#Load Meta classf=PMA.Fig()#Load Fig class#You should always tell the datatype first!!!d.datatype=settings["datatype"]#set data type, 'CATE' for binary data or 'CONT' for continuous datastudies=d.getdata(stys)#load data#studies = d.getdata(d.readfile("studies.txt"))  #get data from a data file, see examples of data filesprint(showstudies(studies,d.datatype))#show studiesm.datatype=d.datatype#set data type for meta-analysis calculatingm.models=settings["models"]#set effect models: 'Fixed' or 'Random'm.algorithm=settings["algorithm"]#set algorithm, based on datatype and effect sizem.effect=settings["effect"]#set effect size:RR/OR/RD for binary data; SMD/MD for continuous dataresults=m.meta(studies)#performing the analysisprint(m.models+" "+m.algorithm+" "+m.effect)print(showresults(results))#show results tablef.forest(results).show()#show forest plotf.funnel(results).show()#show funnel plotif__name__=='__main__':samp_cate=[#this array can be stored into a data file by lines, and loaded with d.readfile("filename")"Fang 2015,15,40,24,37","Gong 2012,10,40,18,35","Liu 2015,30,50,40,50","Long 2012,19,40,26,40","Wang 2003,7,86,15,86","<subgroup>name=short term","Chen 2008,20,60,28,60","Guo 2014,31,51,41,51","Li 2015,29,61,31,60","Yang 2006,21,40,31,40","Zhao 2012,27,40,30,40","<subgroup>name=medium term","#<nototal>"," ","#This is a sample of binary data with subgroup.","#Syntax: study name, e1, n1, e2, n2","#e1,n1: events and number of experiment group;","#e2,n2: events and number of control group.","#And you can add a line of <nototal> to hide the Overall result."]samp_cont=[#this array can be stored into a data file by lines, and loaded with d.readfile("filename")"Atmaca 2005, 20.9,  6.0,  15,  27.4,  8.5,  14","Guo 2014,    12.8,  5.2,  51,  11.9,  5.3,  51","Liu 2010,    23.38, 5.86, 35,  24.32, 5.43, 35","Wang 2012,   15.67, 8.78, 43,  18.67, 9.87, 43","Xu 2002,     15.49, 7.16, 50,  21.72, 8.07, 50","Zhao 2012,   12.8,  5.7,  40,  13.0,  5.2,  40"," ","#This is a sample of continuous data.","#Input one study in a line;","#Syntax: study name, m1, sd1, n1, m2, sd2, n2","#m1, sd1, n1: mean, SD and number of experiment group;","#m2, sd2, n2: mean, SD and number of control group."]#sample 1: dichotomous datasettings={"datatype":"CATE",#for CATEgorical/count/binary/dichotomous data"models":"Fixed",#models: Fixed or Random"algorithm":"MH",#algorithm: MH, Peto or IV"effect":"RR"}#effect size: RR, OR, RDmain(samp_cate,settings)#sample 2: continuous datasettings={"datatype":"CONT",#for CONTinuous data"models":"Fixed",#models: Fixed or Random"algorithm":"IV",#algorithm: IV"effect":"MD"}#effect size: MD, SMDmain(samp_cont,settings)

或者可以从文件中加载数据,例如:

studies = d.getdata(d.readfile("studies.txt")

以下是数据文件的一些示例: (请记住所有以开头的行都是注释行,加载时将忽略这些注释行。)

连续数据样本

Atmaca 2005, 20.9,  6.0,  15,  27.4,  8.5,  14
Guo 2014,    12.8,  5.2,  51,  11.9,  5.3,  51
Liu 2010,    23.38, 5.86, 35,  24.32, 5.43, 35
Wang 2012,   15.67, 8.78, 43,  18.67, 9.87, 43
Xu 2002,     15.49, 7.16, 50,  21.72, 8.07, 50
Zhao 2012,   12.8,  5.7,  40,  13.0,  5.2,  40

#This is a sample of continuous data.
#Input one study in a line;
#Syntax: study name, m1, sd1, n1, m2, sd2, n2
#m1, sd1, n1: mean, SD and number of experiment group;
#m2, sd2, n2: mean, SD and number of control group.

二分法数据样本

Fang 2015, 15, 40,  24, 37 
Gong 2012, 10, 40,  18, 35 
Liu 2015,  30, 50,  40, 50 
Long 2012, 19, 40,  26, 40 
Pan 2015a, 57, 100, 68, 100 
Wang 2001, 13, 18,  17, 18 
Wang 2003, 7,  86,  15, 86

#This is a sample of binary data.
#Input one study in a line;
#Syntax: study name, e1, n1, e2, n2
#e1,n1: events and number of experiment group;
#e2,n2: events and number of control group.

具有子组的数据样本

Fang 2015,15,40,24,37
Gong 2012,10,40,18,35
Liu 2015,30,50,40,50
Long 2012,19,40,26,40
Wang 2003,7,86,15,86
<subgroup>name=short term
Chen 2008,20,60,28,60
Guo 2014,31,51,41,51
Li 2015,29,61,31,60
Yang 2006,21,40,31,40
Zhao 2012,27,40,30,40
<subgroup>name=medium term
#<nototal>

#This is a sample of subgroup.
#Cumulative meta-analysis and Senstivity analysis will blind to all <subgroup> tags.
#And you can add a line of <nototal> to hide the Overall result.

联系人

邓红勇博士

上海中医药大学

中国上海,201203

电子邮件:dephew@126.com

网址:www.pymeta.com

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何将长字符串转换为短得多的字符串   java类型ArrayList<Boolean>中的toArray(T[])方法不适用于参数(Boolean[])   java xfire webservice客户端获取空响应   java软件框架和软件平台有什么区别?   java构建了一个监听数据库更改并调用其他方法的软件。我做得对吗?   安卓 studio(java)中的Paypal:与服务器通信的问题   我们如何在运行时更改java提供的内置注释的消息   java成批进行http调用   序列化   当我使用Tomcat运行我的应用程序时,我得到了java。网MalformedURLException:本地主机名未知:java。网未知后异常   操作系统Java内存映射文件和刷新   java无法用v6构建JXBrowser jar。18+   java有没有办法从运行在同一台服务器上的代码中获取服务器指纹?   使用“代理”用户的java Spring Active Directory身份验证   在Android(Kotlin/Java)活动之间发送图像   java显示ArrayList对象?