10  Check Measurement Columns

10.1 Problem Description

Our goal was to validate the dimensions of the passage structures. We needed to check if the researcher-reported measurements were plausible (e.g., not too long or too short).

10.2 Problem Solving

It was difficult to define acceptable dimensions for the structures. Instead, we opted for a more general approach. We performed a general inspection of all data and summarized the columns. This allows for a visual check. Suspicious data can then be flagged and communicated to the researchers.

10.2.1 Common steps

We use our customized read_sheet function to load the camera trap setup data from all available spreadsheets. Hence, we need to load the FUNCTIONS.R.

Code
source("R/FUNCTIONS.R")

10.2.2 Specific steps

Our initial step after reading the data is to check for the common “lenght” typo. Following this check, we generate a summary of all measurement fields for the underpasses, overpasses, and fencing spreadsheets.

10.2.2.1 Underpasses

Code
under <- read_sheet(sheet = "Underpasses", na = c("NA", "na"))

under |>
  purrr::keep(~ any(stringr::str_detect(names(.x), "lenght"))) |>
  names()
character(0)
Code
all_under <- under |>
  purrr::discard(~ nrow(.x) == 0) |>
  purrr::map(\(x) dplyr::select(x, Structure_type:Waterbody_width)) |>
  dplyr::bind_rows(.id = "Dataset")

summary(all_under)
   Dataset          Structure_type     Structure_cell     Structure_shape   
 Length:355         Length:355         Length:355         Length:355        
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                            
                                                                            
                                                                            
                                                                            
 Structure_photo    Structure_age   Structure_height Structure_length
 Length:355         Min.   : 1.00   Min.   : 0.450   Min.   :  0.80  
 Class :character   1st Qu.: 5.00   1st Qu.: 1.000   1st Qu.: 12.00  
 Mode  :character   Median :10.00   Median : 2.000   Median : 18.00  
                    Mean   :13.46   Mean   : 2.314   Mean   : 22.32  
                    3rd Qu.:20.00   3rd Qu.: 3.000   3rd Qu.: 26.00  
                    Max.   :30.00   Max.   :12.000   Max.   :101.60  
                    NA's   :68      NA's   :30       NA's   :122     
 Structure_width   Waterbody_width  
 Min.   :  0.500   Min.   :  0.500  
 1st Qu.:  1.200   1st Qu.:  1.300  
 Median :  2.000   Median :  3.000  
 Mean   :  4.882   Mean   :  9.854  
 3rd Qu.:  3.000   3rd Qu.:  5.500  
 Max.   :127.000   Max.   :170.000  
 NA's   :31        NA's   :316      

10.2.2.2 Overpasses

Code
over <- read_sheet(sheet = "Overpasses", na = c("NA", "na"))

over |>
  purrr::keep(~ any(stringr::str_detect(names(.x), "lenght"))) |>
  names()
character(0)
Code
all_over <- over |>
  purrr::discard(~ nrow(.x) == 0) |>
  purrr::map(\(x) dplyr::select(x, Structure_type:Structure_internal_height)) |>
  dplyr::bind_rows(.id = "Dataset")

summary(all_over)
   Dataset          Structure_type     Structure_material Structure_anchor_1
 Length:140         Length:140         Length:140         Length:140        
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                            
                                                                            
                                                                            
                                                                            
 Structure_anchor_2 Structure_branch_access Structure_photo    Structure_age   
 Length:140         Length:140              Length:140         Min.   : 1.000  
 Class :character   Class :character        Class :character   1st Qu.: 1.000  
 Mode  :character   Mode  :character        Mode  :character   Median : 5.000  
                                                               Mean   : 6.276  
                                                               3rd Qu.:10.000  
                                                               Max.   :20.000  
                                                               NA's   :35      
 Structure_height Structure_length Structure_width  Structure_internal_height
 Min.   : 4.100   Min.   :  6.00   Min.   : 0.050   Min.   : NA              
 1st Qu.: 6.555   1st Qu.: 11.66   1st Qu.: 0.375   1st Qu.: NA              
 Median : 7.000   Median : 15.00   Median : 0.500   Median : NA              
 Mean   :12.504   Mean   : 17.10   Mean   : 1.308   Mean   :NaN              
 3rd Qu.:18.750   3rd Qu.: 20.00   3rd Qu.: 0.500   3rd Qu.: NA              
 Max.   :37.000   Max.   :120.00   Max.   :39.000   Max.   : NA              
 NA's   :2        NA's   :2        NA's   :33       NA's   :140              

10.2.2.3 Fencing

Code
fence <- read_sheet(sheet = "Fencing", na = c("NA", "na"))

fence |>
  purrr::keep(~ any(stringr::str_detect(names(.x), "lenght"))) |>
  names()
character(0)
Code
all_fence <- fence |>
  purrr::discard(~ nrow(.x) == 0) |>
  purrr::map(\(x) {
    dplyr::select(x, Fence_mesh_size:Fence_length_b2)
  }) |>
  dplyr::bind_rows(.id = "Dataset")

summary(all_fence)
   Dataset          Fence_mesh_size     Fence_height   Fence_length_a1 
 Length:79          Length:79          Min.   :0.600   Min.   :   0.0  
 Class :character   Class :character   1st Qu.:1.500   1st Qu.:  70.0  
 Mode  :character   Mode  :character   Median :2.000   Median : 100.0  
                                       Mean   :1.741   Mean   : 222.2  
                                       3rd Qu.:2.000   3rd Qu.: 235.0  
                                       Max.   :2.200   Max.   :2200.0  
                                       NA's   :5       NA's   :6       
 Fence_length_b1   Fence_length_a2  Fence_length_b2 
 Min.   :   0.00   Min.   :  30.0   Min.   :  10.0  
 1st Qu.:  62.28   1st Qu.:  98.5   1st Qu.:  88.0  
 Median : 100.00   Median : 100.0   Median : 100.0  
 Mean   : 217.08   Mean   : 226.5   Mean   : 223.0  
 3rd Qu.: 235.00   3rd Qu.: 234.6   3rd Qu.: 234.6  
 Max.   :2000.00   Max.   :2000.0   Max.   :2000.0  
 NA's   :6         NA's   :7        NA's   :7