2016-02-11 8 views
0

Меня интересует получение установленных значений в заданных местах из модели clogit. Это включает ответ уровня населения и доверительные интервалы вокруг него. Например, у меня есть данные, что выглядит примерно так:Как получить установленные значения от модели clogit

set.seed(1) 
data <- data.frame(Used = rep(c(1,0,0,0),1250), 
       Open = round(runif(5000,0,50),0), 
       Activity = rep(sample(runif(24,.5,1.75),1250, replace=T), each=4), 
       Strata = rep(1:1250,each=4)) 

В рамках модели Clogit, активность не меняется в пределах слоев, таким образом, нет никакой активности основного эффекта.

mod <- clogit(Used ~ Open + I(Open*Activity) + strata(Strata),data=data) 

То, что я хочу сделать, это построить NewData кадр, в котором я могу в конечном итоге сюжет маргинальные подогнанные значения в определенных местах открытого похожих на NewData дизайн в традиционной GLM модели: например,

newdata <- data.frame(Open = seq(0,50,1), 
        Activity = rep(max(data$Activity),51)) 

Однако, когда я пытаюсь запустить функцию предсказать на clogit, я получаю следующее сообщение об ошибке:

fit<-predict(mod,newdata=newdata,type = "expected") 

ошибка в Surv (Rep (1, 5000L), б): объект 'б' не найден

Я понимаю, это связано с тем, что clogit в r выполняется через Cox.ph, и, таким образом, функция прогнозирования пытается предсказать относительные риски между парами субъектов внутри одной и той же страты (в данном случае = Используется).

Мой вопрос, однако, если есть способ обойти это. Это легко сделать в Stata (с использованием команды полей) и вручную в Excel, однако я бы хотел автоматизировать в R, поскольку там запрограммировано все остальное. Я также создал это вручную в R (пример кода ниже), однако я продолжаю заканчивать то, что кажется неправильным CI в моих реальных данных, поэтому я хотел бы полагаться на функцию прогнозирования, если это возможно. Мой код для ручного предсказания:

coef<-data.frame(coef = summary(mod)$coefficients[,1], 
      se= summary(mod)$coefficients[,3]) 
coef$se <-summary(mod)$coefficients[,4] 
coef$UpCI <- coef[,1] + (coef[,2]*2) ### this could be *1.96 but using 2 for simplicity 
coef$LowCI <-coef[,1] - (coef[,2]*2) ### this could be *1.96 but using 2 for simplicity 

fitted<-data.frame(Open= seq(0,50,2), 
       Activity=rep(max(data$Activity),26)) 

fitted$Marginal <- exp(coef[1,1]*fitted$Open + 
        coef[2,1]*fitted$Open*fitted$Activity)/ 
       (1+exp(coef[1,1]*fitted$Open + 
        coef[2,1]*fitted$Open*fitted$Activity)) 

fitted$UpCI <- exp(coef[1,3]*fitted$Open + 
        coef[2,3]*fitted$Open*fitted$Activity)/ 
      (1+exp(coef[1,3]*fitted$Open + 
        coef[2,3]*fitted$Open*fitted$Activity)) 

fitted$LowCI <- exp(coef[1,4]*fitted$Open + 
        coef[2,4]*fitted$Open*fitted$Activity)/ 
      (1+exp(coef[1,4]*fitted$Open + 
        coef[2,4]*fitted$Open*fitted$Activity)) 

Мой конечный продукт будет идеально выглядеть примерно так, но продукт функции прогнозирования ....

Example output of fitted values.

+0

Это то, что автор, Т. Ламли, должен был сказать в 2006 году в rhelp, когда его попросили использовать функцию 'preview.clogit':« Я не думаю, что это будет возможно. Пункт условного логистический регрессии, что вероятности зависят от параметров пластовых , которые не могут быть оценены точно. условная вероятность того, удаляет этих параметры, но полученная модель не содержит достаточно информации для оценки вероятности. \t -Томаса» –

ответ

1

Очевидно Терри Therneau менее пуристом по вопросу о прогнозах от моделей clogit: http://markmail.org/search/?q=list%3Aorg.r-project.r-help+predict+clogit#query:list%3Aorg.r-project.r-help%20predict%20clogit%20from%3A%22Therneau%2C%20Terry%20M.%2C%20Ph.D.%22+page:1+mid:tsbl3cbnxywkafv6+state:results

Вот модификация вашего кода, которая генерирует 51 прогноз. Нужно было положить в столбец Strata.

newdata <- data.frame(Open = seq(0,50,1), 
        Activity = rep(max(data$Activity),51), Strata=1) 

risk <- predict(mod,newdata=newdata,type = "risk") 

> risk/(risk+1) 
     1   2   3   4   5   6   7 
0.5194350 0.5190029 0.5185707 0.5181385 0.5177063 0.5172741 0.5168418 
     8   9  10  11  12  13  14 
0.5164096 0.5159773 0.5155449 0.5151126 0.5146802 0.5142478 0.5138154 
     15  16  17  18  19  20  21 
0.5133829 0.5129505 0.5125180 0.5120855 0.5116530 0.5112205 0.5107879 
     22  23  24  25  26  27  28 
0.5103553 0.5099228 0.5094902 0.5090575 0.5086249 0.5081923 0.5077596 
     29  30  31  32  33  34  35 
0.5073270 0.5068943 0.5064616 0.5060289 0.5055962 0.5051635 0.5047308 
     36  37  38  39  40  41  42 
0.5042981 0.5038653 0.5034326 0.5029999 0.5025671 0.5021344 0.5017016 
     43  44  45  46  47  48  49 
0.5012689 0.5008361 0.5004033 0.4999706 0.4995378 0.4991051 0.4986723 
     50  51 
0.4982396 0.4978068 

{Предупреждение}: Это на самом деле довольно трудно для простых смертных, чтобы определить, какой из R-богов верить в это. Я научился так много R и статистических данных каждого из этих экспертов. Я подозреваю, что есть вопросы статистической озабоченности или интерпретации, которые я действительно не понимаю.

 Смежные вопросы

  • Нет связанных вопросов^_^