{"id":23627201,"url":"https://github.com/cadam00/priorcon","last_synced_at":"2025-08-31T03:31:48.459Z","repository":{"id":249134798,"uuid":"830588605","full_name":"cadam00/priorCON","owner":"cadam00","description":"Graph Community Detection Methods into Systematic Conservation Planning","archived":false,"fork":false,"pushed_at":"2025-08-19T05:03:36.000Z","size":4291,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-08-19T05:39:52.229Z","etag":null,"topics":["biodiversity","community-detection","conservation","conservation-planning","graph-theory","prioritization","r","r-package"],"latest_commit_sha":null,"homepage":"https://cadam00.github.io/priorCON/","language":"R","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cadam00.png","metadata":{"files":{"readme":"README.md","changelog":"NEWS.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-07-18T14:59:46.000Z","updated_at":"2025-08-19T05:01:05.000Z","dependencies_parsed_at":"2024-07-27T06:29:03.737Z","dependency_job_id":"c5007250-68f5-457a-960b-86a568ea9ba1","html_url":"https://github.com/cadam00/priorCON","commit_stats":null,"previous_names":["cadam00/priorcom","cadam00/priorcon"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cadam00/priorCON","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cadam00%2FpriorCON","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cadam00%2FpriorCON/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cadam00%2FpriorCON/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cadam00%2FpriorCON/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cadam00","download_url":"https://codeload.github.com/cadam00/priorCON/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cadam00%2FpriorCON/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272934226,"owners_count":25017818,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-31T02:00:09.071Z","response_time":79,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["biodiversity","community-detection","conservation","conservation-planning","graph-theory","prioritization","r","r-package"],"created_at":"2024-12-27T23:57:12.253Z","updated_at":"2025-08-31T03:31:48.452Z","avatar_url":"https://github.com/cadam00.png","language":"R","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- badges: start --\u003e\n[![CRAN status](https://www.r-pkg.org/badges/version/priorCON)](https://CRAN.R-project.org/package=priorCON)\n[![Developmental version](https://img.shields.io/badge/devel%20version-0.1.6-blue.svg)](https://CRAN.R-project.org/package=priorCON)\n[![R-CMD-check](https://github.com/cadam00/priorCON/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/cadam00/priorCON/actions/workflows/R-CMD-check.yaml)\n[![Codecov test coverage](https://codecov.io/gh/cadam00/priorCON/branch/main/graph/badge.svg)](https://app.codecov.io/gh/cadam00/priorCON?branch=main)\n\u003c!-- badges: end --\u003e\n\n**This research was conducted at the Department of Marine Sciences, University\nof the Aegean, Greece, supported by the European Union’s Horizon 2020 research\nand innovation programme HORIZON-CL6–2021-BIODIV-01–12, under grant agreement\nNo 101059407, “MarinePlan – Improved transdisciplinary science for effective\necosystem-based maritime spatial planning and conservation in European Seas”.**\n\n# **Introduction to the priorCON Package (tutorial)**\n\nThe **priorCON** package offers an innovative tool-set that incorporates\ngraph community detection methods into systematic conservation planning.\nThis package is designed to enhance spatial prioritization by focusing\non the protection of areas with high ecological connectivity. Unlike\ntraditional approaches that prioritize individual planning units,\n**priorCON** focuses on clusters of features that exhibit strong\necological linkages. The **priorCON** package is built upon the\n**prioritizr** package ([Hanson et al., 2024](#ref-prioritizr);\n[2025](#ref-hanson2025)), using commercial and open-source exact algorithm\nsolvers that ensure optimal solutions to prioritization problems.\n\n**Features of priorCON**\n\n-   **Graph Community Detection**: The package utilizes connectivity\n    metrics to identify clusters of habitat patches with high\n    connectivity values.\n\n-   **Spatial prioritization**: The package uses the connectivity\n    metrics as inputs in prioritizr to identify areas with high\n    connectivity.\n\n-   **Connectivity Estimation**: The package estimates the connectivity\n    protection level by calculating the protected connections.\n\n-   **Post-processing**: The package can be used to produce and download\n    the outputs of the analysis as shapefiles, matrices and tmap plots.\n\nThis workflow is shown on Fig. [1](#ref-Figure1).\n\n\u003cimg src=\"vignettes/priorCON_flowchart.png\" alt=\"Flow chart of the priorCON prioritization analysis. priorCON functions are indicated in grey boxes\" width=\"100%\" /\u003e\n\u003cp class=\"caption\" align=\"center\"\u003e\n\u003cspan id=\"ref-Figure1\"\u003e\u003c/span\u003eFig. 1: Flow chart of the \u003cb\u003epriorCON\u003c/b\u003e\nprioritization analysis. \u003cb\u003epriorCON\u003c/b\u003e functions are indicated in grey boxes\n\u003c/p\u003e\n\nThis tutorial will guide you through the key functions of the package,\nfrom data preparation to generating informative outputs to address\nconservation connectivity challenges in diverse ecosystems.\n\n## **Workflow: Running the analysis**\n\nThe package provides 4 steps to perform the analysis:\n\n1.  Preprocessing (Optional): Function `preprocess_graphs()` is built in\n    order to create edge lists from various inputs formats.\n\n2.  Connectivity metrics estimation: Function `get_metrics()` is built\n    to calculate the following graph metrics: degree, eigenvector\n    centrality, betweenness centrality, louvain clustering, walktrap\n    clustering, s-core, PageRank.\n\n3.  Prioritization: Functions `basic_scenario()` and\n    `connectivity_scenario()` are used to insert the data to **prioritizr**\n    run the prioritization problem and obtain the optimum solutions.\n\n4.  Post-processing: Function `get_outputs()` is used in order to plot\n    interactive maps and export tables, shapefiles and rasters of the\n    results\n\nThe functions of steps 1 and 2 can be used within the spatial\nconservation planning workflow as described here but also independently\nto create and obtain the graph metrics that might be also useful within\nother research contexts. In the next sections we provide an illustrative\nexample to explain in more detail how the functions operate.\n\n## **Installation**\n\nAll the functions of the package can be installed from CRAN in R via\n``` r\ninstall.packages(\"priorCON\")\n```\n\nAlternatively, the package **priorCON** can be installed at the development\nversion from Github in R via\n``` r\nif (!require(remotes)) install.packages(\"remotes\")\nremotes::install_github(\"cadam00/priorCON\")\n```\n\n## **Illustration example**\n\nLet us consider the following dataset as an illustrative example. The\narea examined is Thermaikos gulf in Greece. In this example, a\nLagrangian model has been run to the area, to estimate connectivity.\nThis connectivity will be incorporated into the analysis to obtain the\nareas that need to be protected to maximize the connectivity protection.\nPreprocessing is necessary in this case in order to transform the\nLagrangian data in an edge list.\n\n### Step 1 Preprocessing (Optional):\n\nThe input of an edge list is required in most graph theoretic\napproaches. Fig. \u003ca href=\"#ref-Figure2\"\u003e2\u003c/a\u003e represents a typical\ndirected weighted graph. In the edge list, the first two columns utilize\nthe nodes IDs to represent edges and the last column corresponds to the\nvalue of the edges. This value actually represents the connectivity\nvalue between the corresponding nodes and may represent for instance\nvalues resulting from particle drift models, migration probabilities or\nother. This preprocessing step can be conducted using the function\n`preprocess_graphs()` and serves in reading and transforming the initial\ninput data into an edge list. Further details on the initial data\nformats are given below. In case that an edge list is available, this\nstep can be skipped.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"vignettes/priorCON_fig2.png\" alt=\"Weighted directed graph (left): Circles represent nodes and arrows represent weighted edges. The tabular representation of the graph represents the edge list (right).\" width=\"50%\" /\u003e\n\u003c/p\u003e\n\u003cp class=\"caption\" align=\"center\"\u003e\n\u003cspan id=\"ref-Figure2\"\u003e\u003c/span\u003eFig. 2: Weighted directed graph (left):\nCircles represent nodes and arrows represent weighted edges. The tabular\nrepresentation of the graph represents the edge list (right).\n\u003c/p\u003e\n\nFunction `preprocess_graphs()` takes as input a list of .txt/.csv\nobjects. Each object represents the connections between a node and all\nthe other nodes. For the model to read the data, it is necessary to have\nall the .txt/.csv objects in one folder. There are two ways to\nincorporate connectivity data, based on their linkage to features:\n\n-   Case 1: the connectivity data correspond to specific biodiversity\n    features. If a biodiversity feature has its own connectivity dataset\n    then the file including the edge lists needs to have the same name\n    as the corresponding feature. For example, consider having 5 species\n    (f1, f2, f3, f4, f5) and 5 connectivity datasets. Then the\n    connectivity datasets need to be in separate folders named:\n    f1,f2,f3,f4,f5 and the algorithm will understand that they\n    correspond to the species.\n\n-   Case 2: the connectivity dataset represents a spatial pattern that\n    is not directly connected with a specific biodiversity feature. Then\n    the connectivity data need to be included in a separate folder named\n    in a different way than the species. For example consider having 5\n    species (f1,f2,f3,f4,f5) and 1 connectivity dataset. This dataset\n    can be included in a separate folder (e.g. “Langragian_con”).\n\nIn our example we use connectivity values that are not directly\nconnected with a specific species, therefore we illustrate Case 2. Fig.\n\u003ca href=\"#ref-Figure3\"\u003e3\u003c/a\u003e represents the structure used in the\ntutorial. The data need to be stored in this way in order for the\nalgorithm to read them properly.\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"vignettes/priorCON_fig3.png\" alt=\"Connectivity folder\" width=\"50%\"  /\u003e\n\u003c/p\u003e\n\u003cp class=\"caption\" align=\"center\"\u003e\n\u003cspan id=\"ref-Figure3\"\u003e\u003c/span\u003eFig. 3: Connectivity folder\n\u003c/p\u003e\n\nA typical Lagrangian output is a set of files representing the\nlikelihood of a point moving from an origin (source) to a destination\n(target). This can be represented using a list of .txt files (as many as\nthe origin points) including information for the destination\nprobability. The .txt files need to be named in an increasing order. The\nname of the files need to correspond to the numbering of the points, in\norder for the algorithm to match the coordinates with the points (Fig.\n\u003ca href=\"#ref-Figure4\"\u003e4\u003c/a\u003e).\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"vignettes/priorCON_fig4.png\" alt=\"The 001.txt file contains the following information: Each row represents the probability of movement between point 001 and any other destination points.\" width=\"50%\"/\u003e\n\u003c/p\u003e\n\u003cp class=\"caption\" align=\"center\"\u003e\n\u003cspan id=\"ref-Figure4\"\u003e\u003c/span\u003eFig. 4: The 001.txt file contains the\nfollowing information: Each row represents the probability of movement\nbetween point 001 and any other destination points.\n\u003c/p\u003e\n\nAs long as the data are set in this way, the preprocessing algorithm can\nrun and transform the format of the inputs to an edge list. If an edge\nlist dataset is available, this preprocessing step can be skipped.\n\n``` r\n# Import packages\nlibrary(priorCON)\nlibrary(tmap)\nlibrary(terra)\n```\n```\n## terra 1.8.21\n```\n\n```r\n# Read connectivity files from folder and combine them\n  combined_edge_list \u003c- preprocess_graphs(\n    system.file(\"external\",package=\"priorCON\"),\n    header = FALSE, sep =\";\"\n   )\n```\n\n### Step 2 Connectivity Metrics Estimation:\n\nFunction `get_metrics()` is used to calculate graph metrics values. The\nedge lists created from the previous step, or inserted directly from the\nuser are used in this step to create graphs. The directed graphs are\ntransformed to undirected. The function is based on the **igraph**\npackage ([Csárdi and Nepusz, 2006](#ref-csardi2006igraph); [Csárdi et al.,\n2024](#ref-igraph)) which is used to create clusters using Louvain and\nWalktrap and calculate the following metrics: Eigenvector Centrality,\nBetweenness Centrality,  Degree and PageRank. S-core is calculated using the\npackage **brainGraph** ([Watson, 2024](#ref-brainGraph)). The user can\nchoose between these options to create the respective outputs.\n`'s_core'`, `'louvain'`, `'walktrap'`, `'eigen'`, `'betw'`, `'deg'` or\n`'page_rank'`.\n\nDetailed information on the theory and equations of the used graph\nmetrics are provided in Nagkoulis et al.(2024; subm Methods in Ecology\nand Evolution).\n\n``` r\n# Set seed for reproducibility\nset.seed(42)\n\n# Detect graph communities using the s-core algorithm\npre_graphs \u003c- get_metrics(combined_edge_list, which_community = \"s_core\")\n```\n\n### Step 3 Prioritization:\nTwo alternative functions can be used for the\nprioritization step: i) the `connectivity_scenario()` function, which\nincludes connectivity into the optimization procedure and ii) the\n`basic_scenario()` function, which does not include connectivity. The\ntwo functions can be run separately. Users may use both functions, if\nthey wish to compare the results obtained from the two scenarios,\ni.e. with and without connectivity. Alternatively, only the\n`connectivity_scenario()` function can be run to obtain the\nprioritization outputs of the connectivity scenario. Both functions are\nbased on the **priorititizr** package ([Hanson et al., 2024](#ref-prioritizr);\n[2025](#ref-hanson2025)). The connectivity metrics are first transformed to\nrasters, following an approach similar to Marxan Connect\n([Daigle et al., 2020](#ref-daigle2020operationalizing)). Then **priorititizr**\nmaximizes the utility obtained from protecting both features and\nconnections. Mathematically, the target of the optimization is to\nmaximize U under the budget (B) limitations (eq. 2 and 3 of Nagkoulis et\nal. (2024)):\n\n$$\nU = \\sum_{\\boldsymbol{PU_i} \\, \\in \\,SA} -\\lambda c_i + \\sum_{\\boldsymbol{PU_i} \\, \\in \\,SA} \\sum_{j=1}^J \\mu_j f_j + \\sum_{\\boldsymbol{PU_i} \\, \\in \\,SA} \\sum_{j=1}^J \\mu_j M_j,\n$$\n\n$$\n\\sum_{\\boldsymbol{PU_i} \\, \\in \\, SA} c_i \\leq B\n$$\n\nA set of planning units $\\boldsymbol{A}=(\\boldsymbol{PU}_1, \\boldsymbol{PU}_2, ..., \\boldsymbol{PU_i}, ..., \\boldsymbol{PU_i})$ is considered to be protected when $\\boldsymbol{PU_i} \\, \\in \\, SA$. The protection of any $\\boldsymbol{PU_i}$ results in a cost $c_i$. A finite set of features $\\boldsymbol{F}=(F_1, F_2, ... , F_j, ..., F_J)$ is also distributed in $A$, suggesting that these features can be spatially mapped within the PUs. Each $PU$ is thus defined as a spatial object containing the following properties: $\\boldsymbol{PU_i}=(f_1, f_2, ..., f_j, ..., f_J, c_i)$, where $f_j$ indicates the quantity of $F_j$ located in $PU_i$. We use the annotation $M_j$ for the values of the metric for every feature $j$. By inserting metrics into the analysis, each PU’s ($\\boldsymbol{PU_i}$) properties are extended and can be expressed as follows: $\\boldsymbol{PU_i} = (f_1, f_2, ..., f_j, ..., f_J, M_1, M_2, ..., M_j, ..., M_J, c_i)$.\n\nThe first input that can be given to the algorithm is a typical cost\nlayer representing the cost of protecting each single planning unit.\nThis cost layer is inserted to **prioritizr**. If such a cost layer is\nnot available, a cost layer with all planning units having equal cost\ncan be inserted (Fig. \u003ca href=\"#ref-Costraster\"\u003e5\u003c/a\u003e. The algorithm\nneeds a cost layer, in order to determine the planning units.\n\n``` r\n# Set tmap to “view” mode\ntmap_mode(\"view\")\n\n# Read the cost raster\ncost_raster \u003c- get_cost_raster()\n\n# Plot the cost raster with tmap\ntm_shape(cost_raster) +\n  tm_raster(col.legend = tm_legend(title = \"cost\",\n            position = c(\"right\", \"top\")))\n```\n```\n## The visual variable \"col\" of the layer \"raster\" contains a unique value. Therefore a discrete scale is applied (tm_scale_discrete).\n```\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"vignettes/cost_raster.png\" alt=\"Cost raster\" width=\"50%\"/\u003e\n\u003c/p\u003e\n\u003cp class=\"caption\" align=\"center\"\u003e\n\u003cspan id=\"ref-Costraster\"\u003e\u003c/span\u003eFig. 5: Cost raster\n\u003c/p\u003e\n\nThe second input are the features rasters. In case such rasters are not\navailable, a raster with equal values can be given to the algorithm. In\nthis case we have used such a pseudo-raster, adding some noise to\nimprove the performance of the algorithm.\n\n``` r\n# Read the features raster\nfeatures \u003c- get_features_raster()\n\n# Plot the features raster with tmap\ntm_shape(features) +\n  tm_raster(col.legend = tm_legend(title = \"f1\",\n            position = c(\"right\", \"top\")))\n```\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"vignettes/features.png\" alt=\"Features raster\" width=\"50%\"  /\u003e\n\u003c/p\u003e\n\u003cp class=\"caption\" align=\"center\"\u003e\n\u003cspan id=\"ref-Features\"\u003e\u003c/span\u003eFig. 6: Features raster\n\u003c/p\u003e\n\n``` r\n# Solve an ordinary prioritizr prioritization problem\nbasic_solution \u003c- basic_scenario(\n                    cost_raster = cost_raster,\n                    features    = features,\n                    budget_perc = 0.1\n                  )\n\n# Solve a prioritizr prioritization problem,\n# by incorporating graph connectivity of the features\nconnectivity_solution \u003c- connectivity_scenario(\n                           cost_raster = cost_raster,\n                           features    = features,\n                           budget_perc = 0.1,\n                           pre_graphs  = pre_graphs\n                         )\n```\n\n### Step 4: Post-processing:\n\nThe results obtained from **prioritizr** are presented using matrices\nand plots, allowing the user to compare the outcomes of incorporating\nconnectivity metrics in the analysis. Function `get_outputs()` takes as\ninput a prioritization solution. The user can also get the outputs as\nshapefiles and raster to use them in their analysis.\n\n``` r\n # Get outputs from basic_scenario function for feature “f1”\nbasic_outputs \u003c- get_outputs(solution   = basic_solution, \n                             feature    = \"f1\",\n                             pre_graphs = pre_graphs)\nbasic_outputs$tmap\n```\n\n```\nThe visual variable \"col\" of the layer \"lines\" contains a unique value. Therefore a discrete scale is applied (tm_scale_discrete).\n```\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"vignettes/basic_output.png\" alt=\"Basic solution with connections shown\" width=\"50%\"  /\u003e\n\u003c/p\u003e\n\u003cp class=\"caption\" align=\"center\"\u003e\n\u003cspan id=\"ref-Basic\"\u003e\u003c/span\u003eFig. 7: Basic solution with connections\nshown\n\u003c/p\u003e\n\n``` r\n# Print summary of features and connections held\n# percentages for basic scenario\nprint(basic_outputs$connectivity_table)\n```\n\n``` r\n##  feature relative_held connections(%)\n## 1     f1      0.178563              0\n```\n\n``` r\n# Get outputs from connectivity_scenario function for feature “f1”\nconnectivity_outputs \u003c- get_outputs(solution   = connectivity_solution,\n                                    feature    = \"f1\",\n                                    pre_graphs = pre_graphs)\nconnectivity_outputs$tmap\n```\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"vignettes/connectivity_output.png\" alt=\"Connectivity solution with connections shown\" width=\"50%\" /\u003e\n\u003c/p\u003e\n\u003cp class=\"caption\" align=\"center\"\u003e\n\u003cspan id=\"ref-Connectivity\"\u003e\u003c/span\u003eFig. 8: Connectivity solution with\nconnections shown\n\u003c/p\u003e\n\n``` r\n# Print summary of features and connections held percentages\n# for connectivity scenario\nprint(connectivity_outputs$connectivity_table)\n```\n\n``` r\n##  feature relative_held connections(%)\n## 1     f1     0.1637209      0.3339886\n```\n\n### Graph Connectivity Rasters:\n\nAccessing and working directly with the graph connectivity rasters used as\nfeatures in the `connectivity_scenario` function is possible by two ways. The\nfirst way is after running `connectivity_scenario`, retrieving its output\nelements named `original_connectivity_rast`/`normalized_connectivity_rast`. The\nsecond one is computing these rasters directly from `get_metrics` output and a\nplanning units SpatRaster object (`pu_raster`).\n\n```r\n# Define planning units area SpatRaster, matching the coordinates of pre_graphs\npu_raster \u003c- get_cost_raster()\n# Graph connectivity SpatRaster object. pre_graphs is calculated as before.\n# It has same values with connectivity_solution$original_connectivity_rast.\nf1_s_core \u003c- graph_connectivity_rasters(pu_raster, pre_graphs)\n\n# Plot the graph connectivity SpatRaster with tmap\ntm_shape(f1_s_core) +\n  tm_raster(col.legend = tm_legend(title = \"f1 S-core\",\n            position = c(\"right\", \"top\")))\n```\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"vignettes/original_connectivity.png\" alt=\"Graph connectivity\"\n    width=\"50%\" /\u003e\n\u003c/p\u003e\n\u003cp class=\"caption\" align=\"center\"\u003e\n\u003cspan id=\"ref-OriginalConnectivity\"\u003e\u003c/span\u003eFig. 9: Graph connectivity\n\u003c/p\u003e\n\n\n```r\nmax_ \u003c- as.numeric(global(f1_s_core, max, na.rm=TRUE))\nmin_ \u003c- as.numeric(global(f1_s_core, min, na.rm=TRUE))\nf1_s_core_normalized \u003c- (f1_s_core - min_) / (max_ - min_)\n\n# Plot normalized graph connectivity SpatRaster with tmap in [0,1] scale.\n# It has same values with connectivity_solution$normalized_connectivity_rast.\ntm_shape(f1_s_core_normalized) +\n  tm_raster(col.legend = tm_legend(title = \"Normalized f1 S-core\",\n            position = c(\"right\", \"top\")))\n```\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"vignettes/normalized_connectivity.png\" alt=\"Normalized graph connectivity\"\n    width=\"50%\" /\u003e\n\u003c/p\u003e\n\u003cp class=\"caption\" align=\"center\"\u003e\n\u003cspan id=\"ref-NormalizedConnectivity\"\u003e\u003c/span\u003eFig. 10: Normalized graph connectivity\n\u003c/p\u003e\n\n\n## **References**\n\nCsárdi, Gábor, and Tamás Nepusz. 2006.\n“\u003cspan class=\"nocase\" id=\"ref-csardi2006igraph\"\u003eThe igraph\nsoftware package for complex network research\u003c/span\u003e.” *InterJournal*\nComplex Systems: 1695. [https://igraph.org](https://igraph.org)\n\n\u003cspan class=\"nocase\" id=\"ref-igraph\"\u003e\u003c/span\u003e\nCsárdi, Gábor, Tamás Nepusz, Vincent Traag, Szabolcs Horvát, Fabio\nZanini, Daniel Noom, and Kirill Müller. 2024.\n*igraph: Network Analysis and Visualization in\nR*. [https://doi.org/10.5281/zenodo.7682609](https://doi.org/10.5281/zenodo.7682609).\n\n\u003cspan class=\"nocase\" id=\"ref-daigle2020operationalizing\"\u003e\u003c/span\u003e\nDaigle, Rémi M., Anna Metaxas, Arieanna C. Balbar, Jennifer McGowan,\nEric A. Treml, Caitlin D. Kuempel, Hugh P. Possingham, and Maria Beger.\n2020. “Operationalizing ecological connectivity in\nspatial conservation planning with Marxan Connect.” *Methods in\nEcology and Evolution* 11 (4): 570–79.\nhttps://doi.org/10.1111/2041-210X.13349\n\n\u003cspan class=\"nocase\" id=\"ref-prioritizr\"\u003e\u003c/span\u003e\nHanson, Jeffrey O, Richard Schuster, Nina Morrell, Matthew\nStrimas-Mackey, Brandon P M Edwards, Matthew E Watts, Peter Arcese,\nJoseph R Bennett, and Hugh P Possingham. 2024. \u003cb\u003eprioritizr: Systematic\nConservation Prioritization in R\u003c/b\u003e.\n[https://CRAN.R-project.org/package=prioritizr](https://CRAN.R-project.org/package=prioritizr)\n\n\u003cspan class=\"nocase\" id=\"ref-hanson2025\"\u003e\u003c/span\u003e\nHanson JO, Schuster R, Strimas‐Mackey M, Morrell N, Edwards BPM, Arcese P,\nBennett JR, and Possingham HP. 2025. Systematic conservation prioritization with\nthe prioritizr R package. *Conservation Biology*, 39: e14376.\nhttps://doi.org/10.1111/cobi.14376\n\n\u003cspan class=\"nocase\" id=\"ref-brainGraph\"\u003e\u003c/span\u003e\nWatson, Christopher G. 2024. \u003cb\u003ebrainGraph: Graph Theory Analysis of Brain MRI\nData\u003c/b\u003e.\n[https://doi.org/10.32614/CRAN.package.brainGraph](https://doi.org/10.32614/CRAN.package.brainGraph)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcadam00%2Fpriorcon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcadam00%2Fpriorcon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcadam00%2Fpriorcon/lists"}