PHP Classes

How to calculate the probability to get correct PHP answers to questions asked to people using the package PHP Rasch: Probability to get correct responses using Rasch

Recommend this page to a friend!
     
  Info   Example   View files Files   Install with Composer Install with Composer   Download Download   Reputation   Support forum   Blog    
Last Updated Ratings Unique User Downloads Download Rankings
2025-10-26 (1 hour ago) RSS 2.0 feedNot yet rated by the usersTotal: Not yet counted Not yet ranked
Version License PHP version Categories
php-rasch 1.0The PHP License5Algorithms, PHP 5, Statistics
Description 

Author

This package can calculate the probability to get correct responses using Rasch probabilistic models.

It provides an example script that passes an array with the responses of the users.

The script calculates and display the estimated person competences and difficulties.

Picture of DeGraciaMathieu
  Performance   Level  
Name: DeGraciaMathieu <contact>
Classes: 28 packages by
Country: France France
Age: ???
All time rank: 287479 in France France
Week rank: 22 Up1 in France France Up
Innovation award
Innovation award
Nominee: 22x

Winner: 2x

Instructions

Example

<?php

require __DIR__ . '/vendor/autoload.php';

$responses = [
    [
1, 0, 1, 1],
    [
0, 0, 1, 0],
    [
1, 1, 1, 1],
];

$nbPersons = count($responses);
$nbResponses = count($responses[0]);

$theta = array_fill(0, $nbPersons, 0.0); // compétences
$b = array_fill(0, $nbResponses, 0.0); // difficultés

/**
 * Met à jour les compétences (theta) pour toutes les personnes
 */
function updateThetas(&$theta, $responses, $b, $learningRate, $nbPersons, $nbResponses) {
    for (
$i = 0; $i < $nbPersons; $i++) {
       
$grad = 0.0;
        for (
$j = 0; $j < $nbResponses; $j++) {
           
$p = raschProbability($theta[$i], $b[$j]);
           
$grad += ($responses[$i][$j] - $p);
        }
       
$theta[$i] += $learningRate * $grad;
    }
}

/**
 * Met à jour les difficultés (b) pour tous les items
 */
function updateDifficulties(&$b, $responses, $theta, $learningRate, $nbPersons, $nbResponses) {
    for (
$j = 0; $j < $nbResponses; $j++) {
       
$grad = 0.0;
        for (
$i = 0; $i < $nbPersons; $i++) {
           
$p = raschProbability($theta[$i], $b[$j]);
           
$grad += ($p - $responses[$i][$j]);
        }
       
$b[$j] += $learningRate * $grad;
    }
}

/**
 * Formule du modèle Rasch
 * Calcule la probabilité qu?une personne réussisse un item
 * - ? (theta) = le niveau de compétence de la personne,
 * - b = la difficulté de l?item.
 */
function raschProbability(float $theta, float $b): float
{
    return
exp($theta - $b) / (1 + exp($theta - $b));
}

// nombre d'itérations pour obtenir des données fiables
$iterations = 500;
// taille du "pas" effectué à chaque itération
$learningRate = 0.01;

/**
 * On itère 500 fois pour obtenir des données fiables, chaque itération permet d'affiner les données
 */
for ($iter = 0; $iter < $iterations; $iter++) {
   
   
// Mise à jour des compétences (theta)
   
updateThetas($theta, $responses, $b, $learningRate, $nbPersons, $nbResponses);

   
// Mise à jour des difficultés (b)
   
updateDifficulties($b, $responses, $theta, $learningRate, $nbPersons, $nbResponses);
}

echo
"Compétences estimées (theta) \n";
foreach (
$theta as $i => $val) {
    echo
"Personne " . ($i+1) . " : " . round($val, 3) . "\n";
}

echo
"\nDifficultés estimées (b)\n";
foreach (
$b as $j => $val) {
    echo
"Item " . ($j+1) . " : " . round($val, 3) . "\n";
}

/**
 * Trouve l?item le plus adapté à une personne en fonction de son theta
 * => celui dont la difficulté b est la plus proche de ?
 */
function recommendItemForUser(float $theta, array $items): int
{
   
$closestItem = 0;
   
$minDiff = INF;

    foreach (
$items as $id => $difficulty) {

       
// La difficulty est b
       
$diff = abs($theta - $difficulty);

        if (
$diff < $minDiff) {
           
$minDiff = $diff;
           
$closestItem = $id;
        }
    }

    return
$closestItem; // index de l?item avec la difficulty la plus proche de theta
}

echo
"\nRecommandations d?items pour chaque personne :\n";
foreach (
$theta as $i => $val) {
   
$item = recommendItemForUser($val, $b);
    echo
"Personne " . ($i + 1) . " -> Item " . ($item + 1) . "\n";
}


  Files folder image Files (4)  
File Role Description
Accessible without login Plain text file composer.json Data Auxiliary data
Accessible without login Plain text file composer.lock Data Auxiliary data
Accessible without login Plain text file README.md Doc. Documentation
Accessible without login Plain text file run.php Example Example script

The PHP Classes site has supported package installation using the Composer tool since 2013, as you may verify by reading this instructions page.
Install with Composer Install with Composer
 Version Control Unique User Downloads  
 100%
Total:0
This week:0