美文网首页教育与心理测量
利用Excel VBA实现Levene检验自动化

利用Excel VBA实现Levene检验自动化

作者: yhbyinb | 来源:发表于2017-12-16 09:22 被阅读21次

摘要:Excel无法实现Levene方差齐性检验自动计算,本文根据Levene检验的一种计算方法,利用Excel VBA实现了Levene方差齐性检验的计算自动化。

关键词:Excel VBALevene检验自动化

Levene方差齐性检验是在1960年由H.Levene提出,后来经过M.B.Brow n和A.B.Forsy the进行扩展,使其成为一种用途广泛的方差齐性检验。相对于其它方差齐性检验方法,Levene检验的重要特点是应用条件不受数据分布类型的限制,既可以用于正要分布数据也可以用于非正态分布数据,并且各组样本量没有特定要求[1]。目前国外著名统计软件如SAS和SPSS等都可以实现Levene检验。而使用更广泛、更方便的统计工具Office Excel没有提供直接计算leven检验的函数。国内一些学者使用Office Excel的内置函数编制了levene检验的计算方法,但是这些方法对数据格式要求严格,数据处理速度有限,而且需要按步骤进行手动操作。这就会导致出现数据溢出和操作失误等现象出现。为了解决上述问题,本文旨在介绍一种使用Office Excel VBA实现levene方差齐性检验的方法。使用这种方法可大大减少手工操作步骤,降低错误率,同时大大提高了计算效率。

1 Levene检验的基本思想

Levene检验方法的实质是将原始观测值yij(表示第i组第j个观测值)转换为相应的离差zij,然后用离差zij作单因素方差分析[2]。离差的一种计算方法为:

(1)

此方法为leneve检验的基本公式,是SPSS软件包默认的Leneve检验方法。本文也采用此方法来实现Leneve检验的自动计算。

2材料与方法

2.1 材料

软件平台为:Windows 7/8  Excel 2013及以上版本

2.2 方法

2.2.1 Levene齐性检验函数编写打开Excel,新建一个空白工作簿。点击开发工具——录制宏,在宏对话框中键入宏名为Levene,快捷键设为l,点击创建,打开VBA编辑环境。在VBE代码编辑窗体内键入如下代码:

Sub levene()' 快捷键: Ctrl+l

Dim datar As Double, datac As Double

Dim ji As Double, count As Double, j As Double, i As Double

datac = Selection.Areas(1).Columns.count '计算列数

datar = Selection.Areas(1).Rows.count '计算行数

For j = 1 To datac

For i = 1 To datar

If Sheet1.Cells(i, j) <> "" Then

ji = ji + 1

count = Sheet1.Cells(i, j) + count

End If

Next

' ji = WorksheetFunction.CountA(Sheet1.Range(Sheet1.Cells(1, j), Sheet1.Cells(datar, j))) '每一列的非空值

Sheet1.Cells(i + 2, j) = count / ji '每列均值

ji = 0

count = 0

Next

Call zhuanhuan(datac, datar)

Call anova(datac, datar)

End Sub

Function zhuanhuan(datac As Double, datar As Double) '数据转换

Dim i As Double, j As Double

For j = 1 To datac

For i = 1 To datar

If Sheet1.Cells(i, j) <> "" Then

Sheet2.Cells(i, j) = Abs(Sheet1.Cells(datar + 3, j) - Sheet1.Cells(i, j))

End If

Next

Next

End Function

Function anova(datac As Double, datar As Double)

Dim i As Double, j As Double

Dim SE As Double  '组内

Dim SA As Double    ' 组间

Dim ST  As Double  '总

For j = 1 To datac

For i = 1 To datar

count = Sheet2.Cells(i, j) + count '每一列的和

pfh = (Sheet2.Cells(i, j)) ^ 2 + pfh '每一列的平方和

znzy1 = WorksheetFunction.CountA(Sheet2.Range(Sheet2.Cells(1, j), Sheet2.Cells(datar, j))) '每一列的非空值

Next

Sheet2.Cells(datar + 2, j) = count

Sheet2.Cells(datar + 3, j) = count ^ 2 / znzy1 '和的平方除以数量

Sheet2.Cells(datar + 4, j) = pfh

znzy = znzy + znzy1 '数据总数

znzy1 = 0

count = 0

pfh = 0

Next

For j = 1 To datac

countz = Sheet2.Cells(datar + 2, j) + countz '总和

countpfh = Sheet2.Cells(datar + 3, j) + countpfh '总的和的平方

pfhz = Sheet2.Cells(datar + 4, j) + pfhz '总的平方和

SA = countpfh - (countz ^ 2) / znzy '组间方差

ST = pfhz - (countz ^ 2) / znzy '总方差

SE = ST - SA '组内方差

Next

MSj = SA / (datac - 1) '组间均方

MSn = SE / (znzy - datac) '组内均方

f = MSj / MSn 'F值

p = WorksheetFunction.FDist(f, datac - 1, znzy - datac) 'p值

If p > 0.05 Then

MsgBox "方差齐性,p=" & p

Else

MsgBox "方差有显著差异,p=" & p

End If

End Function

3 结果

如表1,将表1数据按列输入Excel表格sheet1表中,选中数据样本区域,使用快捷键Ctrl+l,程序会自动计算并报告结果,如图所示:

图1 结果报告

参考文献:

[1]程琮,范华. Levene方差齐性检验[J]. 中国卫生统计,2005,06:408+420.

[2]潘晓平,倪宗瓒,殷菲. 一种稳健的方差齐性检验方法[J]. 现代预防医学,2002,06:774-776.

相关文章

网友评论

    本文标题:利用Excel VBA实现Levene检验自动化

    本文链接:https://www.haomeiwen.com/subject/cuxswxtx.html