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; }
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; }