Я думаю, что вашей формуле нужно больше степеней свободы, чтобы соответствовать.
Я сделал эту небольшую корректировку и получил гораздо лучшие результаты.
ggplot(data, aes(x, y)) +
geom_point() +
stat_smooth(method = "nls",
formula = "y ~ (a/x) + b*x + c",
method.args = list(algorithm = "port", start = c(a = 1, b=1, c=1)),
se = FALSE) +
labs(x = "x", y = "y") +
scale_y_continuous(labels = scales::comma)
Obs: Это не просто настройка. Я заметил, что y увеличивается с ростом x, что было бы невозможно в чисто обратной пропорции, поэтому он показал, что в отношении присутствовал какой-то другой фактор, пропорциональный x. Также, добавив свободную константу c, я дал степень свободы для смещения y на основе смещения. Кажется, что он все еще не подходит идеально, поэтому есть еще кое-что в отношении. Вы можете внести минимальные корректировки в формулу, чтобы увидеть, что подходит лучше всего, или использовать какой-то другой пакет, чтобы попытаться выяснить, что такое отношение, и затем разработать соответствующую формулу.