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

错误原因与解决方案

这个错误通常表示初值设置不合理或者数据存在问题。可以尝试以下几种方法解决:

  1. 调整初值范围: 尝试增加或减小初值范围的范围,找到更合适的初值。
  2. 检查数据异常值: 检查数据是否存在异常值或缺失值,如果存在,可以尝试剔除或填充缺失值。
  3. 使用其他拟合函数: 尝试使用其他拟合函数或方法,比如非线性最小二乘法(nls)。
  4. 使用其他库或软件: 尝试使用其他库或软件进行拟合,比如Python中的scipy库或MATLAB中的Curve Fitting Toolbox。

总结

'singular gradient matrix at initial parameter estimates' 错误通常是由初值设置不当或数据问题导致的。通过调整初值范围、检查数据异常值、使用其他拟合方法或工具等方法可以尝试解决该问题。

R语言S曲线拟合错误:singular gradient matrix at initial parameter estimates解决方案

原文地址: https://www.cveoy.top/t/topic/orkq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录