Предположим, у нас есть следующая модель:
set.seed(1)
d <- data.frame(a = gl(4, 1, 64), a4 = sample(4, 64, TRUE),
x = rnorm(64), y = rnorm(64))
l <- lm(y ~ a4 + a * x, d)
За взаимодействие x:a
получу 3 коэффициента x:a2, x:a3, x:a4
. Теперь я хочу определить, какие коэффициенты являются соответствующими основными эффектами, связанными с этим взаимодействием, то есть x, a2, a3
и a4
.
Моя идея состояла в том, чтобы использовать strsplit
для взаимодействий и получить соответствующие основные эффекты:
(atoms <- strsplit(names(coef(l))[7:9], ":"))
# [[1]]
# [1] "a2" "x"
# [[2]]
# [1] "a3" "x"
# [[3]]
# [1] "a4" "x"
Все идет нормально. Но теперь я хотел бы получить значение соответствующего основного эффекта. Хотя это прямолинейно для x, a2, a3
(поскольку это уникальные имена), я изо всех сил пытаюсь понять, как я могу сделать это с a4
:
lapply(atoms, function(.) coef(l)[.])
# [[1]]
# a2 x
# 0.3630732 0.2136751
# [[2]]
# a3 x
# 0.04153299 0.21367510
# [[3]]
# a4 x
# 0.04765737 0.21367510
Результат для a4
неверен, потому что это основной эффект, связанный с переменной a4
, а не с фиктивным закодированным фактором 4
фактора a
.
Итак, модель, которую я показывал, является допустимой моделью в R, но имена коэффициентов неоднозначны. Итак, есть ли другой способ сделать правильное сопоставление между коэффициентами взаимодействия и соответствующими основными эффектами?
a4
заранее?names(d)[which(names(d)=="a4")] <- "a4_"
. - person lukeA   schedule 23.03.2016a4
из всехa4
:lapply(atoms, function(x) coef(l)[!duplicated(names(coef(l)), fromLast = T)][x])
. - person lukeA   schedule 23.03.2016