# Comparison to other software

## R code and results

    library(eventglm)

    colon.cifit <- cumincglm(Surv(time, status) ~ rx, time = 2500, data = colon)
    summary(colon.cifit)
    #>
    #> Call:
    #> cumincglm(formula = Surv(time, status) ~ rx, time = 2500, data = colon)
    #>
    #> Coefficients:
    #>             Estimate Std. Error z value Pr(>|z|)
    #> (Intercept)  0.54345    0.02946  18.449  < 2e-16 ***
    #> rxLev       -0.02907    0.04173  -0.697  0.48596
    #> rxLev+5FU   -0.13176    0.04186  -3.148  0.00165 **
    #> ---
    #> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
    #>
    #> (Dispersion parameter for quasi family taken to be 1)
    #>
    #>     Null deviance: 253.10  on 928  degrees of freedom
    #> Residual deviance: 250.15  on 926  degrees of freedom
    #> AIC: NA
    #>
    #> Number of Fisher Scoring iterations: 2
    confint(colon.cifit)
    #>                  2.5 %      97.5 %
    #> (Intercept)  0.4857153  0.60118745
    #> rxLev       -0.1108637  0.05271372
    #> rxLev+5FU   -0.2137964 -0.04971921

## Stata code and results

This uses the `st0202_1` package, available from here: https://www.stata-journal.com/article.html?article=st0202_1

    . import delimited "colon.csv", clear
    (18 vars, 929 obs)

    .
    . stset time, failure(status==1)

         failure event:  status == 1
    obs. time interval:  (0, time]
     exit on or before:  failure

    ------------------------------------------------------------------------------
            929  total observations
              0  exclusions
    ------------------------------------------------------------------------------
            929  observations remaining, representing
            452  failures in single-record/single-failure data
      1,551,389  total analysis time at risk and under observation
                                                    at risk from t =         0
                                         earliest observed entry t =         0
                                              last observed exit t =     3,329

    .
    . // requires st0202_1 install (search stpci)
    . stpci, at(2500)
    Pseudo-observations for the cumulative incidence function.
    Competing risks: (none).
    Computing pseudo-observations (progress dots indicate percent completed).
    ----+--- 1 ---+--- 2 ---+--- 3 ---+--- 4 ---+--- 5
    ..................................................    50
    ..................................................   100
    Generated variable: pseudo.

    . tabulate rx, gen(rxdum)

             rx |      Freq.     Percent        Cum.
    ------------+-----------------------------------
            Lev |        310       33.37       33.37
        Lev+5FU |        304       32.72       66.09
            Obs |        315       33.91      100.00
    ------------+-----------------------------------
          Total |        929      100.00

    . glm pseudo rxdum1 rxdum2, vce(robust)

    Iteration 0:   log pseudolikelihood =  -708.7556

    Generalized linear models                         Number of obs   =        929
    Optimization     : ML                             Residual df     =        926
                                                      Scale parameter =    .270145
    Deviance         =   250.154308                   (1/df) Deviance =    .270145
    Pearson          =   250.154308                   (1/df) Pearson  =    .270145

    Variance function: V(u) = 1                       [Gaussian]
    Link function    : g(u) = u                       [Identity]

                                                      AIC             =   1.532305
    Log pseudolikelihood = -708.7556003               BIC             =   -6078.23

    ------------------------------------------------------------------------------
                 |               Robust
          pseudo |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
    -------------+----------------------------------------------------------------
          rxdum1 |   -.029075   .0416186    -0.70   0.485    -.1106459    .0524959
          rxdum2 |  -.1317578   .0417443    -3.16   0.002    -.2135752   -.0499404
           _cons |   .5434514     .02938    18.50   0.000     .4858676    .6010352
    ------------------------------------------------------------------------------

## SAS code and results

Assuming you have loaded the colon data in your workspace.

    proc lifetest data=colon noprint plots=none timelist=2500 reduceout outsurv=sall;
    time time*status(0);
    run;

    data sall;
    set sall;
    theta = survival;
    keep theta;
    run;

    data sout;
    set colon;
    keep id;
    run;

    %macro pseudosurv;

    %do ip=1 %to 929;
    data coloni;
    set colon;
    where id ^= &ip;
    run;

    proc lifetest data=coloni noprint plots=none timelist=2500 reduceout outsurv=salli;
    time time*status(0);
    run;

    data salli;
    set salli;
    thetamini = survival;
    id = &ip;
    keep id thetamini;
    run;

    data souti;
    merge salli sall;
    run;

    data sout;
    merge sout souti;
    by id;
    run;
    %end;
    %mend pseudosurv;

    %pseudosurv;

    data sout2;
    set sout;
    pseudoci = 1 - (929 * theta - (929 - 1) * thetamini);
    run;

    data colon2;
    merge colon sout2;
    by id;
    if rx='Lev' then rxlev = 1;
    else rxlev = 0;
    if rx='Lev+5FU' then rxlevplus = 1;
    else rxlevplus = 0;
    run;

    proc reg data = colon2;
    model pseudoci = rxlev rxlevplus / white;
    run;

Parameter Estimates
Variable | DF | Parameter Estimate | Standard Error | t Value | Pr > |t| | Heteroscedasticity Consistent
--- | --- | --- | --- | --- | --- | ---
Standard Error | t Value | Pr > |t|
Intercept | 1 | 0.54345 | 0.02928 | 18.56 | <.0001 | 0.02936 | 18.51 | <.0001
rxlev | 1 | -0.02907 | 0.04158 | -0.70 | 0.4846 | 0.04160 | -0.70 | 0.4847
rxlevplus | 1 | -0.13176 | 0.04179 | -3.15 | 0.0017 | 0.04172 | -3.16 | 0.0016