
R Under development (unstable) (2019-06-28 r76752) -- "Unsuffered Consequences"
Copyright (C) 2019 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> options(na.action=na.exclude)  #preserve length of missings
> library(survival)
> 
> #
> # Run a test that can be verified using other packages
> #
> test1 <- data.frame(time=  c(9, 3,1,1,6,6,8),
+                     status=c(1,NA,1,0,1,1,0),
+                     x=     c(0, 2,1,1,1,0,0))
> fit1w <- survreg(Surv(time, status) ~x, test1, dist='weibull')
> fit1w
Call:
survreg(formula = Surv(time, status) ~ x, data = test1, dist = "weibull")

Coefficients:
(Intercept)           x 
  2.2373335  -0.7442249 

Scale= 0.4563163 

Loglik(model)= -10.3   Loglik(intercept only)= -11.4
	Chisq= 2.22 on 1 degrees of freedom, p= 0.136 
n=6 (1 observation deleted due to missingness)
> summary(fit1w)

Call:
survreg(formula = Surv(time, status) ~ x, data = test1, dist = "weibull")
             Value Std. Error     z       p
(Intercept)  2.237      0.330  6.78 1.2e-11
x           -0.744      0.486 -1.53    0.13
Log(scale)  -0.785      0.433 -1.81    0.07

Scale= 0.456 

Weibull distribution
Loglik(model)= -10.3   Loglik(intercept only)= -11.4
	Chisq= 2.22 on 1 degrees of freedom, p= 0.14 
Number of Newton-Raphson Iterations: 8 
n=6 (1 observation deleted due to missingness)

> 
> fit1e <- survreg(Surv(time, status) ~x, test1, dist='exponential')
> fit1e
Call:
survreg(formula = Surv(time, status) ~ x, data = test1, dist = "exponential")

Coefficients:
(Intercept)           x 
   2.442347   -1.056053 

Scale fixed at 1 

Loglik(model)= -11.7   Loglik(intercept only)= -12.2
	Chisq= 1.07 on 1 degrees of freedom, p= 0.302 
n=6 (1 observation deleted due to missingness)
> summary(fit1e)

Call:
survreg(formula = Surv(time, status) ~ x, data = test1, dist = "exponential")
             Value Std. Error     z       p
(Intercept)  2.442      0.707  3.45 0.00055
x           -1.056      1.000 -1.06 0.29094

Scale fixed at 1 

Exponential distribution
Loglik(model)= -11.7   Loglik(intercept only)= -12.2
	Chisq= 1.07 on 1 degrees of freedom, p= 0.3 
Number of Newton-Raphson Iterations: 4 
n=6 (1 observation deleted due to missingness)

> 
> fit1l <- survreg(Surv(time, status) ~x, test1, dist='loglogistic')
> fit1l
Call:
survreg(formula = Surv(time, status) ~ x, data = test1, dist = "loglogistic")

Coefficients:
(Intercept)           x 
   2.177208   -1.195672 

Scale= 0.3847582 

Loglik(model)= -10.7   Loglik(intercept only)= -12
	Chisq= 2.7 on 1 degrees of freedom, p= 0.1 
n=6 (1 observation deleted due to missingness)
> summary(fit1l)

Call:
survreg(formula = Surv(time, status) ~ x, data = test1, dist = "loglogistic")
             Value Std. Error     z       p
(Intercept)  2.177      0.365  5.96 2.5e-09
x           -1.196      0.711 -1.68   0.093
Log(scale)  -0.955      0.396 -2.41   0.016

Scale= 0.385 

Log logistic distribution
Loglik(model)= -10.7   Loglik(intercept only)= -12
	Chisq= 2.7 on 1 degrees of freedom, p= 0.1 
Number of Newton-Raphson Iterations: 4 
n=6 (1 observation deleted due to missingness)

> 
> fit1g <- survreg(Surv(time, status) ~x, test1, dist='lognormal')
> summary(fit1g)

Call:
survreg(formula = Surv(time, status) ~ x, data = test1, dist = "lognormal")
             Value Std. Error     z       p
(Intercept)  2.210      0.404  5.48 4.4e-08
x           -1.268      0.585 -2.17    0.03
Log(scale)  -0.446      0.342 -1.30    0.19

Scale= 0.64 

Log Normal distribution
Loglik(model)= -10.5   Loglik(intercept only)= -12.1
	Chisq= 3.26 on 1 degrees of freedom, p= 0.071 
Number of Newton-Raphson Iterations: 5 
n=6 (1 observation deleted due to missingness)

> #
> #  Do a test with the ovarian data
> #
> fitfw <- survreg(Surv(futime, fustat) ~ age + ecog.ps, ovarian,
+ 	dist='weibull')
> fitfw
Call:
survreg(formula = Surv(futime, fustat) ~ age + ecog.ps, data = ovarian, 
    dist = "weibull")

Coefficients:
(Intercept)         age     ecog.ps 
12.28496723 -0.09702669  0.09977342 

Scale= 0.6032744 

Loglik(model)= -90   Loglik(intercept only)= -98
	Chisq= 15.98 on 2 degrees of freedom, p= 0.000339 
n= 26 
> 
> fitfl <- survreg(Surv(futime, fustat) ~ age + ecog.ps, ovarian,
+ 	dist='loglogistic')
> fitfl
Call:
survreg(formula = Surv(futime, fustat) ~ age + ecog.ps, data = ovarian, 
    dist = "loglogistic")

Coefficients:
(Intercept)         age     ecog.ps 
11.50853384 -0.08876814  0.09033348 

Scale= 0.4464064 

Loglik(model)= -89.5   Loglik(intercept only)= -97.4
	Chisq= 15.67 on 2 degrees of freedom, p= 0.000395 
n= 26 
> 
> #test out interval censoring, using some dummy time values
> 
> idat <- read.table('data.interval', skip=3, header=T, sep=',')
> flsurv<- Surv(idat$ltime, idat$rtime, type='interval2')
> 
> fitfw2 <- survreg(flsurv ~ age + ecog.ps, idat, dist='weibull')
> summary(fitfw2)

Call:
survreg(formula = flsurv ~ age + ecog.ps, data = idat, dist = "weibull")
              Value Std. Error     z       p
(Intercept) 12.3886     1.6027  7.73 1.1e-14
age         -0.0986     0.0254 -3.89  0.0001
ecog.ps      0.0971     0.3776  0.26  0.7971
Log(scale)  -0.4773     0.2583 -1.85  0.0647

Scale= 0.62 

Weibull distribution
Loglik(model)= -56.2   Loglik(intercept only)= -64
	Chisq= 15.57 on 2 degrees of freedom, p= 0.00042 
Number of Newton-Raphson Iterations: 6 
n= 26 

> 
> fitfl2 <- survreg(flsurv ~ age + ecog.ps, idat, dist='loglogistic')
> summary(fitfl2)

Call:
survreg(formula = flsurv ~ age + ecog.ps, data = idat, dist = "loglogistic")
              Value Std. Error     z       p
(Intercept) 11.5268     1.5283  7.54 4.6e-14
age         -0.0888     0.0240 -3.70 0.00021
ecog.ps      0.0818     0.3642  0.22 0.82219
Log(scale)  -0.8023     0.2706 -2.96 0.00303

Scale= 0.448 

Log logistic distribution
Loglik(model)= -55.9   Loglik(intercept only)= -63.5
	Chisq= 15.35 on 2 degrees of freedom, p= 0.00046 
Number of Newton-Raphson Iterations: 5 
n= 26 

> 
> fitfg2 <- survreg(flsurv ~ age + ecog.ps, idat, dist='lognormal')
> summary(fitfg2)

Call:
survreg(formula = flsurv ~ age + ecog.ps, data = idat, dist = "lognormal")
              Value Std. Error     z       p
(Intercept) 11.1548     1.4347  7.77 7.6e-15
age         -0.0855     0.0238 -3.60 0.00032
ecog.ps      0.2066     0.3828  0.54 0.58945
Log(scale)  -0.2297     0.2508 -0.92 0.35972

Scale= 0.795 

Log Normal distribution
Loglik(model)= -56   Loglik(intercept only)= -63.5
	Chisq= 14.94 on 2 degrees of freedom, p= 0.00057 
Number of Newton-Raphson Iterations: 5 
n= 26 

> 
> logt <- c(survreg.distributions$t, 
+           survreg.distributions$weibull[c('trans', 'itrans', 'dtrans')])
> logt$name <- 'log(t)'
> 
> fitft2 <- survreg(Surv(ltime, rtime, type='interval2') ~ age + ecog.ps,
+             idat, dist=logt, parm=100)
> summary(fitft2)  #should be quite close to fitfg2

Call:
survreg(formula = Surv(ltime, rtime, type = "interval2") ~ age + 
    ecog.ps, data = idat, dist = logt, parms = 100)
              Value Std. Error     z       p
(Intercept) 11.1856     1.4419  7.76 8.7e-15
age         -0.0858     0.0238 -3.61 0.00031
ecog.ps      0.1978     0.3814  0.52 0.60401
Log(scale)  -0.2394     0.2522 -0.95 0.34254

Scale= 0.787 

log(t) distribution: parmameters= 100
Loglik(model)= -56   Loglik(intercept only)= -63.5
	Chisq= 14.97 on 2 degrees of freedom, p= 0.00056 
Number of Newton-Raphson Iterations: 5 
n= 26 

> 
> #
> # Check out the survreg density and probability functions
> #
> 
> # Gaussian
> x <- -10:10
> p <- seq(.1, .95, length=25)
> all.equal(dsurvreg(x, 1, 5, 'gaussian'), dnorm(x, 1, 5))
[1] TRUE
> all.equal(psurvreg(x, 1, 5, 'gaussian'), pnorm(x, 1, 5))
[1] TRUE
> all.equal(qsurvreg(p, 1, 5, 'gaussian'), qnorm(p, 1, 5))
[1] TRUE
> 
> # Lognormal
> x <- 1:10
> all.equal(dsurvreg(x, 1, 5, 'lognormal'), dlnorm(x, 1, 5))
[1] TRUE
> all.equal(psurvreg(x, 1, 5, 'lognormal'), plnorm(x, 1, 5))
[1] TRUE
> all.equal(qsurvreg(p, 1, 5, 'lognormal'), qlnorm(p, 1, 5))
[1] TRUE
> 
> # Weibull
> lambda <- exp(-2)
> rho    <- 1/3
> temp <- (lambda*x)^rho
> all.equal(psurvreg(x, 2, 3), 1- exp(-temp))
[1] TRUE
> all.equal(dsurvreg(x, 2, 3), lambda*rho*(lambda*x)^(rho-1)*exp(-temp))
[1] TRUE
> 
> 
> # verify labeling in the vcov function, with 0, 1, or 2 scale factors
> fit0 <- survreg(Surv(time, status) ~ age + ph.ecog, lung, dist='exponential')
> vcov(fit0)
             (Intercept)           age      ph.ecog
(Intercept)  0.330860114 -0.0051541551  0.001441498
age         -0.005154155  0.0000854214 -0.000240252
ph.ecog      0.001441498 -0.0002402520  0.013051391
> fit1 <- survreg(Surv(time, status) ~ age + ph.ecog, lung, dist='weibull')
> vcov(fit1)
              (Intercept)           age       ph.ecog    Log(scale)
(Intercept)  0.1837842638 -2.858745e-03  0.0003634856  2.800938e-03
age         -0.0028587447  4.731485e-05 -0.0001279049 -3.517281e-05
ph.ecog      0.0003634856 -1.279049e-04  0.0073616277 -7.091072e-04
Log(scale)   0.0028009379 -3.517281e-05 -0.0007091072  3.837229e-03
> 
> fit2 <- survreg(Surv(time, status) ~ age + ph.ecog + strata(sex), lung)
> vcov(fit2)
                   (Intercept)           age       ph.ecog Log(scale[sex=1])
(Intercept)        0.179740626 -2.845266e-03  0.0016839233     -1.147693e-03
age               -0.002845266  4.803051e-05 -0.0001515280      4.208343e-05
ph.ecog            0.001683923 -1.515280e-04  0.0074813166     -6.291573e-04
Log(scale[sex=1]) -0.001147693  4.208343e-05 -0.0006291573      6.272257e-03
Log(scale[sex=2])  0.009087054 -1.600040e-04 -0.0008306451     -4.558932e-04
                  Log(scale[sex=2])
(Intercept)            0.0090870545
age                   -0.0001600040
ph.ecog               -0.0008306451
Log(scale[sex=1])     -0.0004558932
Log(scale[sex=2])      0.0113833096
> 
> proc.time()
   user  system elapsed 
  0.804   0.044   0.853 
