2

私は R の専門家ではなく、熱死細菌のデータをワイブル モデルに当てはめようとしています。

log._CFU.ml=c(9.6,9.2,9,8.5,9,7.5,6.8,5.8)
time_min=c(0,10,15,20,25,30,35,45)
ecoli_52=data.frame(log._CFU.ml,time_min)
weibull=function(x,a,b){-(1/2.303)*((x/a)^b)} #first i defined the function

それから、私は適用しましたnls

mod.ecoli_52=nls(ecoli_52$log._CFU.ml~weibull(ecoli_52$time_min,a,b),
                 ecoli_52,start=list(a=1,b=1))

その後、エラーが表示されました

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

このエラーは、start の a と b の値に関するものだと確信しています。これらの値を推定する方法はありますか?

4

1 に答える 1

2

Nが 1 ml あたりのコロニー形成単位の数であり、 が時間 0 での数である場合、次のモデルではなくN0モデルを意図している可能性があります。log(N/N0) ~ ...log(N) ~ ...log(N/N0) = log(N) - log(N0)

 log_ratio <- with(ecoli_52, log._CFU.ml - log._CFU.ml[1])
 fm <- nls(log_ratio ~ weibull(time_min, a, b), ecoli_52, start = list(a = 1, b = 1))

 plot(log_ratio ~ time_min, ecoli_52)
 lines(fitted(fm) ~ time_min, ecoli_52, col = "red")

与える:

> fm
Nonlinear regression model
  model: log_ratio ~ weibull(time_min, a, b)
   data: ecoli_52
     a      b 
13.314  1.804 
 residual sum-of-squares: 0.7894

Number of iterations to convergence: 7 
Achieved convergence tolerance: 6.363e-07

スクリーンショット

于 2015-12-06T15:59:55.243 に答える