用Excel中的VBA编写卡方测算相关程序

2012-11-27 14:39:18来源: 21IC

在生命科学及社会科学研究中,卡方(χ2)检验是最常用的统计分析方法之一[1-8]。卡方(χ2)检验是次数资料的显著性检验方法,包括适合性检验和独立性检验两类[9]。适合性检验用于检验某性状观察次数与该性状的理论比率是否符合,如在遗传分析中研究两对性状杂种后代的分离现象是否符合某一特定比率;而独立性检验是用于判断两类因子是彼此相关还是相互独立的,如:采用某种措施与预防某种灾害的关系。


卡平方的计算很复杂,但随着计算机与统计软件的普及,应用计算机计算卡平方成为最准确可靠的方法,各种大型统计软件如SAS、SPSS、DPS等均应用于卡平方的测算[10-12],一些研究者也研发了在Excel上编制运算表来实现卡平方测算的方法[13]。


使用如SAS、SPSS、DPS等大型统计软件需要有较高花费;采用R统计软件来编程进行卡平方测算要求研究者有较强学术底蕴和计算机编程能力。这在客观上限制了SAS、SPSS、DPS、R等统计软件的普及应用。Excel作为 Microsoft Office 家族成员,由于多数学生和科研人员都具有Excel基础知识,采用Excel软件计算卡平方无需考虑运行环境而受到欢迎。然而,采用编制运算表的方法还是让人感到有些繁锁,不易学习使用。鉴于此,本文采用一种基于Excel的VBA编程方法[14-15],编写了“卡平方测算”相关程序,可在所有配备Office 2000以上版本的计算机上使用。“卡平方测算”在VBA程序运算时只需输入最原始的数据,应用步骤实行最直观的人机对话,任何初学者都可以即学即用轻松地掌握程序的使用方法;编写完的程序成为工作模板后,可以任意复制或通过e-mail邮寄等方式进行传播、拷贝,因此这种方法受到使用者的一致好评。


本文介绍了该程序的源代码及使用方法,让所有不方便使用大型统计软件的同行都可分享这些程序带来的所有便利。


1 VBA程序源代码


1.1 用于适合性检验的卡平方计算程序
Private Sub CommandButton1_Click()
Dim n As Integer
n=InputBox("请输入数据组数n=?")
Cells(1,2).Value=("数据组数n")
Cells(2,2).Value=n
Dim a0(0 To 99)As Single
Dim al(0 To 99)As Single
Dim x2 As Integer
Cells(1,3).Value="实测值a0"
Cells(1,4).Value="理论值al"
Cells(1,5).Value="卡平方值x2"
For i=1 To n
a0(i)=InputBox("请输入实测值的第"& i &"个样本值")
Cells(1+i,3).Value=a0(i)
Next i
For i=1 To n
al(i)=InputBox("请输入理论值的第"& i &"个样本值")
Cells(1+i,4).Value=al(i)
Next i
x=0
For i=1 To n
x=x+((a0(i)-al(i))^2)/al(i)
Next i
Cells(2,5).Value=x
End Sub


1.2 用于独立性检验的卡平方计算程序
1.2.1 2×2表的独立性测验
Private Sub CommandButton1_Click()
Dim a As Integer :Dim b As Integer:Dim a0 As Integer:Dim b0 As Integer
Dim n As Integer
Dim a1 As Single:Dim b1 As Single:Dim a01 As Single:Dim b01 As Single
Dim E11 As Single:Dim E12 As Single:Dim E21 As Single:Dim E22 As Single
Dim c1 As Single:Dim c2 As Single:Dim c3 As Single:Dim c4 As Single
Dim x As Single
a=InputBox("请输入A事件效果1数字a=?")
Cells(1,1).Value="A事件效果1数a"
Cells(2,1).Value=a
b=InputBox("请输入B事件效果1数字b=?")
Cells(1,2).Value="B事件效果1数字b"
Cells(2,2).Value=b
a0=InputBox("请输入A事件效果2数字a0=?")
Cells(1,3).Value="A事件效果2数a0"
Cells(2,3).Value=a0
b0=InputBox("请输入B事件效果2数字b0=?")
Cells(1,4).Value="B事件效果2数字b0"
Cells(2,4).Value=b0
n=a0+b0+a+b
aa0=a+a0:bb0=b+b0:ab=a+b:a0b0=a0+b0
E11=aa0*ab/n:E12=aa0*a0b0/n
E21=bb0*ab/n:E22=bb0*a0b0/n
c1=Abs(a-E11):c2=Abs(a0-E12):c3=Abs(b-E21):c4=Abs(b0-E22)
x=((c1-0.5)^2)/E11+((c2-0.5)^2)/E12+((c3-0.5) ^2)/E21+((c4-0.5)^2)/E22
Cells(1,5).Value="卡平方值x2"
Cells(2,5).Value=x
End Sub


1.2.2 2×c表的独立性测验
Private Sub CommandButton1_Click()
Dim C As Integer :Dim R As Single :Dim d As Single:Dim h As Single
Dim x As Single
Dim a0(0 To 99) As Single :Dim b0(0 To 99) As Single:Dim g(0 To 99) As Single
C=InputBox("请输入数据组数C=?")
Cells(1,2).Value=("数据组数C")
Cells(2,2).Value=C
Cells(1,3).Value="A事件数值a0"
Cells(1,4).Value="B事件数值b0"
Cells(1,5).Value="a(i)+b(i)"
R1=0]:R2=0
For i=1 To C
a0(i)=InputBox("请输入A事件数值的第("& i &") 个样本a0("& i &")=?")
Cells(1+i,3).Value=a0(i)
b0(i)=InputBox("请输入B事件数值的第("& i &") 个样本b0(" & i & ")=?")
Cells(1+i,4).Value=b0(i)
g(i)=a0(i)+b0(i)
Cells(1+i,5).Value=g(i)
R1=R1+a0(i):R2=R2+b0(i)
Next i
R=R1+R2
Cells(1,6).Value="A事件数值之和,R1"
Cells(1,7).Value="B事件数值之和,R2"
Cells(1,8).Value="AB事件所有数值之和,R"
Cells(2,6).Value=R1:Cells(2,7).Value=R2:Cells (2,8).Value=R
h=0
For i=1 To C
h=h+a0(i)^2/g(i)
Next i
x=(h - R1 ^ 2 / R) * R ^ 2 / R1 / R2
Cells(1,9).Value=" 卡平方值x2"
Cells(2,9).Value=x
End Sub
 

[1] [2]

关键字:Excel  VBA  卡方测算

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/Test_and_measurement/2012/1127/article_6428.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
Excel
VBA
卡方测算

小广播

独家专题更多

TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved