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

#r #encoding #model.matrix

#r #кодирование #модель.матрица

Вопрос:

У меня есть фрейм данных, который выглядит следующим образом:

     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)
 

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

 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»?

Ответ №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)
 

Комментарии:

1. у меня это не сработало, я попробовал это следующим образом с вышеупомянутым тестом фрейма данных.model <- model.matrix(~обработка: timpoint, df, list(обработка = contr.sum, timpoint=contr.treatment)) df $treatment <- relevel(df $treatment, «C») test.model2 <- model.matrix(~ обработка: timpoint, df, list(обработка = contr.sum, timpoint= contr.treatment)) ссылка по-прежнему остается неизменной, связано ли это с contr.sum?

2. Что именно не сработало? Вы получали какие-либо сообщения об ошибках? Вы пробовали запускать точный код, который я опубликовал? Это должен быть самодостаточный, воспроизводимый пример. Возможно, добавьте , stringsAsFactors = FALSE в df data.frame, на случай, если ваша версия R используется stringsAsFactors = TRUE по умолчанию (я на R 4.0); это не должно иметь значения.

3. я не получил сообщение об ошибке, но вот как это должно выглядеть, когда вы запускаете код в моем примере, взаимодействие для T1: E, T2: E и T3: E устанавливается в качестве ссылки. Теперь я вижу, что когда я пытаюсь использовать ваш пример, в качестве ссылки задается только T1: C. что неверно для кодирования суммы