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 (3 months 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.

Innovation Award
PHP Programming Innovation award nominee
October 2025
Number 5
Every person has competences and difficulties.

The Rasch probabilistic models allows estimating the competences and difficulties of a person in giving correct responses based on answers to previous questions.

This package provides a script that implements Rasch probabilistic model in PHP to calculate the estimated competences and difficulties of a person.

Manuel Lemos
Picture of DeGraciaMathieu
  Performance   Level  
Name: DeGraciaMathieu <contact>
Classes: 28 packages by
Country: France France
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