2016-05-09 87 views
0

我在問這個問題,因爲我無法弄清楚爲什麼nlxb擬合函數不適用於predict()函數。我們可以使用nlmrt軟件包進行nlxb預測嗎?

我一直在四處尋找解決這一點,但至今沒有運氣:(

我用dplyr對數據進行分組,並使用donlmrt包適合使用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)首先,如何得到每組的擬合係數連續到dffit管道。

2)根據新的x值做預測。

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

預測(FIT,data.frame(x =範圍)

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

由於nlxb是否工作順利相比nlsr-minpack-lmnls-lm-failed-with-good-results我寧願解決方案nlxb。但如果你有一個更好的解決方案,請讓我們知道。

回答

0

有沒有coefpredict方法"nlmrt"類對象,但nlmrt程序包確實提供了wrapnls,它將運行nlmrt,然後nls,以便產生一個對象結果,然後該對象可以與所有類的方法一起使用。

另請注意,nls.lm.control來自nlsLM軟件包,不應在此處使用 - 請改用list

+0

感謝您的建議。我會在檢查完'wrapnls'後通知你。 – Alexander

+0

我檢查了'wrapnls'並且擬合不會收斂並且得到奇異的梯度誤差。你有沒有看到我的最新帖子[未能做到 - 嘗試與nls-nlxb-and-wrapnls合作](http://stackoverflow.com/questions/37133471/failed-to-do-fitting-幾家嘗試與 - NLS-nlxb-和wrapnls) – Alexander

相關問題