- ベストアンサー
割合データの比較の方法と結果の検定について
- エクセルで数値の全データから指定した範囲のデータの割合を求める方法について説明します。
- 2つの割合の結果に有意差があるか検定する方法について教えてください。
- 母数が同じ場合の検定方法についても教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。KenKen_SP です。 有意差検定の考え方を理解してしまえば、計算方法自体はさほど難しいない と思います。WEB で検索してみましょう。 参考 URL をあげておきます。有意差検定について分かりやすい解説と、WEB ページ上で Java Script による簡易検定が行える WEB ツールがあります。 http://www.blufi.co.jp/
その他の回答 (1)
- KenKen_SP
- ベストアンサー率62% (785/1258)
> エクセル上の関数を使用して行う事は,やはり難しいのでしょうか? ご紹介した WEB サイト内に有意検定の考え方と検定方法が記載されて います。それを Excel の数式に直していくだけですが、、、 SQRT:平方根を求める ABS:絶対値を求める ROUND:四捨五入で数値を丸める などの関数を使えば統計量を求める数式はできると思います。 参考までに、VBA で簡易的な有意差検定を行うプログラムを書いておき ます。各要素のセルをクリックしてゆけば、検定結果が表示され、 最後に統計量を求める数式をセルに書き込むようになっています。 ただし、取り急ぎで作ったので、「取りあえず動けばよし」ですが。 母数が同じ場合の検定方法については、省略しますが、ご紹介した WEB サイト内に検定方法の記載があります。先にあげた、関数を使えば Excel で十分やれますよ。 では。 Sub 異なるサンプル間の有意差検定() Dim s1v As Range, s1p As Range Dim s2v As Range, s2p As Range Dim a$, x$, b$, y$ Dim aa#, xx#, bb#, yy#, cc#, dd#, ee#, ff# Dim strMes$, strResult$ On Error GoTo Terminate 'データ取得 strMes = "該当データのセルをひとつ選択し、[OK]をクリックします。" With Application Set s1v = .InputBox(strMes, Title:="サンプル1", Type:=8) Set s1p = .InputBox(strMes, Title:="サンプル1比率", Type:=8) Set s2v = .InputBox(strMes, Title:="サンプル2", Type:=8) Set s2p = .InputBox(strMes, Title:="サンプル2比率", Type:=8) End With a = s1v.AddressLocal(False, False): aa = s1v.Value x = s1p.AddressLocal(False, False): xx = s1p.Value b = s2v.AddressLocal(False, False): bb = s2v.Value y = s2p.AddressLocal(False, False): yy = s2p.Value '有意判定 cc = (aa * xx + bb * yy) / (aa + bb) dd = cc * (1 - cc) ee = (1 / aa) + (1 / bb) ff = Round(Abs(xx - yy) / Sqr(dd * ee), 3) Select Case ff Case Is >= 2.576: strResult = "有意水準1%で有意差あり" Case Is >= 1.96: strResult = "有意水準5%で有意差あり" Case Is >= 1.645: strResult = "有意水準10%で有意差あり" Case Is < 1.645: strResult = "有意差なし" End Select strMes = "" strMes = strMes & "サンプル1: " & vbTab & aa & vbCrLf strMes = strMes & "サンプル1比率: " & vbTab & Format(xx, "0%") & vbCrLf strMes = strMes & "サンプル2: " & vbTab & bb & vbCrLf strMes = strMes & "サンプル2比率: " & vbTab & Format(yy, "0%") & vbCrLf strMes = strMes & "統計量: " & vbTab & vbTab & ff & vbCrLf & vbCrLf strMes = strMes & "【検定結果】: " & vbTab & strResult MsgBox strMes, vbInformation strMes = "=Round(ABS(" & x & "-" & y & ")/SQRT((((" & a & "*" & x & "+" & b _ & "*" & y & ")/(" & a & "+" & b & "))*(1-((" & a & "*" & x & "+" & b _ & "*" & y & ")/(" & a & "+" & b & "))))*((1/" & a & ")+(1/" & b & "))),3)" Set s1v = Application.InputBox( _ Prompt:="統計量を求める数式を書き込むセルを選択し、[OK]をクリック", Type:=8) s1v.Formula = strMes Terminate: End Sub
お礼
KenKen_SPさん 参考URLを教えて頂きありがとうございます.Java Script による簡易検定は,私がやりたいと考えていた事にピッタリだったのでとても役立ちます. ただ,Javりa Script による簡易検定をエクセル上の関数を使用して行う事は,やはり難しいのでしょうか?よければ教えて下さい.