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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d61f133522ad431b5b1d5e1c46108b06cedde6c7
4
- data.tar.gz: 7dce85fc0abf74bd51773990fdcd92237f5db144
3
+ metadata.gz: 0f52fb32cd59426856683c0b39f3c8149930a9ef
4
+ data.tar.gz: df2e4f59b250fc4871f7e51bddf5a3cf1a3981cf
5
5
  SHA512:
6
- metadata.gz: f8a8c976017428dc0d6b3f1c4022f2b0eccd6453764060db49e9d4ec846219e48dc29eb3c37a5970e9012d500eef986e91f4e9054daab9a7594f207faf07fa15
7
- data.tar.gz: e05eebcaba60be2548a8af81e67c3892b34bd4138c6e6b86336ff41fa4a8d7159b5c742043bbdc5a895959b793089bce7fb644fe85a7c02e0d9e81d7f17f4d2c
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
- return ((struct point*)a)->x - ((struct point*)b)->x;
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
- //count number of unique uncensored time point
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
- for (i = 0; i < updated_cens_ucens_number->size; i++)
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
- if (i > 0)
293
- {
294
- N = (N - updated_cens_ucens_number->uncensored[i - 1]
295
- - updated_cens_ucens_number->censored[i - 1]);
296
-
297
- KM[i].x = updated_cens_ucens_number->time[i];
298
- KM[i].y = 1.0 * (N - updated_cens_ucens_number->uncensored[i] - updated_cens_ucens_number->censored[i]) / (N - updated_cens_ucens_number->censored[i]) * KM[i - 1].y;
299
- } else {
300
- KM[0].x = updated_cens_ucens_number->time[i];
301
- KM[0].y = 1.0 * (N - updated_cens_ucens_number->uncensored[0] - updated_cens_ucens_number->censored[0]) / (N - updated_cens_ucens_number->censored[0]);
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
@@ -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
  {
Binary file
Binary file
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sstat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Haipeng Li