r - 尝试使用 ggplot2 的 geom_smooth() 显示原始数据和拟合数据(nls + dnorm)

标签 r ggplot2 curve-fitting least-squares model-fitting

我正在探索一些数据,所以我想做的第一件事就是尝试拟合正态(高斯)分布。这是我第一次在 R 中尝试这个,所以我一次一步地尝试。首先,我预先对数据进行了分类:

myhist = data.frame(size = 10:27, counts = c(1L, 3L, 5L, 6L, 9L, 14L, 13L, 23L, 31L, 40L, 42L, 22L, 14L, 7L, 4L, 2L, 2L, 1L) )

qplot(x=size, y=counts, data=myhist)

plot1

由于我想要计数,因此我需要添加归一化因子 (N) 来扩大密度:

fit = nls(counts ~ N * dnorm(size, m, s), data=myhist, start=c(m=20, s=5, N=sum(myhist$counts)) )   

然后我创建用于显示的拟合数据,一切正常:

x = seq(10,30,0.2)
fitted = data.frame(size = x, counts=predict(fit, data.frame(size=x)) )
ggplot(data=myhist, aes(x=size, y=counts)) + geom_point() + geom_line(data=fitted)

plot2

当我发现这个线程讨论使用 geom_smooth() 一步完成这一切时,我很兴奋,但我无法让它工作:

这是我的尝试......以及我得到的结果:

ggplot(data=myhist, aes(x=size, y=counts)) + geom_point() + geom_smooth(method="nls", formula = counts ~ N * dnorm(size, m, s), se=F, start=list(m=20, s=5, N=300, size=10))

Error in method(formula, data = data, weights = weight, ...) : 
  parameters without starting value in 'data': counts

该错误似乎表明它正在尝试适应观察到的变量,计数,但这没有任何意义,并且如果我为也很重要:

fitting parameters ‘m’, ‘s’, ‘N’, ‘size’, ‘counts’ without any variables

Error in eval(expr, envir, enclos) : object 'counts' not found

知道我做错了什么吗?当然,这不是世界末日,但步骤越少越好,而且你们总是能为这些常见任务想出最优雅的解决方案。

提前致谢!

杰弗里

最佳答案

第一个错误表明ggplot2在数据中找不到公式中使用的变量“count”。

统计数据在映射后进行,即大小 -> x,计数 -> y。

以下是在 geom_smooth 中使用 nls 的示例:

ggplot(data=myhist, aes(x=size, y=counts)) + geom_point() + 
  geom_smooth(method="nls", formula = y ~ N * dnorm(x, m, s), se=F, 
              start=list(m=20, s=5, N=300)) 

重点是在公式规范中使用 x 和 y,而不是大小和计数。

关于r - 尝试使用 ggplot2 的 geom_smooth() 显示原始数据和拟合数据(nls + dnorm),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4382108/

相关文章:

RODBC 连接失效

通过合并变量中的行来重新组织数据库

r - ggplot 增加箱线图之间的距离

r - ggplot2:在四象限图上沿中心轴(即 x=0,y=0)而不是绘图区域的边界定位刻度线

r - 如何按列比较两个 data.frames 并忽略每列中元素的顺序

r - 为多个变量分配相同的值

r - ggplot2 geom_bar 在某些情况下在位置 ="fill"时给出错误

matlab - Matlab 函数 "fit"是否有等效的 GNU Octave?

python - numpy polyfit 中使用的权重值是多少,拟合误差是多少

python - SciPy 曲线拟合失败幂律