sstat 0.0.6 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/sstat/lib/global_utility.h +5 -1
- data/ext/sstat/lib/survival_kaplan_meier.h +39 -42
- data/ext/sstat/lib/type_def.h +9 -0
- data/ext/sstat/sstat.o +0 -0
- data/ext/sstat/sstat.so +0 -0
- data/lib/sstat.so +0 -0
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0f52fb32cd59426856683c0b39f3c8149930a9ef
|
|
4
|
+
data.tar.gz: df2e4f59b250fc4871f7e51bddf5a3cf1a3981cf
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f3a325825110d472184d01335f1b4695384738ed392d13929c4c0a599bce2e7c44e84a4155a83a4d5daf93faf391efed89bd0024831b4d750c85d43a5bbaff2a
|
|
7
|
+
data.tar.gz: c5acd62484cad1b9de148f12bf0a279811f4309fecdb6d4b0384ee29246364159f8097a2ed9e4c13beeee2dffd2f8d77ca379006ad083bb228f3cbbdb98e48a8
|
|
@@ -11,7 +11,11 @@ int compare_double (const void * a, const void * b)
|
|
|
11
11
|
|
|
12
12
|
int point_compare_x (const void * a, const void * b)
|
|
13
13
|
{
|
|
14
|
-
|
|
14
|
+
double diff = (double)(((struct point*)a)->x) - (double)(((struct point*)b)->x);
|
|
15
|
+
if(diff > 0)
|
|
16
|
+
return 1;
|
|
17
|
+
else
|
|
18
|
+
return 0;
|
|
15
19
|
}
|
|
16
20
|
|
|
17
21
|
#endif
|
|
@@ -31,8 +31,9 @@ int censored_uncensred_each_time_range(double* time, int* censored, int size, s
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
qsort(time_censored_array, size, sizeof(struct point), &point_compare_x);
|
|
34
|
+
//print_points(time_censored_array, size);
|
|
34
35
|
|
|
35
|
-
|
|
36
|
+
/* count number of unique uncensored time point */
|
|
36
37
|
int count = 0;
|
|
37
38
|
for (i = 0; i < size; i++)
|
|
38
39
|
{ //uncensored
|
|
@@ -149,6 +150,27 @@ error:
|
|
|
149
150
|
return OUTOF_MEMORY_ERROR;
|
|
150
151
|
}
|
|
151
152
|
|
|
153
|
+
void calculate_kaplan_meier(int size, const struct CENS_UC_NUM* cens_ucens_number, struct point** KM)
|
|
154
|
+
{
|
|
155
|
+
int i;
|
|
156
|
+
int N = size; //total sample number
|
|
157
|
+
|
|
158
|
+
for (i = 0; i < cens_ucens_number->size; i++)
|
|
159
|
+
{
|
|
160
|
+
if (i > 0)
|
|
161
|
+
{
|
|
162
|
+
N = (N - cens_ucens_number->uncensored[i - 1]
|
|
163
|
+
- cens_ucens_number->censored[i - 1]);
|
|
164
|
+
|
|
165
|
+
(*KM)[i].x = cens_ucens_number->time[i];
|
|
166
|
+
(*KM)[i].y = 1.0 * (N - cens_ucens_number->uncensored[i] - cens_ucens_number->censored[i]) / (N - cens_ucens_number->censored[i]) * (*KM)[i - 1].y;
|
|
167
|
+
} else {
|
|
168
|
+
(*KM)[0].x = cens_ucens_number->time[i];
|
|
169
|
+
(*KM)[0].y = 1.0 * (N - cens_ucens_number->uncensored[0] - cens_ucens_number->censored[0]) / (N - cens_ucens_number->censored[0]);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
152
174
|
/**
|
|
153
175
|
* @brief calculate the kaplan meier
|
|
154
176
|
* @param time Event time array
|
|
@@ -164,28 +186,10 @@ int kaplan_meier(double* time, int* censored, int size, curve* KM_curve)
|
|
|
164
186
|
|
|
165
187
|
censored_uncensred_each_time_range(time, censored, size, &cens_ucens_number);
|
|
166
188
|
|
|
167
|
-
N = size; //total sample number
|
|
168
|
-
|
|
169
189
|
struct point* KM = alloc_points(size);
|
|
170
|
-
|
|
171
|
-
for (i = 0; i < cens_ucens_number->size; i++)
|
|
172
|
-
{
|
|
173
|
-
if (i > 0)
|
|
174
|
-
{
|
|
175
|
-
N = (N - cens_ucens_number->uncensored[i - 1]
|
|
176
|
-
- cens_ucens_number->censored[i - 1]);
|
|
177
|
-
|
|
178
|
-
KM[i].x = cens_ucens_number->time[i];
|
|
179
|
-
KM[i].y = 1.0 * (N - cens_ucens_number->uncensored[i] - cens_ucens_number->censored[i]) / (N - cens_ucens_number->censored[i]) * KM[i - 1].y;
|
|
180
|
-
} else {
|
|
181
|
-
KM[0].x = cens_ucens_number->time[i];
|
|
182
|
-
KM[0].y = 1.0 * (N - cens_ucens_number->uncensored[0] - cens_ucens_number->censored[0]) / (N - cens_ucens_number->censored[0]);
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
|
|
190
|
+
calculate_kaplan_meier(size, cens_ucens_number, &KM);
|
|
186
191
|
KM_curve->point_array = KM;
|
|
187
192
|
KM_curve->size = cens_ucens_number->size;
|
|
188
|
-
//free_CENS_UC_NUM(&cens_ucens_number);
|
|
189
193
|
return 0;
|
|
190
194
|
}
|
|
191
195
|
|
|
@@ -277,37 +281,30 @@ error:
|
|
|
277
281
|
int kaplan_meier_3p_extrapolation(double* time, int* censored, int size, struct curve* KM_curve)
|
|
278
282
|
{
|
|
279
283
|
int proc_state = 0;
|
|
280
|
-
int i;
|
|
281
284
|
struct CENS_UC_NUM* cens_ucens_number;
|
|
282
285
|
censored_uncensred_each_time_range(time, censored, size, &cens_ucens_number);
|
|
283
|
-
struct CENS_UC_NUM* updated_cens_ucens_number;
|
|
284
|
-
|
|
285
|
-
proc_state = KM_3p_extrapolation(&cens_ucens_number, &updated_cens_ucens_number, size);
|
|
286
|
-
int N = size;
|
|
287
|
-
|
|
288
286
|
struct point* KM = alloc_points(size);
|
|
289
287
|
|
|
290
|
-
|
|
288
|
+
/* If the length of the inital KM curve is less than or equal to 7, we will not apply extrapolation */
|
|
289
|
+
if(cens_ucens_number->size > 6)
|
|
291
290
|
{
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
291
|
+
struct CENS_UC_NUM* updated_cens_ucens_number;
|
|
292
|
+
proc_state = KM_3p_extrapolation(&cens_ucens_number, &updated_cens_ucens_number, size);
|
|
293
|
+
calculate_kaplan_meier(size, updated_cens_ucens_number, &KM);
|
|
294
|
+
KM_curve->point_array = KM;
|
|
295
|
+
KM_curve->size = updated_cens_ucens_number->size;
|
|
296
|
+
KM_curve->point_array = KM;
|
|
297
|
+
free_CENS_UC_NUM(&updated_cens_ucens_number);
|
|
298
|
+
} else {
|
|
299
|
+
calculate_kaplan_meier(size, cens_ucens_number, &KM);
|
|
300
|
+
KM_curve->point_array = KM;
|
|
301
|
+
KM_curve->size = cens_ucens_number->size;
|
|
302
|
+
KM_curve->point_array = KM;
|
|
303
303
|
}
|
|
304
304
|
|
|
305
|
-
KM_curve->point_array = KM;
|
|
306
|
-
KM_curve->size = updated_cens_ucens_number->size;
|
|
307
|
-
|
|
308
305
|
free_CENS_UC_NUM(&cens_ucens_number);
|
|
309
306
|
|
|
310
|
-
free_CENS_UC_NUM(&updated_cens_ucens_number);
|
|
311
307
|
return 0;
|
|
312
308
|
}
|
|
309
|
+
|
|
313
310
|
#endif
|
data/ext/sstat/lib/type_def.h
CHANGED
|
@@ -33,6 +33,15 @@ typedef struct array{
|
|
|
33
33
|
int size;
|
|
34
34
|
} array;
|
|
35
35
|
|
|
36
|
+
void print_points(struct point* points, int size)
|
|
37
|
+
{
|
|
38
|
+
int i;
|
|
39
|
+
for(i = 0; i < size; i++)
|
|
40
|
+
{
|
|
41
|
+
printf("point %i, x : %f, y : %f \n", i, points[i].x, points[i].y);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
36
45
|
|
|
37
46
|
point* alloc_points(int size)
|
|
38
47
|
{
|
data/ext/sstat/sstat.o
CHANGED
|
Binary file
|
data/ext/sstat/sstat.so
CHANGED
|
Binary file
|
data/lib/sstat.so
CHANGED
|
Binary file
|