--- title: "Importing Non-ANKOM Data" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Importing Non-ANKOM Data} %\VignetteEngine{knitr::rmarkdown} \usepackage[utf8]{inputenc} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` # Introduction Not all rumen gas production experiments are conducted using the ANKOM RF Gas Production System. rumenGP provides the function `as_rumen_gp()` for importing manually collected gas-volume data and pressure-based datasets into the standard `rumen_gp` format. Once imported, the data can be analyzed using the same modeling, visualization, and model-comparison tools available for ANKOM experiments. ```{r} library(rumenGP) ``` # Importing Gas Volume Data The simplest workflow is to import cumulative gas production measurements directly. ```{r} manual_volume <- data.frame( Bottle = c( 1,1,1, 2,2,2 ), Treatment = c( "Control", "Control", "Control", "Corn", "Corn", "Corn" ), Time = c( 0,4,8, 0,4,8 ), Gas = c( 0,20,40, 0,35,60 ) ) ``` Convert the dataset into a `rumen_gp` object: ```{r} gp <- as_rumen_gp( data = manual_volume, head_col = "Bottle", treatment_col = "Treatment", time_col = "Time", gas_col = "Gas" ) ``` Inspect the resulting object: ```{r} gp ``` Verify the class: ```{r} class(gp) ``` # Required Columns At minimum, gas-volume datasets must contain: ```text Bottle identifier Incubation time Gas production ``` These columns can have any names as long as they are specified through the function arguments. For example: ```r head_col = "Bottle" time_col = "Time" gas_col = "Gas" ``` # Importing Pressure Data rumenGP can also import pressure measurements and convert them to gas volume automatically. ```{r} manual_pressure <- data.frame( Bottle = rep( 1, 10 ), Time = c( 0, 2, 4, 6, 8, 12, 16, 24, 36, 48 ), PSI = c( 0, 0.2, 0.5, 0.8, 1.2, 1.8, 2.5, 3.2, 4.0, 4.5 ) ) ``` Convert pressure measurements: ```{r} gp_pressure <- as_rumen_gp( data = manual_pressure, head_col = "Bottle", time_col = "Time", pressure_col = "PSI", pressure_unit = "psi", headspace_volume = 60 ) ``` Inspect the resulting gas volumes: ```{r} head(gp_pressure) ``` # Pressure Units Currently supported pressure units are: ```text psi kpa ``` Examples: ```r pressure_unit = "psi" ``` or ```r pressure_unit = "kpa" ``` # Headspace Volume Pressure measurements require information about headspace volume. Headspace volume is the gas volume available inside the bottle and is not necessarily the same as the total bottle volume. Example: ```text Bottle volume = 125 mL Liquid volume = 75 mL Headspace volume = 50 mL ``` When pressure data are imported: ```r headspace_volume = 50 ``` should represent the headspace volume, not the total bottle capacity. # Headspace Units Supported headspace units: ```text mL L ``` Examples: ```r headspace_unit = "mL" ``` ```r headspace_unit = "L" ``` # Negative Pressure Values Pressure datasets occasionally contain slightly negative readings caused by sensor variation. These values can be automatically corrected. ```{r} negative_pressure <- data.frame( Bottle = c( 1,1,1 ), Time = c( 0,4,8 ), PSI = c( -0.5, 0.2, 1.0 ) ) ``` ```{r} gp_negative <- as_rumen_gp( data = negative_pressure, head_col = "Bottle", time_col = "Time", pressure_col = "PSI", pressure_unit = "psi", headspace_volume = 60, zero_negative_pressure = TRUE ) ``` # Validation Imported datasets can be validated using: ```{r} validate_ankom( gp ) ``` The function checks: - Required columns - Missing values - Duplicate observations - Time ordering - Dataset consistency # Fitting a Model Once imported, manually collected datasets can be analyzed exactly like ANKOM datasets. ```{r} fit <- fit_groot( gp ) ``` Inspect results: ```{r} summary(fit) ``` # Compare Models ```{r} comparison <- compare_models( Groot = fit_groot(gp), Brody = fit_brody(gp), Gompertz = fit_gompertz(gp) ) comparison ``` # Common Errors ## No gas or pressure supplied ```r as_rumen_gp( data = my_data, head_col = "Bottle", time_col = "Time" ) ``` Produces: ```text Provide either gas_col or pressure_col. ``` ## Both gas and pressure supplied ```r as_rumen_gp( data = my_data, gas_col = "Gas", pressure_col = "PSI" ) ``` Produces: ```text Provide only one of gas_col or pressure_col. ``` ## Missing headspace volume ```r as_rumen_gp( pressure_col = "PSI" ) ``` Produces: ```text headspace_volume must be supplied when pressure_col is used. ``` # Summary The `as_rumen_gp()` function makes it possible to use rumenGP with: - Manual gas-volume datasets - Pressure-based datasets - Non-ANKOM experiments Once imported, all datasets become standard `rumen_gp` objects and can be analyzed using the full modeling framework. # Next Steps See: ```r ?fit_custom ``` for information about fitting custom kinetic models.