arma::Col<double> CubicRegressionFunction::getRegressionImplementation(
      const arma::Col<double>& parameter) const {
    arma::Col<double> regression(numberOfRegressionDimensions_);

    arma::uword n = 0;
    for (arma::uword k = 0; k < numberOfParameterDimensions_; ++k) {
      for (arma::uword l = k; l < numberOfParameterDimensions_; ++l) {
        for (arma::uword m = l; m < numberOfParameterDimensions_; ++m) {
          regression(n++) = parameter(k) * parameter(l) * parameter(m);
        }
      }
    }

    for (arma::uword k = 0; k < numberOfParameterDimensions_; ++k) {
      for (arma::uword l = k; l < numberOfParameterDimensions_; ++l) {
        regression(n++) = parameter(k) * parameter(l);
      }
    }

    regression.subvec(n, n + numberOfParameterDimensions_ - 1) = parameter;
    n += numberOfParameterDimensions_;

    regression(n) = 1;

    return regression;
  }
SparseVector ARSM::observation_matrix(int t)const {
    int n = regression()->dat().size();
    if(t < n) return RegressionStateModel::observation_matrix(t);
    if(t > n) {
        report_error("argument too large in "
                     "AggregatedRegressionStateModel::observation_matrix");
    }
    // Handle the t == n case, which will occur on the final step of
    // the Kalman filter.
    double eta = regression()->predict(final_x_);
    SparseVector ans(1);
    ans[0] = eta;
    return ans;
}
Exemple #3
0
void testBivariateStats(){

 
 float x[]={95.0,85.0,80.0,70.0,60.0};
 float y[]={85.0,95.0,70.0,65.0,70.0};
 regressionCoefficients coeffs;
 
 coeffs=regression(x,y,5);
 
 printf("\nBivariate Stats\n"); 
 printf("correlation =%f\n",correlation(x,y,5));
 printf("covariance =%f\n",covariance(x,y,5));
 printf("rmse =%f\n",rmse(x,y,5));
 printf("bias =%f\n",bias(x,y,5));
 printf("m =%f\n",coeffs.m);
 printf("c =%f\n",coeffs.c);
 
}
int main(int argc, char *argv[])
{
    if(argc>1 && argv[1][0]=='-' && argv[1][1]=='r') /* appel du test de régression */
    {
        regression();
        return 0;
    }

    int contreordinateur, niveauordinateur, plateau;

    /* paramètres de jeu par défaut */
    contreordinateur = 1;
    niveauordinateur = 3;
    plateau = 1;

    while(menuPrincipal(&contreordinateur, &niveauordinateur, &plateau)==1)
    {
        Jouer( contreordinateur, niveauordinateur, plateau);
    }
    return 0;
}
Exemple #5
0
int svg_plot(config *cfg, plot_info *pi, data_set *ds) {
    svg_theme *theme = cfg->svg_theme;
    svg_printf_header(pi->w, pi->h);
    svg_printf_frame(pi->w, pi->h, theme->bg_color, theme->border_width, theme->border_color);

    if (cfg->axis) {
        draw_calc_axis_pos(pi);
        svg_printf_axis(pi, theme);
    }

    transform_t transform = scale_get_transform(pi->log_x, pi->log_y);

    for (uint8_t c = 0; c < ds->columns; c++) {
        char *color = get_color(c, theme);
        point *column = ds->pairs[c];

        if (cfg->mode == MODE_LINE) {
            bool beginning_line = true;
            for (size_t i = 0; i < ds->rows; i++) {
                point *p = &column[i];
                if (IS_EMPTY(p->x) || IS_EMPTY(p->y)) {
                    if (!beginning_line) {
                        svg_printf_end_polyline(color, theme->line_width);
                    }
                    beginning_line = true;
                    continue;
                }

                if (beginning_line) { 
                    svg_printf_begin_polyline();
                    beginning_line = false;
                }
                scaled_point sp;
                scale_point(pi, p, &sp, transform);
                svg_printf_polyline_point(sp.x, sp.y);
            }
            svg_printf_end_polyline(color, theme->line_width);
        } else {
            for (size_t i = 0; i < ds->rows; i++) {
                point *p = &column[i];
                scaled_point sp;
                scale_point(pi, p, &sp, transform);

                if (IS_EMPTY(p->x) || IS_EMPTY(p->y)) { continue; }
                size_t point_size = SVG_DEF_POINT_SIZE;
                if (pi->counters) {
                    size_t count = counter_get(pi->counters[c], sp.x, sp.y);
                    point_size = SVG_DEF_POINT_SIZE + (cfg->log_count ? log(count) : count);
                }
                svg_printf_circle(sp.x, sp.y, point_size, color);
            }
        }

        if (cfg->regression) {
            double slope = 0;
            double intercept = 0;
            
            regression(column, ds->rows, transform, &slope, &intercept);
            svg_printf_regression_line(pi, color, slope, intercept);
        }
    }

    svg_printf_end();
    return 0;
}
Exemple #6
0
/* ML estimation of parameters in mixture model via EM; maximum-likelihood
 * estimation of parameters in the mixture model via the EM algorithm, using
 * multilocus information, but assuming known recombination frequencies
*/
double QTLmixture(MQMMarkerMatrix loci, cvector cofactor, vector r, cvector position,
                  vector y, ivector ind, int Nind, int Naug,
                  int Nloci,
                  double *variance, int em, vector *weight, const bool useREML,const bool fitQTL,const bool dominance, MQMCrossType crosstype, int verbose) {
                  
  //debug_trace("QTLmixture called Nloci=%d Nind=%d Naug=%d, REML=%d em=%d fit=%d domi=%d cross=%c\n",Nloci,Nind,Naug,useREML,em,fitQTL,dominance,crosstype);
  //for (int i=0; i<Nloci; i++){ debug_trace("loci %d : recombfreq=%f\n",i,r[i]); }
  int iem= 0, i, j;
  bool warnZeroDist=false;
  bool biasadj=false;
  double oldlogL=-10000, delta=1.0, calc_i, Pscale=1.75;

  vector indweight  = newvector(Nind);
  int newNaug       = ((!fitQTL) ? Naug : 3*Naug);
  vector Fy         = newvector(newNaug);
  double logP       = Nloci*log(Pscale);                          // only for computational accuracy
  bool varknown     = (((*variance)==-1.0) ? false : true );
  vector Ploci      = newvector(newNaug);
  #ifndef STANDALONE
    R_CheckUserInterrupt(); /* check for ^C */
    R_FlushConsole();
  #endif
  if (!useREML) {
    varknown=false;
    biasadj=false;
  }
  for (i=0; i<newNaug; i++) { Ploci[i]= 1.0; }

  if (!fitQTL) {
    for (j=0; j<Nloci; j++) {
      for (i=0; i<Naug; i++)
        Ploci[i]*= Pscale;
      if ((position[j]==MLEFT)||(position[j]==MUNLINKED)) {
        for (i=0; i<Naug; i++) {
          calc_i = start_prob(crosstype, loci[j][i]);   // calc_i= prob(loci, r, i, j, MH, crosstype, 0, 1);
          Ploci[i]*= calc_i;
          //Als Ploci > 0 en calc_i > 0 then we want to assert Ploci[] != 0
        }
      }
      if ((position[j]==MLEFT)||(position[j]==MMIDDLE)) {
        for (i=0; i<Naug; i++) {
          calc_i =left_prob(r[j],loci[j][i],loci[j+1][i],crosstype); //calc_i = prob(loci, r, i, j, loci[j+1][i], crosstype, 0);
          if(calc_i == 0.0){calc_i=1.0;warnZeroDist=true;}
          Ploci[i]*= calc_i;
        }
      }
    }
  } else {
    for (j=0; j<Nloci; j++) {
      for (i=0; i<Naug; i++) {
        Ploci[i]*= Pscale;           // only for computational accuracy; see use of logP
        Ploci[i+Naug]*= Pscale;      // only for computational accuracy; see use of logP
        Ploci[i+2*Naug]*= Pscale;    // only for computational accuracy; see use of logP
      }
      if ((position[j]==MLEFT)||(position[j]==MUNLINKED)) {
        if (cofactor[j]<=MCOF){
          for (i=0; i<Naug; i++) {
            calc_i = start_prob(crosstype, loci[j][i]);  // calc_i= prob(loci, r, i, j, MH, crosstype, 0, 1);
            Ploci[i] *= calc_i;
            Ploci[i+Naug] *= calc_i;
            Ploci[i+2*Naug] *= calc_i;
          }
        }else{
          for (i=0; i<Naug; i++) {
            Ploci[i]*= start_prob(crosstype, MAA);          //startvalue for MAA for new chromosome
            Ploci[i+Naug]*= start_prob(crosstype, MH);      //startvalue for MH for new chromosome
            Ploci[i+2*Naug] *= start_prob(crosstype, MBB);  //startvalue for MBB for new chromosome
          }
        }
      }
      if ((position[j]==MLEFT)||(position[j]==MMIDDLE)) {
        if ((cofactor[j]<=MCOF)&&(cofactor[j+1]<=MCOF))
          for (i=0; i<Naug; i++) {
            calc_i =left_prob(r[j],loci[j][i],loci[j+1][i],crosstype);  //calc_i = prob(loci, r, i, j, loci[j+1][i], crosstype, 0);
            if(calc_i == 0.0){calc_i=1.0;warnZeroDist=true;}
            Ploci[i]*= calc_i;
            Ploci[i+Naug]*= calc_i;
            Ploci[i+2*Naug]*= calc_i;
          }
        else if (cofactor[j]<=MCOF) // locus j+1 == QTL
          for (i=0; i<Naug; i++) { // QTL==MAA || MH || MBB means: What is the prob of finding an MAA at J=1    
            calc_i =left_prob(r[j],loci[j][i],MAA,crosstype);     //calc_i = prob(loci, r, i, j, MAA, crosstype, 0);
            Ploci[i]*= calc_i;      
            calc_i = left_prob(r[j],loci[j][i],MH,crosstype);     //calc_i = prob(loci, r, i, j, MH, crosstype, 0);
            Ploci[i+Naug]*= calc_i;
            calc_i = left_prob(r[j],loci[j][i],MBB,crosstype);    //calc_i = prob(loci, r, i, j, MBB, crosstype, 0);
            Ploci[i+2*Naug]*= calc_i;
          }
        else // locus j == QTL
          for (i=0; i<Naug; i++) { // QTL==MQTL
            calc_i = left_prob(r[j],MAA,loci[j+1][i],crosstype);  //calc_i = prob(loci, r, i, j+1, MAA, crosstype, -1);
            Ploci[i]*= calc_i;
            calc_i = left_prob(r[j],MH,loci[j+1][i],crosstype);   //calc_i = prob(loci, r, i, j+1, MH, crosstype, -1);
            Ploci[i+Naug]*= calc_i;
            calc_i = left_prob(r[j],MBB,loci[j+1][i],crosstype);  //calc_i = prob(loci, r, i, j+1, MBB, crosstype, -1);
            Ploci[i+2*Naug]*= calc_i;
          }
      }
    }
  }
  if(warnZeroDist)info("!!! 0.0 from Prob !!! Markers at same Cm but different genotype !!!"); 
//	Rprintf("INFO: Done fitting QTL's\n");
  if ((*weight)[0]== -1.0) {
    for (i=0; i<Nind; i++) indweight[i]= 0.0;
    if (!fitQTL) {
      for (i=0; i<Naug; i++) indweight[ind[i]]+=Ploci[i];
      for (i=0; i<Naug; i++) (*weight)[i]= Ploci[i]/indweight[ind[i]];
    } else {
      for (i=0; i<Naug; i++) indweight[ind[i]]+=Ploci[i]+Ploci[i+Naug]+Ploci[i+2*Naug];
      for (i=0; i<Naug; i++) {
        (*weight)[i]       = Ploci[i]/indweight[ind[i]];
        (*weight)[i+Naug]  = Ploci[i+Naug]/indweight[ind[i]];
        (*weight)[i+2*Naug]= Ploci[i+2*Naug]/indweight[ind[i]];
      }
    }
  }
  debug_trace("Weights done\n");
  debug_trace("Individual->trait,indweight weight Ploci\n");
  //for (int j=0; j<Nind; j++){
  //  debug_trace("%d->%f,%f %f %f\n", j, y[j],indweight[i], (*weight)[j], Ploci[j]);
  //}
  double logL = 0;
  vector indL = newvector(Nind);
  while ((iem<em)&&(delta>1.0e-5)) {
    iem+=1;
    if (!varknown) *variance=-1.0;
    logL = regression(Nind, Nloci, cofactor, loci, y, weight, ind, Naug, variance, Fy, biasadj, fitQTL, dominance);
    logL = 0.0;
    for (i=0; i<Nind; i++) indL[i]= 0.0;
    if (!fitQTL) // no QTL fitted
      for (i=0; i<Naug; i++) {
        (*weight)[i]= Ploci[i]*Fy[i];
        indL[ind[i]]= indL[ind[i]] + (*weight)[i];
      }
    else // QTL moved along the chromosomes
      for (i=0; i<Naug; i++) {
        (*weight)[i]= Ploci[i]*Fy[i];
        (*weight)[i+Naug]  = Ploci[i+Naug]*  Fy[i+Naug];
        (*weight)[i+2*Naug]= Ploci[i+2*Naug]*Fy[i+2*Naug];
        indL[ind[i]]+=(*weight)[i]+(*weight)[i+Naug]+(*weight)[i+2*Naug];
      }
    for (i=0; i<Nind; i++) logL+=log(indL[i])-logP;
    for (i=0; i<Nind; i++) indweight[i]= 0.0;
    if (!fitQTL) {
      for (i=0; i<Naug; i++) indweight[ind[i]]+=(*weight)[i];
      for (i=0; i<Naug; i++) (*weight)[i]/=indweight[ind[i]];
    } else {
      for (i=0; i<Naug; i++)
        indweight[ind[i]]+=(*weight)[i]+(*weight)[i+Naug]+(*weight)[i+2*Naug];
      for (i=0; i<Naug; i++) {
        (*weight)[i]       /=indweight[ind[i]];
        (*weight)[i+Naug]  /=indweight[ind[i]];
        (*weight)[i+2*Naug]/=indweight[ind[i]];
      }
    }
    delta= fabs(logL-oldlogL);
    oldlogL= logL;
  }
  
  if ((useREML)&&(!varknown)) { // Bias adjustment after finished ML estimation via EM
    *variance=-1.0;
    biasadj=true;
    logL = regression(Nind, Nloci, cofactor, loci, y, weight, ind, Naug, variance, Fy, biasadj, fitQTL, dominance);
    logL = 0.0;
    for (int _i=0; _i<Nind; _i++) indL[_i]= 0.0;
    if (!fitQTL)
      for (i=0; i<Naug; i++) {
        (*weight)[i]= Ploci[i]*Fy[i];
        indL[ind[i]]+=(*weight)[i];
      }
    else
      for (i=0; i<Naug; i++) {
        (*weight)[i]= Ploci[i]*Fy[i];
        (*weight)[i+Naug]= Ploci[i+Naug]*Fy[i+Naug];
        (*weight)[i+2*Naug]= Ploci[i+2*Naug]*Fy[i+2*Naug];
        indL[ind[i]]+=(*weight)[i];
        indL[ind[i]]+=(*weight)[i+Naug];
        indL[ind[i]]+=(*weight)[i+2*Naug];
      }
    for (i=0; i<Nind; i++) logL+=log(indL[i])-logP;
    for (i=0; i<Nind; i++) indweight[i]= 0.0;
    if (!fitQTL) {
      for (i=0; i<Naug; i++) indweight[ind[i]]+=(*weight)[i];
      for (i=0; i<Naug; i++) (*weight)[i]/=indweight[ind[i]];
    } else {
      for (i=0; i<Naug; i++) {
        indweight[ind[i]]+=(*weight)[i];
        indweight[ind[i]]+=(*weight)[i+Naug];
        indweight[ind[i]]+=(*weight)[i+2*Naug];
      }
      for (i=0; i<Naug; i++) {
        (*weight)[i]       /=indweight[ind[i]];
        (*weight)[i+Naug]  /=indweight[ind[i]];
        (*weight)[i+2*Naug]/=indweight[ind[i]];
      }
    }
  }
  //for (i=0; i<Nind; i++){ debug_trace("IND %d Ploci: %f Fy: %f UNLOG:%f LogL:%f LogL-LogP: %f\n", i, Ploci[i], Fy[i], indL[i], log(indL[i]), log(indL[i])-logP); }
  Free(Fy);
  Free(Ploci);
  Free(indweight);
  Free(indL);
  return logL;
}
Exemple #7
0
/* ML estimation of parameters in mixture model via EM;
*/
double QTLmixture(cmatrix loci, cvector cofactor, vector r, cvector position,
              vector y, ivector ind, int Nind, int Naug,
              int Nloci,
              double *variance, int em, vector *weight,char REMLorML,char fitQTL,char dominance,char crosstype,Mmatrix MendelM,int verbose){
	//if(verbose==1){Rprintf("QTLmixture called\n");}
    int iem= 0, newNaug, i, j;
    char varknown, biasadj='n';
	double oldlogL=-10000, delta=1.0, calc_i, logP=0.0, Pscale=1.75;
    double calc_ii;
	vector indweight, Ploci, Fy;
    
	indweight= newvector(Nind);
    newNaug= (fitQTL=='n' ? Naug : 3*Naug);
    Fy= newvector(newNaug);
    logP= Nloci*log(Pscale); // only for computational accuracy
	varknown= (((*variance)==-1.0) ? 'n' : 'y' );
    Ploci= newvector(newNaug);	
	#ifndef ALONE
		R_CheckUserInterrupt(); /* check for ^C */
		R_ProcessEvents();
		R_FlushConsole();
	#endif	
    if ((REMLorML=='0')&&(varknown=='n')){ 
//		Rprintf("INFO: REML\n");
	}
    if (REMLorML=='1') { 
//		Rprintf("INFO: ML\n");                       
		varknown='n'; biasadj='n'; 
	}
    for (i=0; i<newNaug; i++){ 
		Ploci[i]= 1.0;
	}
    if (fitQTL=='n'){
	    //Rprintf("FitQTL=N\n");	
		for (j=0; j<Nloci; j++){
		    for (i=0; i<Naug; i++) 
			Ploci[i]*= Pscale;
			//Here we have ProbLeft
		    if ((position[j]=='L')||(position[j]=='U')){
				for (i=0; i<Naug; i++){
					calc_i= prob(loci,r,i,j,'1',crosstype,1,0,1);
					//calc_ii= probnew(MendelM,loci,r,i,j,'1',crosstype,1,0,1);
					Ploci[i]*= calc_i;
					//Rprintf("DEBUG: Prob vs ProbNew: %f %f\n",calc_i,calc_ii);
				}
			}
		    if ((position[j]=='L')||(position[j]=='M')){
				for (i=0; i<Naug; i++){
					calc_i = prob(loci,r,i,j,loci[j+1][i],'F',0,0,0);
					//calc_ii = probnew(MendelM,loci,r,i,j,loci[j+1][i],'F',0,0,0);
					Ploci[i]*= calc_i;
					//Rprintf("DEBUG: Prob vs ProbNew: %f %f\n",calc_i,calc_ii);
				}
			}
		}
	}else{
//	Rprintf("FitQTL=Y\n");	
     for (j=0; j<Nloci; j++)
     {    for (i=0; i<Naug; i++)
          {   Ploci[i]*= Pscale; Ploci[i+Naug]*= Pscale; Ploci[i+2*Naug]*= Pscale;
              // only for computational accuracy; see use of logP
          }
          if ((position[j]=='L')||(position[j]=='U'))
          {  
			//Here we don't have any f2 dependancies anymore by using the prob function
			if (cofactor[j]<='1')
             for (i=0; i<Naug; i++)
             {  
				calc_i= prob(loci,r,i,j,'1',crosstype,1,0,1);
				//calc_ii= probnew(MendelM,loci,r,i,j,'1',crosstype,1,0,1);
                Ploci[i]*= calc_i; Ploci[i+Naug]*= calc_i; Ploci[i+2*Naug]*= calc_i;
				//Rprintf("DEBUG: Prob vs ProbNew: %f %f\n",calc_i,calc_ii);
             }
             else
             for (i=0; i<Naug; i++)
             {
				//startvalues for each new chromosome
				Ploci[i]*= start_prob(crosstype,'0');
				Ploci[i+Naug]*= start_prob(crosstype,'1'); 
				Ploci[i+2*Naug] *= start_prob(crosstype,'2');
			 }
                 // QTL='0', '1' or'2'
          }
          if ((position[j]=='L')||(position[j]=='M'))
          {  if ((cofactor[j]<='1')&&(cofactor[j+1]<='1'))
             for (i=0; i<Naug; i++){  
				calc_i = prob(loci,r,i,j,loci[j+1][i],crosstype,0,0,0);
				//calc_ii = probnew(MendelM,loci,r,i,j,loci[j+1][i],crosstype,0,0,0);
                Ploci[i]*= calc_i; Ploci[i+Naug]*= calc_i; Ploci[i+2*Naug]*= calc_i;
				//Rprintf("DEBUG: Prob vs ProbNew: %f %f\n",calc_i,calc_ii);
             }
             else if (cofactor[j]<='1') // locus j+1 == QTL
             for (i=0; i<Naug; i++)
             {  // QTL=='0' What is the prob of finding an '0' at J=1
				calc_i = prob(loci,r,i,j,'0',crosstype,1,0,0);
				//calc_ii = probnew(MendelM,loci,r,i,j,'0',crosstype,1,0,0);
                Ploci[i]*= calc_i;
                // QTL=='1'
                calc_i = prob(loci,r,i,j,'1',crosstype,1,0,0);
				//calc_ii = probnew(MendelM,loci,r,i,j,'1',crosstype,1,0,0);
                Ploci[i+Naug]*= calc_i;
                // QTL=='2'
                calc_i = prob(loci,r,i,j,'2',crosstype,1,0,0);
				//calc_ii = probnew(MendelM,loci,r,i,j,'2',crosstype,1,0,0);
                Ploci[i+2*Naug]*= calc_i;
				//Rprintf("DEBUG: Prob vs ProbNew: %f %f\n",calc_i,calc_ii);
             }
             else // locus j == QTL
             for (i=0; i<Naug; i++)
             {  // QTL=='0'
                calc_i = prob(loci,r,i,j+1,'0',crosstype,1,-1,0);
				//calc_ii = probnew(MendelM,loci,r,i,j+1,'0',crosstype,1,-1,0);
                Ploci[i]*= calc_i;
                // QTL=='1'
				calc_i = prob(loci,r,i,j+1,'1',crosstype,1,-1,0);
				//calc_ii = probnew(MendelM,loci,r,i,j+1,'1',crosstype,1,-1,0);
                Ploci[i+Naug]*= calc_i;
                // QTL=='2'
                calc_i = prob(loci,r,i,j+1,'2',crosstype,1,-1,0);
				//calc_ii = probnew(MendelM,loci,r,i,j+1,'2',crosstype,1,-1,0);
                Ploci[i+2*Naug]*= calc_i;
				//Rprintf("DEBUG: Prob vs ProbNew: %f %f\n",calc_i,calc_ii);
             }
          }
	 }
	 }
//	Rprintf("INFO: Done fitting QTL's\n");
     if ((*weight)[0]== -1.0)
     {  for (i=0; i<Nind; i++) indweight[i]= 0.0;
		if (fitQTL=='n')
        {  for (i=0; i<Naug; i++) indweight[ind[i]]+=Ploci[i];
           for (i=0; i<Naug; i++) (*weight)[i]= Ploci[i]/indweight[ind[i]];
        }
        else
        {  for (i=0; i<Naug; i++) indweight[ind[i]]+=Ploci[i]+Ploci[i+Naug]+Ploci[i+2*Naug];
           for (i=0; i<Naug; i++)
           {   (*weight)[i]       = Ploci[i]/indweight[ind[i]];
               (*weight)[i+Naug]  = Ploci[i+Naug]/indweight[ind[i]];
               (*weight)[i+2*Naug]= Ploci[i+2*Naug]/indweight[ind[i]];
           }
        }
     }
	//Rprintf("Weights done\n");
    //Rprintf("Individual->trait->cofactor->weight\n");
    //for (int j=0; j<Nind; j++){
	//  Rprintf("%d->%f,%d,%f %f\n",j,y[j],cofactor[j],(*weight)[j],Ploci[j]);
	//}	
     double logL=0;
     vector indL;
     indL= newvector(Nind);
     while ((iem<em)&&(delta>1.0e-5))
     {  
           iem+=1;
           if (varknown=='n') *variance=-1.0;
			//Rprintf("Checkpoint_b\n");           
           logL= regression(Nind, Nloci, cofactor, loci, y,
                 weight, ind, Naug, variance, Fy, biasadj,fitQTL,dominance);
           logL=0.0;
        //Rprintf("regression ready\n");
           for (i=0; i<Nind; i++) indL[i]= 0.0;
           if (fitQTL=='n') // no QTL fitted
           for (i=0; i<Naug; i++)
           {   (*weight)[i]= Ploci[i]*Fy[i];
               indL[ind[i]]= indL[ind[i]] + (*weight)[i];
           }
           else // QTL moved along the chromosomes
           for (i=0; i<Naug; i++)
           {  (*weight)[i]= Ploci[i]*Fy[i];
              (*weight)[i+Naug]  = Ploci[i+Naug]*  Fy[i+Naug];
              (*weight)[i+2*Naug]= Ploci[i+2*Naug]*Fy[i+2*Naug];
              indL[ind[i]]+=(*weight)[i]+(*weight)[i+Naug]+(*weight)[i+2*Naug];
           }
           for (i=0; i<Nind; i++) logL+=log(indL[i])-logP;
           for (i=0; i<Nind; i++) indweight[i]= 0.0;
           if (fitQTL=='n')
           {  for (i=0; i<Naug; i++) indweight[ind[i]]+=(*weight)[i];
              for (i=0; i<Naug; i++) (*weight)[i]/=indweight[ind[i]];
           }
           else
           {  for (i=0; i<Naug; i++)
                  indweight[ind[i]]+=(*weight)[i]+(*weight)[i+Naug]+(*weight)[i+2*Naug];
              for (i=0; i<Naug; i++)
              {   (*weight)[i]       /=indweight[ind[i]];
                  (*weight)[i+Naug]  /=indweight[ind[i]];
                  (*weight)[i+2*Naug]/=indweight[ind[i]];
              }
           }
           delta= absdouble(logL-oldlogL);
           oldlogL= logL;
     }
     //Rprintf("EM Finished\n");
     // bias adjustment after finished ML estimation via EM
     if ((REMLorML=='0')&&(varknown=='n'))
     {  
       // RRprintf("Checkpoint_c\n");
        *variance=-1.0;
        biasadj='y';
        logL= regression(Nind, Nloci, cofactor, loci, y,
              weight, ind, Naug, variance, Fy, biasadj,fitQTL,dominance);
        logL=0.0;
        for (int _i=0; _i<Nind; _i++) indL[_i]= 0.0;
        if (fitQTL=='n')
        for (i=0; i<Naug; i++)
        {   (*weight)[i]= Ploci[i]*Fy[i];
            indL[ind[i]]+=(*weight)[i];
        }
        else
        for (i=0; i<Naug; i++)
        {   (*weight)[i]= Ploci[i]*Fy[i];
            (*weight)[i+Naug]= Ploci[i+Naug]*Fy[i+Naug];
            (*weight)[i+2*Naug]= Ploci[i+2*Naug]*Fy[i+2*Naug];
            indL[ind[i]]+=(*weight)[i];
            indL[ind[i]]+=(*weight)[i+Naug];
            indL[ind[i]]+=(*weight)[i+2*Naug];
        }
        for (i=0; i<Nind; i++) logL+=log(indL[i])-logP;
        for (i=0; i<Nind; i++) indweight[i]= 0.0;
        if (fitQTL=='n')
        {  for (i=0; i<Naug; i++) indweight[ind[i]]+=(*weight)[i];
           for (i=0; i<Naug; i++) (*weight)[i]/=indweight[ind[i]];
        }
        else
        {  for (i=0; i<Naug; i++)
           {   indweight[ind[i]]+=(*weight)[i];
               indweight[ind[i]]+=(*weight)[i+Naug];
               indweight[ind[i]]+=(*weight)[i+2*Naug];
           }
           for (i=0; i<Naug; i++)
           {   (*weight)[i]       /=indweight[ind[i]];
               (*weight)[i+Naug]  /=indweight[ind[i]];
               (*weight)[i+2*Naug]/=indweight[ind[i]];
           }
        }
     }
	//for (i=0; i<Nind; i++){
    //    Rprintf("IND %d Ploci: %f Fy: %f UNLOG:%f LogL:%f LogL-LogP: %f\n",i,Ploci[i],Fy[i],indL[i],log(indL[i]),log(indL[i])-logP);
    //}
	Free(Fy);
	Free(Ploci);
	Free(indweight);
	Free(indL);
    return logL;
}
Exemple #8
0
SEXP regression_Laplace(SEXP Rlocations, SEXP Robservations, SEXP Rmesh, SEXP Rorder, SEXP Rlambda,
				   SEXP Rcovariates, SEXP RBCIndices, SEXP RBCValues, SEXP DOF, SEXP RGCVmethod, SEXP Rnrealizations, SEXP RRNGstate, SEXP Rsolver, SEXP Rnprocessors, SEXP Rhosts)
{
    //Set data
	RegressionData regressionData(Rlocations, Robservations, Rorder, Rlambda, Rcovariates, RBCIndices, RBCValues, DOF, RGCVmethod, Rnrealizations, RRNGstate, Rsolver, Rnprocessors, Rhosts);

	//std::cout<< "Data loaded"<<std::endl;
	SEXP result = NILSXP;

    if(regressionData.getOrder()==1)
    {
		MeshHandler<1> mesh(Rmesh);
		//std::cout<< "Mesh loaded"<<std::endl;
		MixedFERegression<RegressionData, IntegratorTriangleP2,1> regression(mesh,regressionData);

		regression.smoothLaplace();

		const std::vector<VectorXr>& solution = regression.getSolution();
		const std::vector<Real>& dof = regression.getDOF();
		const std::vector<Real>& var = regression.getVar();

		//Copy result in R memory
		result = PROTECT(Rf_allocVector(VECSXP, 4));
		SET_VECTOR_ELT(result, 0, Rf_allocMatrix(REALSXP, solution[0].size(), solution.size()));
		SET_VECTOR_ELT(result, 1, Rf_allocVector(REALSXP, solution.size()));
		SET_VECTOR_ELT(result, 2, Rf_allocVector(REALSXP, solution.size()));
		SET_VECTOR_ELT(result, 3, Rf_allocVector(STRSXP, 1));

		Real *rans = REAL(VECTOR_ELT(result, 0));
		for(UInt j = 0; j < solution.size(); j++)
		{
			for(UInt i = 0; i < solution[0].size(); i++)
				rans[i + solution[0].size()*j] = solution[j][i];
		}

		Real *rans2 = REAL(VECTOR_ELT(result, 1));
		for(UInt i = 0; i < solution.size(); i++)
		{
			rans2[i] = dof[i];
		}

		Real *rans3 = REAL(VECTOR_ELT(result, 2));
		for(UInt i = 0; i < solution.size(); i++)
		{
			rans3[i] = var[i];
		}

		std::string RNGstate = regression.getFinalRNGstate();
		SET_STRING_ELT(VECTOR_ELT(result, 3), 0, Rf_mkChar(RNGstate.c_str()));

		UNPROTECT(1);

    }
	else if(regressionData.getOrder()==2)
	{
		MeshHandler<2> mesh(Rmesh);
		//std::cout<< "Mesh loaded"<<std::endl;
		MixedFERegression<RegressionData, IntegratorTriangleP4,2> regression(mesh,regressionData);

		regression.smoothLaplace();

		const std::vector<VectorXr>& solution = regression.getSolution();
		const std::vector<Real>& dof = regression.getDOF();
		const std::vector<Real>& var = regression.getVar();

		//Copy result in R memory
		result = PROTECT(Rf_allocVector(VECSXP, 4));
		SET_VECTOR_ELT(result, 0, Rf_allocMatrix(REALSXP, solution[0].size(), solution.size()));
		SET_VECTOR_ELT(result, 1, Rf_allocVector(REALSXP, solution.size()));
		SET_VECTOR_ELT(result, 2, Rf_allocVector(REALSXP, solution.size()));
		SET_VECTOR_ELT(result, 3, Rf_allocVector(STRSXP, 1));

		Real *rans = REAL(VECTOR_ELT(result, 0));
		for(UInt j = 0; j < solution.size(); j++)
		{
			for(UInt i = 0; i < solution[0].size(); i++)
				rans[i + solution[0].size()*j] = solution[j][i];
		}

		Real *rans2 = REAL(VECTOR_ELT(result, 1));
		for(UInt i = 0; i < solution.size(); i++)
		{
			rans2[i] = dof[i];
		}

		Real *rans3 = REAL(VECTOR_ELT(result, 2));
		for(UInt i = 0; i < solution.size(); i++)
		{
			rans3[i] = var[i];
		}

		std::string RNGstate = regression.getFinalRNGstate();
		SET_STRING_ELT(VECTOR_ELT(result, 3), 0, Rf_mkChar(RNGstate.c_str()));

		UNPROTECT(1);

    }

	return(result);
}
Exemple #9
0
void c_reg_r2(DCELL * result, DCELL * values, int n, const void *closure)
{
    regression(result, values, n, REGRESSION_COEFF_DET);
}
Exemple #10
0
void c_reg_c(DCELL * result, DCELL * values, int n, const void *closure)
{
    regression(result, values, n, REGRESSION_OFFSET);
}
Exemple #11
0
void c_reg_m(DCELL * result, DCELL * values, int n, const void *closure)
{
    regression(result, values, n, REGRESSION_SLOPE);
}
Exemple #12
0
SEXP regression_Laplace(SEXP Rlocations, SEXP Robservations, SEXP Rmesh, SEXP Rorder, SEXP Rlambda,
				   SEXP Rcovariates, SEXP RBCIndices, SEXP RBCValues, SEXP DOF)
{
    //Set data
	RegressionData regressionData(Rlocations, Robservations, Rorder, Rlambda, Rcovariates, RBCIndices, RBCValues, DOF);

	//std::cout<< "Data loaded"<<std::endl;
	SEXP result;

    if(regressionData.getOrder()==1)
    {
		MeshHandler<1> mesh(Rmesh);
		//std::cout<< "Mesh loaded"<<std::endl;
		MixedFERegression<RegressionData, IntegratorTriangleP2,1> regression(mesh,regressionData);

		regression.smoothLaplace();

		const std::vector<VectorXr>& solution = regression.getSolution();
		const std::vector<Real>& dof = regression.getDOF();
		//Copy result in R memory
		result = PROTECT(allocVector(VECSXP, 2));
		SET_VECTOR_ELT(result, 0, allocMatrix(REALSXP, solution[0].size(), solution.size()));
		SET_VECTOR_ELT(result, 1, allocVector(REALSXP, solution.size()));

		Real *rans = REAL(VECTOR_ELT(result, 0));
		for(int j = 0; j < solution.size(); j++)
		{
			for(int i = 0; i < solution[0].size(); i++)
				rans[i + solution[0].size()*j] = solution[j][i];
		}

		Real *rans2 = REAL(VECTOR_ELT(result, 1));
		for(int i = 0; i < solution.size(); i++)
		{
			rans2[i] = dof[i];
		}
		UNPROTECT(1);

    }
	else if(regressionData.getOrder()==2)
	{
		MeshHandler<2> mesh(Rmesh);
		//std::cout<< "Mesh loaded"<<std::endl;
		MixedFERegression<RegressionData, IntegratorTriangleP4,2> regression(mesh,regressionData);

		regression.smoothLaplace();

		const std::vector<VectorXr>& solution = regression.getSolution();
		const std::vector<Real>& dof = regression.getDOF();
		//Copy result in R memory
		result = PROTECT(allocVector(VECSXP, 2));
		SET_VECTOR_ELT(result, 0, allocMatrix(REALSXP, solution[0].size(), solution.size()));
		SET_VECTOR_ELT(result, 1, allocVector(REALSXP, solution.size()));

		Real *rans = REAL(VECTOR_ELT(result, 0));
		for(int j = 0; j < solution.size(); j++)
		{
			for(int i = 0; i < solution[0].size(); i++)
				rans[i + solution[0].size()*j] = solution[j][i];
		}

		Real *rans2 = REAL(VECTOR_ELT(result, 1));
		for(int i = 0; i < solution.size(); i++)
		{
			rans2[i] = dof[i];
		}
		UNPROTECT(1);
    }

	return(result);
}
void main ()

{
  int position,choix=-1,choix1=-1,choix1_2=-1,N,i=1;		/*Déclaration des variables*/
  float Xi[MAX],Yi[MAX],result[10];
  float ProduitXiYi[MAX];
  float carre_ecart_a_moyenne_Xi[MAX];
  float carre_ecart_a_moyenne_Yi[MAX];
  int j = 0;

  while (j < 53)
    {
      Xi[j] = data[0].country_nb[j];
      Yi[j] = data[8].country_nb[j];
      j++;
    }

  /*Appel de la fonction d'affichage d'en-tête*/

  entete();

  /********/
  /* MENU */
  /********/


  while(choix!=0)
    {
      titre("Menu Principale:");

      printf("\nEntrez le num%cro de l\'op%cration d%csir%ce:\n",130,130,130,130);
      printf("\n(1) Entrer o%c modifier les donn%ces (Xi et Yi).",151,130);
      printf("\n(2) D%cterminer l\'%cquation de la droite",130,130);
      printf("\n(3) Afficher le tableau des valeurs interm%cdiaires.",130);
      printf("\n(4) Afficher les r%csultats.",130);
      printf("\n(5) Sauvegadrer les donn%ces dans un fichier.",130);
      printf("\n(0) Quitter le programme.");
      printf("\n\n Quel est votre choix? :");
      scanf("%d",&choix);

      switch (choix)
	{
	case 1:
	  {	choix1=-1;choix1_2=-1;

	    while(choix1!=0)
	      {
		titre("Menu Donnees:");
		printf("\nEntrez le num%cro de l\'op%cration d%csir%ce:\n",130,130,130,130);
		printf("\n(1) Entrer des nouvelles valeurs.");
		printf("\n(2) Modiffier les valeurs existantes.");
		printf("\n(3) Revenir au menu principale.");
		printf("\n(0) Quitter le programme.");
		printf("\n\n Quel est votre choix? :");
		scanf("%d",&choix1);

		switch (choix1)
		  {
		  case 1:
		    {

		      titre("Donnees:");/*Fonction d'affichage de titre*/

		      /*Appel de la fonction d'entrée du nombre d'élement*/

		      N=nbrelement();

		      i=1;

		      /*Entree des élements Xi*/

		      titre("Entree des valeurs de Xi:");/*Fonction d'affichage de titre*/

		      while (i<(N+1))
			{
			  printf("Entrez la valeur de X%d: ",i);
			  scanf("%f",&Xi[i]);i++;
			};

		      i=1;

		      /*Entree des élements Yi*/

		      titre("Entree des valeurs de Yi:");/*Fonction d'affichage de titre*/

		      while (i<(N+1))
			{
			  printf("Entrez la valeur de Y%d: ",i);
			  scanf("%f",&Yi[i]);i++;
			}
		      printf("\nTappez une touche pour revenir au menu pr%cc%cdant:",130,130);
		      getchar();
		      getchar();
		      printf("\n\n");


		    };break;

		  case 2:
		    {
		      choix1_2=-1;

		      while(choix1_2!=0)
			{
			  titre("Menu Modiffication Donnees");
			  printf("\nEntrez le num%cro de l\'op%cration d%csir%ce:\n",130,130,130,130);
			  printf("\n(1) Modifier un %cl%cment des Xi.",130,130);
			  printf("\n(2) Modifier un %cl%cment des Yi.",130,130);
			  printf("\n(3) Revenir au menu pr%cc%cdant.",130,130);
			  printf("\n(4) Revenir au menu principale.");
			  printf("\n(0) Quitter le programme.");
			  printf("\n\n Quel est votre choix? :");
			  scanf("%d",&choix1_2);

			  switch (choix1_2)
			    {
			    case 1:
			      {
				titre("Modiffication d'un element des Xi:");
				printf("Entrez la position de l\'%cl%cment dans le tableau:",130,130);
				scanf("%d",&position);
				printf("\nEntrez la nouvelle valeur de X%d:",position);
				scanf("%lf",&Xi[position]);
				printf("\n Modification %cffectu%ce...\n",130,130);

			      };break;
			    case 2:
			      {
				printf("\n\nEntrez la position de l\'%cl%cment dans le tableau:",130,130);
				scanf("%d",&position);
				printf("\nEntrez la nouvelle valeur de Y%d:",position);
				scanf("%lf",&Yi[position]);
				printf("\n Modification %cffectu%ce...\n",130,130);

			      };break;
			    case 3:choix1=-1;choix1_2=0;break;
			    case 4:choix1_2=0;choix1=0;choix=-1;break;
			    case 0:choix1=0;choix1_2=0;break;
			    default:;break;
			    }
			}

		    };break;

		  case 3:choix=-1;choix1=0;break;
		  case 0:choix=0;choix1=0;break;
		  default:printf("\n Entr%ce non valide!");break;
		  }
	      }




	  };break;

	case 2:
	  {
	    /*Appel de la fonction de regression linéaire*/

	    regression(Xi,Yi,N,result,ProduitXiYi,carre_ecart_a_moyenne_Xi,carre_ecart_a_moyenne_Yi);

	    printf("\nOp%Cration termin%ce...\n",130,130);

	    /*Affichage de l'éqation et de la corrélation "r"*/

	    aff_equation(result);

	    printf("\nCoefficient de corr%clation:=> r = %lf\n\n",130,result[9]);
	    printf("Tappez une touche pour revenir au menu pr%cc%cdant:",130,130);
	    getchar();
	    getchar();
	    printf("\n\n");

	  };break;

	case 3:
	  {
	    /*Affichage du tableau des resultats*/

	    affich_tab(result,Xi,Yi,ProduitXiYi,carre_ecart_a_moyenne_Xi,carre_ecart_a_moyenne_Yi,N);
	    printf("\nTappez une touche pour revenir au menu pr%cc%cdant:",130,130);
	    getchar();
	    getchar();
	    printf("\n\n");


	  };break;

	case 4:
	  {
	    /*Affichage des résultats*/

	    affichage(result);
	    printf("\nTappez une touche pour revenir au menu pr%cc%cdant:",130,130);
	    getchar();

	  };break;

	case 5:
	  {
	    fichier(result,Xi,Yi,ProduitXiYi,carre_ecart_a_moyenne_Xi,carre_ecart_a_moyenne_Yi,N);
	    printf("\nTappez une touche pour revenir au menu pr%cc%cdant:",130,130);
	    getchar();
	  }

	case 0:;break;

	default:printf("\nEntree non valide!\n");break;
	};


    }

  getchar();
}