Подберите логнормальное распределение с R & NLS - PullRequest
0 голосов
/ 02 ноября 2018

Считайте, что у меня есть такие данные:

df<-data.frame(x=c(1100,800,600,550,500,350),y=c(0.05,0.17,0.91,0.95,1,0.13))

как мне провести кривую по ней на основе нормальной формы / распределения бревна

Я могу использовать модель nls, но всегда получаю сообщение об ошибке:

fit <-nls(y ~ a*dlnorm(x, mean, sd), data = df, 
    start = list(mean =0, sd = 10,a=1e4))

Большое спасибо!

1 Ответ

0 голосов
/ 03 ноября 2018

Я не уверен, почему nls ведет себя так, но вы можете напрямую использовать optim:

opt <- optim(c(1, 1, 1), function(p) sum((dlnorm(df$x, p[1], p[2]) * p[3] - df$y)^2))
opt$par
# [1]   6.3280753   0.2150322 299.3154123

plot(x = df$x, y = df$y, type = 'b', ylim = c(0, 1), xlim = c(0, 1100))
curve(opt$par[3] * dlnorm(x, opt$par[1], opt$par[2]), from = 0, to = 1100, add = TRUE, col = 'red')

enter image description here

...