【问题标题】:How to generate a specific design matrix in R?如何在 R 中生成特定的设计矩阵?
【发布时间】:2020-10-13 15:59:36
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: r glm glmnet model.matrix


    【解决方案1】:

    试试这个:

    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
    

    【讨论】:

    • 这是一个简洁的解决方案,谢谢!有没有办法使用像model.matrix这样的内置函数?我觉得 R 应该能够自动做这样的事情。
    • 我不知道。这并不意味着它不存在,我只是没有遇到它。
    • 看来model.matrix(..., contrasts=list(a="contr.sum"))(在帮助文档中)的方向是正确的,但是...... idk,对不起。
    猜你喜欢
    • 1970-01-01
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 2012-09-27
    相关资源
    最近更新 更多