所以我在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
有人能指出我收到错误的原因吗?
答案 0 :(得分:8)
您的问题已在ggplot2邮件列表中的question中得到解答。简而言之,
根据predict.nls的文档,它无法创建 预测的标准错误,因此必须关闭 stat_smooth调用。
因此,我们需要关闭标准错误:
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)