2016-05-09 4 views
0

Я задаю этот вопрос, потому что я не мог понять, почему функция nlxb не работает с функцией pred().Можно ли сделать прогноз с nlxb из пакета nlmrt?

Я смотрел вокруг, чтобы решить эту проблему, но до сих пор не повезло :(

Я использую 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 (х = диапазон)

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

Нет coef или predict методов для "nlmrt", но пакет nlmrt предоставляет wrapnls, который будет запускать nlmrt, а затем nls, чтобы объект "nls", а затем этот объект может использоваться со всеми методами класса "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

 Смежные вопросы

  • Нет связанных вопросов^_^