Экспоненциальная подгонка в R

#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 , чтобы получить коэффициенты)