Есть ли пакеты для кусочно-линейной регрессии, которые могут автоматически определять несколько узлов? Благодарю. Когда я использую пакет Strucchange. Я не мог обнаружить точки изменения. Я понятия не имею, как он обнаруживает точки изменения. Из графиков я мог видеть, что есть несколько моментов, которые могут помочь мне выбрать их. Может ли кто-нибудь привести пример здесь?
regression
change-point
Хонгланг Ван
источник
источник
segmented
пакет - это то, что вы ищете.segmented
пакета R : stackoverflow.com/a/18715116/857416Ответы:
Подойдет ли MARS ? R имеет пакет,
earth
который реализует его.источник
В общем, немного странно хотеть подгонять что-то как кусочно-линейное. Однако, если вы действительно хотите это сделать, то алгоритм MARS является наиболее прямым. Он будет создавать функцию по одному узлу за раз; и затем обычно сокращает количество узлов для борьбы с чрезмерно подходящими деревьями решений. Вы можете получить доступ к алгоритму MARS в R с помощью
earth
илиmda
. В целом, это подходит для GCV, который не так далек от другого информационного критерия (AIC, BIC и т. Д.)MARS не даст вам «оптимальной» подгонки, так как сучки выращиваются по одному. Действительно, было бы довольно сложно подобрать по-настоящему «оптимальное» количество узлов, так как возможные варианты размещения узлов быстро взорвались бы.
Как правило, именно поэтому люди поворачиваются к сглаживанию сплайнов. Большинство сглаживающих сплайнов имеют кубическую форму, так что вы можете обмануть человеческий глаз, пропуская разрывы. Однако было бы вполне возможно сделать линейный сглаживающий сплайн. Большим преимуществом сглаживания сплайнов является их единственный параметр для оптимизации. Это позволяет вам быстро найти действительно «оптимальное» решение без необходимости искать множество перестановок. Однако, если вы действительно хотите искать точки перегиба, и у вас достаточно данных для этого, то, вероятно, лучше подойдет что-то вроде MARS.
Вот пример кода для штрафованных линейных сглаживающих сплайнов в R:
Однако фактические выбранные узлы не обязательно будут коррелировать с какими-либо точными точками перегиба.
источник
Я программировал это с нуля один раз несколько лет назад, и у меня есть файл Matlab для выполнения кусочной линейной регрессии на моем компьютере. Приблизительно от 1 до 4 контрольных точек в вычислительном отношении возможно для примерно 20 точек измерения или около того. 5 или 7 контрольных точек начинают становиться слишком много.
Чисто математический подход, как я понимаю, состоит в том, чтобы попробовать все возможные комбинации, предложенные пользователем mbq в вопросе, связанном с комментарием ниже вашего вопроса.
Поскольку все выровненные линии являются последовательными и смежными (без перекрытий), комбинаторика будет следовать треугольнику Паскаля. Если бы между использованными точками данных были отрезки отрезков линий, я полагаю, что комбинаторика будет следовать вместо чисел Стирлинга второго рода.
Лучшее решение на мой взгляд, это выбрать комбинацию подогнанных линий, которая имеет самое низкое стандартное отклонение значений корреляции R ^ 2 подогнанных линий. Я постараюсь объяснить на примере. Имейте в виду, однако, что вопрос о том, сколько точек разрыва следует найти в данных, аналогичен вопросу о том, «как долго длится побережье Британии?». как в одной из работ Бенуа Мандельброта (математика) о фракталах. И есть компромисс между количеством точек разрыва и глубиной регрессии.
Теперь к примеру.
These y values have the graph:
Which clearly has two break points. For the sake of argument we will calculate the R^2 correlation values (with the Excel cell formulas (European dot-comma style)):
for all possible non-overlapping combinations of two fitted lines. All the possible pairs of R^2 values have the graph:
The question is which pair of R^2 values should we choose, and how do we generalize to multiple break points as asked in the title? One choice is to pick the combination for which the sum of the R-square correlation is the highest. Plotting this we get the upper blue curve below:
The blue curve, the sum of the R-squared values, is the highest in the middle. This is more clearly visible from the table with the value1,0455 as the highest value.
However it is my opinion that the minimum of the red curve is more accurate. That is, the minimum of the standard deviation of the R^2 values of the fitted regression lines should be the best choice.
Piece wise linear regression - Matlab - multiple break points
источник
Существует довольно хороший алгоритм, описанный в Tomé and Miranda (1984) .
Код и графический интерфейс доступны как на Фортране, так и на IDL на их веб-сайте: http://www.dfisica.ubi.pt/~artome/linearstep.html.
источник
... прежде всего вы должны делать это итерациями и по некоторому информативному критерию, например, AIC AICc BIC Cp; потому что вы можете получить «идеальную» подгонку, если число узлов K = количество точек данных N, хорошо. ... сначала поставить K = 0; оцените регрессии L = K + 1, рассчитайте, например, AICc; затем предположим минимальное количество точек данных в отдельном сегменте, скажем, L = 3 или L = 4, хорошо ... положить K = 1; начать с L-тых данных в качестве первого узла, вычислить SS или MLE, ... и шаг за шагом перейти к следующей точке данных в виде узла, SS или MLE, до последнего узла в данных N - L; выбрать расположение с наилучшим соответствием (SS или MLE), рассчитать AICc ... ... положить K = 2; ... использовать все предыдущие регрессии (то есть их SS или MLE), но шаг за шагом разделить один сегмент на все возможные части ... выбрать схему с наилучшим соответствием (SS или MLE) для вычисления AICc ... если последний AICc оказывается больше предыдущего: остановите итерации! Это оптимальное решение по критерию AICc, хорошо
источник
Однажды я наткнулся на программу под названием Joinpoint. On their website they say it fits a joinpoint model where "several different lines are connected together at the 'joinpoints'". And further: "The user supplies the minimum and maximum number of joinpoints. The program starts with the minimum number of joinpoint (e.g. 0 joinpoints, which is a straight line) and tests whether more joinpoints are statistically significant and must be added to the model (up to that maximum number)."
NCI использует его для моделирования тенденций заболеваемости раком, возможно, он также соответствует вашим потребностям.
источник
Для того, чтобы подогнать к данным кусочную функцию:
гдеa1,2, р1, д1, р2, д2, р3, д3 неизвестные параметры, которые должны быть приблизительно вычислены, есть очень простой метод (не итеративный, без начального предположения, легко кодируемый на любом математическом компьютерном языке). Теория приведена на странице 29 в статье: https://fr.scribed.com/document/380941024/Regression-par-morceaux-Piecewise-Regression-pdf и со страницы 30:
Например, с точными данными, предоставленными Матсом Гранвиком, результат:
Без разбросанных данных этот пример не очень важен. Другие примеры с разбросанными данными показаны в ссылочной статье.
источник
Вы можете использовать
mcp
пакет, если вы знаете количество точек изменения, которые можно сделать. Это дает вам большую гибкость моделирования и много информации о точках изменения и параметрах регрессии, но за счет скорости.Веб-сайт McP содержит много прикладных примеров, например,
Затем вы можете визуализировать:
Или подытожим:
Отказ от ответственности: я разработчик mcp.
источник