статистика — Наименьшая Медиана квадратов надежная регрессия Переполнение стека

У меня есть набор данных z(0), z(1), z(2)...,z(n) что я в настоящее время подгоняю с 2-х переменных полинома вида p(x,y) = a(1)*x^2+a(2)*y^2+a(3)*x*y+a(4), я имею i=1,...,n (x(i),y(i)) координаты, которые я навязываю p(x(i),y(i))=z(i), Таким образом, у меня есть переопределенная система, которую я могу решить, используя Эйген СВД . Я ищу более сложный метод, который может позаботиться о выбросах, такой как регрессия с наименьшей срединностью квадратов (как описано Вот) но я не нашел реализацию C ++ для 2 переменных. Я посмотрел в GSL, но кажется, что нет ничего для двух переменных функций. Единственное другое решение, которое я могу придумать, — это использовать TGraph2D в ROOT. Вы знаете другое решение? Может быть, числовые рецепты? Поскольку я пишу код на C ++, я бы предпочел реализации на C или C ++.

1

Решение

Поскольку пока не дан ответ, но я все еще работаю над этой проблемой, я поделюсь своими достижениями здесь.

Класс TLinearFitter имеет метод подгонки, который позволяет выбрать робастную аппроксимацию — регрессия наименьших обрезанных квадратов (LTS):

https://root.cern.ch/root/html532/TLinearFitter.html

Другое возможное решение, может быть, больше времени, но может быть более эффективным в долгосрочной перспективе является написание собственной функции для минимизации и использования:
https://projects.coin-or.org/Ipopt чтобы минимизировать это. Хотя в этом подходе есть больший «шаг». Я не знаю, как использовать библиотеку, и я (пока?) Не нашел хорошего учебника, чтобы понять его.

Вот: https://wis.kuleuven.be/stat/robust/software есть реализация Фортрана алгоритма LMedS, называемая PROGRESS. Таким образом, другим возможным решением может быть перенос этого программного обеспечения на C / C ++ и создание из него библиотеки.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]