R叉积矩阵

R cross product matrix

我需要根据二进制映射的乘积构建叉积矩阵。

二进制映射构造如下

A_ID<-c(111,116,111,112,112,114,116,113,114,111,114,116,115,116,116)
U_ID<-c(221,221,222,222,223,223,223,224,224,225,225,225,226,226,226)

df_u_a<-data.frame(U_ID,A_ID)

myTab <- table(df_u_a) # count
myTab[] <- as.integer(as.logical(myTab)) # binary map

myTab[]的输出结果如下:

     A_ID
U_ID  111 112 113 114 115 116
  221   1   0   0   0   0   1
  222   1   1   0   0   0   0
  223   0   1   0   1   0   1
  224   0   0   1   1   0   0
  225   1   0   0   1   0   1
  226   0   0   0   0   1   1

我需要做的叉积如下:

item.111<-c(myTab[][,1])
item.112<-c(myTab[][,2])    
crossprod(item.111, item.112)/sqrt(crossprod(item.111) * crossprod(item.112))

这给了我 0.4082483 的输出,我可以按如下方式构建矩阵

在上图中,我只说明了我计算出的一个值,但我需要计算矩阵中超过 900 rows/columns 的其余值。

关于如何在 R 中构建这个叉积有什么想法吗?

您想要的矩阵是 myTab 的相关矩阵,没有将变量居中。因此,我们可以这样得到:

crossprod(myTab %*% diag(1 / sqrt(colSums(myTab^2))))
#           [,1]      [,2]      [,3]      [,4] [,5]      [,6]
# [1,] 1.0000000 0.4082483 0.0000000 0.3333333  0.0 0.5773503
# [2,] 0.4082483 1.0000000 0.0000000 0.4082483  0.0 0.3535534
# [3,] 0.0000000 0.0000000 1.0000000 0.5773503  0.0 0.0000000
# [4,] 0.3333333 0.4082483 0.5773503 1.0000000  0.0 0.5773503
# [5,] 0.0000000 0.0000000 0.0000000 0.0000000  1.0 0.5000000
# [6,] 0.5773503 0.3535534 0.0000000 0.5773503  0.5 1.0000000