2017-11-15 29 views
0

私は一連のCox回帰モデルを構築し、それらのモデルから新しいデータを予測しています。私はいくつかのケースで予想されるイベントの数を得ることができますが、他のイベントは期待できません。R:newdata上のcoxphオブジェクトのリストからの予測

たとえば、coxphコールの式が書き出されると、予測が計算されます。しかし、数式がオブジェクトに格納され、そのオブジェクトが呼び出されると、エラーが発生します。私はまた、私がdplyr piped mutate関数の中でそれらを作成しようとすると予測を得ることができません(私が書いている関数のために、これは予測が適切に働く最も理想的な場所です)。

ご協力いただきありがとうございます。

ありがとう、

ダニエル

require(survival) 
require(tidyverse) 
n = 15 

# creating tibble of tibbles. 
results = 
    tibble(id = 1:n) %>% 
    group_by(id) %>% 
    do(
    # creating tibble to evaluate model on 
    tbl0 = tibble(time = runif(n), x = runif(n)), 
    # creating tibble to build model on 
    tbl = tibble(time = runif(n), x = runif(n)) 
) %>% 
    ungroup 

#it works when the formula is added the the coxph function already written out 
    map2(results$tbl, results$tbl0, ~ predict(coxph(Surv(time) ~ x, data = .x), newdata = .y, type = "expected")) 

#but if the formula is previously defined, I get an error 
    f = as.formula(Surv(time) ~ x) 
    map2(results$tbl, results$tbl0, ~ predict(coxph(f, data = .x), newdata = .y, type = "expected")) 

# I also get an error when I try to include in a dplyr pipe with mutate 
    results %>% 
    mutate(
    pred = map2(tbl, tbl0, ~ predict(coxph(f, data = .x), newdata = .y, type = "expected")) 
    ) 

答えて

0

私は(友人の助けを借りて)それを考え出しました。数式を文字列として定義し、関数呼び出し内で数式を強制すると、すべてがスムーズに実行されます。なぜそれが動作するのかわかりませんが、それはあります!

#define the formula as a string, and call it in the function with as.formula(.) 
    f = "Surv(time) ~ x" 
    map2(results$tbl, results$tbl0, ~ predict(coxph(as.formula(f), data = .x), newdata = .y, type = "expected")) 

#also works in a dplyr pipe with mutate 
    results %>% 
    mutate(
    pred = map2(tbl, tbl0, ~ predict(coxph(as.formula(f), data = .x), newdata = .y, type = "expected")) 
    ) 
関連する問題