Suppose that's my data example
nrow<-4
ncol<-5
m1 <- matrix(rbinom(nrow*ncol,1,.5),nrow,ncol)
m2 <- matrix(rbinom(nrow*ncol,1,.5),nrow,ncol)
m3 <- matrix(rbinom(nrow*ncol,1,.5),nrow,ncol)
I need to compare 3 matrices sequentially. According to this principle. Eg
m1
[,1] [,2] [,3] [,4] [,5]
[1,] 1 0 1 0 1
[2,] 1 1 1 0 1
[3,] 1 0 0 1 1
[4,] 0 0 0 1 0
m2
[,1] [,2] [,3] [,4] [,5]
[1,] 1 0 0 0 1
[2,] 0 1 1 0 0
[3,] 1 0 0 0 0
[4,] 0 1 0 1 0
. Now count the number of matches in each column of the matrix. Take the first column of both matrices
m1 m2
1 1 matched values
1 0 values did not match
1 1 matched values
0 0 matched values
in total, out of 4 values in the first columns of matrices m1 and m2, 3 coincided. It turns out that 75% of the values coincided.
then take the second column
m1 m2
[,2] [,2]
0 0 matched values
1 1 matched values
0 0 values did not match
0 1 values did not match
here is also a similar situation where 3 values coincided
in other words, as the desired output there must be something like
[,1] [,2] [,3] [,4] [,5]
[1,] 1 0 1 0 1
[2,] 1 1 1 0 1
[3,] 1 0 0 1 1
[4,] 0 0 0 1 0
[,1] [,2] [,3] [,4] [,5]
[1,] 1 0 0 0 1
[2,] 0 1 1 0 0
[3,] 1 0 0 0 0
[4,] 0 1 0 1 0
75 75 75 75 50
Now let's calculate the average value of the percentages received. = 70%
(75+75+75+75+50)/5=70
What is the simplest way to calculate the percentage difference between all matrices?
first between m1 and m2, then between m1 and m3, and lastly between m2 and m3
Thank you for your help
Here are two base R options
combn + meancombn generates combination pairs, and mean tells the mean of co-occurrences.
combn(
lst,
2,
\(x) mean(do.call(`==`,x))
)
you will obtain
[1] 0.5 0.4 0.5
adist + toStringThis approach generates a matrix that depicts the co-occurrences.
> 1 - adist(unlist(lapply(lst, toString))) / lengths(lst)
[,1] [,2] [,3]
[1,] 1.0 0.5 0.4
[2,] 0.5 1.0 0.5
[3,] 0.4 0.5 1.0
set.seed(0)
nrow <- 4
ncol <- 5
m1 <- matrix(rbinom(nrow * ncol, 1, .5), nrow, ncol)
m2 <- matrix(rbinom(nrow * ncol, 1, .5), nrow, ncol)
m3 <- matrix(rbinom(nrow * ncol, 1, .5), nrow, ncol)
lst <- list(m1, m2, m3)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With