R/CCMnet_constr_uni_obs_stats.R

Defines functions CCMnet_constr_uni_obs_stats

#' Dispatcher for Observed Statistics Constraints in CCMnet
#'
#' This function identifies which specific constraint initialization function to 
#' call based on the provided \code{Obs_stats}. It aggregates the results and 
#' updates the \code{CCM_constr_info} object to be passed to the C-level sampler.
#'
#' @param CCM_constr_info A list containing existing constraint information.
#' @param Network_stats A list or vector of current network statistics.
#' @param Prob_Distr A character vector specifying the distributions to be used.
#' @param Prob_Distr_Params A nested list of parameters (means, variances, etc.).
#' @param samplesize Integer. Number of MCMC samples to collect.
#' @param burnin Integer. Number of initial iterations to discard.
#' @param interval Integer. Thinning interval for MCMC sampling.
#' @param statsonly Logical. If \code{TRUE}, only statistics are returned.
#' @param G An \code{igraph} or network object.
#' @param population Integer. The number of nodes in the network.
#' @param covPattern A vector representing nodal attributes.
#' @param remove_var_last_entry Logical. If \code{TRUE}, removes linear 
#'   dependencies in degree distributions during variance inversion.
#' @param Obs_stats A character vector specifying the types of statistics to 
#'   constrain. Supported values: "edges", "mixing", "degreedist", 
#'   "degmixing", "triangles". Can be a combination (e.g., \code{c("degmixing", "triangles")}).
#'
#' @details 
#' The function uses conditional logic to match \code{Obs_stats} to the 
#' appropriate helper function (e.g., \code{\link{CCMnet_constr_uni_degmixing_clustering}}). 
#' 
#' \strong{Special Handling for degreedist:} 
#' If \code{Obs_stats} is "degreedist", the function overrides \code{Prob_Distr} 
#' to "dirmult" and sets a default parameter list of ones.
#' 
#' 
#'
#' @return An updated \code{CCM_constr_info} list with the following updated fields:
#' \itemize{
#'   \item \code{Clist_nterms}
#'   \item \code{Clist_fnamestring}
#'   \item \code{Clist_snamestring}
#'   \item \code{inputs}
#'   \item \code{eta0}
#'   \item \code{stats}
#' }
#' 
#' @noRd

CCMnet_constr_uni_obs_stats <-function(CCM_constr_info, Network_stats, Prob_Distr, Prob_Distr_Params,
                            samplesize, burnin, interval,
                            statsonly, nedges, g, max_degree,
                            population, covPattern, remove_var_last_entry,
                            Obs_stats) {
  
  if ((length(Obs_stats) == 1) && (Obs_stats == "edges")) {
    
    CCM_constr_info_verify = CCMnet_constr_uni_verifyinput_edges(Network_stats, Prob_Distr, Prob_Distr_Params,
                                                          population, covPattern, remove_var_last_entry)
    
    CCM_constr_info_initial = CCMnet_constr_uni_initalstat_edges(Network_stats, Prob_Distr, Prob_Distr_Params,
                                                         nedges, g, max_degree,
                                                         population, covPattern, remove_var_last_entry,
                                                         CCM_constr_info)
    
  } else if ((length(Obs_stats) == 1) && (Obs_stats == "mixing")) {
    
    CCM_constr_info_verify = CCMnet_constr_uni_verifyinput_mixing(Network_stats, Prob_Distr, Prob_Distr_Params,
                                                                 population, covPattern, remove_var_last_entry)
    
    CCM_constr_info_initial = CCMnet_constr_uni_initalstat_mixing(Network_stats, Prob_Distr, Prob_Distr_Params,
                                                                 nedges, g, max_degree,
                                                                 population, covPattern, remove_var_last_entry,
                                                                 CCM_constr_info)
    
  } else if ((length(Obs_stats) == 1) && (Obs_stats == "degreedist")) {
    Prob_Distr='dirmult'
    Prob_Distr_Params=list(list(rep(1,population)))
    
    CCM_constr_info_verify = CCMnet_constr_uni_verifyinput_degdist(Network_stats, Prob_Distr, Prob_Distr_Params,
                                                                  population, covPattern, remove_var_last_entry)
    
    CCM_constr_info_initial = CCMnet_constr_uni_initalstat_degdist(Network_stats, Prob_Distr, Prob_Distr_Params,
                                                                  nedges, g, max_degree,
                                                                  population, covPattern, remove_var_last_entry,
                                                                  CCM_constr_info)
    
  } else if (((length(Obs_stats) == 2) && (Obs_stats[1] == "mixing") && (Obs_stats[2] == "degreedist")) ||
             ((length(Obs_stats) == 2) && (Obs_stats[1] == "degreedist") && (Obs_stats[2] == "mixing"))) {
    
    CCM_constr_info_verify = CCMnet_constr_uni_verifyinput_mixing_degdist(Network_stats, Prob_Distr, Prob_Distr_Params,
                                                                  population, covPattern, remove_var_last_entry)
    
    CCM_constr_info_initial = CCMnet_constr_uni_initalstat_mixing_degdist(Network_stats, Prob_Distr, Prob_Distr_Params,
                                                                  nedges, g, max_degree,
                                                                  population, covPattern, remove_var_last_entry,
                                                                  CCM_constr_info)
    
  } else if ((length(Obs_stats) == 1) && (Obs_stats == "degmixing"))  {
    
    CCM_constr_info_verify = CCMnet_constr_uni_verifyinput_degmixing(Network_stats, Prob_Distr, Prob_Distr_Params,
                                                                  population, covPattern, remove_var_last_entry)
    
    CCM_constr_info_initial = CCMnet_constr_uni_initalstat_degmixing(Network_stats, Prob_Distr, Prob_Distr_Params,
                                                                  nedges, g, max_degree,
                                                                  population, covPattern, remove_var_last_entry,
                                                                  CCM_constr_info)
    
  } else if  (((length(Obs_stats) == 2) && (Obs_stats[1] == c("degmixing")) && (Obs_stats[2] == c("triangles"))) ||
              ((length(Obs_stats) == 2) && (Obs_stats[1] == "triangles") && (Obs_stats[2] == "degmixing"))) {
    
    CCM_constr_info_verify = CCMnet_constr_uni_verifyinput_degmixing_clustering(Network_stats, Prob_Distr, Prob_Distr_Params,
                                                                  population, covPattern, remove_var_last_entry)
    
    CCM_constr_info_initial = CCMnet_constr_uni_initalstat_degmixing_clustering(Network_stats, Prob_Distr, Prob_Distr_Params,
                                                                  nedges, g, max_degree,
                                                                  population, covPattern, remove_var_last_entry,
                                                                  CCM_constr_info)
  } else {
    stop("No such NETWORK PROPERTY of observation currently implemented.")
    return(CCM_constr_info)
  }
  
  ####NEED TO CHANGE BY ADDING#######
  ####THIS REQUIRES CHANGING THE C CODE TO MAKE SURE CHANGE STATISTICS ARE ALIGNED######
  
  #CCM_constr_info[["error"]]
  #CCM_constr_info[["prob_type"]]
  #CCM_constr_info[["mean_vector"]]
  #CCM_constr_info[["var_vector"]]
  CCM_constr_info[["Clist_nterms"]] = CCM_constr_info_verify[["Clist_nterms"]]
  CCM_constr_info[["Clist_fnamestring"]] = CCM_constr_info_verify[["Clist_fnamestring"]]
  CCM_constr_info[["Clist_snamestring"]] = CCM_constr_info_verify[["Clist_snamestring"]]
  CCM_constr_info[["inputs"]] = CCM_constr_info_verify[["inputs"]]
  CCM_constr_info[["eta0"]] = CCM_constr_info_verify[["eta0"]]
  CCM_constr_info[["stats"]] = CCM_constr_info_initial[["stats"]]
  #CCM_constr_info[["MHproposal_name"]]
  #CM_constr_info[["MHproposal_package"]]
  
  return(CCM_constr_info)
}

Try the CCMnet package in your browser

Any scripts or data that you put into this service are public.

CCMnet documentation built on March 2, 2026, 9:06 a.m.