3
我創建了一個輸入到R中的sem()函數所需的對稱矩陣,但不斷收到一個說明矩陣不對稱的錯誤。isSymmetric對於R中的對稱矩陣返回FALSE 3.2.2
當我逐個檢查元素時,我發現沒有區別。
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(ability,check.attributes = FALSE)'。 –
@帕斯卡感謝您指出了這一點。但是,如果函數'''sem''確實是使用''isSymmetric'''實現的,則OP需要改變輸入(或者使用註釋重寫該函數)。 –