#include "BetterBootstrapping.h" /*-------------------------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------------------------*/ //Function Declarations: void ReadDates(int NoDates, char *DatesFile, int *Dates); void ReadParams(char *ParamFile, double *kappa_opt, double *eta_opt); void CalcVarianceMat(int NoDates, int *Dates, double kappa, double eta, double **matrix); //void CalcVarianceMatContinuous(int NoDates, int *Dates, double kappa, double eta, // double **matrix); double weibullPDF(double x, double kappa, double eta); double weibull(double t, double kappa, double eta); void SampleKappaEta(int i, double kappa_opt, double eta_opt, double **matrix, double *kappa, double *eta); double CalcNeg2LogLikelihood(int NoDates, int *Dates, double kappa, double eta); void OutputKappaEta(int SampleSize, char *OutFile, double *kappa, double *eta, double *neg2lnL); /*-------------------------------------------------------------------------------------------*/ //Global variables: long seed, rcount; /*-------------------------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------------------------*/ int main(int argc, char *argv[]) { char DatesFile[255], ParamFile[255], OutFile[255]; int NoDates, *Dates; double kappa_opt, eta_opt; double **variance_matrix; int SampleSize; double *kappa, *eta, *neg2lnL; int i; if(argc<7) ERR_CRITICAL( "Syntax: .\n"); sscanf_s(argv[1], "%d", &NoDates); sscanf_s(argv[2], "%s", DatesFile, sizeof(DatesFile)); sscanf_s(argv[3], "%s", ParamFile, sizeof(ParamFile)); sscanf_s(argv[4], "%s", OutFile, sizeof(OutFile)); sscanf_s(argv[5], "%d", &SampleSize); sscanf_s(argv[6], "%d", &seed); if(seed>0) seed=-seed; if(seed==0) { seed=(long)time(NULL); if(seed>0) seed=-seed; } ran3(&seed); if( (variance_matrix=dmatrix(0, 2, 0, 2))==0 ) ERR_CRITICAL("main: Unable to allocate memory for variance_matrix.\n"); if( (Dates=(int *) calloc(NoDates, sizeof(int)))==0 ) ERR_CRITICAL("main: Unable to allocate memory for Dates.\n"); if( (kappa=(double *) calloc(SampleSize, sizeof(double)))==0 ) ERR_CRITICAL("main: Unable to allocate memory for kappa.\n"); if( (eta=(double *) calloc(SampleSize, sizeof(double)))==0 ) ERR_CRITICAL("main: Unable to allocate memory for eta.\n"); if( (neg2lnL=(double *) calloc(SampleSize, sizeof(double)))==0 ) ERR_CRITICAL("main: Unable to allocate memory for neg2lnL.\n"); ReadDates(NoDates, DatesFile, Dates); ReadParams(ParamFile, &kappa_opt, &eta_opt); CalcVarianceMat(NoDates, Dates, kappa_opt, eta_opt, variance_matrix); printf("Variance matrix:\n\t%lg\t%lg\n\t%lg\t%lg\n", variance_matrix[0][0], variance_matrix[1][0], variance_matrix[0][1], variance_matrix[1][1]); for(i=0;i=0;i++){ eofind=fscanf_s(indat, "%d", &Dates[i]); } if(eofind<0) ERR_CRITICAL("ReadDates: dates input file does not contain enough dates.\n"); fclose(indat); printf("dataset %s\n", DatesFile); printf("Successfully read list of dates.\n"); } /*-------------------------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------------------------*/ void ReadParams(char *ParamFile, double *kappa_opt, double *eta_opt) { FILE *indat; if( fopen_s(&indat, ParamFile, "r")!=0 ) ERR_CRITICAL("ReadParam: Unable to open OptParamFile for input.\n"); fscanf_s(indat, "%lg %lg", kappa_opt, eta_opt); fclose(indat); printf("Successfully read Params.\n"); } /*-------------------------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------------------------*/ void CalcVarianceMat(int NoDates, int *Dates, double kappa, double eta, double **matrix) { int i, j; double lnL_kappa2=0.0, lnL_kappa_eta=0.0, lnL_eta2=0.0; double lnL=0.0, lnL_kappa=0.0, lnL_eta=0.0; double sum_Ep, sum_bkp, sum_bep, sum_bkkp, sum_bkep, sum_beep; double sum_Em, sum_bkm, sum_bem, sum_bkkm, sum_bkem, sum_beem; double Ep, Em, bkp, bkm, bep, bem, bkkp, bkkm, bkep, bkem, beep, beem; int T; double lnetaTp, lnetaTm, etaTptokappa, etaTmtokappa; double det; for(j=1;j0) sum_w += exp(-pow(eta*(T-0.5), kappa)) - exp(-pow(eta*(T+0.5), kappa)); } if(sum_w>0.0) lnL += log(sum_w); } return -2*lnL; } /*-------------------------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------------------------*/ void OutputKappaEta(int SampleSize, char *OutFile, double *kappa, double *eta, double *neg2lnL) { FILE *out; int i; if( fopen_s(&out, OutFile, "w")!=0 ) ERR_CRITICAL("OutputKappaEta: Unable to open file for output.\n"); fprintf(out, "neg2lnL\tkappa\teta\n"); for(i=0;i