Извлечь корень фиктивной переменной в сводке соответствия модели

#r #regression #dummy-variable

#r #регрессия #фиктивная переменная

Вопрос:

В следующем примере gender кодируется как фиктивные переменные, соответствующие категориям.

 fit <- lm(mass ~ height   gender, data=dplyr::starwars)
summary(fit)

# Call:
#   lm(formula = mass ~ height   gender, data = dplyr::starwars)
# 
# Residuals:
#   Min      1Q  Median      3Q     Max 
# -41.908  -6.536  -1.585   1.302  55.481 
# 
# Coefficients:
#   Estimate Std. Error t value Pr(>|t|)    
# (Intercept)          -46.69901   12.67896  -3.683 0.000557 ***
#   height                 0.59177    0.06784   8.723  1.1e-11 ***
#   genderhermaphrodite 1301.13951   17.37871  74.870  < 2e-16 ***
#   gendermale            22.39565    5.82763   3.843 0.000338 ***
#   gendernone            68.34530   17.49287   3.907 0.000276 ***
#   ---
#   Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# 
# Residual standard error: 16.57 on 51 degrees of freedom
# (31 observations deleted due to missingness)
# Multiple R-squared:  0.9915,  Adjusted R-squared:  0.9909 
# F-statistic:  1496 on 4 and 51 DF,  p-value: < 2.2e-16
  

Есть ли способ извлечь корень имени фиктивной переменной? Например, для gendernone , gendermale и genderhermaphrodite корнем будет gender , соответствующий исходному имени столбца в dplyr::starwars данных.

Комментарии:

1. Попробуйте attr(fit$terms, "term.labels") , это вернет символьный вектор всех регрессоров, используемых в формуле.

Ответ №1:

Получите имена переменных из формулы и проверьте, какое из них соответствует входным данным:

 input <- c("gendermale", "height")

v <- all.vars(formula(fit))
v[sapply(input, function(x) which(pmatch(v, x) == 1))]
## [1] "gender" "height"