diff --git a/CUtils/CUtils.xs b/CUtils/CUtils.xs index a4308ab189819909304e1bb4ab70398c377945c3..85acfd028ec70f69ab6e86126ca575b9abff7d83 100644 --- a/CUtils/CUtils.xs +++ b/CUtils/CUtils.xs @@ -7,6 +7,7 @@ #include "fisher.h" #include "chisq.h" #include "double_permutation.h" +#include "resampling.h" #include "stats.h" #include "const-c.inc" @@ -15,6 +16,11 @@ MODULE = ALTree::CUtils PACKAGE = ALTree::CUtils INCLUDE: const-xs.inc +############################################################ +# fisher.h +############################################################ + + double bilateral(a, b, c, d) double a @@ -23,9 +29,11 @@ bilateral(a, b, c, d) double d double -critchi(p, df) - double p - int df +right(a, b, c, d) + double a + double b + double c + double d double left(a, b, c, d) @@ -34,17 +42,23 @@ left(a, b, c, d) double c double d +############################################################ +# chisq.h +############################################################ + double pochisq(x, df) double x int df double -right(a, b, c, d) - double a - double b - double c - double d +critchi(p, df) + double p + int df + +############################################################ +# double_permutation.h +############################################################ HV * DoublePermutation(nb_sample, nb_chi2, data) @@ -109,6 +123,10 @@ DoublePermutation(nb_sample, nb_chi2, data) OUTPUT: RETVAL +############################################################ +# stats.h +############################################################ + void ClassicalChi2(tabnodes) AV * tabnodes @@ -142,10 +160,11 @@ ClassicalChi2(tabnodes) res=classical_chi2(nb_nodes, nodes); - XPUSHs(sv_2mortal(newSVnv(res.chi2))); - XPUSHs(sv_2mortal(newSViv(res.chi2invalid))); - XPUSHs(sv_2mortal(newSViv(res.error))); - XPUSHs(sv_2mortal(newSViv(res.sum_control))); - XPUSHs(sv_2mortal(newSViv(res.sum_case))); + EXTEND(SP, 5); + PUSHs(sv_2mortal(newSVnv(res.chi2))); + PUSHs(sv_2mortal(newSViv(res.chi2invalid))); + PUSHs(sv_2mortal(newSViv(res.error))); + PUSHs(sv_2mortal(newSViv(res.sum_control))); + PUSHs(sv_2mortal(newSViv(res.sum_case))); free(nodes); diff --git a/CUtils/c_sources/debug.h b/CUtils/c_sources/debug.h new file mode 100644 index 0000000000000000000000000000000000000000..7b73655c507283a3ec8edadc98dbda7d2b68e309 --- /dev/null +++ b/CUtils/c_sources/debug.h @@ -0,0 +1,15 @@ +#ifndef _DEBUG_H +#define _DEBUG_H + +#define DEBUG + +#ifdef DEBUG +# include <stdio.h> +# define debug(str,...) fprintf(stderr, str "\n", ##__VA_ARGS__) +#else +# define debug(str,...) ((void)0) +# define NDEBUG +#endif +#include <assert.h> + +#endif diff --git a/CUtils/c_sources/double_permutation.c b/CUtils/c_sources/double_permutation.c index 6d161203e9e8a96ed690a0169b8975ea37afd311..4cc4ae8074facb7178d451005202534b8402cfd8 100644 --- a/CUtils/c_sources/double_permutation.c +++ b/CUtils/c_sources/double_permutation.c @@ -183,7 +183,7 @@ int main(int argc, char *argv[]) int nb_sample, nb_chi2; matrice_t mat; replicat_t rep; - int j; + int j,i; datatype_t min; nb_sample=atoi(argv[1]); @@ -194,12 +194,27 @@ int main(int argc, char *argv[]) read_matrice(mat, nb_sample, nb_chi2); //printf("Matrice lue\n"); + for(i=0; i<nb_sample; i++) { + for(j=0; j<nb_chi2; j++) { + printf("\t"CONV, mat[j][i]); + } + printf("\n"); + } - min=calcul(nb_sample, nb_chi2, mat, rep); + ensemble_t ens_min_pval; + + ens_min_pval=alloc_ensemble(nb_sample); + + min=double_permutation(nb_sample, nb_chi2, mat, rep, ens_min_pval); + + free_ensemble(ens_min_pval); for (j=0; j<nb_chi2; j++) { printf("chi2 niveau %i, pval nc "CONV"\n", j+1, rep[j]); } + for (i=0; i<nb_sample; i++) { + printf("sample %i, pval min "CONV"\n", i, ens_min_pval[i]); + } printf("pmin corrigé: "CONV"\n", min); free_matrice(mat, nb_sample, nb_chi2); diff --git a/CUtils/c_sources/fisher.c b/CUtils/c_sources/fisher.c index 772c4e23fb4f0d89a2e2252be4d73429f187045b..3fc4ff91c47b194deb9c5d03701aee71a3dff2f5 100644 --- a/CUtils/c_sources/fisher.c +++ b/CUtils/c_sources/fisher.c @@ -1,6 +1,7 @@ #include "fisher.h" #include <math.h> +#include <stdlib.h> typedef struct { double bilateral; @@ -164,7 +165,7 @@ static result_t fisher(double n11, double n12, double n21, double n22) double n1_; double n_1; double n; - double prob; + //double prob; if(n11<0) n11 *= -1; if(n12<0) n12 *= -1; @@ -174,7 +175,8 @@ static result_t fisher(double n11, double n12, double n21, double n22) n1_ = n11+n12; n_1 = n11+n21; n = n11 +n12 +n21 +n22; - prob=exact(n11,n1_,n_1,n); + //prob= + exact(n11,n1_,n_1,n); res.bilateral=sleft+sright; res.left=sless; diff --git a/CUtils/c_sources/stats.c b/CUtils/c_sources/stats.c index 4a4bbb762b3bf595c145878a322669c885913617..fa30647b641bbf721a65fddbfa80daa2cf6536da 100644 --- a/CUtils/c_sources/stats.c +++ b/CUtils/c_sources/stats.c @@ -1,4 +1,5 @@ +#include "debug.h" #include "stats.h" #include <stdio.h> #include <stdlib.h>