corPhylo error - Error in Rd %*% R : non-conformable arguments
MalharAtre opened this issue · comments
Hi,
I am trying to get a phylogenetic correlation for two traits using corPhylo. The traits are being provided correctly as a single-column matrix with correct rownames for X and a list with one single column matrix with correct row names for U. Phylogeny provided is rooted, binary with branch lengths. There are no NaN values in either of trait values. The number of taxa in tree is ~2500. After running for some time, I end up with following error -
Error in Rd %*% R : non-conformable arguments
Google search suggests that this may be a matrix multiplication error associated with dimensions of matrix. However, I'm nor sure what may be triggering it.
Here is the screenshot of my command and error -
Looking forward to your reply!
Thanks,
Malhar
Hi,
By chance, is there an object named T
in your workspace when you tried this command? You can try:
ls(pattern = "^T$")
If something is printed else than character(0)
, then:
get("T")
Hi!
Thanks for the quick response!
There is no object named T in the workspace.
ls(pattern = "^T$")
gives-
character(0) .
There are objects named a and p, but even after removing them, the issue persists.
Good! I noticed corphylo
's code uses T
in several places in place of TRUE
(I'll fix that later).
It seems the error happens when executing these lines:
...
L <- matrix(0, nrow = p, ncol = p)
L[lower.tri(L, diag = T)] <- L.elements
R <- t(L) %*% L
Rd <- diag(diag(R)^-0.5)
cor.matrix <- Rd %*% R %*% Rd
...
so all three matrices, L, R, Rd, are expected to be square. It's possible there is something in your data. You may explore this yourself after setting:
options(error = recover)
Or you can post some data here to reproduce the error so we can help.
Hi!
Thanks for the input.
I have tried exploring the issue and it appears that the L and R are 1x1 matrices, whereas the Rd produces a 3x3 matrix, owing to the small value of R.
Browse[3]> opt
$par
[1] 0.2602809 0.9503254
$value
[1] -2021.429
$counts
function gradient
51 NA
$convergence
[1] 0
$message
NULL
Browse[3]> par
[1] 0.2602809 0.9503254
Browse[3]> LL
[1] -2021.429
Browse[3]> L.elements
[1] 0.2602809
Browse[3]> L
[,1]
[1,] 0.2602809
Browse[3]> R
[,1]
[1,] 0.06774617
Browse[3]> Rd
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1
Browse[3]> diag(R)^-0.5
[1] 3.842002
Essentially, it appears that if the value of R drops below 0.25, ie. the optimized parameter stored in opt drops below 0.5, this error would occur at least in the case when only two traits are being compared.
Is the optimized value to not expected drop below 0.5? If so, I will go through my data accordingly to find explanations
Thank you for your help again!
Looking forward to your reply,
Malhar
It seems you didn't input the trait data correctly. From your first message above:
The traits are being provided correctly as a single-column matrix with correct rownames for X and a list with one single column matrix with correct row names for U.
So this results in p = 1
(single-column). See the help page for a description of what is the argument U
. Did you input the second trait into U
?