【问题标题】:Vectorising building multiple models in R在 R 中向量化构建多个模型
【发布时间】:2014-07-21 09:51:49
【问题描述】:

我的数据(包含多个矩阵对象的列表)如下所示:

$matrix_1
    26/03/2012  02/04/2012  09/04/2012  16/04/2012  23/04/2012  30/04/2012  07/05/2012  14/05/2012  21/05/2012  28/05/2012
26/03/2012  500 40  30  20  21  18  8   7   8   5
02/04/2012  NA  100 25  19  16  15  10  6   7   8
09/04/2012  NA  NA  200 55  50  45  38  35  34  32
16/04/2012  NA  NA  NA  400 50  30  20  10  12  7

$matrix_b
    26/03/2012  02/04/2012  09/04/2012  16/04/2012  23/04/2012  30/04/2012  07/05/2012  14/05/2012  21/05/2012  28/05/2012
26/03/2012  500 40  30  20  21  18  8   7   8   5
02/04/2012  NA  100 25  19  16  15  10  6   7   8
09/04/2012  NA  NA  200 55  50  45  38  35  34  32
16/04/2012  NA  NA  NA  400 50  30  20  10  12  7

现在我已经编写了一个循环,使用 NLS 和我自己指定的曲线函数将曲线拟合到我的每一行数据。 即对于 matrix_a 行 26/03/2012,我正在根据这些数据点拟合曲线:

500 40  30  20  21  18  8   7   8   5

在我的循环中,我提取曲线系数以供以后使用

有没有办法可以矢量化这个方法?这样我就不必使用循环了吗?

我以这种方式对每一行使用 NLS:

fit.function <- function(a,x,b)
                   {return(a*x^b)}

 mod <- nls(values ~ fit.function(a,index_of_values,b))

其中 index_of_values 为 1、2、3 等。(即列号)

【问题讨论】:

  • 您能提供一些适合您曲线的代码 sn-ps 吗?
  • 嗨,shecode。看看sapply函数,大概就是你想要的吧。
  • 我添加了一些sn-ps

标签: r matrix vectorization curve-fitting nls


【解决方案1】:

感谢您的帮助,我最终使用了 sapply 并且成功了

即这是我的代码的一些 sn-ps:

fit.function <- function(a,x,b)
                   {return(a*x^b)}


xx<-sapply(setNames(1:10,rownames(dataset[1:10])), function(i) {
    to_predict= dataset[i,]
    ind = dataset2[i,]
    mod=nls(to_predict~ fit.function(a,ind,b))
    return(c(summary(mod)$coefficients[1],summary(mod)$coefficients[2]))
})

【讨论】:

    猜你喜欢
    • 2020-07-05
    • 2021-11-25
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 2018-04-03
    • 2021-07-11
    • 1970-01-01
    • 2017-12-09
    相关资源
    最近更新 更多