Пример #1
0
void MBC_MCMC_wrapper(int *sample_size,
		      int *interval,

		      int *n,
		      int *d,
		      int *G,
			  
		      double *lpZ_mcmc, 
		      double *lpLV_mcmc, 
		      
		      double *vZ,
		      
		      double *Z_pK,
		      double *Z_mean,
		      double *Z_var,
		      int *Z_K,
		      
		      double *Z_var_prior, 
		      double *Z_mean_prior_var, 
		      double *Z_K_prior,
		      double *Z_var_df,
		      
		      int *Z_K_mcmc, 
		      double *Z_pK_mcmc, 
		      double *Z_mean_mcmc, 
		      double *Z_var_mcmc){
  double **Z = Runpack_dmatrix(vZ,*n,*d, NULL);
  double **Z_mean_start = Runpack_dmatrix(Z_mean,*G,*d,NULL);
  
  /* R function enabling uniform RNG */
  GetRNGstate();
  
  
  MBC_MCMC_init(*sample_size, *interval,
		
		*n, *d, *G,
		
		lpZ_mcmc, lpLV_mcmc,
		
		Z, 
		Z_pK,Z_mean_start,Z_var,(unsigned int *) Z_K,
		*Z_var_prior,
		*Z_mean_prior_var,
		*Z_K_prior,
		*Z_var_df,
		Z_K_mcmc, Z_pK_mcmc, Z_mean_mcmc, Z_var_mcmc);
  
  PutRNGstate();
  P_free_all();
  // R's garbage collector takes care of freeing memory.
  return;
}
Пример #2
0
void ERGMM_MCMC_wrapper(int *sample_size, 
			int *interval,
			   
			int *n, 
			int *p,
			int *d, 
			int *G,
			int *latent_eff,
			int *family,
			int *res,
			  
			int *dir,
			int *viY,
			double *vdY,
			int *iconsts,
			double *dconsts,

			double *vX,
			  
			double *llk_mcmc,
			double *lpZ_mcmc,
			double *lpcoef_mcmc,
			double *lpRE_mcmc,
			double *lpLV_mcmc,
			double *lpREV_mcmc,
			double *lpdispersion_mcmc,
			   
			double *vZ_start,

			double *Z_pK_start,
			double *vZ_mean_start,
			double *Z_var_start,
			int *Z_K_start,

			double *Z_var_prior,
			double *Z_mean_prior_var, 
			double *Z_pK_prior,
			double *Z_var_prior_df,

			double *Z_mcmc,
			double *Z_rate_move,

			int *Z_K_mcmc,
			double *Z_pK_mcmc,
			double *Z_mean_mcmc,
			double *Z_var_mcmc,
			  
			double *coef_start,
			double *coef_prior_mean,
			double *coef_var,
			double *coef_mcmc,
			double *coef_rate, 
			  
			double *sender_start,
			double *receiver_start,
			double *sender_var_start,
			double *receiver_var_start,

			double *sender_var_prior,
			double *sender_var_prior_df,
			double *receiver_var_prior,
			double *receiver_var_prior_df,

			double *sender_mcmc,
			double *receiver_mcmc,
			double *sender_var_mcmc,
			double *receiver_var_mcmc,

			double *dispersion_start,
			double *dispersion_prior,
			double *dispersion_prior_df,
			double *dispersion_mcmc,

			int *vobserved_ties,

			double *deltas,
			double *vcoef_eff_sender,
			int *coef_eff_sender_size,
			double *vcoef_eff_receiver,
			int *coef_eff_receiver_size,

			int *accept_all){

  // This was added because newer versions of R no longer pass a 0-length vector as NULL, so we have to do it here.
  if(*p==0){
    vX=NULL; lpcoef_mcmc=NULL; coef_start=NULL; coef_prior_mean=NULL; coef_var=NULL; coef_mcmc=NULL; coef_rate=NULL; vcoef_eff_sender=NULL; coef_eff_sender_size=NULL; vcoef_eff_receiver=NULL; coef_eff_receiver_size=NULL;
  }
  if(*G==0){
    Z_pK_start=NULL; vZ_mean_start=NULL; Z_K_start=NULL; Z_mean_prior_var=NULL; Z_pK_prior=NULL; Z_K_mcmc=NULL; Z_pK_mcmc=NULL; Z_mean_mcmc=NULL;
  }
  if(*d==0){
    lpZ_mcmc=NULL; lpLV_mcmc=NULL; vZ_start=NULL; Z_pK_start=NULL; vZ_mean_start=NULL; Z_var_start=NULL; Z_K_start=NULL; Z_var_prior=NULL; Z_mean_prior_var=NULL; Z_pK_prior=NULL; Z_var_prior_df=NULL; Z_mcmc=NULL; Z_K_mcmc=NULL; Z_pK_mcmc=NULL; Z_mean_mcmc=NULL; Z_var_mcmc=NULL;
  }
  if(res[0]==0&&res[2]==0){
    sender_start=NULL; sender_var_start=NULL; sender_var_prior=NULL; sender_var_prior_df=NULL; sender_mcmc=NULL; sender_var_mcmc=NULL; vcoef_eff_sender=NULL; coef_eff_sender_size=NULL;
  }
  if(res[1]==0){
    receiver_start=NULL; receiver_var_start=NULL; receiver_var_prior=NULL; receiver_var_prior_df=NULL; receiver_mcmc=NULL; receiver_var_mcmc=NULL; vcoef_eff_receiver=NULL; coef_eff_receiver_size=NULL;
  }
  if(res[0]==0&&res[1]==0&&res[2]==0){
    lpRE_mcmc=NULL; lpREV_mcmc=NULL;
    if(*d==0) Z_rate_move=NULL;
  }
  if(res[3]==0){
    lpdispersion_mcmc=NULL;
    dispersion_mcmc=NULL;
  }


  int i=0,j=0,k=0;
  double **Z_start = vZ_start ? Runpack_dmatrix(vZ_start,*n,*d, NULL) : NULL;
  double **Z_mean_start = vZ_mean_start ? Runpack_dmatrix(vZ_mean_start,*G,*d,NULL) : NULL;
  int **iY = Runpack_imatrix(viY, *n, *n, NULL);
  double **dY = Runpack_dmatrix(vdY, *n, *n, NULL);
  unsigned int **observed_ties = *vobserved_ties>=0 ? (unsigned int **) Runpack_imatrix(vobserved_ties,*n,*n,NULL) : NULL;
  double ***X = d3array(*p,*n,*n);

  /* The joint proposal coefficient matrix is square with side
     + covariate coefficients  : p
     + latent space            : 1
     + sender                  : ~p
     + receiver (no sociality) : ~p
     + dispersion              : 1
  */

  unsigned int group_prop_size = *p + (*d ? 1 : 0) + (vcoef_eff_sender?*coef_eff_sender_size:0)+(vcoef_eff_receiver?*coef_eff_receiver_size:0) + (lpdispersion_mcmc?1:0);
  double **group_deltas = Runpack_dmatrix(deltas+GROUP_DELTAS_START, group_prop_size, group_prop_size, NULL);
  double **coef_eff_sender = vcoef_eff_sender? Runpack_dmatrix(vcoef_eff_sender, *coef_eff_sender_size, *n, NULL) : NULL;
  double **coef_eff_receiver = vcoef_eff_receiver? Runpack_dmatrix(vcoef_eff_receiver, *coef_eff_receiver_size, *n, NULL) : NULL;


  // set up all of the covariate matrices if covariates are involed 
  // if p=0 (ie no covariates then these next two loops will do nothing)
  //

  for(k=0;k<*p;k++){
    for(i=0;i<*n;i++){
      for(j=0;j<*n;j++){
	X[k][i][j] = vX[ k*(*n)*(*n) + i*(*n) + j ];
      }
    }
  }

  /* R function enabling uniform RNG */
  GetRNGstate();
 
  ERGMM_MCMC_init(*sample_size, *interval,

		  *n,*p,
		  d ? *d : 0,
		  *G,
		 
		  *dir,iY,dY,
		  *family-1,
		  iconsts,dconsts,
		  *latent_eff ? *latent_eff-1 : 1000,

		  X,

		  llk_mcmc, lpZ_mcmc, lpcoef_mcmc, lpRE_mcmc, lpLV_mcmc, lpREV_mcmc, lpdispersion_mcmc,
		    
		  Z_start, 
		  Z_pK_start,Z_mean_start,Z_var_start,(unsigned int *)Z_K_start,
		  Z_var_prior? *Z_var_prior : 0,
		  Z_mean_prior_var ? *Z_mean_prior_var : 0,
		  Z_pK_prior ? *Z_pK_prior : 0,
		  Z_var_prior_df ? *Z_var_prior_df : 0,
		  Z_mcmc, Z_rate_move, Z_K_mcmc, Z_pK_mcmc, Z_mean_mcmc, Z_var_mcmc,

		  coef_start,
		  coef_mcmc, coef_rate,    
		  coef_prior_mean, coef_var,

		  sender_start,receiver_start,
		  sender_var_start ? *sender_var_start : 0,
		  receiver_var_start ? *receiver_var_start : 0,
		  sender_var_prior ? *sender_var_prior : 0,
		  sender_var_prior_df ? *sender_var_prior_df : 0,
		  receiver_var_prior ? *receiver_var_prior : 0,
		  receiver_var_prior_df ? *receiver_var_prior_df : 0,
		  sender_mcmc, receiver_mcmc, 
		  sender_var_mcmc, receiver_var_mcmc,

		  dispersion_mcmc? *dispersion_start:0,
		  dispersion_mcmc? *dispersion_prior:0,
		  dispersion_mcmc? *dispersion_prior_df:0,
		  dispersion_mcmc,

		  res[2],
		  observed_ties,
		  deltas[0],deltas[1],group_deltas,group_prop_size,
		  coef_eff_sender,coef_eff_sender_size?*coef_eff_sender_size:0,
		  coef_eff_receiver,coef_eff_receiver_size?*coef_eff_receiver_size:0,
		  *accept_all);

  PutRNGstate();
  P_free_all();
  return;
}