
Stress-test binocular reconstruction across missingness levels
Source:R/binocular_pupil_validation.R
stress_test_gazepoint_binocular_reconstruction.RdRepeats artificial monocular-loss validation across declared missingness levels and random/contiguous masking modes to show where cross-eye reconstruction begins to degrade.
Usage
stress_test_gazepoint_binocular_reconstruction(
data,
left_col,
right_col,
time_col = NULL,
group_cols = NULL,
gap_group_cols = NULL,
fallback_group_cols = NULL,
missingness = c(0.05, 0.1, 0.2, 0.3),
mask_modes = c("random", "contiguous"),
block_size = 6L,
repeats = 3L,
seed = 1L,
min_pairs = 30L,
min_unique = 5L,
min_r2 = NULL,
max_gap_ms = Inf,
valid_min = NULL,
valid_max = NULL
)Arguments
- data, left_col, right_col, time_col, group_cols, gap_group_cols, fallback_group_cols
- missingness
Numeric proportions strictly between 0 and 1.
- mask_modes
One or both of
"random"and"contiguous".- block_size
Contiguous mask size in samples.
- repeats
Repeats per stress-test cell.
- seed
Base seed; deterministic offsets are used across cells.
- min_pairs, min_unique, min_r2, max_gap_ms, valid_min, valid_max
Passed to validation.
Value
A gp3_binocular_stress_test object containing cell-level results
and individual validation objects.
Examples
dat <- simulate_gazepoint_pupil_data(n_subjects = 4, n_trials = 2, seed = 22)
stress_test_gazepoint_binocular_reconstruction(
dat, "pupil_left", "pupil_right", time_col = "timestamp_ms",
group_cols = "subject", missingness = c(0.05, 0.10),
mask_modes = "random", repeats = 1, min_pairs = 20
)
#> $results
#> # A tibble: 4 × 13
#> mask_mode missingness direction repeats total_requested total_predicted
#> <chr> <dbl> <chr> <int> <int> <int>
#> 1 random 0.05 left_from_right 1 9 9
#> 2 random 0.05 right_from_left 1 15 15
#> 3 random 0.1 left_from_right 1 22 22
#> 4 random 0.1 right_from_left 1 25 25
#> # ℹ 7 more variables: prediction_rate <dbl>, rmse <dbl>, mae <dbl>, bias <dbl>,
#> # median_error <dbl>, error_mad <dbl>, correlation <dbl>
#>
#> $validations
#> $validations$random_0.05
#> $summary
#> # A tibble: 2 × 11
#> direction repeats total_requested total_predicted prediction_rate rmse
#> <chr> <int> <int> <int> <dbl> <dbl>
#> 1 left_from_right 1 9 9 1 0.0781
#> 2 right_from_left 1 15 15 1 0.102
#> # ℹ 5 more variables: mae <dbl>, bias <dbl>, median_error <dbl>,
#> # error_mad <dbl>, correlation <dbl>
#>
#> $metrics
#> # A tibble: 2 × 11
#> repeat_id direction n_requested n_predicted prediction_rate rmse mae
#> <int> <chr> <int> <int> <dbl> <dbl> <dbl>
#> 1 1 left_from_rig… 9 9 1 0.0781 0.0659
#> 2 1 right_from_le… 15 15 1 0.102 0.0817
#> # ℹ 4 more variables: bias <dbl>, median_error <dbl>, error_mad <dbl>,
#> # correlation <dbl>
#>
#> $predictions
#> # A tibble: 24 × 14
#> repeat_id row_id direction observed predicted error status model_id
#> <int> <int> <chr> <dbl> <dbl> <dbl> <chr> <chr>
#> 1 1 18 left_from_right 3.37 3.36 -0.00270 left_r… binoc_0…
#> 2 1 35 left_from_right 3.28 3.38 0.0999 left_r… binoc_0…
#> 3 1 128 left_from_right 4.04 4.12 0.0864 left_r… binoc_0…
#> 4 1 151 left_from_right 4.11 4.11 -0.00527 left_r… binoc_0…
#> 5 1 164 left_from_right 4.09 4.15 0.0595 left_r… binoc_0…
#> 6 1 230 left_from_right 4.24 4.17 -0.0659 left_r… binoc_0…
#> 7 1 296 left_from_right 3.77 3.81 0.0356 left_r… binoc_0…
#> 8 1 439 left_from_right 3.70 3.59 -0.114 left_r… binoc_0…
#> 9 1 464 left_from_right 3.78 3.66 -0.124 left_r… binoc_0…
#> 10 1 1 right_from_left 3.25 3.40 0.148 right_… binoc_0…
#> # ℹ 14 more rows
#> # ℹ 6 more variables: calibration_level <chr>, r_squared <dbl>,
#> # extrapolated <lgl>, gap_ms <dbl>, subject <chr>, timestamp_ms <dbl>
#>
#> $settings
#> $settings$left_col
#> [1] "pupil_left"
#>
#> $settings$right_col
#> [1] "pupil_right"
#>
#> $settings$time_col
#> [1] "timestamp_ms"
#>
#> $settings$group_cols
#> [1] "subject"
#>
#> $settings$gap_group_cols
#> [1] "subject"
#>
#> $settings$direction
#> [1] "both"
#>
#> $settings$mask_prop
#> [1] 0.05
#>
#> $settings$mask_mode
#> [1] "random"
#>
#> $settings$block_size
#> [1] 6
#>
#> $settings$repeats
#> [1] 1
#>
#> $settings$seed
#> [1] 1
#>
#> $settings$min_pairs
#> [1] 20
#>
#> $settings$min_unique
#> [1] 5
#>
#> $settings$min_r2
#> NULL
#>
#> $settings$max_gap_ms
#> [1] Inf
#>
#> $settings$allow_edge_gaps
#> [1] TRUE
#>
#> $settings$allow_extrapolation
#> [1] FALSE
#>
#> $settings$valid_min
#> NULL
#>
#> $settings$valid_max
#> NULL
#>
#>
#> attr(,"class")
#> [1] "gp3_binocular_validation"
#>
#> $validations$random_0.1
#> $summary
#> # A tibble: 2 × 11
#> direction repeats total_requested total_predicted prediction_rate rmse
#> <chr> <int> <int> <int> <dbl> <dbl>
#> 1 left_from_right 1 22 22 1 0.0890
#> 2 right_from_left 1 25 25 1 0.109
#> # ℹ 5 more variables: mae <dbl>, bias <dbl>, median_error <dbl>,
#> # error_mad <dbl>, correlation <dbl>
#>
#> $metrics
#> # A tibble: 2 × 11
#> repeat_id direction n_requested n_predicted prediction_rate rmse mae
#> <int> <chr> <int> <int> <dbl> <dbl> <dbl>
#> 1 1 left_from_rig… 22 22 1 0.0890 0.0729
#> 2 1 right_from_le… 25 25 1 0.109 0.0830
#> # ℹ 4 more variables: bias <dbl>, median_error <dbl>, error_mad <dbl>,
#> # correlation <dbl>
#>
#> $predictions
#> # A tibble: 47 × 14
#> repeat_id row_id direction observed predicted error status model_id
#> <int> <int> <chr> <dbl> <dbl> <dbl> <chr> <chr>
#> 1 1 17 left_from_right 3.32 3.42 0.104 left_re… binoc_0…
#> 2 1 26 left_from_right 3.24 3.42 0.176 left_re… binoc_0…
#> 3 1 36 left_from_right 3.36 3.42 0.0588 left_re… binoc_0…
#> 4 1 41 left_from_right 3.46 3.40 -0.0546 left_re… binoc_0…
#> 5 1 69 left_from_right 3.39 3.37 -0.0255 left_re… binoc_0…
#> 6 1 108 left_from_right 3.33 3.44 0.109 left_re… binoc_0…
#> 7 1 149 left_from_right 4.16 4.13 -0.0318 left_re… binoc_0…
#> 8 1 154 left_from_right 4.16 4.13 -0.0347 left_re… binoc_0…
#> 9 1 159 left_from_right 4.16 4.12 -0.0342 left_re… binoc_0…
#> 10 1 197 left_from_right 4.29 4.19 -0.0957 left_re… binoc_0…
#> # ℹ 37 more rows
#> # ℹ 6 more variables: calibration_level <chr>, r_squared <dbl>,
#> # extrapolated <lgl>, gap_ms <dbl>, subject <chr>, timestamp_ms <dbl>
#>
#> $settings
#> $settings$left_col
#> [1] "pupil_left"
#>
#> $settings$right_col
#> [1] "pupil_right"
#>
#> $settings$time_col
#> [1] "timestamp_ms"
#>
#> $settings$group_cols
#> [1] "subject"
#>
#> $settings$gap_group_cols
#> [1] "subject"
#>
#> $settings$direction
#> [1] "both"
#>
#> $settings$mask_prop
#> [1] 0.1
#>
#> $settings$mask_mode
#> [1] "random"
#>
#> $settings$block_size
#> [1] 6
#>
#> $settings$repeats
#> [1] 1
#>
#> $settings$seed
#> [1] 2
#>
#> $settings$min_pairs
#> [1] 20
#>
#> $settings$min_unique
#> [1] 5
#>
#> $settings$min_r2
#> NULL
#>
#> $settings$max_gap_ms
#> [1] Inf
#>
#> $settings$allow_edge_gaps
#> [1] TRUE
#>
#> $settings$allow_extrapolation
#> [1] FALSE
#>
#> $settings$valid_min
#> NULL
#>
#> $settings$valid_max
#> NULL
#>
#>
#> attr(,"class")
#> [1] "gp3_binocular_validation"
#>
#>
#> $settings
#> $settings$missingness
#> [1] 0.05 0.10
#>
#> $settings$mask_modes
#> [1] "random"
#>
#> $settings$block_size
#> [1] 6
#>
#> $settings$repeats
#> [1] 1
#>
#> $settings$seed
#> [1] 1
#>
#>
#> attr(,"class")
#> [1] "gp3_binocular_stress_test"