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