【摘要】 微软已经推出功能强大的PowerShell 1.0,并决定在未来的新操作系统中内置PowerShell,PowerShell本身具有完善的数学计算和多维数组功能,只需通过简单脚本编程就可以方便地计算医学统计中经常遇到的行×列表χ2检验问题。
【关键词】 PowerShel
Abstract Microsoft have designed powerful PowerShell 1.0, and in future PowerShell will exist in new operation system. PowerShell provided perfect mathematical computation ability and can manage multidimension array expediently. So simple PowerShell program can be used to calculate Contingency Table chi-square test in medical statistics.
Key words contingency table; chi-square test; PowerShell
1 有关PowerShell的介绍
PowerShell 1.0 是微软在06年底设计完成的新一代命令行外壳和脚本语言,用于进行系统管理和自动化处理。从微软的发展报告中我们可以了解到,PowerShell将内置在新版的Vista和Windows Server 2008操作系统中,这说明PowerShell将会随着微软操作系统被广泛地使用,现在PowerShell 2.0已经进入测试阶段。目前电脑用户使用较多的Windows XP SP2也可以在.NET Framework 2.0的基础上安装使用PowerShell。
PowerShell是一款基于对象并建立在.Net框架之上,能够同时支持WMI、COM、ADO、.NET,管理员将能够在命令行的环境中使用COM和.NET类库中的全部功能,可以说功能十分强大。用户不需要另外安装软件,仅通过PowerShell进行简单的脚本编程就可以完成平常遇到的各种医学统计任务,一般来说没有必要安装庞大专业统计软件,也没有必要另外安装其他编程语言的环境。
2 运用PowerShell脚本编程计算行列表卡方
笔者曾经讨论过运用批处理的方法完成四格表卡方检验的计算〔1〕,由于批处理没有数组的功能,要想实现多行多列表格χ2检验是很困难的。PowerShell具有完善的数学计算的能力,支持多维数组,因此要实现行列表χ2检验是相当简单的。
我们知道,行×列表χ2检验基本计算公式为χ2=n(A2 nR nC-1) ,从编程计算的角度来说关键是二维数组的恰当运用。对二维数组Array分解并构造出两个一维数组,分别代表行和列的数值,计算出每行的和nR以及每列的和nC,最后由公式计算最后的结果。
我们尝试运用PowerShell脚本编程方法计算医学统计中经常遇到的行×列表χ2检验。首先我们利用PowerShell对数组赋值的方法在控制台把表格数据直接赋值给数组$rc,然后我们编写计算脚本kf.ps1,对数组$rc进行分析并计算出χ2检验结果。
kf.ps1脚本的源代码如下:
# 对输入的数据判断行数和列数
$r = $rc.count
$c = $rc〔0〕.count
write-host "您输入的是 $r 行 * $c 列表! "
# 计算各行之和并赋值到一维数组$rt中,并计算表格全部数值之和n
$rt = @()
for ($i=0; $i -lt $r; $i++)
{
for ($j=0; $j -lt $c; $j++)
{
$temp += $rc〔$i〕〔$j〕
}
$rt = $rt + $temp
$n += $temp
$temp = 0
}
# 计算各列之和并赋值到一维数组$ct中
$ct = @()
for ($j=0; $j -lt $c; $j++)
{
for ($i=0; $i -lt $r; $i++)
{
$temp += $rc〔$i〕〔$j〕
}
$ct = $ct + $temp
$temp = 0
}
# 计算卡方
for ($i=0; $i -lt $r; $i++)
{
for ($j=0; $j -lt $c; $j++)
{
$temp += $rc〔$i〕〔$j〕*$rc〔$i〕〔$j〕 / ($rt〔$i〕*$ct〔$j〕)
}
}
$x2 = $n * ($temp - 1)
write-host "n=$n 卡方=$x2 "
在控制台命令行输入c:\kf.ps1即可运行该脚本。
[8]电大学习网.免费论文网[EB/OL]. /d/file/p/2024/0424/fontbr />
3 测试程序
3.1 例1 对648 例消化道溃疡病人住院天数分析〔2〕
某病案统计室对医院收治的648 例消化道溃疡病人术前住院天数进行了分析,探讨术前住院天数对住院总天数的影响,病案统计室使用第四军医大学统计教研室编制的SPLM 软件进行统计。表1 术前住院天数对住院总天数的影响(略)
此例原文中计算结果为χ2 = 97.54 , P<0.01 ,不同术前住院天数间、 住院总天数有显著性差异,说明术前住院天数直接影响住院。
现在我们在PowerShell脚本来计算,首先在控制台界面输入这个行列表的数据:
PS C:\> $rc = (115,220,105,72),(3,52,35,3),(0,3,20,20)
这里简单解释一下,这种形式的输入是PowerShell创建二维数组的一种方式,行列表中每一行的数据放在一对括号内,一行内的数据用逗号分隔,行与行之间的数据也用逗号隔开。通过这一行的输入,我们已经把行列表所有数据赋值到变量$rc中。
然后运行我们已经编写好的计算脚本kf.ps1:
PS C:\> c:\kf.ps1
您输入的是 3行* 4列表!
N=648 卡方=97.5386448154744
此例的计算结果说明PowerShell脚本编程的计算结果准确。
3.2 例2 扭挫伤患者708 人和腰肌劳损患者347人,都用磁场疗法治疗,有效(显效与好转) 人数分别为673 人和312 人,无效例数分别为35人和35人,有效率分别为95106 % 和89191 %。问两组有效率有无差别? 〔3〕表2 两种疾病用磁场疗法的疗效(略)
检验假设H0 :两组总体有效率相等。
备择假设H1 :两组总体有效率不相等。
检验水准:双侧α= 0.05,计算结果为χ2 = 9.94,P<0.01,拒绝H0 ,认为磁场疗法对两种疾病的有效率不相同。
我们通过PowerShell脚本验证此例的计算结果,首先在控制台界面输入数据:
PS C:\> $rc = (673,35),(312,35)
运行计算脚本
PS C:\> c:\kf.ps1
您输入的是 2行* 2列表!
n=1055 卡方=9.9427369384943
本例是四格表的卡方统计问题,说明本研究的PowerShell程序同样适用于四格表卡方统计。通过以上二例的计算,我们认为通过PowerShell脚本计算行列表卡方是一种方便易用的方法。
4 讨论
以下几点是对本研究中脚本程序的总结说明:
① 如果编写的kf.ps1脚本不能运行,那么应该开启PS1脚本的运行权限,在控制台输入set-ExecutionPolicy Unrestricted 即可。微软从安全角度考虑关闭了脚本运行权限。
② 微软操作系统要求运行ps1脚本时要键入完整的路径,在本文中的完整路径是c:\kf.ps1,而不能只键入文件名kf.ps1。
③ 不少医学工作者使用Excel做卡方计算,缺点很明显,在Excel表格中对行列数的限制是预先设定的,而本研究的脚本程序没有行列数的限制,可以灵活计算多行多列的表格卡方。
④ 本研究的脚本程序只是根据公式完成了计算行列表卡方最基本的功能,在输入数据的时候请保持数据格式的正确性,因为程序对录入数据的格式不作检查。另外如果需要校正检验,可以对脚本适当改动,读者可以通过对PowerShell的学习把程序继续完善。
⑤ 本研究的脚本程序在XP SP2 PowerShell 1.0和Vista PowerShell 1.0的环境下运行通过。
【参考文献】
1 王正凯,颜景红.运用批处理完成四格表χ2检验的计算.数理医药学杂志, 2007,5:618~619 .
2 马玉荣,李健. 648 例消化道溃疡病人住院天数分析. 中国医院统计,2001,9:186.
3 潘兴仪. 卡方检验在医学科研中的应用. 广西医学, 2001,12:1397.
[8]电大学习网.免费论文网[EB/OL]. /d/file/p/2024/0424/fontbr />
相关文章:
论现代企业的人本管理 .04-26
浅析人力资源向人力资本的转化04-26
公务员考试热现象研究04-26
人力资本的使用价值研究04-26
企业人力资本投资回报浅析04-26
某国企薪酬制度基于员工满意度的调查分析04-26
浅论我国公务员激励机制的完善04-26
我国事业单位工资体制改革回顾及思考04-26
浅谈传统人事管理与现代人力资源管理04-26