58
58
# ' \donttest{
59
59
# ' ppc_km_overlay_grouped(y, yrep[1:25, ], group = group, status_y = status_y)
60
60
# ' }
61
+ # ' # With left-truncation (delayed entry) times:
62
+ # ' min_vals <- pmin(y, apply(yrep, 2, min))
63
+ # ' left_truncation_y <- rep(0, length(y))
64
+ # ' condition <- y > mean(y) / 2
65
+ # ' left_truncation_y[condition] <- pmin(
66
+ # ' runif(sum(condition), min = 0.6, max = 0.99) * y[condition],
67
+ # ' min_vals[condition] - 0.001
68
+ # ' )
69
+ # ' \donttest{
70
+ # ' ppc_km_overlay(y, yrep[1:25, ], status_y = status_y,
71
+ # ' left_truncation_y = left_truncation_y)
72
+ # ' }
61
73
NULL
62
74
63
75
# ' @export
64
76
# ' @rdname PPC-censoring
65
77
# ' @param status_y The status indicator for the observations from `y`. This must
66
78
# ' be a numeric vector of the same length as `y` with values in \{0, 1\} (0 =
67
79
# ' right censored, 1 = event).
80
+ # ' @param left_truncation_y Optional parameter that specifies left-truncation
81
+ # ' (delayed entry) times for the observations from `y`. This must
82
+ # ' be a numeric vector of the same length as `y`. If `NULL` (default),
83
+ # ' no left-truncation is assumed.
68
84
ppc_km_overlay <- function (
69
85
y ,
70
86
yrep ,
71
87
... ,
72
88
status_y ,
89
+ left_truncation_y = NULL ,
73
90
size = 0.25 ,
74
91
alpha = 0.7
75
92
) {
@@ -79,8 +96,15 @@ ppc_km_overlay <- function(
79
96
suggested_package(" survival" )
80
97
suggested_package(" ggfortify" )
81
98
82
- stopifnot(is.numeric(status_y ))
83
- stopifnot(all(status_y %in% c(0 , 1 )))
99
+ if (! is.numeric(status_y ) || length(status_y ) != length(y ) || ! all(status_y %in% c(0 , 1 ))) {
100
+ stop(" `status_y` must be a numeric vector of 0s and 1s the same length as `y`." )
101
+ }
102
+
103
+ if (! is.null(left_truncation_y )) {
104
+ if (! is.numeric(left_truncation_y ) || length(left_truncation_y ) != length(y )) {
105
+ stop(" `left_truncation_y` must be a numeric vector of the same length as `y`." )
106
+ }
107
+ }
84
108
85
109
data <- ppc_data(y , yrep , group = status_y )
86
110
@@ -96,7 +120,12 @@ ppc_km_overlay <- function(
96
120
as.numeric(as.character(.data $ group )),
97
121
1 ))
98
122
99
- sf_form <- survival :: Surv(value , group ) ~ rep_label
123
+ if (is.null(left_truncation_y )) {
124
+ sf_form <- survival :: Surv(time = data $ value , event = data $ group ) ~ rep_label
125
+ } else {
126
+ sf_form <- survival :: Surv(time = left_truncation_y [data $ y_id ], time2 = data $ value , event = data $ group ) ~ rep_label
127
+ }
128
+
100
129
if (! is.null(add_group )) {
101
130
data <- dplyr :: inner_join(data ,
102
131
tibble :: tibble(y_id = seq_along(y ),
@@ -164,6 +193,7 @@ ppc_km_overlay_grouped <- function(
164
193
group ,
165
194
... ,
166
195
status_y ,
196
+ left_truncation_y = NULL ,
167
197
size = 0.25 ,
168
198
alpha = 0.7
169
199
) {
@@ -175,6 +205,7 @@ ppc_km_overlay_grouped <- function(
175
205
add_group = group ,
176
206
... ,
177
207
status_y = status_y ,
208
+ left_truncation_y = left_truncation_y ,
178
209
size = size ,
179
210
alpha = alpha
180
211
)
0 commit comments