Почему предикторы не соответствуют модели sin с именем переменной?

#r #regression

#r #регрессия

Вопрос:

 train <- read.csv("train.csv", header=T)

> str(train)
'data.frame':   188318 obs. of  132 variables:
 $ id    : int  1 2 5 10 11 13 14 20 23 24 ...
 $ cat1  : Factor w/ 2 levels "A","B": 1 1 1 2 1 1 1 1 1 1 ...
 $ cat2  : Factor w/ 2 levels "A","B": 2 2 2 2 2 2 1 2 2 2 ...
 $ cat3  : Factor w/ 2 levels "A","B": 1 1 1 1 1 1 1 1 2 1 ...
 $ cat4  : Factor w/ 2 levels "A","B": 2 1 1 2 2 1 1 2 2 1 ...

predictors <- names(subset(train, select = -c(id,loss)))
fit <- lm(paste("loss ~ ",paste(predictors, collapse=" "),sep=""), data=train)
  

Есть 966 коэффициентов, когда я смотрю на сводку соответствия? Я ожидал, что там будет только то же самое, что и длина «предикторов» минус 2 (идентификатор и потеря).

 > variable.names(fit)
  [1] "(Intercept)" "cat1B"       "cat2B"       "cat3B"       "cat4B"       "cat5B"       "cat6B"      
  [8] "cat7B"       "cat8B"       "cat9B"       "cat10B"      "cat11B"      "cat12B"      "cat13B"     
 [15] "cat14B"      "cat15B"      "cat16B"      "cat17B"      "cat18B"      "cat19B"      "cat20B"     
 [22] "cat21B"      "cat22B"      "cat23B"      "cat24B"      "cat25B"      "cat26B"      "cat27B"     
 [29] "cat28B"      "cat29B"      "cat30B"      "cat31B"      "cat32B"      "cat33B"      "cat34B"    
  

Затем дальше вниз (не хочу вставлять их все)

 "cat110AK"    "cat110AL"    "cat110AM"    "cat110AN"    "cat110AO"    "cat110AP"    "cat110AR"   
[393] "cat110AS"    "cat110AT"    "cat110AU"    "cat110AV"    "cat110AW"    "cat110AX"    "cat110AY"   
[400] "cat110B"     "cat110BA"    "cat110BB"    "cat110BC"    "cat110BD"    "cat110BE"    "cat110BF"   
[407] "cat110BG"    "cat110BI"    "cat110BJ"    "cat110BK"    "cat110BL"    "cat110BM"    "cat110BN"  
  

Что такое «B» и «AT» и т. Д., Которые Добавляются к переменным? Почему их больше 130?

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

1. Потому что они являются фиктивными переменными, т.Е.. новая переменная создается для каждого уровня каждого столбца факторов, который у вас есть.

2. Ох. Я понял. Таким образом, r сведет каждую функцию к двоичному 1 или 0 для каждого уровня в коэффициенте? Если вы создаете «базовую» модель первого выстрела для изучения, построения и расширения, нормально ли позволять R делать это за вас?

3. это стандартное поведение для lm , однако вы также можете сделать это вручную с model.matrix помощью или dummyVars .