R glm为交互切换系数名称

R glm为交互切换系数名称,r,formula,glm,interaction,binomial-coefficients,R,Formula,Glm,Interaction,Binomial Coefficients,我使用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

我使用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 

之后不更改系数的名称。具体来说,我希望系数的名称与我在
表单
对象中使用的名称相同(不需要像上面的代码那样进行切换)。我能告诉
glm()
不要切换交互的名称吗?

答案是否定的,没有很多重写函数。交互项标签的顺序由
terms.formula
函数决定,它本身由埋在C代码深处的
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" 

dat我有两种可能的解决方法供您选择

一种解决方法是观察到交互标签中的术语是根据它们在公式中的出现顺序排序的。在您的示例中,顺序是
GAMMA.1
VAR1
GAMMA.2
。您可以使用不同的顺序重写公式,以便公式和系数名称匹配:

form <- p1 ~ VAR1:GAMMA.1 + VAR1:GAMMA.2
mod <- glm(formula=form, data=dat, family=binomial)
coefficients(mod)

# (Intercept) VAR1:GAMMA.1 VAR1:GAMMA.2 
#   1.7974974   -0.2563667   -0.2181079 
表单
form <- p1 ~ VAR1:GAMMA.1 + VAR1:GAMMA.2
mod <- glm(formula=form, data=dat, family=binomial)
coefficients(mod)

# (Intercept) VAR1:GAMMA.1 VAR1:GAMMA.2 
#   1.7974974   -0.2563667   -0.2181079 
rhs_terms <- c("(Intercept)",as.character(form[[3]][2:length(form[[3]])]))
(coef <- setNames(coefficients(mod), rhs_terms))

# (Intercept) GAMMA.1:VAR1 GAMMA.2:VAR1 
#   1.7974974   -0.2563667   -0.2181079