Я пытаюсь подогнать нелинейную кривую к трем точкам данных. Позже мне нужно будет интегрировать этот фрагмент в более крупное программное обеспечение, которое попыталось бы автоматически подогнать кривую к этим трем точкам. Как видно ниже, я пытаюсь оценить кривую в виде a*x^power1 + b*x^power2
. Я знаю, что следующая функция удовлетворяет условию 0.666*x^(-0.18) - 0.016*x^0.36
. Однако я по какой-то причине вообще не могу воспроизвести его, используя nlsLM()
из minpack.lm
. Независимо от того, какую комбинацию я пытаюсь добавить в параметре start
, я получаю одно и то же предупреждающее сообщение Warning message: In nls.lm(par = start, fn = FCT, jac = jac, control = control, lower = lower, : lmdif: info = 0. Improper input parameters
.
. И хотя это «только» предупреждающее сообщение, оно кажется полностьюиспортить мой код. Из-за неправильных входных параметров моя переменная m
, которой я передаю результаты, повреждается, и после этого ничего не работает, включая переменную m
.
Вот воспроизводимый пример:
library(ggplot2)
library(minpack.lm)
dataset <- read.table(text='
x y
1 0.1 1
2 30 0.3
3 1000 0', header=T)
ds <- data.frame(dataset)
str(ds)
plot(ds, main = "bla")
nlmInitial <- c(a = 0.5, power1 = -0.2, b = -0.02, power2 = 0.3)
m <- nlsLM(y ~ a*I(x^power1) + b*I(x^power2),
data = ds,
start = nlmInitial,
trace = T)
summary(m)$coefficients