注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

wangyufeng的博客

祝愿BB 健康开心快乐每一天

 
 
 

日志

 
 

[转载]CPAN在医学统计中的应用  

2010-11-04 16:25:16|  分类: Perl & bioperl |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
CPAN是 “The Comprehensive Perl Archive Network”的缩写,是指与Perl 语言有关的模块仓库,Perl语言是简单易用的跨平台编程语言,可以运行在Unix、Linux、Windows、MacOS等多种操作平台上。Perl 语言在处理文本资料、管理数据库、运行CGI网关程序等方面运用非常广泛。值得一提的是,由于Perl强大的正则表达能力,近年来在生物信息技术领域的应 用越来越广泛,已经成为在该领域最重要的编程语言。
   
  和Perl语言一样,CPAN中的资源是免费和开源的,目前CPAN已经包含数千个Perl 模块,涉及到编程领域中各方面的问题,当然也包含统计学方面的模块。

    通过在http://search.cpan.org/网 站的搜索,我们可以找到一些CPAN网站上的统计模块,发现这些模块简单易用、功能强大。和商业统计软件相比,这些免费的统计模块更适合通常的医学卫生统 计。

    在Windows系统中安装模块时会使用到nmake命令,这是一个50K大小的编译程序,可以在微软官方网站下载,下载网址是:ftp://ftp.microsoft.com/Softlib/MSLFILES/nmake15.exe。 下载后拷贝nmake15.exe到c:\perl\bin中运行,自动解压为nmake.exe和nmake.err两个文件,然后就可以正常安装 Perl模块了。

  2  统计模块的安装与计算测试

  2.1  R×C列联表卡方计算模块

    R×C列联表卡方计算模块是Statistics::ChisqIndep,由于模块相互关联的原因,在安装这个模块前需要先安装 Statistics::Distributions。这两个模块合起来不到10K大小。下载后解压缩,安装过程如下:

    在Linux系统安装模块的命令为:

    perl makefile.pl

    make

    make test

    make install

    在Windows系统安装模块的命令为:

    perl makefile.pl

    nmake

    nmake test

    nmake install

    笔者在安装这两个模块过程中没有遇到问题,安装后我们参考一下模块自带的示范代码就可以进行卡方计算了。
    下面我们通过一例行列表的卡方计算来测试这个模块的运行情况:

  141例脑肿瘤患者的类型和发生部位[1]

    这是一例3×3列联表的卡方计算问题,笔者直接使用模块示范代码来计算,运行结果如下:

    Rows: 3

    Columns: 3

    Degree of Freedom: 4

    Total Count: 141

    Chisquare Statistic: 7.84408177408177

    pvalue: 0.097460

    Warning: some of the cell counts might be too low.
   
   123rtotal1239638(21.02)(9.97)(7.01)2214328(15.49)(7.35)(5.16)334241775(41.49)(19.68)(13.83)ctotal783726141123rtotal1239638(21.02)(9.97)(7.01)2214328(15.49)(7.35)(5.16)334241775(41.49)(19.68)(13.83)ctotal783726141
    Rows: 3

    Columns: 3

    Degree of Freedom: 4

    Total Count: 141

    Chisquare Statistic: 7.84408177408177

    pvalue: 0.097460

    Warning:  some of the cell counts might be too low.
   
   123rtotal1239638(21.02)(9.97)(7.01)2214328(15.49)(7.35)(5.16)334241775(41.49)(19.68)(13.83)ctotal783726141
   
  此例原文中的计算结果为χ2=7.84,查表得P>0.05。
   
  经过对比,我们看到程序运行后计算结果准确、分析完整,该模块也适用于四格表的卡方计算。

  2.2  四格表Fisher确切概率计算模块

    有关四格表Fisher确切概率计算的模块,我们可以找到TextNSP,这个模块支持Fisher的双侧检验和单侧检验,目前版本是1.03。下载后 解压缩,Linux系统上安装命令为:

    perl makefile.pl

    make

    make test

    make install

    在Windows环境下需要使用nmake,安装命令为:

    perl makefile.pl

    nmake

    nmake test

    nmake install

    笔者在Windows安装时遇到nmake的提示,要把makefile文件末尾“@echo”开头的几行删除,然后就可以安装成功了。
   
  在使用之前我们要注意这个模块中的图解:

       n11     n12 |    n1p
       n21     n22 |    n2p
      ------
       np1     np2    npp
   
  模块自带的示范代码如下:

  use Text::NSP::Measures::2D::Fisher::twotailed;
       
  my  $n1p = 20; my $np1 = 20;  my $n11 = 10;  my  $npp = 60;
      
  $twotailed_value = calculateStatistic(n1p=>$n1p, np1=>$np1,
                                                     npp=>$npp, n11=>$n11);
       
  print getStatisticName."value for bigram is ".$twotailed_value;

    我们发现,该模块计算函数的四个参数并不是我们通常使用的a、b、c、d,而是a、(a+b)、(a+c)、(a+b+c+d),笔者没有研究为什么模块 的作者这样处理函数的参数,如果按照我们通常的习惯输入a、b、c、d四个数值进行计算,也是很简单的,只需将示范代码稍作修改即可,修改代码如下:
       
  use Text::NSP::Measures::2D::Fisher::twotailed;
    
  print ("请依次输入四格表a b c d的值,空格隔开:\n");

     $input = ;

     chomp ($input);

     @t = split (" ",$input);

     my $n11 = $t[0];

      my $n1p = $t[0]+$t[1];

     my $np1 = $t[0]+$t[2]; 

     my $npp = $t[0]+$t[1]+$t[2]+$t[3];

     $twotailed_value = calculateStatistic( n11=>$n11,n1p=>$n1p, np1=>$np1, npp=>$npp);
    
  print getStatisticName."value for bigram is ".$twotailed_value;

    为了测试计算是否准确,笔者在期刊网查到一篇文章,该文章对比了几种统计软件对四格表确切概率计算的结果,对其中部分四格表数据我们使用 Text::NSP模块进行计算,把计算结果和其他软件进行对比:
    几种统计软件结果比较[2]

    我们可以看到,Text::NSP模块的计算结果和SAS、
  SPSS等商业统计软件的计算结果是一样的。

  3  讨论

    经过测试,CPAN网站上的统计模块比较专业,计算结果准确,完全可以满足医疗卫生的统计需求。
   
  由于CPAN提供的模块都是开源的,我们可以通过分析源代码来了解编程实现的过程。在模块提供的示范代码的基础上,可以很容易编写出特殊统计功能的程 序,来满足科学研究的需要,比如对大规模列联表数据的自动化处理。在商业统计软件之外,又有了一个免费而且专业的选择。

本文转载自:http://www.sciencenet.cn/m/Print.aspx?id=345846

  评论这张
 
阅读(832)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017