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

2010-07-20 21:45 · sciencewu

CPAN是 “The Comprehensive Perl Archive Network”的缩写,是指与Perl 语言有关的模块仓库,Perl语言是简单易用的跨平台编程语言,可以运行在Unix、Linux、Windows、MacOS等多种操作平台上。Perl 语言在处理文本资料

CPAN是 “The Comprehensive Perl Archive Network”的缩写,是指与Perl 语言有关的模块仓库,Perl语言是简单易用的跨平台编程语言,可以运行在Unix、Linux、Windows、MacOS等多种操作平台上。Perl 语言在处理文本资料、管理数据库、运行CGI网关程序等方面运用非常广泛。值得一提的是,由于Perl强大的正则表达能力,近年来在生物信息技术领域的应 用越来越广泛,已经成为在该领域最重要的编程语言。

和Perl语言一样,CPAN中的资源是免费和开源的,目前CPAN已经包含数千个Perl 模块,涉及到编程领域中各方面的问题,当然也包含统计学方面的模块。

通过在https://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提供的模块都是开源的,我们可以通过分析源代码来了解编程实现的过程。在模块提供的示范代码的基础上,可以很容易编写出特殊统计功能的程序,来满足科学研究的需要,比如对大规模列联表数据的自动化处理。在商业统计软件之外,又有了一个免费而且专业的选择。

关键词: