--- title: "Começando com soilKey (PT-BR)" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Começando com soilKey (PT-BR)} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r setup, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` `soilKey` faz classificação automática de perfis de solo nos três sistemas canônicos: **WRB 2022** (4ª edição), **SiBCS 5ª ed.** (Embrapa, 2018) e **USDA Soil Taxonomy 13ª ed.** (USDA-NRCS, 2022). A chave taxonômica em si é implementada como código R determinístico orientado por regras YAML versionadas; extração via *vision-language model*, priors espaciais (SoilGrids) e predição de atributos via OSSL ficam ao lado da chave como módulos separados, **nunca dentro dela**. Esta vinheta é uma adaptação para PT-BR de `v01_getting_started`. O conteúdo cobre o mesmo material; preferimos PT-BR aqui porque a comunidade brasileira de pedologia é grande e quase toda a literatura SiBCS é escrita em português. # 0. O começo de 30 segundos Se você só quer ver `soilKey` funcionando ponta-a-ponta em um perfil real, sem escrever código R, há dois caminhos. ## A. Interface Shiny (sem código) ```{r run-app, eval = FALSE} library(soilKey) run_classify_app() # abre um app Shiny em uma única tela no navegador ``` Faça upload de um CSV (uma linha por horizonte) ou edite manualmente, clique em **Classify**, e leia os nomes WRB / SiBCS / USDA junto com o *key trace* determinístico e a *evidence grade*. ## B. Uma chamada R, uma fixture ```{r quick-start} library(soilKey) pedon <- make_ferralsol_canonical() # Latossolo Vermelho canônico classify_wrb2022(pedon, on_missing = "silent")$name classify_sibcs(pedon)$name classify_usda(pedon, on_missing = "silent")$name ``` É o pacote inteiro: `PedonRecord` entra, classificação sai. As seções seguintes mostram como construir o seu próprio pedon e como os módulos laterais (VLM, espacial, espectral) se conectam. # 1. Construindo um PedonRecord do zero `PedonRecord` é a estrutura central de dados. Ele agrupa: - **Metadados de sítio** (id, lat/lon, país, material de origem, ...) - **Tabela de horizontes** com o esquema canônico fixo (veja `horizon_column_spec()` para a lista completa de colunas) - **Espectros** opcionais (Vis-NIR / SWIR / MIR) - **Imagens** opcionais (foto de perfil) - **Documentos** opcionais (PDF / *field report*) - **Log de proveniência por atributo**: cada valor numérico ou categórico carrega uma tag `source` ∈ {`measured`, `predicted_spectra`, `extracted_vlm`, `inferred_prior`, `user_assumed`} ```{r build-pedon} meu_pedon <- PedonRecord$new( site = list( id = "exemplo-001", lat = -22.5, lon = -43.7, country = "BR", parent_material = "gnaisse" ), horizons = data.frame( top_cm = c(0, 15, 65, 130), bottom_cm = c(15, 65, 130, 200), designation = c("A", "AB", "Bw1", "Bw2"), munsell_hue_moist = rep("2.5YR", 4), munsell_value_moist = c(3, 3, 4, 4), munsell_chroma_moist = c(4, 6, 6, 6), clay_pct = c(50, 55, 60, 60), silt_pct = c(15, 10, 8, 8), sand_pct = c(35, 35, 32, 32), cec_cmol = c(8, 5.5, 5.0, 4.8), bs_pct = c(24, 14, 13, 13), ph_h2o = c(4.8, 4.7, 4.8, 4.9), oc_pct = c(2.0, 0.6, 0.3, 0.2) ) ) ``` Ao chamar qualquer `classify_*()` em cima desse pedon, soilKey lê os dados, anda a chave taxonômica, e retorna um objeto `ClassificationResult` com: - O **nome** atribuído (`Latossolos Vermelhos Distroficos tipicos` na SiBCS, por exemplo) - O **trace da chave** (quais RSGs / Ordens foram testadas, quais diagnósticos passaram) - O **evidence grade** A-D resumindo a qualidade dos dados que produziram a decisão - A lista de **atributos faltantes** que, se medidos, mudariam ou refinariam a classificação # 2. Classificando nos três sistemas A interface é simétrica: um `PedonRecord` entra, um `ClassificationResult` sai. As três funções aceitam um argumento `on_missing` que controla o que fazer quando atributos críticos não estão presentes: - `"warn"` (padrão): avisa, classifica com base no que tem - `"silent"`: classifica silenciosamente - `"error"`: para com erro ```{r classify-three-systems} res_wrb <- classify_wrb2022(meu_pedon, on_missing = "silent") res_sibcs <- classify_sibcs(meu_pedon, include_familia = TRUE) res_usda <- classify_usda(meu_pedon, on_missing = "silent") res_wrb$name res_sibcs$name res_usda$name ``` ## Atalho: classificar nos três sistemas em uma chamada ```{r classify-all} todos <- classify_all(meu_pedon, on_missing = "silent") todos$summary ``` `classify_all()` retorna uma lista nomeada com `wrb`, `sibcs`, `usda` (cada uma um `ClassificationResult` completo) e um resumo `summary` em `data.frame` de uma linha — útil para tabular muitos pedons de uma vez só. # 3. Inspecionando o key trace O *trace* da chave é o histórico determinístico da decisão. Cada RSG / Ordem / Sistema testado aparece com o resultado de cada diagnóstico envolvido: ```{r trace} res_wrb$trace ``` Isso é a feature distintiva do soilKey vs. um classificador "caixa-preta" baseado em LLM: cada classificação carrega o motivo. Se você discorda do resultado, o trace mostra exatamente em qual diagnóstico a chave se desviou da sua expectativa. # 4. Provenance + evidence grade Cada valor que entra na chave tem uma tag de proveniência: ```{r prov} meu_pedon$add_measurement( horizon_idx = 4, attribute = "clay_pct", value = 60, source = "predicted_spectra", confidence = 0.85, notes = "Vis-NIR PLSR-local, OSSL South-America library", overwrite = TRUE ) ``` O `evidence_grade` do `ClassificationResult` é a regra do "pior provenance entre os atributos que foram decisivos para a classificação": - **A**: tudo `measured` (laboratório) - **B**: ao menos um `predicted_spectra` decisivo - **C**: ao menos um `extracted_vlm` decisivo - **D**: ao menos um `inferred_prior` ou `user_assumed` decisivo Isso garante que um perfil classificado a partir de chemistry de laboratório recebe **A**, mas o mesmo perfil com um valor de argila chave preenchido por VLM ou predição espectral é honestamente **B** ou **C**, **mesmo que o nome final seja idêntico**. # 5. Cross-system: o mesmo perfil em três taxonomias ```{r cross-system} todos <- classify_all(meu_pedon, on_missing = "silent") data.frame( Sistema = c("WRB 2022", "SiBCS 5ª ed.", "USDA ST 13"), Nome = c(todos$wrb$name, todos$sibcs$name, todos$usda$name) ) ``` Para um Latossolo Vermelho típico do Cerrado / Mata Atlântica brasileira, esperamos: - WRB: `Geric Ferric Rhodic Chromic Ferralsol (...)` - SiBCS: `Latossolos Vermelhos Distroficos tipicos` - USDA: `Rhodic Hapludox` A correspondência entre os três sistemas (Schad 2023, Annex Table 1) está documentada no pacote — veja `vignette("v03_cross_system_correlation", package = "soilKey")`. # 6. Onde ir a partir daqui | Vinheta | Tópico | |---|---| | `v02_classify_wrb_end_to_end` | WRB 2022 com nome canônico do Cap. 6 (qualifiers + suplementares + specifiers) | | `v03_cross_system_correlation` | Correspondência WRB ↔ SiBCS ↔ USDA | | `v04_vlm_extraction` | Extração multimodal (PDF, foto) via VLM com schema validation | | `v05_spatial_spectra_pipeline` | Prior espacial (SoilGrids) + gap-filling com OSSL | | `v06_wosis_benchmark` | Protocolo de validação contra a base WoSIS (ISRIC) | | `v07_end_to_end_pipeline` | Pipeline completo (Gemma 4 + espacial + espectral + chave + relatório) | | `v08_kssl_nasis_multilevel` | Benchmark USDA Soil Taxonomy 13ed em quatro níveis (Order/Suborder/Great Group/Subgroup) na base KSSL+NASIS | Para a comunidade brasileira: o caminho mais natural é começar aqui (`v01_getting_started_pt`), depois ir para `v03_cross_system_correlation` para entender a correspondência SiBCS ↔ WRB ↔ USDA, e finalmente `v06_wosis_benchmark` se você quiser validar contra dados reais. # 7. Onde reportar bugs / sugerir features / pedir ajuda - **Bugs reproduzíveis**: abra uma [issue no GitHub](https://github.com/HugoMachadoRodrigues/soilKey/issues/new?template=bug_report.yml) usando o template "🐛 Bug report". - **Pedido de feature** (novo diagnóstico, qualifier, loader): use o template "💡 Feature request". - **Discordância sobre classificação de um perfil real**: use o template "🌱 Soil profile classification help" — colamos juntos o trace da chave e identificamos exatamente onde soilKey divergiu da sua expectativa. - **Perguntas gerais**: abra uma issue com o template "🌱 Soil profile classification help" ou veja a [documentação completa](https://hugomachadorodrigues.github.io/soilKey/). # Referências canônicas - IUSS Working Group WRB (2022). *World Reference Base for Soil Resources*, 4ª ed. International Union of Soil Sciences, Vienna. [PDF](https://openknowledge.fao.org/server/api/core/bitstreams/bcdecec7-f45f-4dc5-beb1-97022d29fab4/content) - Soil Survey Staff (2022). *Keys to Soil Taxonomy*, 13ª ed. USDA-NRCS, Washington, DC. - Santos, H.G. *et al.* (2018). *Sistema Brasileiro de Classificação de Solos*, 5ª ed. revista e ampliada. Embrapa, Brasília.