@@ -70,6 +70,7 @@ ppc_km_overlay <- function(
70
70
yrep ,
71
71
... ,
72
72
status_y ,
73
+ left_truncation_y = NULL ,
73
74
size = 0.25 ,
74
75
alpha = 0.7
75
76
) {
@@ -82,8 +83,20 @@ ppc_km_overlay <- function(
82
83
stopifnot(is.numeric(status_y ))
83
84
stopifnot(all(status_y %in% c(0 , 1 )))
84
85
86
+ if (! is.null(left_truncation_y )) {
87
+ if (! is.numeric(left_truncation_y ) || length(left_truncation_y ) != length(y )) {
88
+ stop(" `left_truncation_y` must be a numeric vector of the same length as `y`." )
89
+ }
90
+ }
91
+
85
92
data <- ppc_data(y , yrep , group = status_y )
86
93
94
+ if (! is.null(left_truncation_y )) {
95
+ data $ left_trunc <- left_truncation_y [data $ y_id ]
96
+ } else {
97
+ data $ left_trunc <- 0
98
+ }
99
+
87
100
# Modify the status indicator:
88
101
# * For the observed data ("y"), convert the status indicator back to
89
102
# a numeric.
@@ -96,7 +109,7 @@ ppc_km_overlay <- function(
96
109
as.numeric(as.character(.data $ group )),
97
110
1 ))
98
111
99
- sf_form <- survival :: Surv(value , group ) ~ rep_label
112
+ sf_form <- survival :: Surv(time = data $ left_trunc , time2 = data $ value , event = data $ group ) ~ rep_label
100
113
if (! is.null(add_group )) {
101
114
data <- dplyr :: inner_join(data ,
102
115
tibble :: tibble(y_id = seq_along(y ),
@@ -164,6 +177,7 @@ ppc_km_overlay_grouped <- function(
164
177
group ,
165
178
... ,
166
179
status_y ,
180
+ left_truncation_y = NULL ,
167
181
size = 0.25 ,
168
182
alpha = 0.7
169
183
) {
@@ -175,6 +189,7 @@ ppc_km_overlay_grouped <- function(
175
189
add_group = group ,
176
190
... ,
177
191
status_y = status_y ,
192
+ left_truncation_y = left_truncation_y ,
178
193
size = size ,
179
194
alpha = alpha
180
195
)
0 commit comments