Вопрос по ggplot2, r, regression, linear-regression – Добавление линии регрессии на ggplot

82

Я стараюсь добавить линию регрессии на ggplot. Я сначала попробовал с аблином, но я нене удается заставить его работать. Тогда я попробовал это ...

data = data.frame(x.plot=rep(seq(1,5),10),y.plot=rnorm(50))
ggplot(data,aes(x.plot,y.plot))+stat_summary(fun.data=mean_cl_normal) +
   geom_smooth(method='lm',formula=data$y.plot~data$x.plot)

Но это тоже не работает.

Ваш Ответ

5   ответов
2

Если вы хотите подогнать модели другого типа, например, кривую доза-эффект с использованием логистических моделей, вам также необходимо создать больше точек данных с помощью функции предиктума, если вы хотите иметь более гладкую линию регрессии:

fit: ваша форма кривой логистической регрессии

#Create a range of doses:
mm 
121

В общем, чтобы предоставить свою формулу, вы должны использовать аргументыx а такжеy это будет соответствовать значениям, которые вы указали вggplot() - в этом случаеx будет интерпретироваться какx.plot а такжеy какy.plot, Более подробную информацию о методах сглаживания и формуле вы можете найти на странице справки функции.stat_smooth() так как по умолчанию используется статистика.geom_smooth()

ggplot(data,aes(x.plot,y.plot))+stat_summary(fun.data=mean_cl_normal) + 
  geom_smooth(method='lm',formula=y~x)

Если вы используете те же значения x и y, которые вы указали вggplot() вызов и нужно построить линию линейной регрессии, то вы нет нужно использовать формулу внутриgeom_smooth()Просто поставь.method="lm"

ggplot(data,aes(x.plot,y.plot))+stat_summary(fun.data=mean_cl_normal) + 
  geom_smooth(method='lm')
2

Очевидное решение с использованием:geom_abline

geom_abline(slope = data.lm$coefficients[2], intercept = data.lm$coefficients[1])

кудаdata.lm являетсяlm объект иdata.lm$coefficients выглядит примерно так:

data.lm$coefficients
(Intercept)    DepDelay 
  -2.006045    1.025109 

Идентичным на практике является использованиеstat_function построить линию регрессии как функцию х, используя:predict

stat_function(fun = function(x) predict(data.lm, newdata = data.frame(DepDelay=x)))

Это немного менее эффективно, так как по умолчаниюn=101 точки вычисляются, но гораздо более гибкие, поскольку он построит кривую прогнозирования для любой модели, которая поддерживаетpredictнапример нелинейныйnpreg из пакета нп.

Примечание: если вы используетеscale_x_continuous или жеscale_y_continuous некоторые значения могут быть отсечены и, таким образом,geom_smooth может работать некорректноиспользованиеcoord_cartesian чтобы увеличить вместо.

И поэтому вы никогда не будете беспокоиться о порядке ваших формул или просто добавлении+0 Вы можете использовать имена.data.lm$coefficients[['(Intercept)']] а также .data.lm$coefficients[['DepDelay']] Ufos
1

Я нашел эту функцию наблог

 ggplotRegression 
26

Как я только что понял, если у вас естьмодель установлена на множественной линейной регрессиивышеупомянутое решение выигралот работа.

Вы должны создать свою строку вручную в виде информационного кадра, который содержит прогнозные значения для исходного исходного информационного кадра (в вашем случаеdata).

Это будет выглядеть так:

# read dataset
df = mtcars

# create multiple linear model
lm_fit 
Единственное, на что нужно обратить внимание, это соглашение: lm (y ~ x). Я немного обернулся для второго чтения этого, так как переменная выre 'прогнозирования» находится на оси х. Отличный ответ, хотя. timwiz

Похожие вопросы