Элементы регрессионного анализа в прикладном программировании
Это про рояль в кустах для прикладных программистов.
Некоторое время назад в категории opensource-проектов появился написанный на Object Pascal математический модуль DMath (автор: Dr Jean DEBORD, Laboratoire de Pharmacologie, Faculte de Medecine 2 Rue du Docteur Marcland, 87025 Limoges, France). В этом модуле имеется много чего интересного (решение нелинейных уравнений, численный расчет определенных интегралов и пр.), но самый-самый писк - реализованные в нем методы регрессионного анализа. Без которых – натурально - как без рук, если необходимо найти математическую зависимость в слабо упорядоченном ворохе статистических данных или промоделировать сложный физический процесс.
Таскать из проекта в проект сто четырнадцать файлов, из которых состоит модуль, как-то не комильфо. Да и область применения изначально ограничена, по сути, IDE Delphi, Lazarus и CodeTyphon. Однако, часть процедур достаточно легко адаптируется к автономному использованию, после чего портирование исходного кода на любой другой язык программирования не вызывает затруднений.
В результате некоторых телодвижений был сформирован представленный ниже джентльменский набор для использования в прикладном софте (в том числе и для web-реализации).
Самое элементарное – линейная регрессия (здесь и далее на картинках расчетное выражение плюс конкретный пример расчета):
Листинг (PHP) можно взять здесь. Онлайн-расчет можно выполнить здесь.
Полиномиальная регрессия (по факту это наиболее часто используемый метод регрессионного анализа):
Листинг (PHP + Object Pascal) можно взять здесь. Онлайн-расчет можно выполнить здесь.
Степенная регрессия:
Листинг (PHP) можно взять здесь. Онлайн-расчет можно выполнить здесь.
Гамма-регрессия (наверное, единственный корректный вариант аппроксимации при очень резком перепаде значений функции):
Листинг (PHP) можно взять здесь. Онлайн-расчет можно выполнить здесь.
Я не силен в экономике, торговле или социологии, но для моделирования физических процессов представленный набор методов регрессионного анализа является достаточным. И комфортным в использовании.
Кстати, имеется реализация этих методов отдельным калькулятором на «чистом» JavaScript (за исключением гамма-регрессии) – здесь. Это прикол, конечно, но работает полноценно.
PS. Заставка: DAZ 3D Studio + Bryce + PaintShop.