# k+ h0 ^( F. d6 k' L" W$ k# 建立2个cox模型& q* a" I, n& t2 p* }( ~
mstd <- coxph(Surv(time,status) ~ age + bili + albumin, data = dat, x=TRUE)/ x" n7 d' d& Z. u' ^
mnew <- coxph(Surv(time,status) ~ age + bili + albumin + protime, data = dat, x=TRUE). P% t+ ^- s0 V7 X+ G, O, R
' i0 T0 f! y0 Q: k) K" a! s8 [# 计算在2000天的模型预测概率,这一步不要也行,看你使用哪些参数 1 @ g* g) j3 t: W1 T" T4 Hp.std <- get.risk.coxph(mstd, t0=2000); K$ b/ E3 { ]* t' _
p.new <- get.risk.coxph(mnew, t0=2000) , E, I: k+ F( R2 M1% g: n: f& v0 e+ w2 X
计算NRI:! i0 h# G& g& |; y Q& } H% I
' O, j4 @" ]" Y q" V
nricens(mdl.std= mstd, mdl.new = mnew, % e9 q; o3 e0 B! r6 M) L
t0 = 2000, ! f2 h8 ^' R! O. N/ }, y- p; Y% Y
cut = c(0.3, 0.7), n* P0 Q& O6 [ u niter = 1000, # a, K, g$ V( l- W updown = 'category')9 h* ^4 p8 L$ D! p! {- m
$ c* K5 ~0 E5 r6 \- }. O+ b, K
UP and DOWN calculation:# F+ ~3 r/ M- Z
#of total, case, and control subjects at t0: 312 88 1447 i2 ?" q+ P* k( S8 K* n
4 ~% @$ n8 F& ^) R% W( R& h& V
Reclassification Table for all subjects: 4 V( G- R/ h x2 }' {' d$ `( I/ ~2 e* | New7 V' w3 T9 f6 p( @1 L1 w t6 L, E/ @5 G: C
Standard < 0.3 < 0.7 >= 0.7, u/ W/ B2 h h. S+ Y5 X$ a
< 0.3 202 7 0 1 R' I. ?5 I- ~6 D' h8 B" ~; U. \ < 0.7 13 53 6% S4 X' Z! y) ~$ q6 X( Z
>= 0.7 0 0 31 : q ?2 ]7 V' ?$ q 8 P7 R3 G6 P: y) v: S8 W Reclassification Table for case:9 k' S6 ]$ ? K' T
New ) a4 r, _& i0 o! a2 c/ a8 i7 M, V* SStandard < 0.3 < 0.7 >= 0.7- o/ E: v- J, L8 ]0 d
< 0.3 19 3 04 N' y m8 V' u0 {' b9 s
< 0.7 3 32 48 @5 R! ^, Q3 q
>= 0.7 0 0 27 3 h& Q% y/ i# f" M/ E8 I' z. a. N7 ]/ v0 s
Reclassification Table for control: 6 d M" B4 Y2 T3 B+ M" h! [ New3 |* l4 h3 a/ b! \4 g: E7 d
Standard < 0.3 < 0.7 >= 0.7 d! s. m3 S3 r0 K4 H < 0.3 126 3 0+ u6 @8 m/ s, Y* o2 G5 ?: ], y
< 0.7 5 7 28 q, P! F- {1 Q. ?6 n) G6 e
>= 0.7 0 0 1 1 h; N* [$ }6 K& m* E8 t$ e6 F ; T4 m* [' G3 N! E. F2 m. f6 T+ O1 [NRI estimation by KM estimator:- r. N5 A: `( `2 K- f
" D6 D0 K3 ^0 B4 sPoint estimates:, c* b* g% U/ A! S
Estimate( p+ _0 [* l; t5 b# M! C1 W
NRI 0.053776354 x& u) i: s; ?4 B$ I7 \, X
NRI+ 0.03748660 * h1 H. P. O1 q/ J6 t% aNRI- 0.016289742 }/ d4 o9 u. k8 N/ Z3 c7 r
Pr(Up|Case) 0.07708938 % \, o. v7 j" p4 s- T& YPr(Down|Case) 0.03960278 0 d }2 W U! x: A- HPr(Down|Ctrl) 0.04256352 , [( I' _' T$ _% ^; M) Y3 ^: [Pr(Up|Ctrl) 0.02627378 ( s1 ^% F4 x+ ^2 A& h9 j. k4 a
Now in bootstrap.. 7 r9 e* Q- a5 o/ f0 N; Y+ F+ b% z5 X+ a
Point & Interval estimates: 8 L' ?. n4 Y: }9 a4 Q Estimate Lower Upper # y z* T( }- I; Z% B9 X% [, [NRI 0.05377635 -0.082230381 0.16058172- Z; S* i! m. _% i4 M3 u/ [2 k
NRI+ 0.03748660 -0.084245197 0.13231776 $ \$ @3 m1 ?2 A2 H0 { z( z f1 JNRI- 0.01628974 -0.030861213 0.067536161 ^9 b2 x& ^5 _
Pr(Up|Case) 0.07708938 0.000000000 0.191022916 p6 T% `& {5 u4 `+ g# p7 {# L
Pr(Down|Case) 0.03960278 0.000000000 0.152360169 l' C# ~/ ` \$ n$ V
Pr(Down|Ctrl) 0.04256352 0.004671535 0.09863170 8 r: O8 }- N+ O9 ], L, U# x: C* WPr(Up|Ctrl) 0.02627378 0.006400463 0.05998424 5 Z; a1 P1 J/ r. i: ~6 I * S4 m; @6 X. L+ s8 ]5 l& M1 a2 G1& K* e* f" V& D
0 b9 s1 Q- Z' {$ b \2 pSnipaste_2022-05-20_21-49-38 1 R8 { Z* |9 @& x7 E! t结果的解读和logistic的一模一样。 . |4 }$ }% ^" r. }- G. w5 u- b9 H; D% l; }$ ]1 v
survNRI包" s l# Z* q4 u7 ~ O* _
# 安装R包 Z/ b) c" q6 s5 w' \& R" w1 Bdevtools::install_github("mdbrown/survNRI")6 M5 V) E m! C
1* f+ Z% p: O$ O" n" X
加载R包并使用,还是用上面的pbc数据集。5 U. E! u# L6 E' z5 j2 s5 n @
1 I) ]: W! t0 W# Z+ i
library(survNRI) 0 `% N1 M D/ s4 e9 C' K1 9 r4 ^+ w) r9 {' E## Loading required package: MASS7 b5 z# g, D0 r, r4 B
1 2 m! w& E5 I6 [6 F* J% O) j9 glibrary(survival) 5 E! @3 O7 @2 h" ~% U* v8 u) U1 ] S8 ]6 w# d4 y2 P
# 使用部分数据 $ M2 a& g2 _- N9 C* k, C' vdat <- pbc[1:312,] . ^+ t# b6 }2 B. g" udat$status <- ifelse(dat$status==2, 1, 0) # 0表示活着,1表示死亡 ' X3 z3 G+ n! i! k% `" q& n% U/ t1 c5 e3 b% g$ O8 d
res <- survNRI(time = "time", event = "status", . U; f2 C# r5 Y$ \ |: u9 x model1 = c("age", "bili", "albumin"), # 模型1的自变量 0 B# m4 o, j2 B. c0 F model2 = c("age", "bili", "albumin", "protime"), # 模型2的自变量9 G$ {* L, n" t1 H: p
data = dat, ! f: Q( ~5 s- R3 J$ u9 D+ _ predict.time = 2000, # 预测的时间点 & f) l r. w8 C: S+ |2 R method = "all", , I+ {' G. C& \9 u bootMethod = "normal", S% q* s! X- T" r8 A; e
bootstraps = 500, ! }9 A9 G6 q. c; w
alpha = .05) 3 G" D5 K7 a J+ j+ J6 F$ L& _ " J9 l ^: N: p2 O1 ( A/ i6 m# } L; Y7 y% E) w查看结果,$estimates给出了不同组的NRI以及总的NRI,包括了使用不同方法(KM/IPW/SmoothIPW/SEM/Combined)得到的结果;$CI给出了可信区间。* |7 l6 J" P, p3 Y6 {2 L
3 D, `( o8 F# {7 ?, W$ vres7 ?' {. A# S% e* j4 D6 s
1 : g) V7 W3 B' Q3 T## $estimates$ ]! x' F6 v" c+ U
## NRI.event NRI.nonevent NRI 1 l) i- u& w7 k6 R## KM 0.20445422 0.3187408 0.5231951 1 J7 x; L1 `' y; F# m- A- C$ }## IPW 0.22424434 0.3273544 0.5515987 8 q3 x+ v- Y( b6 o7 ]0 [## SmoothIPW 0.19645006 0.3144263 0.5108763 - r$ n4 b b Z& R## SEM 0.07478611 0.2632127 0.3379988 $ }- s9 X% N" \! K0 l5 j3 G## Combined 0.19633867 0.3143794 0.5107181% F2 ^8 \7 l/ z& A, z; T3 |3 z/ R
## 8 n8 P9 X d- S# s% C2 A' M- ?## $CI v% t5 s, c# F! c" l( P; }## $CI$NRI.event6 i/ v- z) j2 W& j* C
## KM IPW SmoothIPW SEM Combined ( P( G1 y* x/ f## lowerbound -0.03915924 -0.02185068 -0.04724202 -0.1162587 -0.04737232 J6 K _! Q) S P- Y+ t7 D- J o
## upperbound 0.44806768 0.47033936 0.44014214 0.2658309 0.44004962 i+ R+ ?! ]6 A: J" V6 w6 o& U
## 7 s1 n- T6 e( A- }# A% C; d o8 h## $CI$NRI.nonevent7 @4 l+ C% W# {3 y/ F2 m" Q# }( g1 L
## KM IPW SmoothIPW SEM Combined$ d, O5 V) O' ?7 P
## lowerbound 0.1317108 0.1396315 0.1286685 0.08638933 0.12864267 M( x, A9 e7 G' S& k6 i! F- A
## upperbound 0.7102251 0.7393216 0.6966341 0.51482212 0.6964549 ( B2 `" [! d4 C## 6 A+ D3 V: z5 A. K
## $CI$NRI {& s W }0 g0 D6 T## KM IPW SmoothIPW SEM Combined1 f5 O* E" g8 O6 J5 B6 w5 G
## lowerbound -0.05112533 -0.04569046 -0.05439863 -0.04132364 -0.054434094 S# g. G" o) n8 r3 f
## upperbound 0.89306122 0.92464359 0.87970125 0.64253510 0.87953153 9 h* |. U7 s: d9 a: V## 4 c# r- Q2 k* O+ j1 |$ T% f d
## + D4 \! U' {( P
## $bootMethod ) U, z0 S5 k$ g) {! }6 k6 ^## [1] "normal"; b' j( ]$ V! k6 [3 C# b
## ' i4 J$ Q$ w: r% l' Z
## $predict.time+ d2 i" v& ]5 m: A% Y
## [1] 2000& R) Z: e/ x0 d3 E" d/ g
## . V2 f7 f( ?! i1 S5 w1 v## $alpha0 {" V1 Q% a0 P4 O; q
## [1] 0.05. K' o- H0 d- h% x- X8 f
## 4 `3 d4 _3 N$ `5 I, f3 Q7 P## attr(,"class")5 I( g& r' j9 v: p) }& g
## [1] "survNRI", m! O/ }2 D: Q
) v2 S1 z \' R1: z' y' Z/ K1 D$ c- d3 @
OK,这就是NRI的计算,除此之外,随机森林、决策树、lasso回归、SVM等,这些模型,都是可以计算的NRI的,后面会继续介绍。大家如果有问题欢迎在评论区留言。 / k# _7 a1 ~7 q( i " |# y' K/ z9 A本文首发于公众号:医学和生信笔记& Z) t# k' `& Q
9 {- y* |' ?' X8 X
“ 医学和生信笔记,专注R语言在临床医学中的使用,R语言数据分析和可视化。主要分享R语言做医学统计学、meta分析、网络药理学、临床预测模型、机器学习、生物信息学等。8 T, U; [# \8 P
本文由 mdnice 多平台发布) h. t' _* O p! H
————————————————! t& j$ i' k0 D* ], g' v# m
版权声明:本文为CSDN博主「阿越就是我」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。* I& N- t& y! l& W/ O. t
原文链接:https://blog.csdn.net/Ayue0616/article/details/1267680064 f0 s) p7 T% c* ?. W' f+ U
( p6 w+ F+ t7 E6 z( |
3 H1 B5 l/ u8 a( S) }" N