Skip to contents

Comprehensive validation of data structure, survey design elements, and suitability for growth mixture modeling. Provides detailed diagnostics and warnings about potential issues.

Usage

validate_survey_data(
  data,
  id,
  time,
  outcome,
  strata = NULL,
  cluster = NULL,
  weights = NULL,
  covariates = NULL,
  min_observations = 2,
  check_weights = TRUE,
  verbose = TRUE
)

Arguments

data

Data frame in long format

id

Character string naming ID variable

time

Character string naming time variable

outcome

Character string naming outcome variable

strata

Optional character string naming stratification variable

cluster

Optional character string naming cluster/PSU variable

weights

Optional character string naming weight variable

covariates

Optional character vector naming covariate variables

min_observations

Minimum number of observations per individual (default = 2)

check_weights

Logical; perform detailed weight diagnostics?

verbose

Logical; print detailed output?

Value

An S4 object of class DataValidation with slots:

is_valid

Logical; overall validation status

errors

Character vector of critical errors

warnings

Character vector of warnings

info

List of diagnostic information

recommendations

Character vector of recommended actions

Details

The validation checks include:

**Data Structure:** - All required variables present - Correct data types - No duplicate ID-time combinations - Sufficient observations per individual

**Survey Design:** - Clusters nested within strata - Weights are positive and non-missing - Suspicious weight patterns (e.g., all identical) - Design effects

**Missingness:** - Missing data patterns (MCAR, MAR, MNAR indicators) - Proportion missing by variable - Monotone vs non-monotone patterns

**Statistical Properties:** - Outcome distribution (normality, outliers) - Time score distribution - Covariate distributions - Multicollinearity among covariates

Examples

# \donttest{
data(mcs_simulated)

# Validate data before analysis
validation <- validate_survey_data(
  data = mcs_simulated,
  id = "id",
  time = "age",
  outcome = "selfcontrol",
  strata = "stratum",
  cluster = "cluster",
  weights = "weight",
  verbose = TRUE
)
#> 
#> ======================================================================
#> DATA VALIDATION FOR GROWTH MIXTURE MODELING
#> ======================================================================
#> 
#> 1. Checking data structure...
#> 2. Checking survey design...
#> 3. Checking survey weights...
#> 4. Checking missing data patterns...
#> 5. Checking outcome distribution...
#> 6. Checking time variable...
#> 
#> ======================================================================
#> VALIDATION SUMMARY
#> ======================================================================
#> 
#> Overall Status: PASSED 
#> 
#> WARNINGS (review recommended):
#>   1. 262 potential outliers (>3 SD from mean)
#> 
#> RECOMMENDATIONS:
#>   1. Non-monotone missingness - verify FIML assumptions
#>   2. Examine outliers - may indicate data errors or require robust methods
#> 
#> Data Overview:
#>   Individuals: 5000 
#>   Observations: 30000 
#>   Time points: 6 
#>   Missing outcome: 13.4 %
#>   Design effect: 0.2 
#> 
#> ======================================================================

print(validation)
#> 
#> ======================================================================
#> VALIDATION SUMMARY
#> ======================================================================
#> 
#> Overall Status: PASSED 
#> 
#> WARNINGS (review recommended):
#>   1. 262 potential outliers (>3 SD from mean)
#> 
#> RECOMMENDATIONS:
#>   1. Non-monotone missingness - verify FIML assumptions
#>   2. Examine outliers - may indicate data errors or require robust methods
#> 
#> Data Overview:
#>   Individuals: 5000 
#>   Observations: 30000 
#>   Time points: 6 
#>   Missing outcome: 13.4 %
#>   Design effect: 0.2 
#> 
#> ======================================================================

# Check if data is valid for analysis
if (validation@is_valid) {
  cat("Data is ready for GMM analysis\n")
} else {
  cat("Please address errors before proceeding:\n")
  cat(validation@errors, sep = "\n")
}
#> Data is ready for GMM analysis
# }