Я хочу запустить тест ANOVA в PHP. Библиотека, которую я использую для этой задачи: markrogoyski / math-php (https://github.com/markrogoyski/math-php#statistics—anova). И метод показан ниже.
use MathPHP\Statistics\ANOVA;
// One-way ANOVA
$sample1 = [1, 2, 3];
$sample2 = [3, 4, 5];
$sample3 = [5, 6, 7];
⋮ ⋮
$anova = ANOVA::oneWay($sample1, $sample2, $sample3);
print_r($anova);
Данные для теста были получены из базы данных в следующем формате. Каждый подмассив представляет собой один набор данных в наборе ANOVA (например, $ sample1, $ sample2 и т. Д.). Проблема в том, что номер подмассива не фиксируется в зависимости от ввода. Итак, я добавляю их все в большой массив во время процесса запроса.
Array
(
[0] => Array
(
[0] => 14.60
[1] => 15.94
)
[1] => Array
(
[0] => 16.12
[1] => 15.30
[2] => 9.24
)
[2] => Array
(
[0] => 6.80
[1] => 15.78
)
)
Проблема в том, что метод ANOVA :: oneWay принимает только массивы, разделенные запятыми. Когда я просто передаю вышеуказанный массив в функцию,
$anova = ANOVA::oneWay($TTFF_anova);
Я получил следующую ошибку.
Uncaught MathPHP\Exception\BadDataException: Must have at least three samples
Я считаю, что мне нужно передать группу массивов для этой функции.
Я искал возможные решения онлайн. В этом посте описана похожая проблема в Python (Запуск одностороннего сценария Сципи в сценарии). Решение
scipy.stats.f_oneway(*archive.values())
Я надеюсь спросить, есть ли подобное решение в PHP.
Точно так же я пытался
$anova = ANOVA::oneWay(array_values($TTFF_anova));
Но это не работает.
Я также пытался использовать функцию call_user_func_array () в PHP
$anova = call_user_func_array('ANOVA::oneWay', $TTFF_anova);
У меня ошибка как
Warning: call_user_func_array() expects parameter 1 to be a valid callback, class 'ANOVA' not found
Пожалуйста, помогите мне решить эту проблему. Большое спасибо.
Начиная с PHP 5.6 используйте распаковку аргументов с оператором splat ...
:
$TTFF_anova = array($sample1, $sample2, $sample3);
$anova = ANOVA::oneWay(...$TTFF_anova);
call_user_func_array
должен работать с пространством имен или использовать __NAMESPACE__
:
$anova = call_user_func_array('MathPHP\Statistics\ANOVA\ANOVA::oneWay', $TTFF_anova);
$anova = call_user_func_array(array('MathPHP\Statistics\ANOVA\ANOVA', 'oneWay'), $TTFF_anova);
Других решений пока нет …