Добавить экспоненциальную линию тренда на график ggplot - PullRequest
1 голос
/ 07 мая 2020

У меня есть набор данных с именем daph

daph <- read.table(text = "t v 20 19 25 78.2 30 254.8 ",header = TRUE, sep = "")

, и я пытаюсь добавить экспоненциальную линию тренда на гистограмму с этими значениями

ggplot(data=daph, aes(x=t, y=v, width=1)) + geom_bar(stat="identity", fill="steelblue") + theme_minimal(base_size=18) + geom_smooth(method = 'nls', formula = y ~ a * exp(b * x), se = FALSE, method.args = list(start = list(a = 1, b = 1)))

, но он каждый раз выдает сообщение об ошибке (сингулярный градиент, грубо переведенный).

Я полагаю, это как-то связано с моими начальными значениями, но меня недостаточно в математику, чтобы лучше понять это.

Может быть, кто-нибудь из вас сможет мне помочь :)

1 Ответ

0 голосов
/ 07 мая 2020

nls, как известно, сложно уместить. Для вашего сценария попробуйте предоставить лучшие начальные значения или подумайте об использовании вместо этого линейной модели, вы можете проверить это в этой публикации :

lmfit = lm(log(v) ~ t,data=daph)
A = coef(lmfit)[1]
B = coef(lmfit)[2]

ggplot(data=daph, aes(x=t, y=v, width=1)) +
geom_bar(stat="identity", fill="steelblue") +
theme_minimal(base_size=18) +
geom_smooth(method = 'nls', formula = y ~ a * exp(b * x), 
se = FALSE, method.args = list(start = list(a = A, b = B)))

enter image description here

Данные:

structure(list(t = c(9, 21, 29), v = c(19, 78.2, 254.8)), row.names = c(NA, 
-3L), class = "data.frame")
...