EAP推定法 | 項目応答理論
2022年10年8日
項目応答理論
EAP推定法
PHP
Rによる項目応答理論 p169 ESP推定法を、PHPで書き直してみようという試みです。
Util.php
class Util{ public function seq(int $min, int $max, int $n){ $res = array(); $var = ($max - $min) / ($n - 1); for ($i = 0; $i < $n; $i++) { $res[] = $min + $i * $var; } return $res; } public function dnorm(array $x, float $μ, float $σ){ $temp = array(); for ($i = 0; $i < count($x); $i++) { $temp[] = stats_dens_normal($x[$i],$μ,$σ); } # 総和が1になるように基準化する為の総和 $sum = array_sum($temp); $res = array(); for ($i = 0; $i < count($x); $i++) { $res[] = $temp[$i] / $sum; } return $res; } }
EAPEstimation.php
require_once('Util.php') class EAPEstimation{ public function icc2PL(float $a, float $b, float $Θ){ return 1 / (1 + exp(-1.7 * $a * ($Θ - $b)));; } public function L(array $u, array $a, array $b, float $Θ){ $temp = array(); for($i = 0; $i < count($u); $i++){ $temp[] = pow($this->icc2PL($a[$i],$b[$i],$Θ),$u[$i]) * pow(1-$this->icc2PL($a[$i],$b[$i],$Θ),1-$u[$i]); } return array_product($temp); } public function run(){ $util = new Util(); $a = [1.0, 1.5, 0.7, 1.2]; # 識別力パラメタ $b = [1.5, 0.5, 0.0, -1.0]; # 困難度パラメタ $u = [1, 0, 1, 1]; # ある受験者の反応パタン $Xm = $util->seq(-4,4,15); $Wm = $util->dnorm($Xm,0,1); $Lm = array(); for ($i = 0; $i < count($Xm); $i++) { $Lm[]=$this->L($u, $a, $b, $Xm[$i]); } $temp = array(); for ($i = 0; $i < count($Lm); $i++) { $temp[]=$Lm[$i]*$Wm[$i]; } $Gm = array(); for($i = 0; $i < count($Lm); $i++) { $Gm[]=$Lm[$i]*$Wm[$i]/array_sum($temp); } $eap = 0; for($i = 0; $i < count($Gm); $i++) { $eap = $eap+($Xm[$i]*$Gm[$i]); } echo 'EAP推定値'. "\n"; echo $eap; } }
index.php
require_once('EAPEstimation.php'); $nr = new EAPEstimation(); $nr->run();
出力結果
EAP推定値 : 0.56122380924444