Как я могу запретить функции glm () добавлять обратные метки в некоторые из моих имен переменных? - PullRequest
3 голосов
/ 09 мая 2019

Я использую glm () для создания некоторых моделей.Переменные в моем входном файле data.table имеют такие имена, как «день» и «день ^ 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')

Я хочу иметь возможность проверить коэффициенты модели и увидеть «день» и «день ^ 2», но вместо этого я вижу «день» и «день ^ 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 в этом случае не является водонепроницаемым с glm (), учитывая, что data.table обеспечивает гораздо большую гибкость смои имена полиномиальных переменных, которые data.frame привел бы к '.'(и какой GLM в конечном итоге приводит к принуждению путем добавления обратных тиков!).

...