首页 文章

保存从循环到矩阵的相关输出

提问于
浏览
0

我有一个如下所示的设置

for(V in (seq(1, 250, by = 5))){
   for(n in (seq(1, 250, by = 5))){

        # 1) Working Algorithm creating a probability 
             ie. vector in range [0:1] 

        # 2) Take the natural log of this probability 
        a <-  log(lag(Probability), base = exp(1))

        # 3) calculate price differences
        b <-  abs(diff(Price) -1)

        # 4) Then compute correlation between a and b
        cor(a, b) 

        # 5) Here I'd like to save this in the corresponding index of matrix
   }
}

这样我得到一个[V,n]大小的矩阵作为输出,从每个循环中收集 .

我有一些问题 .

  • 第一个问题是我的相关性是不可计算的,因为 Probability 通常为0,在 ln(Probability) 向量中创建 ln(0) = -Inf 输入 . 有没有办法用 -Inf 输入计算 Ln 向量的 std.devcor

  • 我的第二个问题是如何将这种相关输出保存到为每个循环生成的矩阵中?

谢谢你的帮助 . 我希望这很清楚 .

2 回答

  • 2

    对于你的第二个问题(我的第二个问题是我如何将这个相关输出保存到为每个循环生成的矩阵中?),你可以在循环之前初始化一个矩阵并将每个计算的相关性存储在相应的索引中,如:

    sz <- seq(1, 250, by = 5)
    out_mat <- matrix(0, nrow=length(sz), ncol=length(sz))
    # then continue with your for-loop
    for (V in 1:length(sz)) {
        for(n in length(sz)) {
            # here instead of accessing V and n in computing probability
            # use sz[V] and sz[n]
            ...
            ...
            # after computing the correlation, here use V and n (not sz[V] or sz[n])
            out_mat[V, n] <- c # c holds the value of cor(a,b)
        }
     }
    
  • 2

    您可以使用-Inf替换为NA,例如:

    x = runif(10)
    x[3] = 1/0
    > is.infinite(x)
     [1] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    x[is.infinite(x)] <- NA
    > x
     [1] 0.09936348 0.66624531         NA 0.90689357 0.71578917 0.14655174
     [7] 0.59561047 0.41944552 0.67203026 0.03263173
    

    并使用 na.rm 参数 sd

    >  sd(x, na.rm = TRUE)
    [1] 0.3126829
    

相关问题