r - 在ggplot2中使用nls的pred $ fit错误

标签 r ggplot2

所以我在ggplot2中使用nls绘制功率曲线代码如下:

mass <- c(4120,4740,5550,5610,6520,6870,7080,8500,8960,10350,10480,10550,11450,11930,12180,13690,13760,13800,14050,14700,15340,15790,15990,17300,18460,18630,18650,20050,23270,24530,25030,27540,28370,33460,33930,34450,34500)

solv_acc <- c(2760,2990,2990,3180,3900,4010,4140,4680,4750,5330,4980,5860,5930,5570,5910,6790,6690,7020,6240,6620,6600,6860,7940,7600,8250,8530,7410,9160,9140,10300,10440,10390,11020,12640,11920,12110,12650)

df <- data.frame(Mass=log(mass),Solv=log(solv_acc))

plotter <- (ggplot(df, aes(x=Mass, y=Solv)) + geom_point(shape=1) + stat_smooth(method = "nls", formula = y~i*x^z, start=list(i=1,z=0.2)))
plotter <-  plotter + labs(x = "Mass kDa" ,y = "Solvent Accessibility")
print(plotter)

运行上面的代码,我得到以下错误:
Error in pred$fit : $ operator is invalid for atomic vectors

我假设尝试使用predict()时发生错误?

当我在同一数据帧上不使用ggplot2来执行nls时,我没有收到错误
> nls1=nls(Solv~i*Mass^z,start=list(i=1,z=0.2),data=df)
> predict(nls1)
 [1] 7.893393 7.997985 8.115253 8.123230 8.234519 8.273135 8.295350 8.429871 8.468550 8.574147 8.583270 8.588134 8.647895 8.677831 8.692939 8.777944 8.781648 8.783757 8.796793 8.829609
[21] 8.860502 8.881445 8.890558 8.947512 8.994380 9.000995 9.001769 9.053953 9.161073 9.198919 9.213390 9.281841 9.303083 9.420894 9.430834 9.441670 9.442703

谁能指出我为什么会收到错误消息?

最佳答案

在ggplot2邮件列表上的此question中回答了您的问题。简要地,

According to the documentation for predict.nls, it is unable to create standard errors for the predictions, so that has to be turned off in the stat_smooth call. .



因此,我们需要关闭标准错误:
ggplot(df, aes(x=Mass, y=Solv)) +
  stat_smooth(method="nls", formula=y~i*x^z, se=FALSE, 
              start=list(i=1,z=0.2)) +
  geom_point(shape=1) 

更新2019:对于新版本的ggplot2,我们需要像这样传递startnls参数:
ggplot(df, aes(x = Mass, y = Solv)) +
  stat_smooth(method = "nls", 
              se = FALSE,
              method.args = list( 
                formula = y ~ i*x^z, 
                start = list(i=1, z=2)
              )) +
  geom_point()

关于r - 在ggplot2中使用nls的pred $ fit错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13840658/

相关文章:

r - 转换为循环应用

regex - 从字符串中替换 "/?"

r - 如何用ggplot填充区间内的密度图?

R ggplot2 : Barplot partial/semi stack

r - 显示 x 轴中断的 y 值

r - 如何使用 Azure 通知中心和 R 向客户手机发送短信?

R 根据另一个表中的变量列表保留变量并对其进行排序

r - 在 R 中使用 ggplot 时,如何删除绘图区域周围的边距?

r - 在 ggplot2 的分面点图中绘制顺序

R:通过聚合 OHLC 系列中的值来降低时间序列数据的频率