gpt4 book ai didi

r - isSymmetric 为 R 3.2.2 中的对称矩阵返回 FALSE

转载 作者:行者123 更新时间:2023-12-01 13:48:59 25 4
gpt4 key购买 nike

我创建了一个对称矩阵,它是 R 中 sem() 函数的输入所必需的,但一直收到一个错误,指出该矩阵不对称。

当我逐个元素检查时,我没有发现任何差异。

isSymmetric() 是否以更高的精度进行检查?如果是这样,我如何强制矩阵在内存中对称?

 SCA = c(1,.73,.70,.58,.46,.56)
PPE = c(.73,1,.68,.61,.43,.52)
PTE = c(.7,.68,1,.57,.4,.48)
PFE = c(.58,.61,.57,1,.37,.41)
EA = c(.46,.43,.4,.37,1,.72)
CP = c(.56,.52,.48,.41,.71,1)

ability = as.matrix(cbind(SCA,PPE,PTE,PFE,EA,CP))
rownames(ability)=t(colnames(ability))

ability.diag = diag(ability)
ability[lower.tri(ability,diag=T)] = 0
ability = ability + t(ability) + diag(ability.diag)
ability
# SCA PPE PTE PFE EA CP
# SCA 1.00 0.73 0.70 0.58 0.46 0.56
# PPE 0.73 1.00 0.68 0.61 0.43 0.52
# PTE 0.70 0.68 1.00 0.57 0.40 0.48
# PFE 0.58 0.61 0.57 1.00 0.37 0.41
# EA 0.46 0.43 0.40 0.37 1.00 0.71
# CP 0.56 0.52 0.48 0.41 0.71 1.00
sum(ability != t(ability))
# [1] 0
isSymmetric(ability)
# [1] FALSE

最佳答案

函数isSymmetric 是使用函数all.equal 实现的。被测试的不是矩阵是否等于它的转置,逐个元素,而是这两个矩阵作为 R 对象是否相等。在您的情况下,它们不是:如果您查看它们的结构,您会得到以下信息:

> str(ability) 
num [1:6, 1:6] 1 0.73 0.7 0.58 0.46 0.56 0.73 1 0.68 0.61 ...
- attr(*, "dimnames")=List of 2
..$ : chr [1, 1:6] "SCA" "PPE" "PTE" "PFE" ...
..$ : chr [1:6] "SCA" "PPE" "PTE" "PFE" ...


> str(t(ability))
num [1:6, 1:6] 1 0.73 0.7 0.58 0.46 0.56 0.73 1 0.68 0.61 ...
- attr(*, "dimnames")=List of 2
..$ : chr [1:6] "SCA" "PPE" "PTE" "PFE" ...
..$ : chr [1, 1:6] "SCA" "PPE" "PTE" "PFE" ...

所以问题在于如何生成ability 的行名称。您可以轻松解决此问题:

> rownames(ability) <- colnames(ability)
> isSymmetric(ability)
[1] TRUE

关于r - isSymmetric 为 R 3.2.2 中的对称矩阵返回 FALSE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33381302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com