EAP推定法

EAP Estimation Method

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
 

だてめがね
...
©️ ponpocopy

とある企業で社内SEをしています。 自身の学びが誰かの為になれば、という想いで日々ブログを更新中。 PHP(CakePHP・Laravel・FuelPHP), Pyhotn(Django・Flask), C#(ASP.NET、Unity) が好きです。