新聞中心

        EEPW首頁 > 測試測量 > 設計應用 > 用Excel中的VBA編寫卡方測算相關程序

        用Excel中的VBA編寫卡方測算相關程序

        作者: 時間:2012-11-22 來源:網絡 收藏

         在生命科學及社會科學研究中,卡方(χ2)檢驗是最常用的統計分析方法之一[1-8]??ǚ剑?chi;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 編寫 測算

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 文成县| 福清市| 山阴县| 锡林郭勒盟| 白朗县| 西峡县| 孟连| 台北市| 虞城县| 嫩江县| 关岭| 福州市| 聂拉木县| 额敏县| 望城县| 克东县| 仁寿县| 积石山| 资兴市| 贡山| 横峰县| 桂平市| 德昌县| 彭阳县| 尖扎县| 宁武县| 根河市| 昌邑市| 梅州市| 湖北省| 东阳市| 宁夏| 柳江县| 连城县| 黑龙江省| 泽库县| 霞浦县| 澜沧| 新化县| 通辽市| 保靖县|