# Example 1: right censored data
set.seed(123); U = 20
y = rpois(n <- 100, exp(3))
cy = pmin(U, y)
rcensored = (y >= U)
table(cy)
table(rcensored)
status = ifelse(rcensored, 0, 1)
table(ii <- print(SurvS4(cy, status)))  # Check; U+ means >= U
fit = vglm(SurvS4(cy, status) ~ 1, cenpoisson, trace=TRUE)
coef(fit, mat=TRUE)
table(print(fit@y))  # Another check; U+ means >= U
# Example 2: left censored data
L = 15
cy = pmax(L, y)
lcensored = (y <  L)   # Note y < L, not cy == L or y <= L
table(cy)
table(lcensored)
status = ifelse(lcensored, 0, 1)
table(ii <- print(SurvS4(cy, status, type="left")))  # Check
fit = vglm(SurvS4(cy, status, type="left") ~ 1, cenpoisson, trace=TRUE)
coef(fit, mat=TRUE)
# Example 3: interval censored data
Lvec = rep(L, len=n); Uvec = rep(U, len=n)
icensored = Lvec <= y & y < Uvec  # Neither lcensored or rcensored
table(icensored)
status = rep(3, n)                    # 3 means interval censored
status = ifelse(rcensored, 0, status) # 0 means right censored
status = ifelse(lcensored, 2, status) # 2 means left  censored
# Have to adjust Lvec and Uvec because of the (start, end] format:
Lvec[icensored] = Lvec[icensored] - 1
Uvec[icensored] = Uvec[icensored] - 1
Lvec[lcensored] = Lvec[lcensored]  # Remains unchanged
Lvec[rcensored] = Uvec[rcensored]  # Remains unchanged
table(ii <- print(SurvS4(Lvec, Uvec, status, type="interval")))  # Check
fit = vglm(SurvS4(Lvec, Uvec, status, type="interval") ~ 1,
           cenpoisson, trace=TRUE)
coef(fit, mat=TRUE)
table(print(fit@y))  # Another check
# Example 4: Add in some uncensored observations
index = (1:n)[icensored]
index = head(index, 4)
status[index] = 1 # actual or uncensored value
Lvec[index] = y[index]
table(ii <- print(SurvS4(Lvec, Uvec, status, type="interval")))  # Check
fit = vglm(SurvS4(Lvec, Uvec, status, type="interval") ~ 1,
           cenpoisson, trace=TRUE, crit="c")
coef(fit, mat=TRUE)
table(print(fit@y))  # Another checkRun the code above in your browser using DataLab