我们可以用nlmrt包中的nlxb进行预测吗?

时间:2016-05-09 08:04:49

标签: r dplyr pipeline nls

我问这个问题,因为我无法弄清楚为什么nlxb拟合函数不能与predict()函数一起使用。

我一直在寻找解决这个问题,但到目前为止还没有运气:(

我使用dplyr对数据进行分组,并使用do来使用nlxb包中的nlmrt来适应每个群组。

这是我的尝试

set.seed(12345)
set =rep(rep(c("1","2","3","4"),each=21),times=1)
time=rep(c(10,seq(100,900,100),seq(1000,10000,1000),20000),times=1)
value <- replicate(1,c(replicate(4,sort(10^runif(21,-6,-3),decreasing=FALSE))))
data_rep <- data.frame(time, value,set)

> head(data_rep)
    #    time        value set
    #1     10 1.007882e-06   1
    #2    100 1.269423e-06   1
    #3    200 2.864973e-06   1
    #4    300 3.155843e-06   1
    #5    400 3.442633e-06   1
    #6    500 9.446831e-06   1
    *      *       *         *  

library(dplyr)
library(nlmrt)

    d_step <- 1
    f <- 1e9
    d <- 32      
    formula = value~Ps*(1-exp(-2*f*time*exp(-d)))*1/(sqrt(2*pi*sigma))*exp(-(d-d_ave)^2/(2*sigma))*d_step

      dffit = data_rep %>% group_by(set) %>%
      do(fit = nlxb(formula ,
                    data = .,
                    start=c(d_ave=44,sigma=12,Ps=0.5),
                    control=nls.lm.control(maxiter = 100),
                    trace=TRUE))

----------------------------------------------- ---------

我想最后得到两点,

1)首先,如何在dffit管道的延续中获得每个组的拟合系数。

2)根据新的x值进行预测。

例如range <- data.frame(x=seq(1e-5,20000,length.out=10000))

预测(配合,data.frame(X =范围)

Error in UseMethod("predict") : 
  no applicable method for 'predict' applied to an object of class "nlmrt"

由于nlxbnls r-minpack-lmnls-lm-failed-with-good-results相比工作顺利,因此我更倾向于使用nlxb的解决方案。但如果您有更好的解决方案,请告诉我们。

1 个答案:

答案 0 :(得分:0)

coef类对象没有predict"nlmrt"方法,但nlmrt包提供的wrapnls将运行nlmrt,然后{{1这样就产生了一个nls对象,然后该对象可以与所有"nls"类方法一起使用。

另请注意,"nls"来自nlsLM包,不应在此处使用 - 请改用nls.lm.control