Я использую 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 в конечном итоге приводит к принуждению путем добавления обратных тиков!).