如何防止glm()函数向某些变量名添加反引号?

时间:2019-05-09 16:00:22

标签: r data.table glm

我正在使用glm()创建一些模型。我的输入数据表中的变量的名称类似“ day”和“ day ^ 2”。 glm()生成的模型使用多项式项对任何变量进行反引号处理,从而限制了下游工作流的各个组成部分。

library(data.table)

# Generate some sample data
covariates <- data.table('day' = 1:10,
                         'day^2' = (1:10)^2)
theta <- sample(x = 0:1, size = 10, replace = TRUE)

# Produce a model from glm()
mod <- glm(formula = theta ~ .,
           data = covariates,
           family = 'binomial')

我希望能够检查模型系数并看到“ day”和“ day ^ 2”,但是我看到的是“ day”和“`day ^ 2`”:

# Check the coefficient names output from glm()
names(mod$coefficients)
# [1] "(Intercept)" "day"         "`day^2`"   

# Check the colnames(covariates) to verify we did not put in back-ticks
colnames(covariates)
# [1] "day"   "day^2"

# Eliminate the "(Intercept)" term from mods names,
# then compare the outcome to the colnames of covariates
# to verify that we are not imagining the back-ticks
names(mod$coefficients[-1]) == colnames(covariates)
# [1]  TRUE FALSE

我不走运吗? glm()只是不尊重我的多项式变量名吗?

编辑后添加: 好吧,data.table在我的工作流程中根深蒂固,以至于我什至都没有考虑过使用data.frame进行尝试,但这只是我想到的。这是data.frames发生的情况:

# Generate some sample data using a traditional data.frame instead of data.table
covariates <- data.frame('day' = 1:10,
                         'day^2' = (1:10)^2)

# Check the column names; data.frame coerces '^' to '.': 
colnames(covariates)
# [1] "day"   "day.2"

因此,在这种情况下,考虑到data.table允许我的多项式变量名称具有更大的灵活性,因此data.table可能与glm()不透水兼容,而data.frame会强制转换为'。 ' (而最后一个glm最终会通过添加反引号来强制转换!)。

0 个答案:

没有答案