我有一个包含9个变量的数据框subs
我想得到日志和变量的平方根之间的相关性。
所以我首先计算2个矩阵:
library(corrplot)
logs = log(subs)
sqroots = sqrt(subs)
然后我替换无限值,如果有的话:
logs = do.call(data.frame,lapply(logs, function(x) replace(x,
is.infinite(x),NA)))
sqroots = do.call(data.frame,lapply(sqroots, function(x) replace(x,
is.infinite(x),NA)))
然后我使用corrplot
绘制相关矩阵:
corrplot(cor(logs,sqroots, use = "complete.obs"), order = "AOE")
但它给出了错误:
Error in e1 > 0 : invalid comparison with complex values
我在这里做错了什么?在此先感谢您的帮助!
答案 0 :(得分:2)
我认为问题在于你是如何试图摆脱无限的价值观。 以下应该解决您的问题:
library(corrplot)
### Defining subs & onlyNum for the code to be reproducible###
subs <- matrix(nrow = 5, ncol = 5)
for(k in 1:5){subs[,k] <- sample(1:100, 5);rm(k)}
onlyNum <- 1:5
### To the answer ###
logs = log(subs[,onlyNum])
sqroots = sqrt(subs[,onlyNum])
### The 2 lines below should solve your issue ###
logs[which(is.infinite(logs), arr.ind = TRUE)] <- NA
sqroots[which(is.infinite(sqroots), arr.ind = TRUE)] <- NA
corrplot(cor(logs,sqroots, use = "complete.obs"), order = "AOE")
<强>更新强>
现在已经提供了该数据,编辑顺序正常。
(1)由于subs
是一个数据框,is.infinite
没有实现数据框架的方法,因此必须分别使用sapply(logs, is.infinite)
代替is.infinite(logs)
sqroots
。
(2)然而,正如所指出的,问题在于order = "AOE"
:&#34; AOE&#34; (特征向量的角度顺序)仅针对实值特征值定义,因为它需要检查正性(c.f。?corrMatOrder
)。计算相关矩阵的特征值得出:
> eigen(cor(logs,sqroots, use = "complete.obs"))$values
[1] 2.35892882+0.0000000i 1.69884142+0.0000000i 1.16180544+0.0000000i
[4] 0.99435961+0.0176823i 0.99435961-0.0176823i 0.89281529+0.0000000i
[7] 0.32520739+0.0000000i 0.29605683+0.0000000i 0.05592473+0.0000000i
因此必须选择order
的另一个参数,例如order = "FPC"
(第一主成分)。
答案 1 :(得分:0)
好的,我解决了我的问题。
我需要删除参数order = "AOE"
原因可能是因为log和sqrt之间的相关性不是对称的,因此它无法命令它们找到模式。
感谢大家!