> m <- read.table('grossman-frieder.table') > m D1 D2 D3 Q a 1 1 1 0 arrived 0 1 1 0 damaged 1 0 0 0 delivery 0 1 0 0 fire 1 0 0 0 gold 1 0 1 1 in 1 1 1 0 of 1 1 1 0 shipment 1 0 1 0 silver 0 2 0 1 truck 0 1 1 1 > m['D1'] D1 a 1 arrived 0 damaged 1 delivery 0 fire 1 gold 1 in 1 of 1 shipment 1 silver 0 truck 0 > m['Q'] Q a 0 arrived 0 damaged 0 delivery 0 fire 0 gold 1 in 0 of 0 shipment 0 silver 1 truck 1 > m['D1'] %*% m['Q'] Error in m["D1"] %*% m["Q"] : requires numeric/complex matrix/vector arguments > m <- as.matrix(m) > m['D1'] %*% m['Q'] [,1] [1,] NA > m[,1] %*% m[,4] [,1] [1,] 1 > m[,'D1'] %*% m[,'Q'] [,1] [1,] 1 > m %*% m[,'Q'] Error in m %*% m[, "Q"] : non-conformable arguments > m[,'Q'] %*% m D1 D2 D3 Q [1,] 1 3 2 3 > t(m[,'Q']) %*% m D1 D2 D3 Q [1,] 1 3 2 3 > m^2 D1 D2 D3 Q a 1 1 1 0 arrived 0 1 1 0 damaged 1 0 0 0 delivery 0 1 0 0 fire 1 0 0 0 gold 1 0 1 1 in 1 1 1 0 of 1 1 1 0 shipment 1 0 1 0 silver 0 4 0 1 truck 0 1 1 1 > colSums(m^2) D1 D2 D3 Q 7 10 7 3 > sqrt(colSums(m[,-4]^2)) D1 D2 D3 2.645751 3.162278 2.645751 > m[,4] %*% m[,-4] D1 D2 D3 [1,] 1 3 2 > (m[,4] %*% m[,-4]) / sqrt(colSums(m[,-4]^2)) D1 D2 D3 [1,] 0.3779645 0.9486833 0.755929 >