{"id":349147,"name":"kuenm2","description":"Make the process of ecological niche modeling easier, faster, and more reproducible, and at the same time more robust.","url":"https://github.com/marlonecobos/kuenm2","last_synced_at":"2026-04-22T03:30:15.416Z","repository":{"id":78964762,"uuid":"543685785","full_name":"marlonecobos/kuenm2","owner":"marlonecobos","description":"Repository for the new major version of kuenm","archived":false,"fork":false,"pushed_at":"2026-04-07T14:40:19.000Z","size":39509,"stargazers_count":11,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-04-16T01:02:27.112Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://marlonecobos.github.io/kuenm2/","language":"R","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marlonecobos.png","metadata":{"files":{"readme":"README.Rmd","changelog":"NEWS.md","contributing":null,"funding":null,"license":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-09-30T16:17:06.000Z","updated_at":"2026-03-31T21:06:28.000Z","dependencies_parsed_at":"2023-11-15T19:30:21.615Z","dependency_job_id":"722dcb9e-9428-481b-b9b1-c0edd5607422","html_url":"https://github.com/marlonecobos/kuenm2","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/marlonecobos/kuenm2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marlonecobos%2Fkuenm2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marlonecobos%2Fkuenm2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marlonecobos%2Fkuenm2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marlonecobos%2Fkuenm2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marlonecobos","download_url":"https://codeload.github.com/marlonecobos/kuenm2/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marlonecobos%2Fkuenm2/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32074812,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-21T02:38:07.213Z","status":"ssl_error","status_checked_at":"2026-04-21T02:38:06.559Z","response_time":128,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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"}},"owner":{"login":"marlonecobos","name":"Marlon E. Cobos","uuid":"19596631","kind":"user","description":"","email":"","website":"https://eeb.ku.edu/marlon-e-cobos","location":"Lawrence, Kansas, USA","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/19596631?u=e6c23b6df2f033770f18c4d10926c717e29822ea\u0026v=4","repositories_count":31,"last_synced_at":"2023-08-19T12:11:50.310Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/marlonecobos","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2023-02-24T00:02:53.676Z","updated_at":"2023-08-19T12:11:50.433Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marlonecobos","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marlonecobos/repositories"},"packages":[{"id":14146872,"name":"kuenm2","ecosystem":"cran","description":"Detailed Development of Ecological Niche Models","homepage":"https://marlonecobos.github.io/kuenm2/","licenses":"GPL (≥ 3)","normalized_licenses":["CNRI-Python-GPL-Compatible"],"repository_url":"https://github.com/marlonecobos/kuenm2","keywords_array":[],"namespace":null,"versions_count":2,"first_release_published_at":"2026-03-29T00:00:00.000Z","latest_release_published_at":"2026-04-20T00:00:00.000Z","latest_release_number":"0.1.3","last_synced_at":"2026-04-20T23:20:12.449Z","created_at":"2026-03-29T16:17:54.653Z","updated_at":"2026-04-20T23:20:54.406Z","registry_url":"https://cran.r-project.org/package=kuenm2","install_command":null,"documentation_url":"http://cran.r-project.org/web/packages/kuenm2/kuenm2.pdf","metadata":{},"repo_metadata":{"id":78964762,"uuid":"543685785","full_name":"marlonecobos/kuenm2","owner":"marlonecobos","description":"Repository for the new major version of kuenm","archived":false,"fork":false,"pushed_at":"2026-04-07T14:40:19.000Z","size":39509,"stargazers_count":11,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-04-16T01:02:27.112Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://marlonecobos.github.io/kuenm2/","language":"R","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marlonecobos.png","metadata":{"files":{"readme":"README.Rmd","changelog":"NEWS.md","contributing":null,"funding":null,"license":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-09-30T16:17:06.000Z","updated_at":"2026-03-31T21:06:28.000Z","dependencies_parsed_at":"2023-11-15T19:30:21.615Z","dependency_job_id":"722dcb9e-9428-481b-b9b1-c0edd5607422","html_url":"https://github.com/marlonecobos/kuenm2","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/marlonecobos/kuenm2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marlonecobos%2Fkuenm2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marlonecobos%2Fkuenm2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marlonecobos%2Fkuenm2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marlonecobos%2Fkuenm2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marlonecobos","download_url":"https://codeload.github.com/marlonecobos/kuenm2/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marlonecobos%2Fkuenm2/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31991720,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T20:23:30.271Z","status":"online","status_checked_at":"2026-04-19T02:00:07.110Z","response_time":55,"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"},"owner_record":{"login":"marlonecobos","name":"Marlon E. Cobos","uuid":"19596631","kind":"user","description":"","email":"","website":"https://eeb.ku.edu/marlon-e-cobos","location":"Lawrence, Kansas, USA","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/19596631?u=e6c23b6df2f033770f18c4d10926c717e29822ea\u0026v=4","repositories_count":31,"last_synced_at":"2023-08-19T12:11:50.310Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/marlonecobos","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2023-02-24T00:02:53.676Z","updated_at":"2023-08-19T12:11:50.433Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marlonecobos","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marlonecobos/repositories"},"tags":[{"name":"v0.1.2","sha":"3fa9fa20d4df29ffb9878661b67b3090a2e1d3ab","kind":"commit","published_at":"2026-03-31T21:06:22.000Z","download_url":"https://codeload.github.com/marlonecobos/kuenm2/tar.gz/v0.1.2","html_url":"https://github.com/marlonecobos/kuenm2/releases/tag/v0.1.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/marlonecobos/kuenm2@v0.1.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marlonecobos%2Fkuenm2/tags/v0.1.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marlonecobos%2Fkuenm2/tags/v0.1.2/manifests"}]},"repo_metadata_updated_at":"2026-04-20T23:20:54.383Z","dependent_packages_count":0,"downloads":532,"downloads_period":"last-month","dependent_repos_count":0,"rankings":{"downloads":85.71788413098237,"dependent_repos_count":29.856063332133857,"dependent_packages_count":24.215488700158343,"stargazers_count":16.381884240440304,"forks_count":17.036584049785965,"docker_downloads_count":null,"average":34.64158089070017},"purl":"pkg:cran/kuenm2","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/cran/kuenm2","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/cran/kuenm2","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/cran/kuenm2/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":{"last_synced_at":"2026-04-16T01:00:28.264Z","issues_count":0,"pull_requests_count":63,"avg_time_to_close_issue":null,"avg_time_to_close_pull_request":13.210526315789474,"issues_closed_count":0,"pull_requests_closed_count":57,"pull_request_authors_count":2,"issue_authors_count":0,"avg_comments_per_issue":null,"avg_comments_per_pull_request":0.0,"merged_pull_requests_count":57,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":0,"past_year_pull_requests_count":17,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":12.615384615384615,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":13,"past_year_pull_request_authors_count":2,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":0.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":13,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/marlonecobos%2Fkuenm2/issues","maintainers":[{"login":"wevertonbio","count":58,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/wevertonbio"},{"login":"Luisagi","count":5,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/Luisagi"}],"active_maintainers":[{"login":"wevertonbio","count":15,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/wevertonbio"},{"login":"Luisagi","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/Luisagi"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/cran.r-project.org/packages/kuenm2/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/cran.r-project.org/packages/kuenm2/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/cran.r-project.org/packages/kuenm2/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/cran.r-project.org/packages/kuenm2/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/cran.r-project.org/packages/kuenm2/codemeta","maintainers":[{"uuid":"wevertonf1993@gmail.com","login":null,"name":"Weverton C. F. Trindade","email":"wevertonf1993@gmail.com","url":null,"packages_count":4,"html_url":null,"role":null,"created_at":"2026-03-29T16:17:57.975Z","updated_at":"2026-03-29T16:17:57.975Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/cran.r-project.org/maintainers/wevertonf1993@gmail.com/packages"}],"registry":{"name":"cran.r-project.org","url":"https://cran.r-project.org","ecosystem":"cran","default":true,"packages_count":28017,"maintainers_count":15533,"namespaces_count":0,"keywords_count":0,"github":"r-project-org","metadata":{"icon_url":"https://cran.r-project.org/CRANlogo.png","funded_packages_count":546},"icon_url":"https://cran.r-project.org/CRANlogo.png","created_at":"2022-04-06T16:32:25.637Z","updated_at":"2026-04-03T06:40:33.945Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/cran.r-project.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/cran.r-project.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/cran.r-project.org/namespaces"}}],"commits":{"id":11690429,"full_name":"marlonecobos/kuenm2","default_branch":"master","total_commits":595,"total_committers":6,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":99.16666666666667,"dds":0.5327731092436975,"past_year_total_commits":336,"past_year_total_committers":5,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":67.2,"past_year_dds":0.6041666666666667,"last_synced_at":"2026-04-19T02:01:04.467Z","last_synced_commit":"babc46bfb2eb82392723a280eae966dbe4420526","created_at":"2026-03-21T13:01:48.005Z","updated_at":"2026-04-19T02:00:59.657Z","committers":[{"name":"wevertonbio","email":"wevertonf1993@hotmail.com","login":"wevertonbio","count":278},{"name":"marlonecobos","email":"manubio13@gmail.com","login":"marlonecobos","count":197},{"name":"marlonecobos","email":"manubio13@gmailcom","login":null,"count":68},{"name":"luisagi","email":"ariasgiraldo.luisfelipe@gmail.com","login":null,"count":40},{"name":"Luis F. Arias-Giraldo","email":"lfarias.giraldo@gmail.com","login":"Luisagi","count":8},{"name":"Luis Osorio","email":"luismurao@gmail.com","login":"luismurao","count":4}],"past_year_committers":[{"name":"wevertonbio","email":"wevertonf1993@hotmail.com","login":"wevertonbio","count":133},{"name":"marlonecobos","email":"manubio13@gmail.com","login":"marlonecobos","count":129},{"name":"marlonecobos","email":"manubio13@gmailcom","login":null,"count":68},{"name":"luisagi","email":"ariasgiraldo.luisfelipe@gmail.com","login":null,"count":4},{"name":"Luis F. Arias-Giraldo","email":"lfarias.giraldo@gmail.com","login":"Luisagi","count":2}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/marlonecobos%2Fkuenm2/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-21T00:00:07.949Z","repositories_count":6215207,"commits_count":899407716,"contributors_count":34905491,"owners_count":1143746,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"marlonecobos/kuenm2","html_url":"https://github.com/marlonecobos/kuenm2","last_synced_at":"2026-04-16T01:00:28.264Z","status":"active","issues_count":0,"pull_requests_count":63,"avg_time_to_close_issue":null,"avg_time_to_close_pull_request":13.210526315789474,"issues_closed_count":0,"pull_requests_closed_count":57,"pull_request_authors_count":2,"issue_authors_count":0,"avg_comments_per_issue":null,"avg_comments_per_pull_request":0.0,"merged_pull_requests_count":57,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":0,"past_year_pull_requests_count":17,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":12.615384615384615,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":13,"past_year_pull_request_authors_count":2,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":0.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":13,"created_at":"2025-08-29T11:50:19.645Z","updated_at":"2026-04-16T01:00:28.264Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/marlonecobos%2Fkuenm2","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/marlonecobos%2Fkuenm2/issues","issue_labels_count":{},"pull_request_labels_count":{},"issue_author_associations_count":{},"pull_request_author_associations_count":{"COLLABORATOR":63},"issue_authors":{},"pull_request_authors":{"wevertonbio":58,"Luisagi":5},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-19T00:00:13.985Z","repositories_count":14316419,"issues_count":34516828,"pull_requests_count":112948048,"authors_count":11238205,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{},"past_year_pull_request_author_associations_count":{"COLLABORATOR":17},"past_year_issue_authors":{},"past_year_pull_request_authors":{"wevertonbio":15,"Luisagi":2},"maintainers":[{"login":"wevertonbio","count":58,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/wevertonbio"},{"login":"Luisagi","count":5,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/Luisagi"}],"active_maintainers":[{"login":"wevertonbio","count":15,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/wevertonbio"},{"login":"Luisagi","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/Luisagi"}]},"events":{"total":{"PullRequestEvent":96,"WatchEvent":6,"PushEvent":120},"last_year":{"PullRequestEvent":36,"WatchEvent":2,"PushEvent":80}},"keywords":[],"dependencies":[{"ecosystem":"cran","filepath":"DESCRIPTION","sha":null,"kind":"manifest","created_at":"2023-06-14T02:15:26.525Z","updated_at":"2023-06-14T02:15:26.525Z","repository_link":"https://github.com/marlonecobos/kuenm2/blob/main/DESCRIPTION","dependencies":[{"id":10662588923,"package_name":"terra","ecosystem":"cran","requirements":"\u003e= 1.6","direct":true,"kind":"imports","optional":false}]}],"score":10.46817616619227,"created_at":"2026-03-21T13:01:48.890Z","updated_at":"2026-04-22T03:30:15.418Z","avatar_url":"https://github.com/marlonecobos.png","language":"R","category":"Biosphere","sub_category":"Species Distribution Modeling","monthly_downloads":532,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"---\ntitle: \"kuenm2: Detailed Development of Ecological Niche Models\"\nauthor: \"Weverton C. F. Trindade, Luis F. Arias-Giraldo, Luis Osorio-Olvera, A. Townsend Peterson, and Marlon E. Cobos \u003cimg src='man/figures/kuenm2_lo.png' align='right' height='25%' width='25%'/\u003e\"\noutput: \n  github_document:\n    toc: yes\n    toc_depth: 3\nalways_allow_html: true\n---\n\n```{r knitr_init, echo=FALSE, cache=FALSE, message=FALSE, warning=FALSE}\nlibrary(knitr)\nopts_chunk$set(echo = TRUE, collapse = TRUE, comment = \"#\u003e\")\n```\n\n\u003c!-- badges: start --\u003e\n[![CRAN status](https://www.r-pkg.org/badges/version/kuenm2)](https://CRAN.R-project.org/package=kuenm2)\n[![downloads](https://cranlogs.r-pkg.org/badges/grand-total/kuenm2)](https://cranlogs.r-pkg.org:443/badges/grand-total/kuenm2)\n[![License](https://img.shields.io/badge/license-GPL%20(%3E=%203)-lightgrey.svg?style=flat)](http://www.gnu.org/licenses/gpl-3.0.html)\n[![R-CMD-check](https://github.com/marlonecobos/kuenm2/actions/workflows/R-CMD-check.yaml/badge.svg)](https://github.com/marlonecobos/kuenm2/actions/workflows/R-CMD-check.yaml)\n\u003c!-- badges: end --\u003e\n\n\u003chr\u003e\n\n\u003cbr\u003e\n\n## Package description\n\n**kuenm2** is an new version of **kuenm** [Cobos et al. 2019](https://peerj.com/articles/6281/), an R package designed to make the process of ecological niche modeling (ENM) easier, faster, and more reproducible, and at the same time more robust. The aim of this package is to facilitate crucial steps in the ENM process: data preparation, model calibration, selected model exploration, model projections, and analyses of uncertainty and variability. \n\nThis new version of the package reduces the dependency on a strictly organized working directory (now required only if projections to multiple scenarios are needed). Instead, kuenm2 functions generate specific R objects that store all the necessary information for subsequent steps. kuenm2 fits maximum entropy (Maxnet) models or generalized linear models (GLMs). Maxnet models are created as described in [Phillips et al. (2017)](http://doi.wiley.com/10.1111/ecog.03049), and GLMs are constructed as in [Cobos and Peterson (2023)](https://doi.org/10.1371/journal.pone.0276951). The ENM workflow requires at minimum a `data.frame` containing occurrence record coordinates (longitude and latitude) and a `SpatRaster` object with predictor variables. Users could also use a `data.frame` containing a column indicating presence and background records (0/1), and other columns with predictor variable values.\n\n\u003cbr\u003e\n\n## Installing the package\n\nNote: Internet connection is required to install the package.\n\nTo install the latest release of kuenm2 use the following line of code:\n\n```{r installation, eval=FALSE}\n# Installing from CRAN \ninstall.packages(\"kuenm2\")\n```\n\n\u003cbr\u003e\n\nThe development version of kuenm2 can be installed using the code below. \n\n```{r installation1, eval=FALSE}\n# Installing and loading packages\nif(!require(remotes)) {\n  install.packages(\"remotes\")\n}\n\n# To install the package use\nremotes::install_github(\"marlonecobos/kuenm2\")\n\n# To install the package and its vignettes use (if needed use: force = TRUE)  \nremotes::install_github(\"marlonecobos/kuenm2\", build_vignettes = TRUE)\n```\n\n\u003cbr\u003e\n\n*Having problems?* \n\nIf you have any problems during installation of the development version from GitHub, restart R session, close other RStudio sessions you may have open, and try again. If during the installation you are asked to update packages, do so if you don't need a specific version of one or more of the packages to be installed. If any of the packages gives an error when updating, please install it alone using `install.packages()`, then try installing kuenm2 again.\n\n\u003cbr\u003e\n\nTo load the package use:\n\n```{r loading, eval=FALSE}\n# Load kuenm2\nlibrary(kuenm2)\n```\n\n\u003cbr\u003e\n\n## Workflow in kuenm2\n\nThe kuenm2 package facilitates the following steps in the ENM process: basic data cleaning, data preparation, model calibration, model exploration, model projections, projection comparisons, and exploration of variability and uncertainty. The figure below shows a schematic view of how the package works. A brief description of the steps that can be performed with the package is presented below. For a complete description and demonstration of the steps, see the package vignettes listed in the section [Checking the vignettes]. \n\n```{r fig1, echo=FALSE, fig.align='center', fig.height=4, fig.width=9, fig.cap=\"Figure 1. Overview of the kuenm2 workflow for ecological niche modeling.\"}\nknitr::include_graphics(\"man/figures/kuenm2_map_gs.png\")\n```\n\n\u003cbr\u003e\n\n### Pre-modeling steps\n\n#### Basic data cleaning\n\nkuenm2 automates essential pre-processing steps for ecological niche modeling. Data cleaning tools help sort columns, remove missing values and duplicates (including duplicates within raster cells), exclude coordinates at (0,0), filter based on coordinate decimal precision, and adjust occurrences that fall just outside valid raster boundaries. \n\n\n#### Data preparation\n\nFor data preparation, users can input raw occurrence records and raster layers or provide a pre-processed data frame. Two primary functions, `prepare_data()` and `prepare_user_data()`, guide users through the process of choosing modeling algorithms, defining parameter sets (e.g., feature classes, regularization multipliers, and predictor variables), and selecting data partitioning strategies. Additional tools allow users to visualize environmental conditions in the calibration data and assess similarities among training and testing partitions, an exclusive feature of kuenm2 among ENM tools.\n\n#### Data exploration\n\nThe data that has been prepared can be explored to understand how it looks like in environmental and geographic spaces. This can give users an idea of what to expect from models, or whether some changes in the way data has been prepared are necessary. The main functions in the step of the workflow are `explore_calibration_hist()`, `plot_calibration_hist()`, `explore_partition_geo()`, `explore_partition_extrapolation()`, and `plot_explore_partition()`. \n\n\u003cbr\u003e\n\n### Model development\n\n#### Model calibration \n\nModel calibration in kuenm2 is computationally intensive, involving training and testing of candidate models using various partitioning strategies such as k-fold cross-validation, subsampling, and bootstrapping. Custom partitions generated using external tools (e.g., block or checkerboard methods) can also be imported. Models are evaluated using multiple performance criteria that emphasize sensitivity due to the frequent lack of true absence data. These criteria include: bimodality in response curves, partial ROC for statistical significance, omission rates for predictive performance, and Akaike Information Criterion (AIC) for model complexity. Model calibration is executed using the `calibration()` function.\n\nTo support a deeper understanding of the calibration process, a step to explore extrapolation risks during the process of training and testing models can be performed in kuenm2. The function `partition_response_curves()` helps to produce visualizations of response curves from training data overlapped with environmental conditions at testing sites for selected models (another option exclusive to kuenm2).\n\n\n#### Model explorations\n\nOnce best models are selected, they must be fitted using `fit_selected()` to analyze their characteristics and behavior. Fitted models can be explored to assess `variable_importance()` and examine response curves (`response_curve()` and `all_response_curves()`). This offers insights into predictor influence in models and ecological interpretation. \n\nIf an independent set of records (not included for model calibration) is available, it can be used to re-evaluate the predictive performance of selected models using `independent_evaluation()`. Partial ROC and omission rates are calculated for these new records to measure model performance, but extrapolation risks also are assessed for these points using the MOP metric (exclusive to kuenm2). Results from this evaluation can help further filter the selected models or inform the decision to incorporate the independent records into the calibration dataset. \n\n\n#### Model projections\n\nFitted models can be projected to new environmental scenarios, including larger geographic areas or different temporal conditions (e.g., past or future climates). For single scenario projections, use `predict_selected()`; for multiple scenarios, use `project_selected()`. Before projecting to complex future scenarios (e.g., multiple time periods, emission pathways, or GCMs), users should first prepare and organize data using functions in *kuenm2* that facilitate the process (e.g., `organize_future_worldclim()`).\n\n\u003cbr\u003e\n\n### Post-modeling analysis\n\n#### Projection comparisons\n\nWhen projecting to multiple scenarios, kuenm2 provides tools to quantify and characterize differences using `projection_changes()`. This function evaluates spatial changes and agreement levels among projections, aiding the interpretation of temporal or scenario-based shifts in suitability.\n\n\n#### Variability and uncertainty\n\nTo assess the consistency and reliability of model outputs, users can explore projection variability (`projection_variability()`), which accounts for differences arising from model replicates, parameter sets, and climate models. With the MOP metric (`projection_mop()`) users can evaluate extrapolation risks by identifying novel environmental conditions in projection areas, offering a spatially explicit representation of model uncertainty.\n\n\u003cbr\u003e\n\n## Checking the vignettes\n\nUsers can check kuenm2 vignettes for a full explanation of the package functionality. The vignettes can be checked online at the [kuenm2 site](https://marlonecobos.github.io/kuenm2/) under the menu *Articles*.\nTo build the vignettes when installing the package, if installing form GitHub, make sure to use the argument `build_vignettes = TRUE`.\n\nCheck each of the vignettes with the code below:\n\n```{r vignettes, eval=FALSE}\n# Guide to basic data cleaning before the ENM process\nvignette(\"basic_data_cleaning\")\n\n# Guide to prepare data for the ENM process\nvignette(\"prepare_data\")\n\n# Guide to train and evaluate candidate models, and select based on performance\nvignette(\"model_calibration\") \n\n# Guide to explore selected models, variable importance, response curves\nvignette(\"model_exploration\")\n\n# Guide to predict models in geographic space (single scenarios)\nvignette(\"model_predictions\")\n\n# Guide to project models in geographic space (multiple scenarios)\nvignette(\"model_projections\") \n\n# Guide to explore variability and uncertainty in projections (multiple scenarios)\nvignette(\"variability_and_uncertainty\")\n\n# Guide to make projections to multiple scenarios with layers from CHELSA Climate\nvignette(\"projections_chelsa\")\n```\n\n\u003cbr\u003e\n\n## Note on AI usage\n\nTo maintain high standards of code quality and documentation, we have used AI LLM tools in our package. We used these tools for grammatical polishing and exploring technical implementation strategies for specialized functions. We manually checked and tested all code and documentation refined with these tools.\n\n\u003cbr\u003e\n\n## Contributing\n\nWe welcome contributions to improve `kuenm2`! To maintain the integrity and performance of the package, we follow a few core principles:\n\n- **Quality over Quantity:** We prioritize well-thought-out, stable improvements over frequent, minor changes. Please ensure your code is well-documented and follows the existing style of the package.\n- **Minimal Dependencies:** One of the goals of `kuenm2` is to remain efficient. We prefer solutions that use base R or existing dependencies. Proposals that introduce new package dependencies will be strictly evaluated for their necessity.\n- **AI-Assisted Code:** If you use AI agents (like Copilot, ChatGPT, or Claude) to generate code alternatives or improvements, please:\n    - *Manually verify* the logic and accuracy of the output.\n    - *Demonstrate the benefit* via a benchmark for speed or a clear explanation of how it fixes a bug/improves readability. Describe this in your Pull Request.\n- **Testing:** New features should include examples, and tests should be performed to ensure they work as intended and do not break existing workflows.\n\nIf you have an idea for a major change, please open an Issue first to discuss it with the maintainers.\n","funding_links":[],"readme_doi_urls":["https://doi.org/10.1371/journal.pone.0276951"],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":[],"project_url":"https://ost.ecosyste.ms/api/v1/projects/349147","html_url":"https://ost.ecosyste.ms/projects/349147"}