blob: 12f3b12650d3b54f6d9ca830e10927dc8a95b36f [file] [log] [blame]
/* -----------------------------------------------------------------------------
* Robust variance for Cox proportional hazard survival regression
* -------------------------------------------------------------------------- */
---------------------------------------------------------------------------
-- Data taken from survival package of R
---------------------------------------------------------------------------
DROP TABLE IF EXISTS bladder;
CREATE TABLE bladder(
id INTEGER,
rx INTEGER,
num INTEGER,
sz INTEGER,
stop INTEGER,
event INTEGER,
enum INTEGER);
COPY bladder FROM STDIN;
1 1 1 3 1 0 1
1 1 1 3 1 0 2
1 1 1 3 1 0 3
1 1 1 3 1 0 4
2 1 2 1 4 0 1
2 1 2 1 4 0 2
2 1 2 1 4 0 3
2 1 2 1 4 0 4
3 1 1 1 7 0 1
3 1 1 1 7 0 2
3 1 1 1 7 0 3
3 1 1 1 7 0 4
4 1 5 1 10 0 1
4 1 5 1 10 0 2
4 1 5 1 10 0 3
4 1 5 1 10 0 4
5 1 4 1 6 1 1
5 1 4 1 10 0 2
5 1 4 1 10 0 3
5 1 4 1 10 0 4
6 1 1 1 14 0 1
6 1 1 1 14 0 2
6 1 1 1 14 0 3
6 1 1 1 14 0 4
7 1 1 1 18 0 1
7 1 1 1 18 0 2
7 1 1 1 18 0 3
7 1 1 1 18 0 4
8 1 1 3 5 1 1
8 1 1 3 18 0 2
8 1 1 3 18 0 3
8 1 1 3 18 0 4
9 1 1 1 12 1 1
9 1 1 1 16 1 2
9 1 1 1 18 0 3
9 1 1 1 18 0 4
10 1 3 3 23 0 1
10 1 3 3 23 0 2
10 1 3 3 23 0 3
10 1 3 3 23 0 4
11 1 1 3 10 1 1
11 1 1 3 15 1 2
11 1 1 3 23 0 3
11 1 1 3 23 0 4
12 1 1 1 3 1 1
12 1 1 1 16 1 2
12 1 1 1 23 1 3
12 1 1 1 23 0 4
13 1 3 1 3 1 1
13 1 3 1 9 1 2
13 1 3 1 21 1 3
13 1 3 1 23 0 4
14 1 2 3 7 1 1
14 1 2 3 10 1 2
14 1 2 3 16 1 3
14 1 2 3 24 1 4
15 1 1 1 3 1 1
15 1 1 1 15 1 2
15 1 1 1 25 1 3
15 1 1 1 25 0 4
16 1 1 2 26 0 1
16 1 1 2 26 0 2
16 1 1 2 26 0 3
16 1 1 2 26 0 4
17 1 8 1 1 1 1
17 1 8 1 26 0 2
17 1 8 1 26 0 3
17 1 8 1 26 0 4
18 1 1 4 2 1 1
18 1 1 4 26 1 2
18 1 1 4 26 0 3
18 1 1 4 26 0 4
19 1 1 2 25 1 1
19 1 1 2 28 0 2
19 1 1 2 28 0 3
19 1 1 2 28 0 4
20 1 1 4 29 0 1
20 1 1 4 29 0 2
20 1 1 4 29 0 3
20 1 1 4 29 0 4
21 1 1 2 29 0 1
21 1 1 2 29 0 2
21 1 1 2 29 0 3
21 1 1 2 29 0 4
22 1 4 1 29 0 1
22 1 4 1 29 0 2
22 1 4 1 29 0 3
22 1 4 1 29 0 4
23 1 1 6 28 1 1
23 1 1 6 30 1 2
23 1 1 6 30 0 3
23 1 1 6 30 0 4
24 1 1 5 2 1 1
24 1 1 5 17 1 2
24 1 1 5 22 1 3
24 1 1 5 30 0 4
25 1 2 1 3 1 1
25 1 2 1 6 1 2
25 1 2 1 8 1 3
25 1 2 1 12 1 4
26 1 1 3 12 1 1
26 1 1 3 15 1 2
26 1 1 3 24 1 3
26 1 1 3 31 0 4
27 1 1 2 32 0 1
27 1 1 2 32 0 2
27 1 1 2 32 0 3
27 1 1 2 32 0 4
28 1 2 1 34 0 1
28 1 2 1 34 0 2
28 1 2 1 34 0 3
28 1 2 1 34 0 4
29 1 2 1 36 0 1
29 1 2 1 36 0 2
29 1 2 1 36 0 3
29 1 2 1 36 0 4
30 1 3 1 29 1 1
30 1 3 1 36 0 2
30 1 3 1 36 0 3
30 1 3 1 36 0 4
31 1 1 2 37 0 1
31 1 1 2 37 0 2
31 1 1 2 37 0 3
31 1 1 2 37 0 4
32 1 4 1 9 1 1
32 1 4 1 17 1 2
32 1 4 1 22 1 3
32 1 4 1 24 1 4
33 1 5 1 16 1 1
33 1 5 1 19 1 2
33 1 5 1 23 1 3
33 1 5 1 29 1 4
34 1 1 2 41 0 1
34 1 1 2 41 0 2
34 1 1 2 41 0 3
34 1 1 2 41 0 4
35 1 1 1 3 1 1
35 1 1 1 43 0 2
35 1 1 1 43 0 3
35 1 1 1 43 0 4
36 1 2 6 6 1 1
36 1 2 6 43 0 2
36 1 2 6 43 0 3
36 1 2 6 43 0 4
37 1 2 1 3 1 1
37 1 2 1 6 1 2
37 1 2 1 9 1 3
37 1 2 1 44 0 4
38 1 1 1 9 1 1
38 1 1 1 11 1 2
38 1 1 1 20 1 3
38 1 1 1 26 1 4
39 1 1 1 18 1 1
39 1 1 1 48 0 2
39 1 1 1 48 0 3
39 1 1 1 48 0 4
40 1 1 3 49 0 1
40 1 1 3 49 0 2
40 1 1 3 49 0 3
40 1 1 3 49 0 4
41 1 3 1 35 1 1
41 1 3 1 51 0 2
41 1 3 1 51 0 3
41 1 3 1 51 0 4
42 1 1 7 17 1 1
42 1 1 7 53 0 2
42 1 1 7 53 0 3
42 1 1 7 53 0 4
43 1 3 1 3 1 1
43 1 3 1 15 1 2
43 1 3 1 46 1 3
43 1 3 1 51 1 4
44 1 1 1 59 0 1
44 1 1 1 59 0 2
44 1 1 1 59 0 3
44 1 1 1 59 0 4
45 1 3 2 2 1 1
45 1 3 2 15 1 2
45 1 3 2 24 1 3
45 1 3 2 30 1 4
46 1 1 3 5 1 1
46 1 1 3 14 1 2
46 1 1 3 19 1 3
46 1 1 3 27 1 4
47 1 2 3 2 1 1
47 1 2 3 8 1 2
47 1 2 3 12 1 3
47 1 2 3 13 1 4
48 2 1 3 1 0 1
48 2 1 3 1 0 2
48 2 1 3 1 0 3
48 2 1 3 1 0 4
49 2 1 1 1 0 1
49 2 1 1 1 0 2
49 2 1 1 1 0 3
49 2 1 1 1 0 4
50 2 8 1 5 1 1
50 2 8 1 5 0 2
50 2 8 1 5 0 3
50 2 8 1 5 0 4
51 2 1 2 9 0 1
51 2 1 2 9 0 2
51 2 1 2 9 0 3
51 2 1 2 9 0 4
52 2 1 1 10 0 1
52 2 1 1 10 0 2
52 2 1 1 10 0 3
52 2 1 1 10 0 4
53 2 1 1 13 0 1
53 2 1 1 13 0 2
53 2 1 1 13 0 3
53 2 1 1 13 0 4
54 2 2 6 3 1 1
54 2 2 6 14 0 2
54 2 2 6 14 0 3
54 2 2 6 14 0 4
55 2 5 3 1 1 1
55 2 5 3 3 1 2
55 2 5 3 5 1 3
55 2 5 3 7 1 4
56 2 5 1 18 0 1
56 2 5 1 18 0 2
56 2 5 1 18 0 3
56 2 5 1 18 0 4
57 2 1 3 17 1 1
57 2 1 3 18 0 2
57 2 1 3 18 0 3
57 2 1 3 18 0 4
58 2 5 1 2 1 1
58 2 5 1 19 0 2
58 2 5 1 19 0 3
58 2 5 1 19 0 4
59 2 1 1 17 1 1
59 2 1 1 19 1 2
59 2 1 1 21 0 3
59 2 1 1 21 0 4
60 2 1 1 22 0 1
60 2 1 1 22 0 2
60 2 1 1 22 0 3
60 2 1 1 22 0 4
61 2 1 3 25 0 1
61 2 1 3 25 0 2
61 2 1 3 25 0 3
61 2 1 3 25 0 4
62 2 1 5 25 0 1
62 2 1 5 25 0 2
62 2 1 5 25 0 3
62 2 1 5 25 0 4
63 2 1 1 25 0 1
63 2 1 1 25 0 2
63 2 1 1 25 0 3
63 2 1 1 25 0 4
64 2 1 1 6 1 1
64 2 1 1 12 1 2
64 2 1 1 13 1 3
64 2 1 1 26 0 4
65 2 1 1 6 1 1
65 2 1 1 27 0 2
65 2 1 1 27 0 3
65 2 1 1 27 0 4
66 2 2 1 2 1 1
66 2 2 1 29 0 2
66 2 2 1 29 0 3
66 2 2 1 29 0 4
67 2 8 3 26 1 1
67 2 8 3 35 1 2
67 2 8 3 36 0 3
67 2 8 3 36 0 4
68 2 1 1 38 0 1
68 2 1 1 38 0 2
68 2 1 1 38 0 3
68 2 1 1 38 0 4
69 2 1 1 22 1 1
69 2 1 1 23 1 2
69 2 1 1 27 1 3
69 2 1 1 32 1 4
70 2 6 1 4 1 1
70 2 6 1 16 1 2
70 2 6 1 23 1 3
70 2 6 1 27 1 4
71 2 3 1 24 1 1
71 2 3 1 26 1 2
71 2 3 1 29 1 3
71 2 3 1 40 1 4
72 2 3 2 41 0 1
72 2 3 2 41 0 2
72 2 3 2 41 0 3
72 2 3 2 41 0 4
73 2 1 1 41 0 1
73 2 1 1 41 0 2
73 2 1 1 41 0 3
73 2 1 1 41 0 4
74 2 1 1 1 1 1
74 2 1 1 27 1 2
74 2 1 1 43 0 3
74 2 1 1 43 0 4
75 2 1 1 44 0 1
75 2 1 1 44 0 2
75 2 1 1 44 0 3
75 2 1 1 44 0 4
76 2 6 1 2 1 1
76 2 6 1 20 1 2
76 2 6 1 23 1 3
76 2 6 1 27 1 4
77 2 1 2 45 0 1
77 2 1 2 45 0 2
77 2 1 2 45 0 3
77 2 1 2 45 0 4
78 2 1 4 2 1 1
78 2 1 4 46 0 2
78 2 1 4 46 0 3
78 2 1 4 46 0 4
79 2 1 4 46 0 1
79 2 1 4 46 0 2
79 2 1 4 46 0 3
79 2 1 4 46 0 4
80 2 3 3 49 0 1
80 2 3 3 49 0 2
80 2 3 3 49 0 3
80 2 3 3 49 0 4
81 2 1 1 50 0 1
81 2 1 1 50 0 2
81 2 1 1 50 0 3
81 2 1 1 50 0 4
82 2 4 1 4 1 1
82 2 4 1 24 1 2
82 2 4 1 47 1 3
82 2 4 1 50 0 4
83 2 3 4 54 0 1
83 2 3 4 54 0 2
83 2 3 4 54 0 3
83 2 3 4 54 0 4
84 2 2 1 38 1 1
84 2 2 1 54 0 2
84 2 2 1 54 0 3
84 2 2 1 54 0 4
85 2 1 3 59 0 1
85 2 1 3 59 0 2
85 2 1 3 59 0 3
85 2 1 3 59 0 4
\.
---------------------------------------------------------------------------
-- no stratification
---------------------------------------------------------------------------
drop table if exists bladder_coxph_out;
drop table if exists bladder_coxph_out_summary;
select coxph_train('bladder', 'bladder_coxph_out', 'stop', 'ARRAY[rx, sz, num]', 'event=1', NULL, NULL);
select * from bladder_coxph_out;
select * from bladder_coxph_out_summary;
-- robust variance
drop table if exists bladder_rv_coxph_out;
select robust_variance_coxph('bladder_coxph_out', 'bladder_rv_coxph_out');
SELECT assert(
relative_error(coef, ARRAY[-0.53838728618390019, -0.05439102328789678, 0.19234011205408327]) < 1e-6 AND
relative_error(loglikelihood, -589.06745420305799144) < 1e-6 AND
relative_error(std_err, ARRAY[0.19985872786736181, 0.06960069357280596, 0.04646488068044735]) < 1e-6 AND
relative_error(robust_se, ARRAY[0.19296810565837841, 0.07081459654480815, 0.04766700334445047]) < 1e-6 AND
relative_error(robust_z, ARRAY[-2.7900324996558528, -0.7680764410410881, 4.0350787454415480]) < 1e-6 AND
relative_error(robust_p, ARRAY[0.00527027509779776, 0.442441772410999, 0.0000545839882079013]) < 1e-6,
'Cox Robust Variance Estimators (bladder w/o stratification): Wrong results'
) FROM bladder_rv_coxph_out;
-- cluster variance (id)
drop table if exists bladder_cv_coxph_out;
select clustered_variance_coxph('bladder_coxph_out', 'bladder_cv_coxph_out', 'id');
SELECT assert(
relative_error(coef, ARRAY[-0.53838728618390019, -0.05439102328789678, 0.19234011205408327]) < 1e-6 AND
relative_error(loglikelihood, -589.06745420305799144) < 1e-6 AND
relative_error(std_err, ARRAY[0.19985872786736181, 0.06960069357280596, 0.04646488068044735]) < 1e-6 AND
relative_error(clustered_se, ARRAY[0.29467251572845515, 0.08753417995257935, 0.06689308222921776]) < 1e-6 AND
relative_error(clustered_z, ARRAY[-1.8270699079381791, -0.6213689705822628, 2.8753363672943806]) < 1e-6 AND
relative_error(clustered_p, ARRAY[0.06768925905530210, 0.53435688328289499, 0.00403597282368529]) < 1e-6,
'Cox Cluster Variance Estimators (bladder w/ cluster(id) w/o stratification): Wrong results'
) FROM bladder_cv_coxph_out;
-- cluster variance (id, enum)
drop table if exists bladder_cv_coxph_out;
select clustered_variance_coxph('bladder_coxph_out', 'bladder_cv_coxph_out', 'id, enum');
SELECT assert(
relative_error(coef, ARRAY[-0.53838728618390019, -0.05439102328789678, 0.19234011205408327]) < 1e-6 AND
relative_error(loglikelihood, -589.06745420305799144) < 1e-6 AND
relative_error(std_err, ARRAY[0.19985872786736181, 0.06960069357280596, 0.04646488068044735]) < 1e-6 AND
relative_error(clustered_se, ARRAY[0.19296810565837841, 0.07081459654480815, 0.04766700334445047]) < 1e-6 AND
relative_error(clustered_z, ARRAY[-2.7900324996558528, -0.7680764410410881, 4.0350787454415480]) < 1e-6 AND
relative_error(clustered_p, ARRAY[0.00527027509779776, 0.442441772410999, 0.0000545839882079013]) < 1e-6,
'Cox Cluster Variance Estimators (bladder w/ cluster(id) + cluster(enum) w/o stratification): Wrong results'
) FROM bladder_cv_coxph_out;
---------------------------------------------------------------------------
-- with stratification
---------------------------------------------------------------------------
drop table if exists bladder_coxph_out;
drop table if exists bladder_coxph_out_summary;
select coxph_train('bladder', 'bladder_coxph_out', 'stop', 'ARRAY[rx, sz, num]', 'event=1', 'enum', NULL);
-- robust variance
drop table if exists bladder_rv_coxph_out;
select robust_variance_coxph('bladder_coxph_out', 'bladder_rv_coxph_out');
SELECT assert(
relative_error(coef, ARRAY[-0.57986081953852453, -0.05093865053703769, 0.20849139987047763]) < 1e-6 AND
relative_error(loglikelihood, -428.05790500373399254) < 1e-6 AND
relative_error(std_err, ARRAY[0.20117781307700300, 0.06966981665067325, 0.04691285708902546]) < 1e-6 AND
relative_error(robust_se, ARRAY[0.18929312730428571, 0.06364037833687450, 0.04464477664866482]) < 1e-6 AND
relative_error(robust_z, ARRAY[-3.0632956821850557, -0.8004140117992169, 4.6700065611530599]) < 1e-6 AND
relative_error(robust_p, ARRAY[0.00218913638636697, 0.423470965451148, 0.00000301190115603589]) < 1e-6,
'Cox Robust Variance Estimators (bladder w/ stratification): Wrong results'
) FROM bladder_rv_coxph_out;
-- cluster variance
drop table if exists bladder_cv_coxph_out;
select clustered_variance_coxph('bladder_coxph_out', 'bladder_cv_coxph_out', 'id');
SELECT assert(
relative_error(coef, ARRAY[-0.57986081953852453, -0.05093865053703769, 0.20849139987047763]) < 1e-6 AND
relative_error(loglikelihood, -428.05790500373399254) < 1e-6 AND
relative_error(std_err, ARRAY[0.20117781307700300, 0.06966981665067325, 0.04691285708902546]) < 1e-6 AND
relative_error(clustered_se, ARRAY[0.30343529013002124, 0.09303573931640849, 0.06567477635846880]) < 1e-6 AND
relative_error(clustered_z, ARRAY[-1.9109867520355186, -0.5475170177752731, 3.1746038803768615]) < 1e-6 AND
relative_error(clustered_p, ARRAY[0.05600628340725960, 0.58402358222142303, 0.00150041173830195]) < 1e-6,
'Cox Cluster Variance Estimators (bladder w/ cluster(id) w/ stratification): Wrong results'
) FROM bladder_cv_coxph_out;