Giu*_*ppe 5 interaction r formula binomial-coefficients glm
我使用R代码:
dat<-data.frame(p1=c(0,1,1,0,0), GAMMA.1=c(1,2,3,4,3), VAR1=c(2,2,1,3,4), GAMMA.2=c(1,1,3,4,1))
form <- p1 ~ GAMMA.1:VAR1 + GAMMA.2:VAR1
mod <- glm(formula=form, data=dat, family=binomial)
(coef <- coefficients(mod))
# (Intercept) GAMMA.1:VAR1 VAR1:GAMMA.2
# 1.7974974 -0.2563667 -0.2181079
Run Code Online (Sandbox Code Playgroud)
coef正如我们所看到的,交互的名称的GAMMA.2:VAR1顺序与form(我们VAR1:GAMMA.2改为)的顺序不同。由于多种原因,我需要输出
# (Intercept) GAMMA.1:VAR1 GAMMA.2:VAR1
# 1.7974974 -0.2563667 -0.2181079
Run Code Online (Sandbox Code Playgroud)
之后无需更改系数的名称。具体来说,我希望系数的名称与我在form对象中使用的名称相同(无需像上面的代码中那样进行切换)。我可以告诉glm()不要切换交互的名称吗?
答案是否定的,不是没有大量的重写功能。交互项的标签顺序由函数决定,而函数本身又由埋藏在 C 代码深处的函数terms.formula决定。termsform您无法传递任何参数来termsform实现您想要的行为(尽管keep.order看起来很有希望,但它不会做您想要的事情)。
您必须重写该terms.formula函数以在输出后“交换回”名称termsform,然后terms.formula用您的修补版本覆盖该函数,但您确定要这样做吗?之后更改系数的名称会容易得多。
您还可以terms.formula先发制人地使用,并确定如何对公式重新排序,使用然后创建映射向量。
dat<-data.frame(p1=c(0,1,1,0,0), GAMMA.1=c(1,2,3,4,3), VAR1=c(2,2,1,3,4), GAMMA.2=c(1,1,3,4,1))
form <- p1 ~ GAMMA.1:VAR1 + GAMMA.2:VAR1
new.names<-labels(terms(form,data=dat,keep.order=TRUE))
names(new.names)<-as.character(form[[3]][-1])
new.names
# GAMMA.1:VAR1 GAMMA.2:VAR1
# "GAMMA.1:VAR1" "VAR1:GAMMA.2"
Run Code Online (Sandbox Code Playgroud)
如果以后有需要,您可以使用该向量来映射名称。