您的位置】:知源论文网 > 理工类论文 > 计算机 > 正文阅读资讯:运用PowerShell计算行×列表χ2检验

运用PowerShell计算行×列表χ2检验

[作者:王正凯[来源:论文网]| 打印 | 关闭 ]

【摘要】  微软已经推出功能强大的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即可运行该脚本。

Tags: