#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. что неверно для кодирования суммы