Created
February 24, 2013 11:11
-
-
Save gcchaan/5023433 to your computer and use it in GitHub Desktop.
生物統計学。カイ二乗検定(データ形式:2×m)
Chi-Square Test of Independence (for biostatistics)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html lang=ja> | |
<head> | |
<meta http-equiv="Content-Type" content="text/HTML; charset=EUC-JP"> | |
<meta http-equiv="Content-Style-Type" content="text/css"> | |
<style type="text/css"> | |
<!-- | |
.top {border-top: 1px solid #000000;} | |
.jouge {border-top: 1px solid #000000; | |
border-bottom: 1px solid #000000;} | |
.bot {border-bottom: 1px solid #000000;} | |
--> | |
</style> | |
</head> | |
<body> | |
2×m分割表 | |
<?php | |
error_reporting(E_WARNING); | |
include("./7kai_hyou.php"); | |
$m_number =null; | |
if( isset($_GET['m_number'])) | |
$m_number = $_GET['m_number']; | |
$atai =null; | |
if( isset($_GET['atai'])) | |
$atai = $_GET['atai']; | |
$m_alphabet = str_split("0ABCDEFGHIJKLMNOPQRSTUVWXYZ"); | |
if($atai != null){ | |
//総和・平均 | |
for($j=1;$j<=2;$j++){ | |
for($i=1;$i<=$m_number;$i++){ | |
$sum[$j]+=$atai[$j][$i]; //標本毎 | |
$sum_k[$i]+=$atai[$j][$i]; //項目毎 | |
$hassei[$i] = $atai[1][$i]/$sum_k[$i]*100; | |
} | |
// $reisuu_wa +=$reisuu; //データ総数 | |
$souwa_wa += $sum[$j]; //各標本の総和の和 | |
} | |
//期待値 | |
for($j=1;$j<=2;$j++){ | |
for($i=1;$i<=$m_number;$i++){ | |
$mean[$j]=$sum_k[$i]/$souwa_wa; | |
$theory[$j][$i]=$sum[$j]*$mean[$j]; | |
$x2+=pow($atai[$j][$i]-$theory[$j][$i],2)/$theory[$j][$i]; | |
} | |
} | |
//自由度 | |
$df=$m_number-1; | |
//区間同士の組み合わせ | |
$kumi_n = round($m_number/2,0); | |
//四捨五入 | |
for($j=1;$j<=2;$j++){ | |
for($i=1;$i<=$m_number;$i++){ | |
$theory[$j][$i]=round($theory[$j][$i],2); | |
$hassei[$i]=round($hassei[$i],1); | |
} | |
} | |
$x2=round($x2,4); | |
} | |
if($atai == null){ | |
if($m_number == null){ | |
echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=GET>"; | |
echo "m数:<input type=text name=m_number size=3>\n"; | |
echo "<input type=submit name=submit value=\"送信\">"; | |
echo "</form>"; | |
} | |
} | |
if($m_number != null){ | |
echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=GET>\n"; | |
echo "<table>\n<tr><td class=\"jouge\">No.</td>"; | |
for($i=1;$i<=$m_number;$i++){ | |
echo "<td class=\"jouge\">$m_alphabet[$i]</td>"; | |
} | |
if($atai != null){echo "<td class=\"jouge\">Σ</td>";} | |
echo "</tr>\n"; | |
for($j=1;$j<=2;$j++){ | |
echo "<tr><td>$j</td>"; | |
for($i=1;$i<=$m_number;$i++){ | |
echo "<td><input type=text size=3 name=atai[$j][$i] value=".$atai[$j][$i].">"; | |
if($atai != null){echo "(".$theory[$j][$i].")";} | |
} | |
if($atai != null){echo "<td>$sum[$j]</td>";} | |
echo "</tr>\n"; | |
} | |
if($atai != null){echo "<tr><td class=\"jouge\">Σ</td>\n"; | |
for($j=1;$j<=$m_number;$j++){echo "<td class=\"jouge\">$sum_k[$j]</td>";} | |
echo "<td class=\"jouge\">$souwa_wa</td>"; | |
} | |
echo "</table>\n"; | |
echo "<input type=hidden name=m_number value=$m_number>\n"; | |
echo "<input type=submit name=submit value=\"送信\">\n"; | |
} | |
if($atai!=null){ | |
print <<< DOC_END | |
():期待値 | |
<br><br> | |
χ2の算出 | |
<br> | |
DOC_END; | |
if($atai != null){echo "χ2=";} | |
for($j=1;$j<=2;$j++){ | |
for($i=1;$i<=$m_number;$i++){ | |
echo "(".$atai[$j][$i]."-".$theory[$j][$i].")^2/".$theory[$j][$i]."+"; | |
} | |
} | |
print <<< DOC_END | |
={$x2} | |
<br><br> | |
自由度(df)を求める。 | |
<br> | |
自由度(df)=(行-1)(列-1)=(2-1)({$m_number}-1)={$df} | |
<br><br> | |
検定 | |
<br> | |
DOC_END; | |
if($x2>$kai_hyou[1][$df]){ | |
print <<< DOC_END | |
χ2={$x2}はχ2分布表の{$kai_hyou[1][$df]}(df={$df},p=0.01)より大きいため、帰無仮説({$m_number}種の+率に差がない)は棄却され、いずれかの区間の+率に有意差がある。<br><br> | |
DOC_END; | |
for($j=1;$j<=$m_number-1;$j++){ | |
for($i=$j+1;$i<=$m_number;$i++){ | |
$kukan_sum[$j]=$atai[1][$j]+$atai[2][$j]; | |
$kukan_sum2[$i]=$atai[1][$i]+$atai[2][$i]; | |
$rate_sum=$atai[1][$j]+$atai[1][$i]; | |
$rate_sum2=$atai[2][$j]+$atai[2][$i]; | |
$goukei=$rate_sum+$rate_sum2; | |
$tasuki=$atai[1][$j]*$atai[2][$i]-$atai[1][$i]*$atai[2][$j]; | |
$x2_22=$goukei*pow($tasuki,2)/$kukan_sum[$j]/$kukan_sum2[$i]/$rate_sum/$rate_sum2; | |
$x2_22=round($x2_22,3); | |
echo $m_alphabet[$j]."と".$m_alphabet[$i]."の+率の差の検定をすると<br>\n"; | |
print <<< DOC_END | |
<table> | |
<tr><td class="jouge">区間/</td><td class="jouge">+</td><td class="jouge">-</td><td class="jouge">Σ</td></tr> | |
<tr><td>{$m_alphabet[$j]}</td><td>{$atai[1][$j]}</td><td>{$atai[2][$j]}</td><td>{$kukan_sum[$j]}</td></tr> | |
<tr><td>{$m_alphabet[$i]}</td><td>{$atai[1][$i]}</td><td>{$atai[2][$i]}</td><td>{$kukan_sum2[$i]}</td></tr> | |
<tr><td class="jouge">Σ</td><td class="jouge">{$rate_sum}</td><td class="jouge">{$rate_sum2}</td><td class="jouge">{$goukei}</td></tr> | |
</table> | |
χ2={$x2_22} | |
<br> | |
DOC_END; | |
if($x2_22>$kai_hyou[1][1]){ | |
$kenteikekka[$j][$i]=1; | |
print <<< DOC_END | |
χ2={$x2_22}はχ2分布表の{$kai_hyou[1][1]}(df=1,p=0.01)より大きいため、区間{$m_alphabet[$j]}と区間{$m_alphabet[$i]}の+率の差は有意である。<br><br> | |
DOC_END; | |
}elseif($kai_hyou[1][1]>$x2_22 && $x2_22>$kai_hyou[5][1]){ | |
$kenteikekka[$j][$i]=5; | |
print <<< DOC_END | |
χ2={$x2_22}はχ2分布表の{$kai_hyou[5][1]}(df=1,p=0.05)より大きいため、区間{$m_alphabet[$j]}と区間{$m_alphabet[$i]}の+率の差は有意である。<br><br> | |
DOC_END; | |
}else{ | |
$kenteikekka[$j][$i]=0; | |
print <<< DOC_END | |
χ2={$x2_22}はχ2分布表の{$kai_hyou[5][1]}(df=1,p=0.05)より小さいため、区間{$m_alphabet[$j]}と区間{$m_alphabet[$i]}に差があるとは言えない。 | |
<br><br> | |
DOC_END; | |
} | |
} | |
} | |
echo "<H3>結果</H3>\n"; | |
/* | |
echo "<table>"; | |
*/ | |
echo "<table><tr><td class=\"jouge\"> </td>"; | |
for($i=1;$i<=$m_number;$i++){ | |
echo "<td class=\"jouge\">$m_alphabet[$i]</td>"; | |
} | |
echo "</tr><tr><td class=\"bot\">発生割合(%)</td>"; | |
for($i=1;$i<=$m_number;$i++){ | |
echo "<td class=\"bot\">$hassei[$i]</td>"; | |
} | |
}elseif($kai_hyou[1][$df]>$x2 && $x2>$kai_hyou[5][$df]){ | |
print <<< DOC_END | |
χ2={$x2}はχ2分布表の{$kai_hyou[5][$df]}(df={$df},p=0.05)より大きいため、帰無仮説({$m_number}種の+率に差がない)は棄却され、いずれかの区間の+率に有意差がある。 | |
DOC_END; | |
for($j=1;$j<=$m_number-1;$j++){ | |
for($i=$j+1;$i<=$m_number;$i++){ | |
$kukan_sum[$j]=$atai[1][$j]+$atai[2][$j]; | |
$kukan_sum2[$i]=$atai[1][$i]+$atai[2][$i]; | |
$rate_sum=$atai[1][$j]+$atai[1][$i]; | |
$rate_sum2=$atai[2][$j]+$atai[2][$i]; | |
$goukei=$rate_sum+$rate_sum2; | |
$tasuki=$atai[1][$j]*$atai[2][$i]-$atai[1][$i]*$atai[2][$j]; | |
$x2_22=$goukei*pow($tasuki,2)/$kukan_sum[$j]/$kukan_sum2[$i]/$rate_sum/$rate_sum2; | |
$x2_22=round($x2_22,3); | |
echo $m_alphabet[$j]."と".$m_alphabet[$i]."の+率の差の検定をすると<br>\n"; | |
print <<< DOC_END | |
<table> | |
<tr><td class="jouge">区間/</td><td class="jouge">+</td><td class="jouge">-</td><td class="jouge">Σ</td></tr> | |
<tr><td>{$m_alphabet[$j]}</td><td>{$atai[1][$j]}</td><td>{$atai[2][$j]}</td><td>{$kukan_sum[$j]}</td></tr> | |
<tr><td>{$m_alphabet[$i]}</td><td>{$atai[1][$i]}</td><td>{$atai[2][$i]}</td><td>{$kukan_sum2[$i]}</td></tr> | |
<tr><td class="jouge">Σ</td><td class="jouge">{$rate_sum}</td><td class="jouge">{$rate_sum2}</td><td class="jouge">{$goukei}</td></tr> | |
</table> | |
χ2={$x2_22} | |
<br> | |
DOC_END; | |
if($x2_22>$kai_hyou[1][1]){ | |
$kenteikekka[$j][$i]=1; | |
print <<< DOC_END | |
χ2={$x2_22}はχ2分布表の{$kai_hyou[1][1]}(df=1,p=0.01)より大きいため、区間{$m_alphabet[$j]}と区間{$m_alphabet[$i]}の+率の差は有意である。<br><br> | |
DOC_END; | |
}elseif($kai_hyou[1][1]>$x2_22 && $x2_22>$kai_hyou[5][1]){ | |
$kenteikekka[$j][$i]=5; | |
print <<< DOC_END | |
χ2={$x2_22}はχ2分布表の{$kai_hyou[5][1]}(df=1,p=0.05)より大きいため、区間{$m_alphabet[$j]}と区間{$m_alphabet[$i]}の+率の差は有意である。<br><br> | |
DOC_END; | |
}else{ | |
$kenteikekka[$j][$i]=0; | |
print <<< DOC_END | |
χ2={$x2_22}はχ2分布表の{$kai_hyou[5][1]}(df=1,p=0.05)より小さいため、区間{$m_alphabet[$j]}と区間{$m_alphabet[$i]}に差があるとは言えない。 | |
<br><br> | |
DOC_END; | |
} | |
} | |
} | |
}else{ | |
print <<< DOC_END | |
χ2={$x2}はχ2分布表の{$kai_hyou[5][$df]}(df={$df},p=0.05)より小さいため、帰無仮説({$m_number}種の+率に差がない)は棄却されない。 | |
<br> | |
すなわち、{$m_number}種の+率に差があるとは言えない。 | |
DOC_END; | |
} | |
} | |
?> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment