изменение базы/ссылки для модели матрицы дизайна.matrix

У меня есть кадр данных, который выглядит так:

    df <- data.frame(id= rep(seq(1:125),3),
  timpoint= c(rep("T1", 125), rep("T2", 125), rep("T3", 125)),
                 treatment=c(rep("A",25),rep("B",25),rep("C",25),rep("D",25),rep("E",25)))
interaction.col <- paste(df$timpoint, df$treatment, sep = "_")  

df <- cbind(df, interaction.col)

и я создал матрицу дизайна следующим образом:

model.matrix(~treatment:timpoint, df, list(treatment = contr.sum, timpoint=contr.treatment))

Для эффекта обработки: временной точки в качестве эталона используется моя последняя группа. Я хотел бы изменить это, например, на группу C, и по какой-то причине relevel не работает.

Я также попытался установить базу:

model.matrix(~treatment:timpoint, df, list(treatment = contr.sum, timpoint=contr.treatment), base="C")

Как я могу изменить основу для временной точки на T1 и для эффекта взаимодействия (лечение: временная точка), например, на группу C?


person Hedayat    schedule 27.12.2020    source источник


Ответы (1)


Если вы закодируете свою переменную лечения как фактор, вы можете изменить уровень фактора, а затем повторно запустить матрицу модели:

df <- data.frame(
    id = rep(1:125, 3),
    timpoint = paste0("T", rep(1:3, each=125)),
    treatment = gl(5, 25, labels = LETTERS[1:5]))
interaction.col <- paste(df$timpoint, df$treatment, sep = "_")  
df <- cbind(df, interaction.col)
model.matrix(~treatment:timpoint, df)
df$treatment <- relevel(df$treatment, "C")
model.matrix(~treatment:timpoint, df)
person user12728748    schedule 28.12.2020
comment
у меня это не сработало, я попробовал это следующим образом с вышеупомянутым фреймом данных test.model ‹- model.matrix(~treatment:timpoint, df, list(treatment = contr.sum, timpoint=contr.treatment)) df$treatment ‹- relevel(df$treatment, C) test.model2 ‹- model.matrix(~treatment:timpoint, df, list(treatment = contr.sum, timpoint=contr.treatment)) ссылка остается прежней, это из-за контр.суммы? - person Hedayat; 29.12.2020
comment
Что именно не получилось? Вы получали сообщения об ошибках? Вы пытались запустить точный код, который я разместил? Это должен быть самостоятельный, воспроизводимый пример. Возможно, добавьте , stringsAsFactors = FALSE в df data.frame, если ваша версия R использует stringsAsFactors = TRUE по умолчанию (у меня R 4.0); однако это не должно иметь значения. - person user12728748; 29.12.2020
comment
я не получил ошибку, но вот как это должно выглядеть, когда вы запускаете код в моем примере, взаимодействие для T1: E, T2: E и T3: E устанавливается в качестве ссылки. Теперь я вижу, что когда я пробую ваш пример, в качестве эталона устанавливается только T1: C. что неверно для кодирования суммы - person Hedayat; 29.12.2020