【问题标题】:Can we make prediction with nlxb from nlmrt package?我们可以使用 nlmrt 包中的 nlxb 进行预测吗?
【发布时间】:2016-05-09 08:04:48
【问题描述】:

我问这个问题是因为我不明白为什么nlxb 拟合函数不能与 predict() 函数一起使用。

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

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

这是我的尝试

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)首先,如何获取每个组的拟合系数继续dffitpipeline。

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

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

预测(fit,data.frame(x=range)

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 的解决方案。但如果您有更好的解决方案,请告诉我们。

【问题讨论】:

    标签: r dplyr pipeline nls


    【解决方案1】:

    对于"nlmrt" 类对象没有coefpredict 方法,但nlmrt 包确实提供wrapnls,它将运行nlmrt,然后运行nls,这样会产生"nls" 对象,然后该对象可以与所有"nls" 类方法一起使用。

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

    【讨论】:

    猜你喜欢
    • 2019-05-09
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 2020-03-29
    • 2020-03-27
    相关资源
    最近更新 更多