请查看伪造的数据集。

library(data.table)
library(MASS)
n=5000
DT = data.table(
      grp=1:n,
      name=as.character(as.hexmode(1:n)),
      x= sample(c(1:400),n,replace = TRUE)
    )

setkey(DT,grp)

UIDlist <- unique(DT[,grp])
IDnamelist <- paste0("V", 1 : length(UIDlist), sep = "")
test <- DT[, (IDnamelist):=lapply(UIDlist,function(x) grp ==x)][, V5000:= NULL]

我有一个data.table,其中有4列,即“grp”,“名称”,“x”,“y”。然后在“grp”的每个级别上添加虚拟对象。
然后,我需要在MASS软件包中使用glm.nb运行回归。

首先我尝试了这个
SumResult <- glm.nb(x ~ factor(uid), data = test)

但是,当添加假人时,我们必须注意,当“grp”中有N个级别时,我们将添加N-1个假人。因此,就我而言,此方法不合适。

所以我尝试了这个:
SumResult <- glm.nb( x ~ V1 + V2 + V3 + V4 + .....+ V4999  , data = test)

编写所有V1,V2,... V4999进行回归是愚蠢的。

有没有代码可以达到目的?

谢谢

最佳答案

您可以尝试通过字符串操作来创建公式对象

formula <- as.formula(paste0("x ~ ", paste(names(test)[-(1:3)], collapse = " + ")))
sumresult <- glm.nb(formula, data = test)

您还可以使用更具可读性的@BrandonBertelsen代码
glm.nb(x ~ ., data = test[-c(1:3)])

关于在data.table中运行回归,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21364256/

10-12 17:33