r - 用 R 拟合对数正态分布

标签 r nls

假设我有这样的数据:

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))

非常感谢!

最佳答案

我不确定为什么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

关于r - 用 R 拟合对数正态分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53125157/

相关文章:

使用 ggplot 对facet_wrap 的级别重新排序

r - 使用选择点绘制功效回归时 stat_smooth 出现错误

r - 防止 nls-fit 低于零

r - 如何在树状图的 y 轴上输出相似度百分比?

r - ggplot2 中 y 刻度标签的良好 K/M/G 缩写

session - 数字和日期格式 : altering NLS_SESSION_PARAMETER does not work?

r - R 中的非线性回归 (nls) 问题

r - 根据估计方程 y = A * exp(x * B) 计算 A 和 B 的值

r - R 中函数 cut 和 ifelse 之间的奇怪行为

R:摆脱 for 循环和加速代码