У меня есть точечный график. Как я могу добавить нелинейную линию тренда?
r
data-visualization
nonlinear-regression
trend
Карина Хусаинова
источник
источник
Ответы:
Давайте создадим некоторые данные.
Ниже показано, как можно уместить линию Лесса или подгонку нелинейной регрессии.
источник
Если вы используете
ggplot2
(третья система построения, в R, после основания R и решетки), это становится:Вы можете выбрать способ сглаживания данных: см.
?stat_smooth
Подробности и примеры.источник
stat_smooth
, набрав,?stat_smooth
как сказал Винсент. :-)Не зная точно, что вы ищете, используя
lattice
пакет, вы можете легко добавить кривую лёссаtype="smooth"
; например,Посмотрите
help("panel.loess")
аргументы, которые можно передать подпрограмме подбора лесса, чтобы изменить, например, степень используемого полинома.Обновить
Чтобы изменить цвет кривой Лёсса, вы можете написать небольшую функцию и передать её в качестве
panel
параметраxyplot
:источник
Ваш вопрос немного расплывчатый, поэтому я собираюсь сделать некоторые предположения относительно вашей проблемы. Было бы очень полезно, если бы вы могли составить диаграмму рассеяния и немного описать данные. Пожалуйста, если я делаю неправильные предположения, тогда проигнорируйте мой ответ.
Во-первых, возможно, что ваши данные описывают некоторый процесс, который, по вашему разумению, является нелинейным. Например, если вы пытаетесь сделать регрессию на расстоянии для остановки автомобиля при резком торможении в зависимости от скорости автомобиля, физика говорит нам, что энергия транспортного средства пропорциональна квадрату скорости, а не скорости сам. Так что вы можете попробовать полиномиальную регрессию в этом случае, и (в R) вы можете сделать что-то вроде
model <- lm(d ~ poly(v,2),data=dataset)
. Там много документации о том, как включить различные нелинейности в регрессионную модель.С другой стороны, если у вас есть линия, которая является «шаткой», и вы не знаете, почему она шаткая, то хорошей отправной точкой, вероятно, будет локально-взвешенная регрессия, или
loess
в R. Это делает линейную регрессию на небольшой регион, в отличие от всего набора данных. Проще всего представить версию «k ближайших соседей», где для вычисления значения кривой в любой точке вы найдете k точек, ближайших к точке интереса, и усредните их. Лесс просто так, но использует регрессию вместо прямой средней. Для этого используйтеmodel <- loess(y ~ x, data=dataset, span=...)
, гдеspan
переменная контролирует степень сглаживания.С третьей стороны (из рук вон) - ты говоришь о тенденциях? Это временная проблема? Если это так, будьте немного осторожнее с чрезмерной интерпретацией линий тренда и статистической значимости. Тенденции во временных рядах могут появляться в «авторегрессионных» процессах, и для этих процессов случайность процесса может иногда создавать тренды из случайного шума, и неправильный тест статистической значимости может сказать вам, что это важно, когда это не так!
источник
Помещение точек образца рассеянного графика и плавной кривой на одном графике:
источник