#r #ggplot2 #curve-fitting #curve #exponential
#r #ggplot2 #подгонка кривой #кривая #экспоненциальная
Вопрос:
У меня есть набор данных с двумя столбцами, и я хочу подогнать его под экспоненциальную кривую и показать уравнение на графике. Не могли бы вы, пожалуйста, помочь мне с кодом?
x<-1:6
y<-c(86000,114597,165576,207467,328745,531531)
df<-as.data.frame(cbind(x,y))
ggplot(df,aes(x,y))
geom_point()
geom_line(colour=" dark blue")
geom_smooth(method = "nls",se = F)
scale_y_continuous(labels = scales::comma)
theme_economist()
xlab("Grade")
ylab("Salary avg")
когда я пытаюсь использовать nls, я не вижу кривой на ggplot.
Комментарии:
1. Я думаю, это удобно сделать с помощью пакета ggpmisc.
2. есть ли конкретная функция, на которую нужно обратить внимание? (
ggpmisc
в нем много всего.) Работает ли это дляglm
/nls
fits (некоторые из фреймворков, которые я видел, работают только дляlm
)3. Можете ли вы помочь мне с кодом? Я новичок в программировании на R, извините
Ответ №1:
Настройка:
library(ggplot2)
df <- data.frame(x=1:6,
y=c(86000,114597,165576,207467,328745,531531))
gg0 <- ggplot(df,aes(x,y))
geom_point()
geom_line(colour=" dark blue")
scale_y_continuous(labels = scales::comma)
ggthemes::theme_economist()
xlab("Grade")
ylab("Salary avg")
Один из способов сделать это — подогнать GLM с помощью семейства Gaussian и ссылки на журнал:
gg0 geom_smooth(method="glm",
formula=y~x,
method.args=list(family=gaussian(link="log")))
Вы можете использовать nls
, но это немного сложно. Здесь я использовал метод самозапуска, но (1) должен был установить архивированный пакет, (2) в любом случае должен был указать start
(я думаю, что он игнорируется, но должен быть там)
## remotes::install_version("drLumi",version="0.1.2")
gg0 geom_smooth(method="nls",
formula=y~drLumi::SSexp(x,b,y0),
se=FALSE,
method.args=list(start=list(b=1,y0=1)))
Неполная попытка извлечь уравнение регрессии:
g1 <- glm(y~x, data=df, family=gaussian(link="log"))
library(latex2exp)
library(equatiomatic)
s <- TeX(extract_eq(g1,ital_vars=TRUE))
Комментарии:
1. Спасибо!!! И как можно отобразить это уравнение на графике? просто чтобы знать значение экспоненты и y для соответствия кривой
2. Кому-то еще придется помочь с этим. (Вы можете вписаться
glm
илиnls
выйти за пределыggplot2
, чтобы получить коэффициенты)