新闻中心

EEPW首页 > 测试测量 > 设计应用 > 用Excel中的VBA编写卡方测算相关程序

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

作者:时间:2012-11-22来源:网络收藏

 在生命科学及社会科学研究中,卡方(χ2)检验是最常用的统计分析方法之一[1-8]。卡方(χ2)检验是次数资料的显著性检验方法,包括适合性检验和独立性检验两类[9]。适合性检验用于检验某性状观察次数与该性状的理论比率是否符合,如在遗传分析中研究两对性状杂种后代的分离现象是否符合某一特定比率;而独立性检验是用于判断两类因子是彼此相关还是相互独立的,如:采用某种措施与预防某种灾害的关系。
卡平方的计算很复杂,但随着计算机与统计软件的普及,应用计算机计算卡平方成为最准确可靠的方法,各种大型统计软件如SAS、SPSS、DPS等均应用于卡平方的[10-12],一些研究者也研发了在上编制运算表来实现卡平方的方法[13]。
 使用如SAS、SPSS、DPS等大型统计软件需要有较高花费;采用R统计软件来编程进行卡平方要求研究者有较强学术底蕴和计算机编程能力。这在客观上限制了SAS、SPSS、DPS、R等统计软件的普及应用。作为 Microsoft Office 家族成员,由于多数学生和科研人员都具有基础知识,采用Excel软件计算卡平方无需考虑运行环境而受到欢迎。然而,采用编制运算表的方法还是让人感到有些繁锁,不易学习使用。鉴于此,本文采用一种基于Excel的编程方法[14-15],了“卡平方测算”相关程序,可在所有配备Office 2000以上版本的计算机上使用。“卡平方测算”在程序运算时只需输入最原始的数据,应用步骤实行最直观的人机对话,任何初学者都可以即学即用轻松地掌握程序的使用方法;完的程序成为工作模板后,可以任意复制或通过e-mail邮寄等方式进行传播、拷贝,因此这种方法受到使用者的一致好评。
本文介绍了该程序的源代码及使用方法,让所有不方便使用大型统计软件的同行都可分享这些程序带来的所有便利。
1 程序源代码
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 编写 测算

评论


相关推荐

技术专区

关闭