我的设置如下所示
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(0) = -Inf
向量中创建ln(Probability)
输入。有没有办法用std.dev
输入计算cor
向量的Ln
或-Inf
?
我的第二个问题是如何将这种相关输出保存到为每个循环生成的矩阵中?
感谢您的帮助。我希望这很清楚。
答案 0 :(得分: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
的{{1}}参数:
sd
答案 1 :(得分: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)
}
}