首页 > 解决方案 > 如何在 R 中生成特定的设计矩阵?

问题描述

我想创建一个用于 glmnet 函数的设计矩阵。我的预测指标是球员姓名;当玩家i与玩家j进行比赛时,我希望该比赛的行在i列中具有 +1,在j列中具有 -1 。

例如,如果有三个玩家都互相玩,那么设计矩阵应该如下:

1 -1  0
1  0 -1 
0  1 -1 

我试过使用 model.matrix 但我不确定如何创建这个特定的设计矩阵 - 或者如果这个矩阵有更好的格式也有助于了解!

标签: rglmglmnetmodel.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

推荐阅读