Как закодировать категориальную переменную с тремя уровнями для Кокса с моделью случайных эффектов? - PullRequest
1 голос
/ 13 июля 2020

Я хочу оценить параметры регрессии модели случайных эффектов Кокса. Допустим, у меня есть категориальная переменная с двумя уровнями, например пол. Тогда кодировать переменную просто: например, 0 для мужчин и 1 для женщин. Интерпретация коэффициента регрессии, связанного с этой переменной, проста.

Теперь предположим, что у меня есть категориальная переменная с тремя уровнями. Если я просто закодирую переменную 0,1,2 для трех уровней (A, B и C), оценка соответствующего коэффициента регрессии не будет тем, что я ищу. Если я хочу оценить риски, связанные с каждым «уровнем» по отношению к другим уровням, как мне закодировать переменную?

Что я сделал до сих пор:

Я определяю три переменные. Я определяю одну переменную, где я кодирую уровень A как 1, а остальные (уровни B и C) как 0. Я определяю другую переменную, где я кодирую уровень B как 1, а остальные (уровни A и C) как 0. Наконец, я определяю переменную, в которой я кодирую уровень C как 1, а остальные (уровни A и B) как 0.

Затем я оцениваю три параметра регрессии, связанных с переменными.

Для ясности: я не хочу использовать какие-либо пакеты, такие как coxph, coxme, Survival и т. Д. c.

Есть ли более простой способ сделать это?

1 Ответ

0 голосов
/ 13 июля 2020

Ваше описание (одна предикторная переменная - все единицы, две другие предикторные переменные в качестве индикаторных переменных для групп B и C) в точности повторяет стандартные контрасты лечения , которые использует R.

Если вы хотите построить матрицу модели с контрастами обработки для одного фактора f (внутри фрейма данных d), тогда model.matrix(~f, data=d) будет работать

d <- data.frame(f=factor(c("A","B","B","C","A")))
model.matrix(~f, data=d)

Результаты:

  (Intercept) fB fC
1           1  0  0
2           1  1  0
3           1  1  0
4           1  0  1
5           1  0  0
attr(,"assign")
[1] 0 1 1
attr(,"contrasts")
attr(,"contrasts")$f
[1] "contr.treatment"

Вы можете использовать другие контрасты, если хотите; они изменят оценки параметров (и интерпретацию!) для ваших индивидуальных переменных, но не общую подгонку модели. например,

model.matrix(~f , data=d, contrasts=list(f=contr.sum))
...