2014-09-08 2 views
1

Я хотел бы оставить некоторые термины взаимодействия из формулы R. Моя ситуация заключается в том, что у меня есть одна фактор-переменная с большим количеством уровней (назовите это A, и она принимает значения от 1 до 50) и другую непрерывную переменную, с которой я бы хотел ее взаимодействовать (назовите это B).Как удалить некоторые термины взаимодействия из формулы R

A*B 

создает термины A1: B, A2: B, A3: B, ... Я хочу простой способ избавиться от первого A1: термин B.

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

Редактировать: Хотя я не пытаюсь использовать lm, если бы я мог сделать следующее, то я думаю, что это решит мою проблему.

dd<-data.frame(A=sample(letters[1:10], 100, replace=T),B = runif(100),z=rexp(100)) 

#need to drop B term below 
reg1 <- lm(z~A*B, dd) 

#or need to drop Aa:B term here 
reg2 <- lm(z~A*B - B, dd) 

#but this doesn't work (I realize why, but this is an 
#example of what I would like to have happen) 
reg3 <- lm(z~A*B - B - Aa:B, dd) 
+0

Я не уверен, что понимаю. Когда вы делаете 'dd <-data.frame (A = образец (буквы [1:10], 100, replace = T), B = runif (100), z = rexp (100)); lm (z ~ A * B, dd) 'вы увидите, что нет оценки для' Aa' или 'Aa: B', потому что они не различаются, если у вас есть термин перехвата. Так вы соответствуете модели, где это не автоматически отбрасывается? Здесь будет полезен [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). – MrFlick

+2

Итак, что вы хотите сделать с этими наблюдениями? Должны ли они стать ссылочной категорией и поглощаться перехватом? – bstockton

+0

Вместо использования lm, я пытаюсь оценить мультиномиальную логит-модель, используя пакет mlogit. В принципе, вы должны сделать некоторые идентификационные предположения для mlogit (1 дополнительный коэффициент должен быть установлен равным 0). В отличие от lm, где, если у вас есть идеальная коллинеарность, она выведет одну из переменных для вас/сообщит коэффициент NA, mlogit не сходится. Надеюсь, это поможет, но, во всяком случае, мне просто нужно отказаться от одного из условий взаимодействия. – bmciv

ответ

1

Я думаю, вы должны иметь возможность работать с контрастами, чтобы это произошло. Здесь мы создаем наш собственный контраст, который настраивает поведение по умолчанию контрастности. Пропустить первые две переменные.

contr.skip2 <- function (n, contrasts = TRUE, sparse = FALSE) 
{ 
    contr <- contr.treatment(n, 1, contrasts, sparse) 
    contr[2, ] <- 0 
    contr[, -1] 
} 

, а затем мы можем подобрать модель и пройти по нашему специальному контрасту

lm(z~A*B, dd, contrasts=list(A="contr.skip2")) 

# Call: 
# lm(formula = z ~ A * B, data = dd, contrasts = list(A = "contr.skip2")) 
# 
# Coefficients: 
# (Intercept)   Ac   Ad   Ae   Af   Ag   Ah 
#  1.09981  -0.14541  -0.86334  -0.18478  -0.77302  0.19681  0.23845 
#   Ai   Aj   B   Ac:B   Ad:B   Ae:B   Af:B 
# -0.74962  -0.49014  0.09729  0.14705  1.09606  0.14706  0.88919 
#  Ag:B   Ah:B   Ai:B   Aj:B 
# -0.62796  -0.70155  1.60253  -0.20564 

и как вы можете видеть, что мы больше не Ab условия в модели.

+0

Пришлось использовать это, чтобы добавить переменные в df, потому что я не мог использовать контрасты непосредственно в mlogit, но эта идея работала для меня. Спасибо. – bmciv

+0

Я был бы удивлен, если бы mlogit не вызывал model.frame до регрессии. Вы также можете напрямую сопоставлять контрасты с факторами. Поскольку вы отправили пример lm(), это то, что я тестировал. В следующий раз, вероятно, было бы лучше создать воспроизводимый пример ближе к вашей реальной ситуации. – MrFlick

Смежные вопросы