- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在获取特定曲线以将数据拟合到 nls 模型时遇到了一些困难。
这是数据的公式:
((b1 * ((b2 * x)^b4)) / (1 + ((b2 * x)^b4)))^(b3 / b4)
library(nls2)
#FORMULA
eq <- y ~ (b1 * ((b2 * x)^b4)) / (1 + ((b2 * x)^b4))^(b3 / b4)
#LIMITS
values <- data.frame(
b1 = c(60, 63)
b2 = c(0, 0.05)
b3 = c(0, 1)
b4 = c(0, 0.9)
fit <- nls2(eq,
data = .data,
start = values,
algorithm = "random",
control = mls.control(maxiter = 1000))
nls(eq, .data, start = coef(fit), alg = "port", lower = 0)
plot(.data)
b1 = 62.2060
b2 = 0.0438
b3 = 0.9692
b4 = 0.8693
Convergence Failure: Iteration limit reached without convergence (10)
最佳答案
0. TLDR
您没有设置 lower
和 upper
绑定(bind) nls
,所以你没有得到收敛的结果。如果您设置它们,您将在边界附近获得结果。 请参阅我在上一段中编写的代码。
实际上,即使你设置了边界,由于 数据质量差 (样本量小,不符合您的公式),很难在您的真实 b1
附近拟合最佳值,'b2','b3' 和 b4
. 见非技术原因 .
1. 收敛失败的非技术原因
我认为您的代码是正确的,而这种收敛失败是由于您的数据质量或您对公式的错误指定。
一般来说,你很难用 6 个点来估计 4 个参数。如果你有很好的数据可以很好地拟合你的模型,nlm 将会收敛。在您的情况下,要么您的数据错误,要么您的公式规范偏差很大。
我画了一个情节来向你展示:
代码
# generate a line using true parameters:b1,b2,b3,b4
b1 = 62.2060
b2 = 0.0438
b3 = 0.9692
b4 = 0.8693
x_points = seq(50,420,length.out = 200)
y_points = (b1 * ((b2 * x_points)^b4)) / (1 + ((b2 * x_points)^b4))^(b3 / b4)
# plot the function
plot(x = x_points ,y = y_points, type ='l',col ='black',lwd = 5,
xlim = c(min(yourdata$x)-5,max(yourdata$x)+5),
ylim = c(min(yourdata$y)-5,max(yourdata$y)+5))
# plot the data your got
points(yourdata$x,yourdata$y,cex = 2)
## generate data
b1 = 62.2060
b2 = 0.0438
b3 = 0.9692
b4 = 0.8693
x <- runif(6,60,450)
y <- (b1 * ((b2 * x)^b4)) / (1 + ((b2 * x)^b4))^(b3 / b4)
data <- data.frame(x,y)
yourdata <- data.frame(x = c(409.56, 195.25, 60.53, 359.56, 188.79, 67.12),
y = c(39.76100, 20.11875, 7.23675, 41.01100, 20.28035, 7.07200))
#FORMULA
eq <- y ~ (b1 * ((b2 * x)^b4)) / (1 + ((b2 * x)^b4))^(b3 / b4)
#LIMITS
values <- data.frame(
b1 = c(60, 63),
b2 = c(0, 0.05),
b3 = c(0, 1),
b4 = c(0, 0.9))
fit <- nls2(eq,
data = data,
start = values,
algorithm = "random",
control = nls.control(maxiter = 1000))
nls(eq, data, start = coef(fit), alg = "port",
control = nls.control(maxiter = 1000,tol = 1e-05),
low = c(60,0,0,0),upper =c(63,0.05,1,0.9) ,trace = TRUE)
plot(x,y)
Nonlinear regression model
model: y ~ (b1 * ((b2 * x)^b4))/(1 + ((b2 * x)^b4))^(b3/b4)
data: data
b1 b2 b3 b4
62.2060 0.0438 0.9692 0.8693
residual sum-of-squares: 3.616e-24
Algorithm "port", convergence message: absolute function convergence (6)
yourdata <- data.frame(x = c(409.56, 195.25, 60.53, 359.56, 188.79, 67.12),
y = c(39.76100, 20.11875, 7.23675, 41.01100, 20.28035, 7.07200))
#FORMULA
eq <- y ~ (b1 * ((b2 * x)^b4)) / (1 + ((b2 * x)^b4))^(b3 / b4)
#LIMITS
values <- data.frame(
b1 = c(60, 63),
b2 = c(0, 0.05),
b3 = c(0, 1),
b4 = c(0, 0.9))
fit <- nls2(eq,
data = yourdata,
start = values,
algorithm = "random",
control = nls.control(maxiter = 1000))
nls(eq, yourdata, start = coef(fit), alg = "port",
control = nls.control(maxiter = 1000,tol = 1e-05),
low = c(60,0,0,0),upper =c(63,0.05,1,0.9) ,trace = TRUE)
plot(x,y)
Nonlinear regression model
model: y ~ (b1 * ((b2 * x)^b4))/(1 + ((b2 * x)^b4))^(b3/b4)
data: yourdata
b1 b2 b3 b4
63.00000 0.00155 0.00000 0.90000
residual sum-of-squares: 22.28
Algorithm "port", convergence message: both X-convergence and relative convergence (5)
关于r - 收敛失败 : Iteration limit reached without convergence (10),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59550999/
代码: import numpy from matplotlib.mlab import PCA file_name = "store1_pca_matrix.txt" ori_data = nump
我正在尝试使用 https://github.com/Michaelvll/DeepCCA 经过 20-40 次迭代后,出现以下错误: RuntimeError: symeig_cpu: the al
我正在实现 Converge 灯箱。开发服务器IP已经加入白名单。我可以通过消费获取 session token "https://api.demo.convergepay.com/hosted-pa
我有一个服务器程序,它从一组网络对等点中随机选择 10 个来完成一项任务。生成节点随机索引的代码如下: indices = let index = getStdRandom $ randomR (0,
我正在尝试用 Octave 计算梯度下降。每次迭代,我的 theta 都会呈指数级增长。我不确定问题是什么,因为我直接复制另一个函数。 这是我的矩阵: X = 1 98 1 94 1
我正在尝试使用来自 SkLearn 的 Kmeans 算法从一组数据中构建集群。我想知道如何确定算法是否真正收敛到一个数据的解决方案。 我们输入 tol 参数来定义收敛容差,但还有一个 max_ite
我正在尝试获取列表 v 的所有旋转。因此,在 rotations 的定义中,我使用翻转版本的 rotateLeft 作为第一个分支函数(为了首先接受列表),然后是返回list [0, 1, 2, ..
我一直在尝试通过构建简短的程序来学习 Haskell。我对函数式编程世界有点陌生,但已经做了大量的阅读。 我在 Haskell 中有一个相对较短的递归函数,用于使用牛顿法找到一个函数的根,达到浮点数允
我目前在训练 svm.OneClassSVM 时遇到问题. 我将问题简化为最小示例: from sklearn import svm import pandas as pd X_train = pd.
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
我尝试了很多测试信用卡号,但总是返回结果是“无效卡”。 请求地址: https://demo.myvirtualmerchant.com/VirtualMerchantDemo/processxml.
以下nls代码抛出以下错误 Convergence failure: singular convergence (7)为 fm2 (对于 Data2 )。但是类似数据集的相同代码工作正常( fm1 用
我想使用 R 中的“neuralnet”包来训练神经网络。训练数据集是一个包含 8 个预测变量 (x1,x2,x3,...,x8) 和 1 个响应变量 (y) 的数据框。数据如下: data
我在使用 coxph() 时遇到一些问题。我有两个分类变量:性别和可能的原因,我想将其用作预测变量。性别只是典型的男性/女性,但可能的原因有 5 个选项。我不知道警告消息有什么问题。为什么置信区间从
我试图在 matplotlib 中的矩阵上进行 PCA,但不断遇到 LinAlgError: SVD 未收敛。我检查了我的数据是否有错误值。我能够在类似的数据集上实现 PCA,没有任何问题,但在这种情
我编写了一个使用 Armadillo svd_econ 函数的函数。我正在尝试处理 svd 无法收敛的情况,因为出于某种原因在这种情况下它不会中止函数。 有问题的错误是: error: svd_eco
为 Adrian 运行线性二进制模式的代码。该程序运行但给出以下警告: C:\Python27\lib\site-packages\sklearn\svm\base.py:922: Convergen
我试图用 Scipy 解决一个大的特征值问题,其中矩阵 A是密集的,但我可以计算它对向量的作用而无需组装 A明确地。因此,为了避免矩阵 A 变大时出现内存问题,我想使用稀疏求解器 scipy.spar
背景:我正在开发一个使用statsmodels的程序,该程序适合27个arima模型(p,d,q = 0,1,2)到100多个变量,并为AR/选择具有最低aic和具有统计意义的t统计量的模型Dicke
我已经为 DCGAN 构建了自己的实现在 TensorFlow培训 MNIST . 完整代码(可运行)可在 github 上找到:https://github.com/Daniel451/tfdcga
我是一名优秀的程序员,十分优秀!