Beispiel #1
0
int
main (int argc, char **argv)
{
  FILE *ofile;
  int nlambda = 0;
  int i, m;
  double zn, zvar, tw, tail;
  double *xx[0], *lambda;

  readcommands (argc, argv);
  settwxtable (twxtab);

  if (oname == NULL)
    ofile = stdout;
  else
    openit (oname, &ofile, "w");

  if (iname == NULL)
    fatalx ("i paraameter compulsory\n");
  nlambda = numlines (iname);
  ZALLOC(lambda, nlambda, double);
  xx[0] = lambda;
  nlambda = getxx (xx, nlambda, 1, iname);
  vst (lambda, lambda, -1.0, nlambda);
  sortit (lambda, NULL, nlambda);
  vst (lambda, lambda, -1.0, nlambda);
  m = numgtz (lambda, nlambda);

  fprintf (ofile, "%4s  %12s", "#N", "eigenvalue");
  fprintf (ofile, "%12s", "difference");
  fprintf (ofile, " %9s %12s", "twstat", "p-value");
  fprintf (ofile, " %9s", "effect. n");
  fprintf (ofile, "\n");

  for (i = 0; i < m; ++i)
    {

      zn = nval;
      tail = dotwcalc (lambda + i, m - i, &tw, &zn, &zvar, minleneig);
      fprintf (ofile, "%4d  %12.6f", i + 1, lambda[i]);
      if (i == 0)
        fprintf (ofile, "%12s", "NA");
      else
        fprintf (ofile, "%12.6f", lambda[i] - lambda[i - 1]);
      if (tail >= 0.0)
        fprintf (ofile, " %9.3f %12.6g", tw, tail);
      else
        fprintf (ofile, " %9s %12s", "NA", "NA");
      if (zn > 0.0)
        {
          fprintf (ofile, " %9.3f", zn);
        }
      else
        {
          fprintf (ofile, " %9s", "NA");
        }
      fprintf (ofile, "\n");
    }
  return 0;
}
void
gettw(double x, double *tailp, double *densp)   
// main routine for accessing twtable

{
     int k, n  ; 
     double x0, x1, f0, f1, f0p, f1p ;  
     double *xx[3] ;


  if (twtabsize = -1)  {
    
    if (settwxtable(TWXTABLE) < 0) 
     fatalx("twtable not readable %s\n", TWXTABLE) ;
    k = numlines(twxtable) ;
    ZALLOC(twxval, k, double) ;
    ZALLOC(twxpdf, k, double) ;
    ZALLOC(twxtail, k, double) ;
    xx[0] = twxval ;
    xx[1] = twxtail ;
    xx[2] = twxpdf ;
    twtabsize = getxx(xx, k, 3, twxtable) ;
  }
  n = twtabsize ;

     k = firstgtx(x, twxval, n) ;    
     
     if (k<=0) {  
       *tailp = 1.0 ; 
       *densp = 0.0 ; 
       return ;
     }

     if (k>=n) { 
       *tailp = twdensx(x)  ;
       *densp  = twtailx(x) ;
       return ; 
     }

     x0 = twxval[k-1] ; 
     x1 = twxval[k] ;  
     f0  = twxtail[k-1] ;
     f0p = twxpdf[k-1] ;
     f1 =  twxtail[k] ;
     f1p = twxpdf[k] ;

// now do cubic interpolation
     cinterp(x, x0, x1, 
      f0, -f0p, f1, -f1p, tailp, densp) ;
      *densp = - *densp ;

/**
     printf("zzz %9.3f %9.3f %9.3f\n", x0, x1, x) ;
     printf("zz1 %9.3f %9.3f %9.3f\n", f0, f1, *tailp) ;
     printf("zz2 %9.3f %9.3f %9.3f\n", f0p, f1p, *densp) ;
*/

}