1 /* 2 3 PhyML: a program that computes maximum likelihood phylogenies from 4 DNA or AA homologous sequences. 5 6 Copyright (C) Stephane Guindon. Oct 2003 onward. 7 8 All parts of the source except where indicated are distributed under 9 the GNU public licence. See http://www.opensource.org for details. 10 11 */ 12 13 #include <config.h> 14 15 #ifndef STATS_H 16 #define STATS_H 17 18 #include "utilities.h" 19 #include "free.h" 20 #include "lk.h" 21 #include "optimiz.h" 22 #include "models.h" 23 #include "eigen.h" 24 25 26 phydbl *Covariance_Matrix(t_tree *tree); 27 phydbl *Hessian(t_tree *tree); 28 void Recurr_Hessian(t_node *a, t_node *b, int plus_minus, phydbl *inc, phydbl *res, int *is_ok, t_tree *tree); 29 phydbl stdnormal_inv(phydbl p); 30 phydbl Uni(); 31 int Rand_Int(int min, int max); 32 phydbl Ahrensdietergamma(phydbl alpha); 33 phydbl Rgamma(phydbl shape, phydbl scale); 34 phydbl Rexp(phydbl lambda); 35 phydbl Bico(int n, int k); 36 phydbl Factln(int n); 37 phydbl Gammln(phydbl xx); 38 phydbl Pbinom(int N, int ni, phydbl p); 39 phydbl LnGamma (phydbl alpha); 40 phydbl IncompleteGamma(phydbl x, phydbl alpha, phydbl ln_gamma_alpha); 41 phydbl PointChi2 (phydbl prob, phydbl v); 42 phydbl Bivariate_Normal_Density(phydbl x, phydbl y, phydbl mux, phydbl muy, phydbl sdx, phydbl sdy, phydbl rho); 43 phydbl PointNormal (phydbl prob); 44 int DiscreteGamma (phydbl freqK[], phydbl rK[],phydbl alfa, phydbl beta, int K, int median); 45 phydbl Pnorm(phydbl x, phydbl mean, phydbl var); 46 phydbl Dnorm_Moments(phydbl x, phydbl mean, phydbl var); 47 phydbl Dnorm(phydbl x, phydbl mean, phydbl sd); 48 phydbl Pgamma(phydbl x, phydbl shape, phydbl scale); 49 phydbl Dgamma_Moments(phydbl x, phydbl mean, phydbl var); 50 phydbl Dgamma(phydbl x, phydbl shape, phydbl scale); 51 phydbl LnFact(int n); 52 int Choose(int n, int k); 53 phydbl LnChoose(int n, int k); 54 phydbl Ppois(phydbl x, phydbl param); 55 phydbl Dexp(phydbl x, phydbl param); 56 phydbl Dpois(phydbl x, phydbl param, int logit); 57 phydbl Rand_Normal_Deviate(phydbl mean, phydbl sd); 58 phydbl Rnorm(phydbl mean, phydbl sd); 59 phydbl *Rnorm_Multid(phydbl *mu, phydbl *cov, int dim); 60 phydbl Rnorm_Trunc(phydbl mean, phydbl sd, phydbl min, phydbl max, int *err); 61 phydbl *Rnorm_Multid_Trunc(phydbl *mean, phydbl *cov, phydbl *min, phydbl *max, int dim); 62 phydbl *Hessian_Log(t_tree *tree); 63 void Recurr_Hessian_Log(t_node *a, t_node *d, int plus_minus, phydbl *inc, phydbl *res, int *is_ok, t_tree *tree); 64 phydbl Log_Det(int *is_ok, t_tree *tree); 65 phydbl Dnorm_Trunc(phydbl x, phydbl mean, phydbl sd, phydbl lo, phydbl up); 66 phydbl Normal_Trunc_Mean(phydbl mu, phydbl sd, phydbl min, phydbl max); 67 phydbl Constraint_Normal_Trunc_Mean(phydbl wanted_mu, phydbl sd, phydbl min, phydbl max); 68 phydbl Dnorm_Multi(phydbl *x, phydbl *mu, phydbl *cov, int size, int _log); 69 phydbl Dnorm_Multi_Given_InvCov_Det(phydbl *x, phydbl *mu, phydbl *invcov, phydbl det, int size, int _log); 70 phydbl Prop_Log_Dnorm_Multi_Given_InvCov_Det(phydbl *x, phydbl *mu, phydbl *invcov, phydbl det, int size); 71 phydbl Log_Dnorm(phydbl x, phydbl mean, phydbl sd, int *err); 72 phydbl tt800(); 73 phydbl Pnorm_Ihaka_Derived_From_Cody(phydbl x); 74 int Matinv(phydbl *x, const int n, const int m, const int verbose); 75 phydbl *Matrix_Mult(phydbl *A, phydbl *B, int nra, int nca, int nrb, int ncb); 76 phydbl *Matrix_Transpose(phydbl *A, int dim); 77 void Normal_Conditional(phydbl *mu, phydbl *cov, phydbl *a, int n, short int *is_1, int n1, phydbl *cond_mu, phydbl *cond_var); 78 void Normal_Conditional_Unsorted(phydbl *mu, phydbl *cov, phydbl *a, int n, short int *is_1, int n1, phydbl *cond_mu, phydbl *cond_cov); 79 phydbl Matrix_Det(phydbl *A, int size, int _log); 80 void Get_Reg_Coeff(phydbl *mu, phydbl *cov, phydbl *a, int n, short int *is_1, int n1, phydbl *reg_coeff); 81 phydbl Rnorm_Trunc_Inverse(phydbl mean, phydbl sd, phydbl min, phydbl max, int *error); 82 phydbl Norm_Trunc_Sd(phydbl mu, phydbl sd, phydbl a, phydbl b); 83 phydbl Norm_Trunc_Mean(phydbl mu, phydbl sd, phydbl a, phydbl b); 84 int Norm_Trunc_Mean_Sd(phydbl mu, phydbl sd, phydbl a, phydbl b, phydbl *trunc_mu, phydbl *trunc_sd); 85 phydbl Log_Dnorm_Trunc(phydbl x, phydbl mean, phydbl sd, phydbl lo, phydbl up, int *err); 86 phydbl Pnorm_Marsaglia(phydbl x); 87 int Iter_Matinv(phydbl *x, int n, int m, int verbose); 88 phydbl Dorder_Unif(phydbl x, int r, int n, phydbl min, phydbl max); 89 phydbl Covariance(phydbl *x, phydbl *y, int n); 90 phydbl *Rnorm_Multid_Trunc_Constraint(phydbl *mu, phydbl *cov, phydbl *min, phydbl *max, phydbl *lambda, phydbl k, phydbl *res, int len); 91 phydbl *Gradient(t_tree *tree); 92 phydbl *Hessian_Seo(t_tree *tree); 93 void Integrated_Brownian_Bridge_Moments(phydbl x_beg, phydbl x_end, 94 phydbl y_beg, phydbl y_end, 95 phydbl sd, phydbl *mean, phydbl *var); 96 void Integrated_Geometric_Brownian_Bridge_Moments(phydbl T, phydbl A, phydbl B, phydbl u, phydbl *mean, phydbl *var); 97 void Integrated_Geometric_Brownian_Bridge_Mean(phydbl T, phydbl A, phydbl B, phydbl u, phydbl *mean); 98 void Integrated_Geometric_Brownian_Bridge_Var(phydbl T, phydbl A, phydbl B, phydbl u, phydbl *mean); 99 int Sample_i_With_Proba_pi(phydbl *pi, int len); 100 int* Sample_n_i_With_Proba_pi(phydbl *pi, int len,int n_elts); 101 phydbl Quantile(phydbl *x, int len, phydbl p); 102 phydbl Prob(phydbl *x, int len, phydbl z); 103 phydbl Inverse_Truncated_Normal(phydbl y, phydbl mu, phydbl sigma, phydbl lim_inf, phydbl lim_sup); 104 phydbl Progressive_EXP(phydbl x); 105 int *Permutate(int len); 106 phydbl Mantel(phydbl *x, phydbl *y, int nrow, int ncol); 107 phydbl Weighted_Mean(phydbl *x, phydbl *w, int l); 108 int Sum_Bits(int value, int range); 109 int Modulo (int a, int b); 110 void Runif_Disk(phydbl *sampled_x, phydbl *sampled_y, phydbl centrx, phydbl centry, phydbl radius); 111 void Random_String(char *s, int len); 112 int *Random_Permut(int n); 113 phydbl Dexp_Trunc(phydbl x, phydbl lambda, phydbl left, phydbl rght); 114 phydbl Rexp_Trunc(phydbl lambda, phydbl left, phydbl rght); 115 t_poly *Rpoly(int n); 116 phydbl Area_Of_Poly_Monte_Carlo(t_poly *poly, t_geo_coord *lim); 117 int Is_In_Polygon(t_geo_coord *point, t_poly *poly); 118 phydbl Variance(phydbl *x, int l); 119 phydbl Bessi0(phydbl x); 120 phydbl Bessk0(phydbl x); 121 phydbl Euclidean_Dist(t_geo_coord *x, t_geo_coord *y); 122 int *Ranks(phydbl *x, int len); 123 phydbl Rpois(phydbl mmu); 124 phydbl Rgeom(phydbl p); 125 phydbl Dgeom(phydbl k, phydbl p, int logit); 126 phydbl Pgeom(phydbl k, phydbl p); 127 phydbl *Brownian_Bridge_Generate(phydbl start, phydbl end, phydbl var, phydbl beg_time, phydbl end_time, int n_steps, phydbl *time); 128 phydbl *Brownian_Generate(phydbl var, int n_steps, phydbl beg_time, phydbl *time); 129 phydbl Brownian_Bridge_Logdensity(phydbl start, phydbl end, phydbl *state, phydbl var, phydbl end_time, int n_steps, phydbl *time); 130 phydbl Reflected(phydbl x, phydbl down, phydbl up); 131 phydbl *Random_Walk_Generate(phydbl var, int n_steps); 132 phydbl *Random_Walk_Bridged_Generate(phydbl start, phydbl end, phydbl var, int n_steps); 133 phydbl Dnbinom(phydbl x, phydbl n, phydbl p, int logit); 134 phydbl Rnbinom(phydbl n, phydbl p); 135 phydbl Erf(phydbl x); 136 phydbl Rnorm_Trunc_Algo1(phydbl alpha, phydbl beta); 137 phydbl Rnorm_Trunc_Algo2(phydbl alpha, phydbl beta); 138 phydbl Rnorm_Trunc_Algo3(phydbl alpha, phydbl beta); 139 phydbl Rnorm_Trunc_Algo4(phydbl alpha, phydbl beta); 140 141 142 143 144 145 #endif 146