scieee AI-readable full text Open interactive document viewer

INTERADIG analysis code and documentation (no participant data)

Dieter, Leo

Abstract

Overview: Public replication package for the INTERADIG real-world study of telephone/SMS support for a prescription digital therapeutic in Germany (DiGA context). This record contains the analysis code (SPSS v30) and the variable codebook used to generate the manuscript’s results. Important: No participant-level data are included. The microdata are owned by the provider and are available under restricted access in a companion Zenodo record (see Related works). Contents:• MA2_INTERADIG_Analysis.pdf: end-to-end SPSS syntax (v30 compatible)• MA1_Codebook.pdf: variable names, labels, codings, and derived measures• README.pdf: how to run and reproduce outputs How to reproduce: Load your analysis dataset as the active file, then run SPSS syntax from top to bottom. The script computes adherence metrics (v1/v2), domain goal attainment, reactivation after inactivity, survival (time-to-first inactivity), non-responder checks, and adjusted outcome models (IIEF-5, CGI-I), matching the manuscript. License: CC BY 4.0 for code and documentation. Cite this record and the article when reusing. Contact: For questions or to request access to the restricted microdata, please contact the corresponding author.

Full text

* ==============================================================. * INTERADIG - SYNTAX * Includes requested figures. * Date: 2025-11-9. * ==============================================================. SET PRINTBACK=OFF MPRINT=ON OLANG=ENGLISH. SET DECIMAL=DOT. * ==============================================================. * SECTION 0: VERIFY GROUP VARIABLE. * ==============================================================. TITLE 'Data Setup: Group Variable'. * Setup: ensure no splits/filters and readable labels for gruppe. SPLIT FILE OFF. FILTER OFF. EXECUTE. * Apply variable label and value labels to gruppe. VARIABLE LABELS gruppe "Group". VALUE LABELS gruppe 1 'Control' 2 'Call' 3 'SMS'. VARIABLE LEVEL gruppe (NOMINAL). FORMATS age bmi iief_week_1 iief_week_12 (F8.2). FORMATS Active_weeks (F8.2). VARIABLE LEVEL Active_weeks (SCALE). EXECUTE. * Verify all three groups present. FREQUENCIES VARIABLES=gruppe. * Remove any filters. FILTER OFF. SPLIT FILE OFF. USE ALL. EXECUTE. * ==============================================================. * SECTION 1: BASELINE PHARMACOTHERAPY. * ==============================================================. TITLE 'Baseline: Pharmacotherapy'. COMPUTE any_pharma = 0. IF (takes_pde5 = 1 OR takes_skat_or_muse = 1) any_pharma = 1. VARIABLE LABELS any_pharma "Baseline: Any ED pharmacotherapy". VALUE LABELS any_pharma 0 "No" 1 "Yes". EXECUTE. * ==============================================================. * SECTION 2: BASELINE CHARACTERISTICS. * ==============================================================. TITLE 'Baseline Characteristics: Continuous Variables (N=470)'. MEANS TABLES=age bmi iief_week_1 BY gruppe /CELLS MEAN STDDEV COUNT. * Replace ONEWAY with GLM for age. TITLE 'Baseline: Age by Group (GLM with Bonferroni)'. GLM age BY gruppe /METHOD=SSTYPE(3) /EMMEANS=TABLES(gruppe) COMPARE ADJ(BONFERRONI) /PRINT=DESCRIPTIVE ETASQ HOMOGENEITY /CRITERIA=ALPHA(.05) /DESIGN=gruppe. * Replace ONEWAY with GLM for BMI. TITLE 'Baseline: BMI by Group (GLM with Bonferroni)'. GLM bmi BY gruppe /METHOD=SSTYPE(3) /EMMEANS=TABLES(gruppe) COMPARE ADJ(BONFERRONI) /PRINT=DESCRIPTIVE ETASQ HOMOGENEITY /CRITERIA=ALPHA(.05) /DESIGN=gruppe. * Replace ONEWAY with GLM for baseline IIEF. TITLE 'Baseline: IIEF Week 1 by Group (GLM with Bonferroni)'. GLM iief_week_1 BY gruppe /METHOD=SSTYPE(3) /EMMEANS=TABLES(gruppe) COMPARE ADJ(BONFERRONI) /PRINT=DESCRIPTIVE ETASQ HOMOGENEITY /CRITERIA=ALPHA(.05) /DESIGN=gruppe. TITLE 'Baseline Characteristics: Categorical Variables'. CROSSTABS /TABLES=gruppe BY is_smoker /STATISTICS=CHISQ /CELLS=COUNT ROW COLUMN. CROSSTABS /TABLES=gruppe BY any_pharma /STATISTICS=CHISQ /CELLS=COUNT ROW COLUMN. * ==============================================================. * SECTION 3: ADHERENCE METRICS. * ==============================================================. TITLE 'Adherence Metrics'. COMPUTE total_trainings = SUM(trainings_week_1 TO trainings_week_12). VARIABLE LABELS total_trainings "Total training sessions". EXECUTE. DO REPEAT w = trainings_week_1 TO trainings_week_6 / wnz = train_non0_1 TO train_non0_6. COMPUTE wnz = w. IF (w = 0) wnz = $SYSMIS. END REPEAT. DO REPEAT w = trainings_week_7 TO trainings_week_12 / wnz = train_non0_7 TO train_non0_12. COMPUTE wnz = w. IF (w = 0) wnz = $SYSMIS. END REPEAT. COMPUTE median_trainings_active_week = MEDIAN(train_non0_1 TO train_non0_12). VARIABLE LABELS median_trainings_active_week "Median trainings per active week". FORMAT median_trainings_active_week (F8.2). EXECUTE. COMPUTE Active_weeks = (trainings_week_1 > 0) + (trainings_week_2 > 0) + (trainings_week_3 > 0) + (trainings_week_4 > 0) + (trainings_week_5 > 0) + (trainings_week_6 > 0) + (trainings_week_7 > 0) + (trainings_week_8 > 0) + (trainings_week_9 > 0) + (trainings_week_10 > 0) + (trainings_week_11 > 0) + (trainings_week_12 > 0). VARIABLE LABELS Active_weeks "Active weeks (≥1 session per week, 0-12)". EXECUTE. COMPUTE engagement_ratio = Active_weeks / 12. VARIABLE LABELS engagement_ratio "Engagement ratio". FORMAT engagement_ratio (F4.2). EXECUTE. * ==============================================================. * SECTION 4: PRIMARY OUTCOME — ACTIVE WEEKS (UNADJUSTED). * ==============================================================. TITLE 'PRIMARY OUTCOME: Active Weeks (Unadjusted - GLM with Bonferroni)'. MEANS TABLES=Active_weeks BY gruppe /CELLS MEAN STDDEV COUNT. * Replace ONEWAY with GLM. GLM Active_weeks BY gruppe /METHOD=SSTYPE(3) /EMMEANS=TABLES(gruppe) COMPARE ADJ(BONFERRONI) /PRINT=DESCRIPTIVE ETASQ HOMOGENEITY /CRITERIA=ALPHA(.05) /DESIGN=gruppe. * ==============================================================. * SECTION 4B: UNADJUSTED PLANNED CONTRASTS FOR ACTIVE WEEKS. * ==============================================================. TITLE 'PRIMARY OUTCOME: Active Weeks - Unadjusted Pairwise Comparisons'. * Unadjusted pairwise t-tests for Active_weeks (two-sample, 2-sided). * Includes gruppe means, SDs, 95% CI, Levene's test for equality of variances. * 1) Control vs Call. T-TEST GROUPS = gruppe(1 2) /VARIABLES = Active_weeks /MISSING = ANALYSIS /CRITERIA = CI(.95). * 2) Control vs SMS. T-TEST GROUPS = gruppe(1 3) /VARIABLES = Active_weeks /MISSING = ANALYSIS /CRITERIA = CI(.95). * 3) Call vs SMS. T-TEST GROUPS = gruppe(2 3) /VARIABLES = Active_weeks /MISSING = ANALYSIS /CRITERIA = CI(.95). * ==============================================================. * SECTION 4C: FIGURE 1 — BOXPLOT OF ACTIVE WEEKS BY GROUP. * ==============================================================. TITLE 'FIGURE 1: Distribution of Active Training Weeks by Group'. EXAMINE VARIABLES=Active_weeks BY gruppe /PLOT=BOXPLOT /STATISTICS=NONE /NOTOTAL /MISSING=LISTWISE. * ==============================================================. * SECTION 5: PRIMARY OUTCOME — ACTIVE WEEKS (ADJUSTED). * ==============================================================. TITLE 'PRIMARY OUTCOME: Active Weeks (Adjusted with Covariates)'. GLM Active_weeks BY gruppe WITH age bmi is_smoker any_pharma /METHOD=SSTYPE(3) /EMMEANS=TABLES(gruppe) WITH(age=MEAN bmi=MEAN is_smoker=MEAN any_pharma=MEAN) COMPARE ADJ(BONFERRONI) /PRINT=ETASQ PARAMETER DESCRIPTIVE /CRITERIA=ALPHA(.05) /DESIGN=age bmi is_smoker any_pharma gruppe. * ==============================================================. * SECTION 6: GOAL ATTAINMENT. * ==============================================================. TITLE 'Goal Attainment by Domain'. DO REPEAT pfw = pelvic_floor_target_progress_week_1 TO pelvic_floor_target_progress_week_12 / pfg = pelvic_floor_goal_w1 TO pelvic_floor_goal_w12. COMPUTE pfg = (pfw >= 7). END REPEAT. DO REPEAT pfpw = pelvic_floor_physio_target_progress_week_1 TO pelvic_floor_physio_target_progress_week_12 / pfpg = pelvic_floor_physio_goal_w1 TO pelvic_floor_physio_goal_w12. COMPUTE pfpg = (pfpw >= 2). END REPEAT. DO REPEAT cw = cardio_target_progress_sec_week_1 TO cardio_target_progress_sec_week_12 / cg = cardio_goal_w1 TO cardio_goal_w12. COMPUTE cg = (cw >= 9000). END REPEAT. DO REPEAT mw = mental_target_progress_week_1 TO mental_target_progress_week_12 / mg = mental_goal_w1 TO mental_goal_w12. COMPUTE mg = (mw >= 2). END REPEAT. DO REPEAT kw = knowledge_target_progress_week_1 TO knowledge_target_progress_week_12 / kg = knowledge_goal_w1 TO knowledge_goal_w12. COMPUTE kg = (kw >= 2). END REPEAT. COMPUTE weeks_goal_pelvic = SUM(pelvic_floor_goal_w1 TO pelvic_floor_goal_w12). COMPUTE weeks_goal_physio = SUM(pelvic_floor_physio_goal_w1 TO pelvic_floor_physio_goal_w12). COMPUTE weeks_goal_cardio = SUM(cardio_goal_w1 TO cardio_goal_w12). COMPUTE weeks_goal_mental = SUM(mental_goal_w1 TO mental_goal_w12). COMPUTE weeks_goal_knowledge = SUM(knowledge_goal_w1 TO knowledge_goal_w12). COMPUTE total_goals_achieved = weeks_goal_pelvic + weeks_goal_physio + weeks_goal_cardio + weeks_goal_mental + weeks_goal_knowledge. COMPUTE percent_goals_achieved = (total_goals_achieved / 60) * 100. VARIABLE LABELS weeks_goal_pelvic "Weeks pelvic-floor goal met" weeks_goal_physio "Weeks pelvic-floor physio goal met" weeks_goal_cardio "Weeks cardio goal met" weeks_goal_mental "Weeks mental goal met" weeks_goal_knowledge "Weeks knowledge goal met" total_goals_achieved "Total weekly goals achieved (0-60)" percent_goals_achieved "% of weekly goals achieved". FORMAT percent_goals_achieved (F5.1). EXECUTE. MEANS TABLES=weeks_goal_pelvic weeks_goal_physio weeks_goal_cardio weeks_goal_mental weeks_goal_knowledge BY gruppe /CELLS MEAN STDDEV COUNT. * ==============================================================. * SECTION 7: MECHANISM — REACTIVATION. * ==============================================================. TITLE 'Mechanism: Reactivation Analysis'. COMPUTE A1 = (trainings_week_1 > 0). COMPUTE A2 = (trainings_week_2 > 0). COMPUTE A3 = (trainings_week_3 > 0). COMPUTE A4 = (trainings_week_4 > 0). COMPUTE A5 = (trainings_week_5 > 0). COMPUTE A6 = (trainings_week_6 > 0). COMPUTE A7 = (trainings_week_7 > 0). COMPUTE A8 = (trainings_week_8 > 0). COMPUTE A9 = (trainings_week_9 > 0). COMPUTE A10 = (trainings_week_10 > 0). COMPUTE A11 = (trainings_week_11 > 0). COMPUTE A12 = (trainings_week_12 > 0). COMPUTE P2 = (trainings_week_1 = 0). COMPUTE P3 = (trainings_week_2 = 0). COMPUTE P4 = (trainings_week_3 = 0). COMPUTE P5 = (trainings_week_4 = 0). COMPUTE P6 = (trainings_week_5 = 0). COMPUTE P7 = (trainings_week_6 = 0). COMPUTE P8 = (trainings_week_7 = 0). COMPUTE P9 = (trainings_week_8 = 0). COMPUTE P10 = (trainings_week_9 = 0). COMPUTE P11 = (trainings_week_10 = 0). COMPUTE P12 = (trainings_week_11 = 0). COMPUTE R2 = P2 AND A2. COMPUTE R3 = P3 AND A3. COMPUTE R4 = P4 AND A4. COMPUTE R5 = P5 AND A5. COMPUTE R6 = P6 AND A6. COMPUTE R7 = P7 AND A7. COMPUTE R8 = P8 AND A8. COMPUTE R9 = P9 AND A9. COMPUTE R10 = P10 AND A10. COMPUTE R11 = P11 AND A11. COMPUTE R12 = P12 AND A12. COMPUTE reactivation_opportunities = SUM(P2 TO P12). COMPUTE reactivations = SUM(R2 TO R12). COMPUTE reactivation_rate = $SYSMIS. IF (reactivation_opportunities > 0) reactivation_rate = reactivations / reactivation_opportunities. VARIABLE LABELS reactivation_opportunities "Weeks with prior inactivity" reactivations "Weeks with reactivation" reactivation_rate "Reactivation rate". COMPUTE any_reactivation = $SYSMIS. IF (reactivation_opportunities > 0) any_reactivation = (reactivations > 0). VALUE LABELS any_reactivation 0 "No" 1 "Yes". VARIABLE LABELS any_reactivation "Any reactivation episode". EXECUTE. CROSSTABS /TABLES=gruppe BY any_reactivation /STATISTICS=CHISQ /CELLS=COUNT ROW COLUMN /MISSING=TABLE. LOGISTIC REGRESSION VARIABLES any_reactivation /METHOD=ENTER age bmi is_smoker any_pharma gruppe /CONTRAST(gruppe)=Indicator(1) /CONTRAST(is_smoker)=Indicator(1) /CONTRAST(any_pharma)=Indicator(1) /PRINT=CI(95) GOODFIT /CRITERIA=PIN(.05) POUT(.10) ITERATE(20) CUT(.5). MEANS TABLES=reactivation_rate BY gruppe /CELLS MEAN STDDEV COUNT. GLM reactivation_rate BY gruppe WITH age bmi is_smoker any_pharma /METHOD=SSTYPE(3) /EMMEANS=TABLES(gruppe) WITH(age=MEAN bmi=MEAN is_smoker=MEAN any_pharma=MEAN) COMPARE ADJ(BONFERRONI) /PRINT=ETASQ PARAMETER DESCRIPTIVE /CRITERIA=ALPHA(.05) /DESIGN=age bmi is_smoker any_pharma gruppe. * ==============================================================. * SECTION 8: PERSISTENCE — KAPLAN-MEIER. * ==============================================================. TITLE 'Persistence: Time to First Inactivity'. COMPUTE first_inactive_week = 0. DO IF (trainings_week_1 = 0). COMPUTE first_inactive_week = 1. ELSE IF (trainings_week_2 = 0). COMPUTE first_inactive_week = 2. ELSE IF (trainings_week_3 = 0). COMPUTE first_inactive_week = 3. ELSE IF (trainings_week_4 = 0). COMPUTE first_inactive_week = 4. ELSE IF (trainings_week_5 = 0). COMPUTE first_inactive_week = 5. ELSE IF (trainings_week_6 = 0). COMPUTE first_inactive_week = 6. ELSE IF (trainings_week_7 = 0). COMPUTE first_inactive_week = 7. ELSE IF (trainings_week_8 = 0). COMPUTE first_inactive_week = 8. ELSE IF (trainings_week_9 = 0). COMPUTE first_inactive_week = 9. ELSE IF (trainings_week_10 = 0). COMPUTE first_inactive_week = 10. ELSE IF (trainings_week_11 = 0). COMPUTE first_inactive_week = 11. ELSE IF (trainings_week_12 = 0). COMPUTE first_inactive_week = 12. ELSE. COMPUTE first_inactive_week = 13. END IF. VARIABLE LABELS first_inactive_week "Week of first inactivity (13=none)". COMPUTE time_to_inactive = first_inactive_week. COMPUTE multi_domain_w8 = ((pelvic_floor_goal_w8 + pelvic_floor_physio_goal_w8 + cardio_goal_w8 + mental_goal_w8 + knowledge_goal_w8) >= 2). COMPUTE multi_domain_w9 = ((pelvic_floor_goal_w9 + pelvic_floor_physio_goal_w9 + cardio_goal_w9 + mental_goal_w9 + knowledge_goal_w9) >= 2). COMPUTE multi_domain_w10 = ((pelvic_floor_goal_w10 + pelvic_floor_physio_goal_w10 + cardio_goal_w10 + mental_goal_w10 + knowledge_goal_w10) >= 2). COMPUTE multi_domain_w11 = ((pelvic_floor_goal_w11 + pelvic_floor_physio_goal_w11 + cardio_goal_w11 + mental_goal_w11 + knowledge_goal_w11) >= 2). COMPUTE multi_domain_w12 = ((pelvic_floor_goal_w12 + pelvic_floor_physio_goal_w12 + cardio_goal_w12 + mental_goal_w12 + knowledge_goal_w12) >= 2). COMPUTE multi_domain_weeks = SUM(multi_domain_w1 TO multi_domain_w12). VARIABLE LABELS multi_domain_weeks "Weeks with ≥2 of 5 domain goals met". EXECUTE. MEANS TABLES=multi_domain_weeks BY gruppe /CELLS MEAN STDDEV COUNT. * Replace ONEWAY with GLM. GLM multi_domain_weeks BY gruppe /METHOD=SSTYPE(3) /EMMEANS=TABLES(gruppe) COMPARE ADJ(BONFERRONI) /PRINT=DESCRIPTIVE ETASQ HOMOGENEITY /CRITERIA=ALPHA(.05) /DESIGN=gruppe. GLM multi_domain_weeks BY gruppe WITH age bmi is_smoker any_pharma /METHOD=SSTYPE(3) /EMMEANS=TABLES(gruppe) WITH(age=MEAN bmi=MEAN is_smoker=MEAN any_pharma=MEAN) COMPARE ADJ(BONFERRONI) /PRINT=ETASQ PARAMETER /CRITERIA=ALPHA(.05) /DESIGN=age bmi is_smoker any_pharma gruppe. * ==============================================================. * SECTION 15: MISSING DATA & ATTRITION. * ==============================================================. TITLE 'Missing Data: Follow-up Completion'. COMPUTE iief_fu = 0. IF (NOT MISSING(iief_week_12)) iief_fu = 1. COMPUTE cgi_fu = 0. IF (NOT MISSING(cgi_score)) cgi_fu = 1. VALUE LABELS iief_fu 0 "No" 1 "Yes" / cgi_fu 0 "No" 1 "Yes". VARIABLE LABELS iief_fu "Completed IIEF follow-up" cgi_fu "Completed CGI follow-up". EXECUTE. CROSSTABS /TABLES=gruppe BY iief_fu /STATISTICS=CHISQ /CELLS=COUNT ROW COLUMN. CROSSTABS /TABLES=gruppe BY cgi_fu /STATISTICS=CHISQ /CELLS=COUNT ROW COLUMN. T-TEST GROUPS=iief_fu(0 1) /VARIABLES=age bmi iief_week_1 Active_weeks /MISSING=ANALYSIS. LOGISTIC REGRESSION VARIABLES iief_fu /METHOD=ENTER age bmi is_smoker Active_weeks any_pharma gruppe /CONTRAST(gruppe)=Indicator(1) /CONTRAST(is_smoker)=Indicator(1) /CONTRAST(any_pharma)=Indicator(1) /PRINT=CI(95) GOODFIT /CRITERIA=PIN(.05) POUT(.10) ITERATE(20) CUT(.5). * ==============================================================. * SECTION 16: SUBGROUP — NO BASELINE PHARMACOTHERAPY. * ==============================================================. TITLE 'Subgroup: IIEF Outcome (No Baseline Pharmacotherapy)'. TEMPORARY. SELECT IF (any_pharma = 0). GLM iief_week_12 BY gruppe WITH iief_week_1 age bmi is_smoker /EMMEANS=TABLES(gruppe) WITH(iief_week_1=MEAN age=MEAN bmi=MEAN is_smoker=MEAN) COMPARE ADJ(BONFERRONI) /PRINT=ETASQ PARAMETER DESCRIPTIVE /CRITERIA=ALPHA(.05) /DESIGN=iief_week_1 age bmi is_smoker group. * ==============================================================. * SECTION 17: DIAGNOSTICS. * ==============================================================. TITLE 'Diagnostics: Assumptions'. EXAMINE VARIABLES=Active_weeks BY gruppe /PLOT=HISTOGRAM NPPLOT /STATISTICS=DESCRIPTIVES /NOTOTAL. EXAMINE VARIABLES=iief_change BY gruppe /PLOT=HISTOGRAM NPPLOT /STATISTICS=DESCRIPTIVES /NOTOTAL. GLM Active_weeks BY gruppe WITH age bmi is_smoker any_pharma /METHOD=SSTYPE(3) /SAVE=RESID PRED /PLOT=RESIDUALS /DESIGN=age bmi is_smoker any_pharma gruppe. * ==============================================================. * SECTION 17B: CORRELATIONS WITH ACTIVE WEEKS. * ==============================================================. TITLE 'Correlations: Active Weeks with Baseline and Clinical Variables'. * Pearson correlation matrix including Active_weeks. * For binary variables (is_smoker, any_pharma), Pearson r serves as point-biserial correlation. CORRELATIONS /VARIABLES=Active_weeks age bmi is_smoker any_pharma iief_week_1 iief_change /PRINT=TWOTAIL NOSIG /STATISTICS=DESCRIPTIVES /MISSING=PAIRWISE. * Additional correlation table focusing on Active_weeks relationships. TITLE 'Correlations: Active Weeks - Detailed View'. CORRELATIONS /VARIABLES=Active_weeks WITH age bmi is_smoker any_pharma iief_week_1 iief_change /PRINT=TWOTAIL SIG /STATISTICS=DESCRIPTIVES /MISSING=PAIRWISE. * ==============================================================. * SECTION 18: SUMMARY TABLES. * ==============================================================. TITLE 'Summary: All Metrics by Group'. MEANS TABLES=Active_weeks total_trainings median_trainings_active_week engagement_ratio percent_goals_achieved Active_weeks_v2 multi_domain_weeks BY gruppe /CELLS MEAN STDDEV COUNT. MEANS TABLES=iief_week_1 iief_week_12 iief_change cgi_score BY gruppe /CELLS MEAN STDDEV COUNT. * ==============================================================. * SECTION 19: FINAL VERIFICATION. * ==============================================================. TITLE 'Final Verification: Sample Size (N=470)'. FREQUENCIES VARIABLES=group /ORDER=ANALYSIS. DESCRIPTIVES VARIABLES=Active_weeks iief_week_12 cgi_score /STATISTICS=MEAN STDDEV MIN MAX.