コード例 #1
0
void test_multinomial(void){
    double p[SIZE] = { .1, .2, .3, .4 };
    int n[SIZE] = { 0, 0, 0, 0 };
    int numdraws = 100;
    double prob;

    gsl_ran_multinomial(rng, SIZE, numdraws, p, n); 

    printf("gsl_ran_multinomial\t%d\t", numdraws);
    print_double_array(p, SIZE);
    printf("\t");
    print_int_array(n, SIZE);
    printf("\n");

    prob = gsl_ran_multinomial_pdf(SIZE, p, n); 
    printf("gsl_ran_multinomial_pdf\t");
    print_double_array(p, SIZE);
    printf("\t");
    print_int_array(n, SIZE);
    printf("\t%.12f\n", prob);

    prob = gsl_ran_multinomial_lnpdf(SIZE, p, n); 
    printf("gsl_ran_multinomial_lnpdf\t");
    print_double_array(p, SIZE);
    printf("\t");
    print_int_array(n, SIZE);
    printf("\t%.12f\n", prob);
}
コード例 #2
0
ファイル: mlgsl_randist.c プロジェクト: ptrf/LCDE
CAMLprim value ml_gsl_ran_multinomial_pdf(value p, value n)
{
  const size_t K = Double_array_length(p);
  LOCALARRAY(unsigned int, N, K); 
  double r;
  register int i;
  for(i=0; i<K; i++)
    N[i] = Int_val(Field(n, i));
  r = gsl_ran_multinomial_pdf(K, Double_array_val(p), N);
  return copy_double(r);
}
コード例 #3
0
double
test_multinomial_pdf (unsigned int n_0)
{
  /* The margional distribution of just 1 variate  is binomial. */
  size_t K = 2;
  /* Test use of weights instead of probabilities */
  double p[] = { 0.4, 1.6};
  const unsigned int sum_n = BINS;
  unsigned int n[2];

  n[0] = n_0;
  n[1] =sum_n - n_0;

  return gsl_ran_multinomial_pdf (K, p, n);
}
コード例 #4
0
ファイル: pvalue.c プロジェクト: lvaruzza/kempbasu
void pvalue_all_3d(gsl_rng * r,
		   gsl_vector_uint *x,
		   gsl_vector_uint *sums) {

  assert(x->size == sums->size);

  size_t i,j,k;

  size_t dim=x->size;
  unsigned int N=0;
  unsigned int NN=0;

  for(i=0;i<dim;i++) {
    N+=ELT(x,i);
    NN+=ELT(sums,i);
  }

  double *p=(double*)malloc(sizeof(double)*dim);

  for(i=0;i<dim;i++) {
    p[i]=((double)ELT(sums,i))/NN;
  }

  double cutoff = logRV(dim,x,sums,NN);
  fprintf(stderr,"cutoff = %f\n",cutoff);

  double rv;
  unsigned int positives=0;

  gsl_vector_uint *n=gsl_vector_uint_alloc(dim);


  FILE *graph_pos,*graph_neg;

  char buff[256];
  sprintf(buff,"pvalue_graph_pos-%i-%i-%i.dat",x->data[0],x->data[1],x->data[2]);

  if ( (graph_pos=fopen(buff,"w+"))==NULL) {
    fprintf(stderr,"ERROR: Can't open pvalue_graph_pos.dat");
    exit(-1);
  }

  sprintf(buff,"pvalue_graph_neg-%i-%i-%i.dat",x->data[0],x->data[1],x->data[2]);
  if ( (graph_neg=fopen(buff,"w+"))==NULL) {
    fprintf(stderr,"ERROR: Can't open pvalue_graph_neg.dat");
    exit(-1);
  }

  double pr;
  double pv=0;
  unsigned int positivos=0;
  unsigned int total=0;

  pr=gsl_ran_multinomial_pdf(dim,p,x->data);

  printf("pr(x) = %f\n",pr);

  for (i=0; i <= N;i+=1) {
    SET_ELT(n,0,i);
    for(j=0; i+j<= N;j+=1) { 
      SET_ELT(n,1,j);
      SET_ELT(n,2,N-(i+j));	

      rv=logRV(dim,n,sums,NN);
      pr=gsl_ran_multinomial_pdf(dim,p,n->data);
      //printf("%f %f\n",rv,cutoff);
	
      if (rv <= cutoff) { 
	  pv+=pr;
	  positives++;
	  fprintf(graph_pos,"%u %u %f\n",i,j,pr);
      } else {
	fprintf(graph_neg,"%u %u %f\n",i,j,pr);
      }
      total++;
    }
  }
  printf("pos = %u total = %u: ratio = %f\n",positives,total,((double)positives)/total);
  printf("pvalue2 = %f\n",pv);
  fclose(graph_pos);
  fclose(graph_neg);

  /*for (i = 0; i < runs; i++)  {
    gsl_ran_multinomial (r, dim, N, p, n->data);
    rv=logRV(dim,n,sums,NN);
    if (rv <= cutoff) 
      positives++;
    //fprintf(stderr,"%i: %i %i\t%f\t%i\n",i,n[0],n[1],rv,);    
    }*/

  free(p);
  //free(n);
  gsl_vector_uint_free(n);
}