R语言S曲线拟合错误:singular gradient matrix at initial parameter estimates解决方案
R语言S曲线拟合:解决'singular gradient matrix at initial parameter estimates'错误
代码示例
# 加载库
library(readr)
library(minpack.lm)
library(stargazer)
# 定义S曲线函数
s_curve <- function(x, a, k, b) {
a / (1 + exp(-(k * (x - b))))
}
# 读取数据并转为数字类型
data <- read_csv('nsldata.csv')
head(data)
data[, ] <- lapply(data, as.numeric)
# 定义拟合函数
ample_fit <- function(lower, upper, max_iter = 100000) {
for (i in 1:max_iter) {
parameters <- data.frame(a = runif(1, lower[1], upper[1]),
k = runif(1, lower[2], upper[2]),
b = runif(1, lower[3], upper[3]))
fit <- nlsLM(Money ~ s_curve(Date, a, k, b), data = data, start = as.list(parameters))
if (fit$m$conv$code <= 1) {
return(fit)
} else {
cat('iteration:', i, 'ssr:', sum(resid(fit)^2), '\n')
}
}
stop('max iteration exceeds limit!')
}
# 定义提取k参数函数
get_k <- function(fit_result) {
coef(fit_result)['k']
}
# 拟合,指定初值范围和最大迭代次数
fit_result <- ample_fit(c(100, 0.01, -1000), c(1000, 1, 1000), max_iter = 100)
# 报错: Error in nlsModel(formula, mf, start, wts) : singular gradient matrix at initial parameter estimates
错误原因与解决方案
这个错误通常表示初值设置不合理或者数据存在问题。可以尝试以下几种方法解决:
- 调整初值范围: 尝试增加或减小初值范围的范围,找到更合适的初值。
- 检查数据异常值: 检查数据是否存在异常值或缺失值,如果存在,可以尝试剔除或填充缺失值。
- 使用其他拟合函数: 尝试使用其他拟合函数或方法,比如非线性最小二乘法(nls)。
- 使用其他库或软件: 尝试使用其他库或软件进行拟合,比如Python中的scipy库或MATLAB中的Curve Fitting Toolbox。
总结
'singular gradient matrix at initial parameter estimates' 错误通常是由初值设置不当或数据问题导致的。通过调整初值范围、检查数据异常值、使用其他拟合方法或工具等方法可以尝试解决该问题。
原文地址: https://www.cveoy.top/t/topic/orkq 著作权归作者所有。请勿转载和采集!