【发布时间】:2021-02-25 08:38:53
【问题描述】:
我正在尝试将 R 中的函数拟合到以下数据:
y<-c(80.32000, 55.78819, 89.23141, 30.75780, 418.26000, 254.30000, 200,316.42667, 406.83435, 364.00304, 218.27867, 153.88019, 235.49971, 148.77052,
273.20171, 123.54065, 157.75650, 120.88961, 134.64092, 177.44000, 123.62948,87.03000, 63.22455, 132.62000, 120.95000, 129.60000, 116.32000, 60.49000, 66.59000)
x<-c(0, 0, 0, 0, 1, 1, 1, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7, 11, 11, 11, 11, 16, 16, 16, 16, 16, 16)
我已经尝试了几次拟合,但都没有真正奏效……我想 Weibull 函数最适合。我已经搜索了互联网以找到解决此问题的方法,并尝试按照此处的建议调整代码:https://groups.google.com/g/r-help-archive/c/rym6b1K54-4?pli=1
nls(y~127*dweibull(x,shape,scale), start=c(shape=3,scale=100))
但我收到以下错误:
numericDeriv(form[[3L]], names(ind), env) 中的错误:评估模型时产生的缺失值或无穷大。 在 dweibull(x, shape, scale) 中:产生了 NaN。
【问题讨论】:
-
NaN 的出现可能是因为参数值超出范围:例如,优化器可能会尝试使用负值来表示形状或比例。对它们设置界限可能会有所帮助,或者编写一个更复杂的目标函数来处理超出范围的值(例如,将它们推回边界,或将它们反映在边界中,等等)
-
在我的例子中,拟合导致形状接近 1,这样一些 x 值为零时,您可能会产生 0^0。
标签: r function curve-fitting weibull