gpt4 book ai didi

r - nls - 收敛失败 : singular convergence (7)

转载 作者:行者123 更新时间:2023-12-04 10:42:04 24 4
gpt4 key购买 nike

以下nls代码抛出以下错误 Convergence failure: singular convergence (7)fm2 (对于 Data2 )。但是类似数据集的相同代码工作正常( fm1 用于 Data1 )。
适用于此数据集

Data1 <-
structure(list(D = c(0L, 0L, 0L, 0L, 5L, 5L, 5L, 5L,
10L, 10L, 10L, 10L, 15L, 15L, 15L, 15L, 20L, 20L, 20L, 20L),
Y = c(11.6, 9.3, 10.7, 9.2, 7.8, 8, 8.6, 7.9, 7.7,
7.6, 7.5, 7.5, 7.2, 7.3, 7, 6.5, 6.3, 5.7, 5.6, 6)), .Names = c("D",
"Y"), class = "data.frame", row.names = c(NA, 20L))

fm1 <-
nls(
formula=Y~w*(1-(i*D/(100*(1+i*D/A))))
, data=Data1
, start=list(w=13, i=3, A=80)
, algorithm="port"
)

不适用于此数据集
Data2 <-
structure(list(D = c(0L, 0L, 0L, 0L, 5L, 5L, 5L, 5L,
10L, 10L, 10L, 10L, 15L, 15L, 15L, 15L, 20L, 20L, 20L, 20L),
Y = c(10.8, 10.7, 8.4, 8.5, 8, 8, 8, 7.9, 7.9, 7.2,
7.8, 7.2, 6.6, 6.5, 6.5, 6.4, 2.2, 4.5, 4.2, 6.2)), .Names = c("D",
"Y"), class = "data.frame", row.names = 21:40)

fm2 <-
nls(
formula=Y~w*(1-(i*D/(100*(1+i*D/A))))
, data=Data2
, start=list(w=13, i=3, A=80)
, algorithm="port"
)

最佳答案

我认为您的参数化存在问题。我们可以通过让 B 为 i/A,.lin1 = w 和 .lin2 = i*w 来利用线性,在这种情况下 .lin1 和 .lin2 线性输入并使用 alg=plinear只有非线性参数需要一个起始值:

> fo <- Y ~ cbind(1, -D/(100*(1+B*D)))
> nls(fo, Data, start = list(B = 3/80), alg = "plinear")
Nonlinear regression model
model: Y ~ cbind(1, -D/(100 * (1 + B * D)))
data: Data
B .lin1 .lin2
-0.02217 9.26808 13.61471
residual sum-of-squares: 15.76

Number of iterations to convergence: 9
Achieved convergence tolerance: 4.236e-06

从结果 w = .lin1; i*w = .lin2(所以 i = .lin2/.lin1)和 B = i/A(所以 A = i/B)。

修订 改进了配方。

关于r - nls - 收敛失败 : singular convergence (7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22229352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com