Разница между категориальными переменными (факторами) и фиктивными переменными - PullRequest
0 голосов
/ 01 февраля 2019

Я проводил регрессию, используя категориальные переменные, и наткнулся на этот вопрос .Здесь пользователь хотел добавить столбец для каждого манекена.Это оставило меня в замешательстве, потому что я имел длинные данные со столбцом, включая все макеты, хранящиеся с использованием as.factor(), было эквивалентно фиктивным переменным.

Может ли кто-нибудь объяснить разницу между следующими двумя моделями линейной регрессии?

Линейная модель 1, где Месяц является фактором:

dt_long
          Sales Period Month
   1: 0.4898943      1    M1
   2: 0.3097716      1    M1
   3: 1.0574771      1    M1
   4: 0.5121627      1    M1
   5: 0.6650744      1    M1
  ---                       
8108: 0.5175480     24   M12
8109: 1.2867316     24   M12
8110: 0.6283875     24   M12
8111: 0.6287151     24   M12
8112: 0.4347708     24   M12

M1 <- lm(data = dt_long,
         fomrula = Sales ~ Period + factor(Month)

Линейная модель 2, где каждый месяцпеременная индикатора:

    dt_wide
          Sales Period M1 M2 M3 M4 M5 M6 M7 M8 M9 M10 M11 M12
   1: 0.4898943      1  1  0  0  0  0  0  0  0  0   0   0   0
   2: 0.3097716      1  1  0  0  0  0  0  0  0  0   0   0   0
   3: 1.0574771      1  1  0  0  0  0  0  0  0  0   0   0   0
   4: 0.5121627      1  1  0  0  0  0  0  0  0  0   0   0   0
   5: 0.6650744      1  1  0  0  0  0  0  0  0  0   0   0   0
  ---                                                        
8108: 0.5175480     24  0  0  0  0  0  0  0  0  0   0   0   1
8109: 1.2867316     24  0  0  0  0  0  0  0  0  0   0   0   1
8110: 0.6283875     24  0  0  0  0  0  0  0  0  0   0   0   1
8111: 0.6287151     24  0  0  0  0  0  0  0  0  0   0   0   1
8112: 0.4347708     24  0  0  0  0  0  0  0  0  0   0   0   1

M2 <- lm(data = data_wide,
         formula = Sales ~ Period + M1 + M2 + M3 + ... + M11 + M12

Судя по этому ранее заданному вопросу , обе модели кажутся абсолютно одинаковыми.Однако после запуска обеих моделей я заметил, что M1 возвращает 11 фиктивных оценщиков (поскольку M1 используется в качестве контрольного уровня), а M2 возвращает 12 манекенов.

Одна модель лучше другой?М1 более эффективен?Могу ли я установить опорный уровень в M1, чтобы сделать обе модели абсолютно эквивалентными?

1 Ответ

0 голосов
/ 01 февраля 2019

Определение модели, как в M1 - это всего лишь быстрый способ включения фиктивных переменных: если вы хотите вычислить эти коэффициенты регрессии вручную, очевидно, что они должны быть числовыми.

Теперь что-то, что возможноВы не заметили, что M2 означает, что у одного из манекенов должен быть коэффициент NA.Это потому, что вы вручную включили все из них и оставили перехват.Таким образом, мы имеем идеальную проблему коллинеарностиЕсли не включать один из макетов или добавить -1 для исключения постоянного члена, все будет в порядке.

Некоторые примеры.Пусть

y <- rnorm(100)
x0 <- rep(1:0, each = 50)
x1 <- rep(0:1, each = 50)
x <- factor(x1)

Таким образом x0 и x1 является разложением x.Тогда

## Too much
lm(y ~ x0 + x1)

# Call:
# lm(formula = y ~ x0 + x1)

# Coefficients:
# (Intercept)           x0           x1  
#    -0.15044      0.07561           NA  

## One way to fix it
lm(y ~ x0 + x1 - 1)

# Call:
# lm(formula = y ~ x0 + x1 - 1)

# Coefficients:
#       x0        x1  
# -0.07483  -0.15044  

## Another one
lm(y ~ x1)

# Call:
# lm(formula = y ~ x1)

# Coefficients:
# (Intercept)           x1  
#    -0.07483     -0.07561  

## The same results
lm(y ~ x)

# Call:
# lm(formula = y ~ x)

# Coefficients:
# (Intercept)           x1  
#    -0.07483     -0.07561  

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

...