微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何在 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 举报,一经查实,本站将立刻删除。