请查看伪造的数据集。
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/