Comprehensive psychometric validation of Dutch versions of interoceptive awareness scales using advanced factor analytic and structural equation modeling techniques.
This repository contains analysis scripts and documentation for the psychometric validation of Dutch translations of widely-used interoceptive awareness questionnaires. The study employs a split-sample design with exploratory factor analysis (EFA), confirmatory factor analysis (CFA), reliability assessment, measurement invariance testing, and regression analyses.
- IAS (Interoceptive Accuracy Scale): 21 items
- IATS (Interoceptive Attention Scale): 21 items
- ICQ (Interoceptive Confidence Questionnaire): 20 items
- BPQ (Body Perception Questionnaire): 46 items (26 Awareness + 20 ANS)
- BDI (Beck Depression Inventory): 21 items
- TAS (Toronto Alexithymia Scale): 20 items
-
Exploratory Factor Analysis (EFA)
- Parallel analysis for factor determination
- Principal axis factoring with oblique (oblimin) rotation
- Polychoric correlations for ordinal data
- KMO and Bartlett's test for factorability
-
Confirmatory Factor Analysis (CFA)
- Structural equation modeling via SEM
- Multiple model comparison (EFA-derived vs. single-factor)
- Comprehensive fit indices (CFI, TLI, RMSEA, SRMR)
-
Reliability Assessment
- Cronbach's alpha
- McDonald's omega (hierarchical and total)
- Factor-specific reliability coefficients
-
Measurement Invariance
- Configural invariance (baseline model)
- Metric invariance (equal loadings)
- Scalar invariance (equal loadings and intercepts)
- Multi-group CFA across gender
-
Regression Analysis
- Univariate (simple) linear regression
- Assumption testing (normality, heteroscedasticity)
- Effect size estimation
- Publication-quality scatterplots
- Excel Workbooks: Comprehensive results tables organized by analysis type
- High-Resolution Figures: Scree plots, scatterplots, and diagnostic plots (300 DPI)
- Formatted Tables: Ready for publication or presentation
- Python 3.8 or higher
- Anaconda or Miniconda (recommended)
# Clone repository
git clone https://github.com/[username]/dutch-interoceptive-scales-validation.git
cd dutch-interoceptive-scales-validation
# Create conda environment
conda env create -f environment.yml
# Activate environment
conda activate interoceptive-validation# Clone repository
git clone https://github.com/[username]/dutch-interoceptive-scales-validation.git
cd dutch-interoceptive-scales-validation
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt-
Prepare your data: Place your SPSS (.sav) data file in the
data/directory -
Configure paths: Edit the configuration section in the script:
# Update these paths in the script DATA_PATH = Path('./data/your_data_file.sav') OUTPUT_DIR = Path('./output')
-
Run analysis:
python dutch_interoceptive_validation.py
Key parameters can be adjusted in the CONFIGURATION & PARAMETERS section:
# Random seed for reproducibility
RANDOM_SEED = 42
# Outlier detection threshold
OUTLIER_THRESHOLD_SD = 3
# Sample split for cross-validation
TEST_SIZE = 0.5 # 50/50 split for EFA/CFA
# CFA fit criteria
CFI_THRESHOLD = 0.90
RMSEA_THRESHOLD = 0.08
TLI_THRESHOLD = 0.90
# Measurement invariance criteria
DELTA_CFI_THRESHOLD = 0.01
DELTA_RMSEA_THRESHOLD = 0.015After running the analysis, outputs will be organized as follows:
output/
├── IAS_Analysis_Results.xlsx # IAS psychometric results
├── IATS_Analysis_Results.xlsx # IATS psychometric results
├── Univariate_Regression_Results.xlsx # Regression analyses
├── IAS_parallel_analysis.png # IAS scree plot
├── IATS_parallel_analysis.png # IATS scree plot
├── scatter_IAS_Totaal_*.png # Regression scatterplots
└── scatter_IATS_Totaal_*.png # Regression scatterplots
- Format: SPSS (.sav) file
- Required variables:
- Scale items (e.g.,
IAS_1toIAS_21) - Total scores (e.g.,
IAS_Totaal,IATS_Totaal) - Demographics (
Leeftijd,Geslacht) - Additional scales for convergent validity
- Scale items (e.g.,
| Variable | Type | Description |
|---|---|---|
IAS_1 to IAS_21 |
Numeric | IAS item responses |
IATS_1 to IATS_21 |
Numeric | IATS item responses |
IAS_Totaal |
Numeric | IAS total score |
IATS_Totaal |
Numeric | IATS total score |
Geslacht |
Categorical | Gender (for invariance testing) |
Leeftijd |
Numeric | Age |
See data/README.md for detailed data specifications.
The analysis uses a rigorous split-sample approach:
-
Sample 1 (50%): Exploratory Factor Analysis (EFA)
- Determine factor structure
- Calculate reliability coefficients
-
Sample 2 (50%): Confirmatory Factor Analysis (CFA)
- Test factor structure from EFA
- Compare with single-factor model
- Assess measurement invariance
This approach prevents capitalization on chance and provides stronger evidence for factor structure.
- Method: Multiple imputation using MICE (Multivariate Imputation by Chained Equations)
- Implementation: 5 imputed datasets, 10 iterations
- Variables: All scale items plus demographic variables
Based on Hu & Bentler (1999) and Cheung & Rensvold (2002):
| Index | Acceptable Fit | Good Fit |
|---|---|---|
| CFI | ≥ 0.90 | ≥ 0.95 |
| TLI | ≥ 0.90 | ≥ 0.95 |
| RMSEA | ≤ 0.08 | ≤ 0.06 |
| SRMR | ≤ 0.08 | ≤ 0.05 |
Measurement Invariance:
- ΔCFI ≤ 0.01
- ΔRMSEA ≤ 0.015
dutch-interoceptive-scales-validation/
│
├── data/ # Data files (not tracked in git)
│ └── README.md # Data documentation
│
├── docs/ # Additional documentation
│ └── README.md # Documentation index
│
├── output/ # Analysis outputs (not tracked)
│ └── README.md # Output documentation
│
├── dutch_interoceptive_validation.py # Main analysis script
├── environment.yml # Conda environment specification
├── requirements.txt # pip dependencies
├── .gitignore # Git ignore rules
├── LICENSE # MIT License
└── README.md # This file
- NumPy (≥1.24): Numerical computing
- pandas (≥2.0): Data manipulation
- SciPy (≥1.11): Statistical functions
- factor-analyzer (≥0.4.0): EFA and CFA
- semopy (≥2.3.0): Structural equation modeling
- scikit-learn (≥1.3): Data preprocessing, train-test split
- miceforest (≥5.6): Multiple imputation
- matplotlib (≥3.7): Plotting
- seaborn (≥0.12): Statistical visualization
- statsmodels (≥0.14): Regression analysis
- pyreadstat (≥1.2): Read SPSS files
- openpyxl (≥3.1): Excel output
See requirements.txt or environment.yml for complete dependency list.
- Fixed random seed: All stochastic processes use
RANDOM_SEED = 42 - Version control: Dependencies specified with minimum versions
- Complete documentation: All analysis decisions documented in code
- Session information: Script outputs package versions used
To exactly replicate the analysis:
# Use the exact environment
conda env create -f environment.yml
conda activate interoceptive-validation
# Run with same seed
python dutch_interoceptive_validation.py- Report bugs or issues
- Suggest enhancements
- Improve documentation
- Add tests
- Fix bugs
This project is licensed under the MIT License - see the LICENSE file for details.
-
Factor Analysis
- Horn, J. L. (1965). A rationale and test for the number of factors in factor analysis. Psychometrika, 30(2), 179-185.
- Fabrigar, L. R., Wegener, D. T., MacCallum, R. C., & Strahan, E. J. (1999). Evaluating the use of exploratory factor analysis in psychological research. Psychological Methods, 4(3), 272-299.
-
Model Fit Criteria
- Hu, L. T., & Bentler, P. M. (1999). Cutoff criteria for fit indexes in covariance structure analysis. Structural Equation Modeling, 6(1), 1-55.
-
Measurement Invariance
- Cheung, G. W., & Rensvold, R. B. (2002). Evaluating goodness-of-fit indexes for testing measurement invariance. Structural Equation Modeling, 9(2), 233-255.
-
Reliability
- Cronbach, L. J. (1951). Coefficient alpha and the internal structure of tests. Psychometrika, 16(3), 297-334.
- McDonald, R. P. (1999). Test theory: A unified treatment. Mahwah, NJ: Erlbaum.
-
Missing Data
- van Buuren, S., & Groothuis-Oudshoorn, K. (2011). mice: Multivariate imputation by chained equations in R. Journal of Statistical Software, 45(3), 1-67.
Note: This analysis uses real data from human participants. Please ensure you have appropriate ethical approval and data sharing agreements before using this code with your data.