如何在 R 中生成特定的设计矩阵?
How to generate a specific design matrix in R?
我想创建一个用于 glmnet 函数的设计矩阵。我的预测指标是球员的名字;当玩家 i 与玩家 j 比赛时,我希望该比赛的行在 i[ 列中有 +1 =21=] 和 j.
列中的 -1
比如有3个玩家互相对战,那么设计矩阵应该是这样的:
1 -1 0
1 0 -1
0 1 -1
我试过使用 model.matrix,但我不确定如何创建这个特定的设计矩阵 - 或者,如果有更好的格式来了解这个矩阵也会有所帮助!
试试这个:
num_players <- 4
matches <- t(combn(num_players, 2))
nr <- nrow(matches)
mtx <- matrix(0L, nrow = nr, ncol = num_players)
mtx[ cbind(seq_len(nr), matches[,1]) ] <- 1L
mtx[ cbind(seq_len(nr), matches[,2]) ] <- -1L
mtx
# [,1] [,2] [,3] [,4]
# [1,] 1 -1 0 0
# [2,] 1 0 -1 0
# [3,] 1 0 0 -1
# [4,] 0 1 -1 0
# [5,] 0 1 0 -1
# [6,] 0 0 1 -1
我想创建一个用于 glmnet 函数的设计矩阵。我的预测指标是球员的名字;当玩家 i 与玩家 j 比赛时,我希望该比赛的行在 i[ 列中有 +1 =21=] 和 j.
列中的 -1比如有3个玩家互相对战,那么设计矩阵应该是这样的:
1 -1 0
1 0 -1
0 1 -1
我试过使用 model.matrix,但我不确定如何创建这个特定的设计矩阵 - 或者,如果有更好的格式来了解这个矩阵也会有所帮助!
试试这个:
num_players <- 4
matches <- t(combn(num_players, 2))
nr <- nrow(matches)
mtx <- matrix(0L, nrow = nr, ncol = num_players)
mtx[ cbind(seq_len(nr), matches[,1]) ] <- 1L
mtx[ cbind(seq_len(nr), matches[,2]) ] <- -1L
mtx
# [,1] [,2] [,3] [,4]
# [1,] 1 -1 0 0
# [2,] 1 0 -1 0
# [3,] 1 0 0 -1
# [4,] 0 1 -1 0
# [5,] 0 1 0 -1
# [6,] 0 0 1 -1