为什么nls在ggplot中调用时会给出错误?

时间:2013-10-24 04:44:32

标签: r ggplot2 curve-fitting nls

我正在尝试将sigmoid用于某些剂量反应数据。当我在ggplot之外使用nls时,它运行正常。当我在geom_smooth中使用它时,它会抛出以下错误:

Error in numericDeriv(form[[3L]], names(ind), env) : 
  Missing value or an infinity produced when evaluating the model

示例数据如下所示:

x=c(1e-12, 1e-08, 1e-07, 1e-06, 1e-05, 1e-04)
y=c(8.161304, 11.191990, 13.453300, 14.633020, 16.227570, 15.480510)
myData<-data.frame(x=x,y=y)
myEquation=y ~ min+((max-min)/(1+10^(ec50-log10(x))))
startingGuess<-list(ec50=-8, min=8, max=15)

电话是:

fitModel = nls(myEquation,myData, start = startingGuess,trace=TRUE)

ggplot(data=myData,aes(x=x,y=y)) + 
  geom_point() + 
  scale_x_log10() + 
  geom_smooth(method="nls",formula = myEquation,start = startingGuess,trace=TRUE)    

我做错了什么?

1 个答案:

答案 0 :(得分:2)

更改比例时,还需要更改公式。这是一个可能的解决方案,虽然我在某种程度上无法获得置信区间。

myEquation=y ~ min+((max-min)/(1+10^(ec50-(x))))
ggplot(data=myData,aes(x=x,y=y))+geom_point()+scale_x_log10()+
  geom_smooth(method="nls", formula = myEquation, start = startingGuess, se=FALSE) 

更新:显然,置信区间不起作用的原因是因为predict.nls当前未实现标准错误。因此ggplot也无法显示置信区间。