2016-12-08 6 views
2

Я запускаю линейную регрессию по ряду атрибутов, включая два категориальных атрибута, B и F, и я не получаю значение коэффициента для каждого множителя уровня, который у меня есть.`lm` summary не отображает все уровни факторов

B имеет 9 уровней и F имеет 6 уровней. Когда я изначально запускал модель (с перехватами), я получил 8 коэффициентов для B и 5 для F, которые я понял как первый уровень каждого из них, включенных в перехват.

Я хочу, чтобы ранжировать уровни в B и F на основе их коэффициента, поэтому я добавил -1 после каждого фактора, чтобы зафиксировать перехватывать на 0, так что я мог бы получить коэффициенты для всех уровней.

Call: 
lm(formula = dependent ~ a + B-1 + c + d + e + F-1 + g + h, data = input) 

Coefficients: 
     Estimate Std. Error t value Pr(>|t|)  
a  2.082e+03 1.026e+02 20.302 < 2e-16 *** 
B1 -1.660e+04 9.747e+02 -17.027 < 2e-16 *** 
B2 -1.681e+04 9.379e+02 -17.920 < 2e-16 *** 
B3 -1.653e+04 9.254e+02 -17.858 < 2e-16 *** 
B4 -1.765e+04 9.697e+02 -18.202 < 2e-16 *** 
B5 -1.535e+04 1.388e+03 -11.059 < 2e-16 *** 
B6 -1.677e+04 9.891e+02 -16.954 < 2e-16 *** 
B7 -1.644e+04 9.694e+02 -16.961 < 2e-16 *** 
B8 -1.931e+04 9.899e+02 -19.512 < 2e-16 *** 
B9 -1.722e+04 9.071e+02 -18.980 < 2e-16 *** 
c -6.928e-01 6.977e-01 -0.993 0.321272  
d -3.288e-01 2.613e+00 -0.126 0.899933  
e -8.384e-01 1.171e+00 -0.716 0.474396  
F2 4.679e+02 2.176e+02 2.150 0.032146 * 
F3 7.753e+02 2.035e+02 3.810 0.000159 *** 
F4 1.885e+02 1.689e+02 1.116 0.265046  
F5 5.194e+02 2.264e+02 2.295 0.022246 * 
F6 1.365e+03 2.334e+02 5.848 9.94e-09 *** 
g  4.278e+00 7.350e+00 0.582 0.560847  
h  2.717e-02 5.100e-03 5.328 1.62e-07 *** 

Это работало в части, что приводит к отображению всех уровней B, однако до сих пор не отображается F1. Поскольку перехвата уже нет, я смущен, почему F1 не находится в линейной модели.

Переключение порядка вызова, так что + F - 1 предшествует + B - 1 результатов коэффициентов всех уровней F быть видимыми, но не B1.

Кто-нибудь знает либо как отобразить все уровни как B и F, или как оценить относительный вес F1 по сравнению с другими уровнями F с выходов у меня есть?

+0

Zheyuan Li производит очень ответ, чтобы просто сказать, что линейная регрессия - это своего рода ортогональная проекция вашей исходной функции на набор более простых функций, ваших переменных. Если две (или более) переменные одинаковы (например, константные функции), сохраняется только одна (или более) переменная. И кажется, что 'R' хранит только первое появление – clemlaflemme

ответ

5

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


Большинство людей знают, что это связано с «контрастах», но не все знают, зачем это нужно, и как понять его результат. Мы должны посмотреть на матрицу , чтобы полностью переварить это.

Предположим, нас интересует модель с двумя факторами: ~ f + g (числовые ковариаты не имеют значения, поэтому я не включаю ни один из них, ответ не появляется в матрице модели, поэтому также бросайте его). Рассмотрим следующий воспроизводимый пример:

set.seed(0) 

f <- sample(gl(3, 4, labels = letters[1:3])) 
# [1] c a a b b a c b c b a c 
#Levels: a b c 

g <- sample(gl(3, 4, labels = LETTERS[1:3])) 
# [1] A B A B C B C A C C A B 
#Levels: A B C 

Начнем с модели матрицы без каких-либо контрастов на всех:

X0 <- model.matrix(~ f + g, contrasts.arg = list(
        f = contr.treatment(n = 3, contrasts = FALSE), 
        g = contr.treatment(n = 3, contrasts = FALSE))) 

# (Intercept) f1 f2 f3 g1 g2 g3 
#1   1 0 0 1 1 0 0 
#2   1 1 0 0 0 1 0 
#3   1 1 0 0 1 0 0 
#4   1 0 1 0 0 1 0 
#5   1 0 1 0 0 0 1 
#6   1 1 0 0 0 1 0 
#7   1 0 0 1 0 0 1 
#8   1 0 1 0 1 0 0 
#9   1 0 0 1 0 0 1 
#10   1 0 1 0 0 0 1 
#11   1 1 0 0 1 0 0 
#12   1 0 0 1 0 1 0 

Примечание, мы имеем:

unname(rowSums(X0[, c("f1", "f2", "f3")])) 
# [1] 1 1 1 1 1 1 1 1 1 1 1 1 

unname(rowSums(X0[, c("g1", "g2", "g3")])) 
# [1] 1 1 1 1 1 1 1 1 1 1 1 1 

Так span{f1, f2, f3} = span{g1, g2, g3} = span{(Intercept)}. В этой полной спецификации 2 столбца не идентифицируются.X0 будет иметь столбец ранг 1 + 3 + 3 - 2 = 5:

qr(X0)$rank 
# [1] 5 

Таким образом, если мы вписываемся линейная модель с этим X0, 2 коэффициентами из 7 параметров будут NA:

y <- rnorm(12) ## random `y` as a response 
lm(y ~ X - 1) ## drop intercept as `X` has intercept already 

#X0(Intercept)   X0f1   X0f2   X0f3   X0g1 
#  0.32118  0.05039  -0.22184    NA  -0.92868 
#   X0g2   X0g3 
#  -0.48809    NA 

Что это действительно означает, состоит в том, что мы должны добавить 2 линейных ограничения на 7 параметров, чтобы получить модель полного ранга. На самом деле не имеет значения, каковы эти 2 ограничения, но должно быть 2 линейно независимых ограничения. Например, мы можем сделать одно из следующих:

  • отбрасывайте 2 колонки от X0;
  • добавить две сумму к нулю сдерживает от параметров, как мы требуем, коэффициентов для f1, f2 и f3 суммы до 0, и то же самое для g1, g2 и g3.
  • использование регуляризации, например, добавление ограничения на гребень до f и g.

Обратите внимание, эти три способа в конечном итоге с тремя различными решениями:

  • контрасты;
  • ограниченные наименьшие квадраты;
  • линейные смешанные модели или штрафы наименьших квадратов.

Первые два все еще находятся в рамках моделирования с фиксированным эффектом. Под «контрастами» мы уменьшаем количество параметров до тех пор, пока не получим матрицу полной ранга; в то время как другие два не уменьшают количество параметров, а эффективно уменьшают эффективную степень свободы.


Теперь вы, безусловно, после «контрастов». Итак, помните, нам нужно сбросить 2 столбца. Они могут быть

  • один столбец из f и один столбец из g, давая модели ~ f + g, с f и g контрастируют;
  • перехват и один столбец либо f, либо g, что дает возможность модели ~ f + g - 1.

Теперь вам должно быть ясно, что в рамках столбцов, отбрасывающих столбцы, вы не сможете получить то, что хотите, потому что вы ожидаете сбросить только 1 столбец. Полученная модельная матрица будет по-прежнему недостаточна для рангов.

Если вы действительно хотите иметь все коэффициенты, используйте ограниченные наименьшие квадраты или оштрафованные регрессионные/линейные смешанные модели.


Теперь, когда у нас есть взаимодействие факторов, все сложнее, но идея остается прежней. Но, учитывая, что мой ответ уже достаточно длинный, я не хочу продолжать.

+0

Спасибо, Чжэюань за такое подробное объяснение! Теперь я понимаю, почему я не могу уйти, просто удалив один столбец (перехват), используя этот метод. Я рассмотрю варианты, которые вы предложили найти, наиболее подходящие для моих данных :) –