如何在 R 中传递 gnls 的矢量化参数列表

问题描述

我有一个函数,它使用 stats::nls()n 个高斯拟合到我的数据中,其中 n 是该函数的参数。我按如下方式调用 nls,它允许我为 A、mu 和 sigma 参数传入一个向量。

p_model <- function(x,A,mu,sigma) {
    rowSums(sapply(seq_len(n_gaussians),function(i) A[i] * exp(-((x - mu[i]) / sigma[i])^2)))
}

// starting parameters. Length of lists is number of gaussians to fit,in this case 2.
A <- list(5,10)
mu <- list(10,15)
sigma <- list(2,2)

model <- nls(value ~ p_model(fraction,sigma),data = data,start = list(A = A,mu = mu,sigma = sigma),weights = ~1 / weights)

我正在尝试将此部分转换为使用来自 glme 的 gnls() 函数来获得校正自相关的功能。但是,如果我尝试拟合多个高斯分布(即,如果 A、mu 和 sigma 列表长于 1),则从 nls 到 gnls 的替换会输出以下错误

Error in model.frame.default(formula = ~weights + value + fraction + A +  (test_gnls.rmd#52): variable lengths differ (found for 'A')

我认为一个潜在的解决方法生成一个明确具有每个高斯参数的字符串(如下),但正在寻找更优雅的解决方案。

fmla= as.formula(“y ~ A1 * exp(-((x1 - mu1) / sigma1)^2) + A2 * exp(-((x2 - mu2) / sigma2)^2) + ...“)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)