Проведение прямой линии через облако точек (т. е. выполнение линейной регрессии) - это самый простой анализ данных, который можно сделать. Иногда он хорошо согласуется с данными, но в некоторых (многих) ситуациях отношения между переменными не являются линейными. В этом случае можно использовать три различных способа: (1) попытаться линеаризовать взаимосвязь путем преобразования данных, (2) подогнать полиномиальные или сложные модели сплайнов к данным или (3) подогнать нелинейные функции к данным. Как вы уже догадались из названия, этот пост будет посвящен третьему варианту.
Что такое нелинейная регрессия?
В нелинейной регрессии аналитик определяет функцию с набором параметров, соответствующих данным. Самый простой способ оценить такие параметры - использовать метод нелинейных наименьших квадратов (функция nls в R), который в основном аппроксимирует нелинейную функцию с помощью линейной и итеративно пытается найти лучшие значения параметров (wiki). Приятной особенностью нелинейной регрессии в прикладном контексте является то, что оцениваемые параметры имеют четкую интерпретацию (Vmax в модели Михаэлиса-Ментен - это максимальная скорость), которую, например, будет сложнее получить, используя линейные модели на преобразованных данных.
Подгонка нелинейной функции методом наименьших квадратов
Первый пример с использованием уравнения Михаэлиса-Ментен:
Код ниже строит график:
Проблема поиска правильных начальных значений
Поиск хороших начальных значений очень важен в нелинейной регрессии, чтобы позволить алгоритму модели сходиться. Если вы установите значения начальных параметров полностью вне диапазона возможных значений параметров, алгоритм либо завершится ошибкой, либо вернет несущественный параметр, например, вернет скорость роста 1000, когда фактическое значение равно 1.04.
Лучший способ найти правильное начальное значение - это «взглянуть» на данные, построить их график, и на основе понимания, которое вы получили из уравнения, найти приблизительные начальные значения для параметров.
Использование функции SelfStarting
Для разных областей науки очень часто используется разная параметризация (т.е. разные уравнения) для одной и той же модели, одним из примеров является логистическая модель роста населения, в экологии мы используем следующую форму:
где Nt - количество особей в момент времени t, r - скорость роста популяции, а K - емкость. Мы можем переписать это как дифференциальное уравнение:
Эта часть была просто имитацией некоторых данных со случайной ошибкой, теперь переходим к сложной части для оценки начальных значений.
Теперь в R есть встроенная функция для оценки начальных значений параметра логистического уравнения (SSlogis), но она использует следующее уравнение:
Мы используем функцию getInitial, которая дает некоторые начальные предположения о значениях параметров на основе данных. Мы передаем этой функции модель selfStarting (SSlogis), которая принимает в качестве аргумента входной вектор (значения t, где функция будет оцениваться) и названия трех параметров логистического уравнения без кавычек.
Однако, поскольку SSlogis использует другую параметризацию, нам нужно использовать немного алгебры, чтобы перейти от оценочных значений, возвращаемых SSlogis, к тем, которые находятся в уравнении, которое мы хотим использовать.
Построим график:
Было немного сложно перейти от параметризации SSlogis к нашей собственной, но оно того стоило!
В следующем посте мы увидим, как выйти за рамки нелинейного метода наименьших квадратов и использовать методы оценки максимального правдоподобия, которые являются более мощными и надежными. Они позволяют построить любую модель, которую вы можете себе представить.
Комментариев нет:
Отправить комментарий