Data Cleaning
Subset those with complete PAM data
pam_data1 <- subset(pam_data, pamtotal != 1)
Make age a factor
# Need to consolidate these once I have cutoffs
pam_data1$age <- as.numeric(pam_data1$age)
pam_data1$age_4 <- cut(pam_data1$age,
breaks=c(0, 3, 5, 7, 10),
labels=c('<30', '30-49', '50-69', '70+'))
Recode type of inflammatory bowel disease
class(pam_data1$type_of_inflammatory)
[1] "factor"
pam_data1$type_of_inflammatory <- as.factor(pam_data1$type_of_inflammatory)
class(pam_data1$type_of_inflammatory)
[1] "factor"
pam_data1 %>%
mutate(ibddx = as_factor(type_of_inflammatory),
ibddx = fct_recode(ibddx, UC = "1",
CD = "2", UC = "3", UC = "4"),
ibddx = fct_relevel(ibddx, ref = 'CD')) -> PAM_clean
Make labels
PAM_clean = apply_labels(PAM_clean,
age_4 = "Age (years)",
GENDERF = "Female",
SESIBD = "IBD SES",
PROImp = "Symptom Burden Score",
ibddx = "IBD Diagnosis",
ModSevere = "Moderate to Severe Disease",
pamtotal = "PAM 13",
current_meds___1 ="Active Steroid Use")
Total PAM Models
PAM -> daily life impact
PROImp1 <- lm(PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 + pamtotal,
data = PAM_clean)
summary(PROImp1 )
Call:
lm(formula = PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 +
pamtotal, data = PAM_clean)
Residuals:
Symptom Burden Score
Min 1Q Median 3Q Max
-14.5080 -4.8299 -0.6976 3.3179 21.5542
Coefficients:
Estimate Std. Error t value
(Intercept) 14.58151 4.74024 3.076
age_430-49 1.96526 1.92080 1.023
age_450-69 3.10382 1.83604 1.690
age_470+ -2.07760 2.36686 -0.878
GENDERF 2.37380 1.24772 1.903
ibddxUC -5.01752 1.37840 -3.640
ModSevere 0.47966 1.64038 0.292
current_meds___1 6.93220 1.99401 3.477
pamtotal -0.14627 0.05664 -2.583
Pr(>|t|)
(Intercept) 0.002529 **
age_430-49 0.308028
age_450-69 0.093191 .
age_470+ 0.381585
GENDERF 0.059189 .
ibddxUC 0.000384 ***
ModSevere 0.770413
current_meds___1 0.000680 ***
pamtotal 0.010848 *
---
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 7.424 on 138 degrees of freedom
(1 observation deleted due to missingness)
Multiple R-squared: 0.3016, Adjusted R-squared: 0.2611
F-statistic: 7.449 on 8 and 138 DF, p-value: 3.168e-08
broom::glance(PROImp1 )
broom::tidy(PROImp1)
model_performance(PROImp1)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
------------------------------------------------------------------
1017.286 | 1018.903 | 1047.190 | 0.302 | 0.261 | 7.194 | 7.424
tbl_regression(PROImp1)
| Characteristic |
Beta |
95% CI |
p-value |
| Age (years) |
|
|
|
| <30 |
— |
— |
|
| 30-49 |
2.0 |
-1.8, 5.8 |
0.3 |
| 50-69 |
3.1 |
-0.53, 6.7 |
0.093 |
| 70+ |
-2.1 |
-6.8, 2.6 |
0.4 |
| Female |
2.4 |
-0.09, 4.8 |
0.059 |
| IBD Diagnosis |
|
|
|
| CD |
— |
— |
|
| UC |
-5.0 |
-7.7, -2.3 |
<0.001 |
| Moderate to Severe Disease |
0.48 |
-2.8, 3.7 |
0.8 |
| Active Steroid Use |
6.9 |
3.0, 11 |
<0.001 |
| PAM 13 |
-0.15 |
-0.26, -0.03 |
0.011 |
# Model performance
model_performance(PROImp1)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
------------------------------------------------------------------
1017.286 | 1018.903 | 1047.190 | 0.302 | 0.261 | 7.194 | 7.424
performance::check_model(PROImp1)
Variable `Component` is not in your data frame
:/

# Margins
cplot(PROImp1, "pamtotal", what = "prediction", main = "Predicted Daily Life Impact by Patient Activation Level")

margins(PROImp1)
Average marginal effects
lm(formula = PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 + pamtotal, data = PAM_clean)
SES –> Daily life impact
PROImp2 <- lm(PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 + SESIBD,
data = PAM_clean)
summary(PROImp2 )
Call:
lm(formula = PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 +
SESIBD, data = PAM_clean)
Residuals:
Symptom Burden Score
Min 1Q Median 3Q Max
-18.6495 -4.2179 -0.4351 3.7351 17.9176
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 28.14316 3.96619 7.096 6.15e-11 ***
age_430-49 1.49261 1.67537 0.891 0.374528
age_450-69 2.28169 1.59774 1.428 0.155530
age_470+ -0.49431 2.05029 -0.241 0.809841
GENDERF 2.13254 1.08929 1.958 0.052279 .
ibddxUC -4.42819 1.20298 -3.681 0.000332 ***
ModSevere -0.15558 1.43149 -0.109 0.913613
current_meds___1 5.29641 1.75662 3.015 0.003058 **
SESIBD -0.10224 0.01417 -7.213 3.30e-11 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 6.478 on 138 degrees of freedom
(1 observation deleted due to missingness)
Multiple R-squared: 0.4683, Adjusted R-squared: 0.4375
F-statistic: 15.19 on 8 and 138 DF, p-value: 7.581e-16
broom::glance(PROImp2 )
broom::tidy(PROImp2)
model_performance(PROImp2)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
----------------------------------------------------------------
977.199 | 978.816 | 1007.103 | 0.468 | 0.437 | 6.277 | 6.478
tbl_regression(PROImp2)
| Characteristic |
Beta |
95% CI |
p-value |
| Age (years) |
|
|
|
| <30 |
— |
— |
|
| 30-49 |
1.5 |
-1.8, 4.8 |
0.4 |
| 50-69 |
2.3 |
-0.88, 5.4 |
0.2 |
| 70+ |
-0.49 |
-4.5, 3.6 |
0.8 |
| Female |
2.1 |
-0.02, 4.3 |
0.052 |
| IBD Diagnosis |
|
|
|
| CD |
— |
— |
|
| UC |
-4.4 |
-6.8, -2.0 |
<0.001 |
| Moderate to Severe Disease |
-0.16 |
-3.0, 2.7 |
>0.9 |
| Active Steroid Use |
5.3 |
1.8, 8.8 |
0.003 |
| IBD SES |
-0.10 |
-0.13, -0.07 |
<0.001 |
# Model performance
model_performance(PROImp2)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
----------------------------------------------------------------
977.199 | 978.816 | 1007.103 | 0.468 | 0.437 | 6.277 | 6.478
performance::check_model(PROImp2)
Variable `Component` is not in your data frame :/

# Margins
cplot(PROImp2, "SESIBD", what = "prediction", main = "Predicted Daily Life Impact by IBD SES Level")

margins(PROImp2)
Average marginal effects
lm(formula = PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 + SESIBD, data = PAM_clean)
PAM + SES –> Daily life impact
PROImp3 <- lm(PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 + SESIBD + pamtotal,
data = PAM_clean)
summary(PROImp3 )
Call:
lm(formula = PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 +
SESIBD + pamtotal, data = PAM_clean)
Residuals:
Symptom Burden Score
Min 1Q Median 3Q Max
-18.6332 -4.2132 -0.3973 3.7294 17.9553
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 28.47999 4.66090 6.110 9.70e-09 ***
age_430-49 1.48060 1.68358 0.879 0.380707
age_450-69 2.25745 1.61291 1.400 0.163891
age_470+ -0.54174 2.08575 -0.260 0.795460
GENDERF 2.13309 1.09319 1.951 0.053067 .
ibddxUC -4.43989 1.21021 -3.669 0.000348 ***
ModSevere -0.16891 1.43981 -0.117 0.906784
current_meds___1 5.28779 1.76399 2.998 0.003232 **
SESIBD -0.10140 0.01547 -6.556 1.04e-09 ***
pamtotal -0.00749 0.05392 -0.139 0.889735
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 6.501 on 137 degrees of freedom
(1 observation deleted due to missingness)
Multiple R-squared: 0.4684, Adjusted R-squared: 0.4334
F-statistic: 13.41 on 9 and 137 DF, p-value: 3.053e-15
broom::glance(PROImp3 )
broom::tidy(PROImp3)
model_performance(PROImp3)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
----------------------------------------------------------------
979.178 | 981.133 | 1012.073 | 0.468 | 0.433 | 6.276 | 6.501
tbl_regression(PROImp3)
| Characteristic |
Beta |
95% CI |
p-value |
| Age (years) |
|
|
|
| <30 |
— |
— |
|
| 30-49 |
1.5 |
-1.8, 4.8 |
0.4 |
| 50-69 |
2.3 |
-0.93, 5.4 |
0.2 |
| 70+ |
-0.54 |
-4.7, 3.6 |
0.8 |
| Female |
2.1 |
-0.03, 4.3 |
0.053 |
| IBD Diagnosis |
|
|
|
| CD |
— |
— |
|
| UC |
-4.4 |
-6.8, -2.0 |
<0.001 |
| Moderate to Severe Disease |
-0.17 |
-3.0, 2.7 |
>0.9 |
| Active Steroid Use |
5.3 |
1.8, 8.8 |
0.003 |
| IBD SES |
-0.10 |
-0.13, -0.07 |
<0.001 |
| PAM 13 |
-0.01 |
-0.11, 0.10 |
0.9 |
# Model performance
model_performance(PROImp3)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
----------------------------------------------------------------
979.178 | 981.133 | 1012.073 | 0.468 | 0.433 | 6.276 | 6.501
performance::check_model(PROImp3)
Variable `Component` is not in your data frame :/

VIF(PROImp3)
GVIF Df GVIF^(1/(2*Df))
age_4 1.263551 3 1.039758
GENDERF 1.033277 1 1.016502
ibddx 1.236626 1 1.112037
ModSevere 1.307931 1 1.143648
current_meds___1 1.049719 1 1.024558
SESIBD 1.310844 1 1.144921
pamtotal 1.235260 1 1.111423
# Margins
cplot(PROImp3, "pamtotal", what = "prediction", main = "Predicted Daily Life Impact by Patient Activation Level")

cplot(PROImp3, "SESIBD", what = "prediction", main = "Predicted Daily Life Impact by IBD SES Level")

NA
NA
PAM-SES interaction -> daily life impact
PROImp4 <- lm(PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 + SESIBD*pamtotal,
data = PAM_clean)
summary(PROImp4 )
Call:
lm(formula = PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 +
SESIBD * pamtotal, data = PAM_clean)
Residuals:
Symptom Burden Score
Min 1Q Median 3Q Max
-18.7853 -4.1313 -0.4917 3.7058 18.1523
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 37.7154686 16.6217549 2.269 0.024840 *
age_430-49 1.4957816 1.6878848 0.886 0.377081
age_450-69 2.2111815 1.6188148 1.366 0.174217
age_470+ -0.4480164 2.0970870 -0.214 0.831150
GENDERF 2.0758279 1.1003072 1.887 0.061347 .
ibddxUC -4.4463773 1.2132080 -3.665 0.000354 ***
ModSevere -0.0551426 1.4566294 -0.038 0.969858
current_meds___1 5.1987354 1.7749633 2.929 0.003990 **
SESIBD -0.1418390 0.0715501 -1.982 0.049453 *
pamtotal -0.1586583 0.2666357 -0.595 0.552807
SESIBD:pamtotal 0.0006528 0.0011274 0.579 0.563567
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 6.517 on 136 degrees of freedom
(1 observation deleted due to missingness)
Multiple R-squared: 0.4697, Adjusted R-squared: 0.4307
F-statistic: 12.04 on 10 and 136 DF, p-value: 9.936e-15
broom::glance(PROImp4 )
broom::tidy(PROImp4)
model_performance(PROImp4)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
----------------------------------------------------------------
980.816 | 983.144 | 1016.701 | 0.470 | 0.431 | 6.269 | 6.517
tbl_regression(PROImp4)
| Characteristic |
Beta |
95% CI |
p-value |
| Age (years) |
|
|
|
| <30 |
— |
— |
|
| 30-49 |
1.5 |
-1.8, 4.8 |
0.4 |
| 50-69 |
2.2 |
-0.99, 5.4 |
0.2 |
| 70+ |
-0.45 |
-4.6, 3.7 |
0.8 |
| Female |
2.1 |
-0.10, 4.3 |
0.061 |
| IBD Diagnosis |
|
|
|
| CD |
— |
— |
|
| UC |
-4.4 |
-6.8, -2.0 |
<0.001 |
| Moderate to Severe Disease |
-0.06 |
-2.9, 2.8 |
>0.9 |
| Active Steroid Use |
5.2 |
1.7, 8.7 |
0.004 |
| IBD SES |
-0.14 |
-0.28, 0.00 |
0.049 |
| PAM 13 |
-0.16 |
-0.69, 0.37 |
0.6 |
| IBD SES * PAM 13 |
0.00 |
0.00, 0.00 |
0.6 |
# Model performance
model_performance(PROImp4)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
----------------------------------------------------------------
980.816 | 983.144 | 1016.701 | 0.470 | 0.431 | 6.269 | 6.517
performance::check_model(PROImp4)
Variable `Component` is not in your data frame :/

VIF(PROImp4)
GVIF Df GVIF^(1/(2*Df))
age_4 1.288748 3 1.043185
GENDERF 1.041695 1 1.020635
ibddx 1.236732 1 1.112084
ModSevere 1.332174 1 1.154198
current_meds___1 1.057661 1 1.028427
SESIBD 27.914419 1 5.283410
pamtotal 30.055089 1 5.482252
SESIBD:pamtotal 78.336712 1 8.850803
# Margins
cplot(PROImp4, "pamtotal", what = "prediction", main = "Predicted Daily Life Impact by Patient Activation Level")

cplot(PROImp4, "SESIBD", what = "prediction", main = "Predicted Daily Life Impact by IBD SES Level")

PAM - Self-efficacy subtheme
Make PAM-efficacy variable
PAM_clean$efficacy <- (PAM_clean$pam_3 + PAM_clean$pam_5 + PAM_clean$pam_6 + PAM_clean$pam_7 + PAM_clean$pam_12 + PAM_clean$pam_13)/6
Does SES-IBD correlate with PAM-Efficacy
PAM_clean$efficacy <- as.numeric(PAM_clean$efficacy)
cor(PAM_clean$efficacy, PAM_clean$SESIBD, method = 'pearson') -> corr1
print(corr1)
[1] 0.5008722
## moderately correlated - Pearson's R is 0.50
PAM-efficacy -> daily life impact
efficacy1 <- lm(PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 + efficacy,
data = PAM_clean)
summary(efficacy1 )
Call:
lm(formula = PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 +
efficacy, data = PAM_clean)
Residuals:
Symptom Burden Score
Min 1Q Median 3Q Max
-15.0827 -4.4881 -0.8865 3.0995 21.4936
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 25.4175 6.3916 3.977 0.000112 ***
age_430-49 2.1390 1.8760 1.140 0.256181
age_450-69 3.0293 1.7903 1.692 0.092883 .
age_470+ -1.6310 2.2993 -0.709 0.479309
GENDERF 2.3332 1.2216 1.910 0.058216 .
ibddxUC -5.0599 1.3493 -3.750 0.000259 ***
ModSevere 0.4184 1.6034 0.261 0.794531
current_meds___1 6.3424 1.9665 3.225 0.001572 **
efficacy -6.1406 1.7069 -3.597 0.000447 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 7.269 on 138 degrees of freedom
(1 observation deleted due to missingness)
Multiple R-squared: 0.3306, Adjusted R-squared: 0.2918
F-statistic: 8.52 on 8 and 138 DF, p-value: 2.204e-09
broom::glance(efficacy1 )
broom::tidy(efficacy1)
model_performance(efficacy1)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
------------------------------------------------------------------
1011.047 | 1012.665 | 1040.951 | 0.331 | 0.292 | 7.043 | 7.269
tbl_regression(efficacy1)
| Characteristic |
Beta |
95% CI |
p-value |
| Age (years) |
|
|
|
| <30 |
— |
— |
|
| 30-49 |
2.1 |
-1.6, 5.8 |
0.3 |
| 50-69 |
3.0 |
-0.51, 6.6 |
0.093 |
| 70+ |
-1.6 |
-6.2, 2.9 |
0.5 |
| Female |
2.3 |
-0.08, 4.7 |
0.058 |
| IBD Diagnosis |
|
|
|
| CD |
— |
— |
|
| UC |
-5.1 |
-7.7, -2.4 |
<0.001 |
| Moderate to Severe Disease |
0.42 |
-2.8, 3.6 |
0.8 |
| Active Steroid Use |
6.3 |
2.5, 10 |
0.002 |
| efficacy |
-6.1 |
-9.5, -2.8 |
<0.001 |
# Model performance
model_performance(efficacy1)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
------------------------------------------------------------------
1011.047 | 1012.665 | 1040.951 | 0.331 | 0.292 | 7.043 | 7.269
performance::check_model(efficacy1)
Variable `Component` is not in your data frame :/

VIF(efficacy1)
GVIF Df GVIF^(1/(2*Df))
age_4 1.198832 3 1.030686
GENDERF 1.032293 1 1.016018
ibddx 1.229733 1 1.108933
ModSevere 1.297701 1 1.139167
current_meds___1 1.043659 1 1.021596
efficacy 1.053311 1 1.026309
# Margins
cplot(efficacy1, "efficacy", what = "prediction", main = "Predicted Daily Life Impact by Efficacy Score")

PAM-Efficacy + SES-IBD -> daily life impact
efficacy2 <- lm(PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 + efficacy + SESIBD,
data = PAM_clean)
summary(efficacy2 )
Call:
lm(formula = PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 +
efficacy + SESIBD, data = PAM_clean)
Residuals:
Symptom Burden Score
Min 1Q Median 3Q Max
-18.6376 -4.1942 -0.6516 3.6429 17.7222
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 30.99748 5.78282 5.360 3.43e-07 ***
age_430-49 1.49803 1.67867 0.892 0.373749
age_450-69 2.20788 1.60455 1.376 0.171062
age_470+ -0.60220 2.06043 -0.292 0.770522
GENDERF 2.13241 1.09142 1.954 0.052764 .
ibddxUC -4.48888 1.20864 -3.714 0.000296 ***
ModSevere -0.19564 1.43550 -0.136 0.891792
current_meds___1 5.19455 1.76643 2.941 0.003846 **
efficacy -1.17807 1.73390 -0.679 0.498010
SESIBD -0.09701 0.01616 -6.005 1.63e-08 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 6.491 on 137 degrees of freedom
(1 observation deleted due to missingness)
Multiple R-squared: 0.4701, Adjusted R-squared: 0.4353
F-statistic: 13.5 on 9 and 137 DF, p-value: 2.479e-15
broom::glance(efficacy2 )
broom::tidy(efficacy2)
model_performance(efficacy2)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
----------------------------------------------------------------
978.704 | 980.660 | 1011.599 | 0.470 | 0.435 | 6.266 | 6.491
tbl_regression(efficacy2)
| Characteristic |
Beta |
95% CI |
p-value |
| Age (years) |
|
|
|
| <30 |
— |
— |
|
| 30-49 |
1.5 |
-1.8, 4.8 |
0.4 |
| 50-69 |
2.2 |
-0.96, 5.4 |
0.2 |
| 70+ |
-0.60 |
-4.7, 3.5 |
0.8 |
| Female |
2.1 |
-0.03, 4.3 |
0.053 |
| IBD Diagnosis |
|
|
|
| CD |
— |
— |
|
| UC |
-4.5 |
-6.9, -2.1 |
<0.001 |
| Moderate to Severe Disease |
-0.20 |
-3.0, 2.6 |
0.9 |
| Active Steroid Use |
5.2 |
1.7, 8.7 |
0.004 |
| efficacy |
-1.2 |
-4.6, 2.3 |
0.5 |
| IBD SES |
-0.10 |
-0.13, -0.07 |
<0.001 |
# model performance
model_performance(efficacy2)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
----------------------------------------------------------------
978.704 | 980.660 | 1011.599 | 0.470 | 0.435 | 6.266 | 6.491
performance::check_model(efficacy2)
Variable `Component` is not in your data frame :/

VIF(efficacy2)
GVIF Df GVIF^(1/(2*Df))
age_4 1.241290 3 1.036682
GENDERF 1.033263 1 1.016496
ibddx 1.237395 1 1.112382
ModSevere 1.304320 1 1.142068
current_meds___1 1.056027 1 1.027632
efficacy 1.362965 1 1.167461
SESIBD 1.434787 1 1.197826
# Margins
cplot(efficacy2, "efficacy", what = "prediction", main = "Predicted Daily Life Impact by Efficacy Score")

cplot(efficacy2, "SESIBD", what = "prediction", main = "Predicted Daily Life Impact by SES")

PAM-efficacy/SES interaction -> daily life impact
efficacy3 <- lm(PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 + efficacy*SESIBD,
data = PAM_clean)
summary(efficacy3 )
Call:
lm(formula = PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 +
efficacy * SESIBD, data = PAM_clean)
Residuals:
Symptom Burden Score
Min 1Q Median 3Q Max
-19.0775 -4.0988 -0.4521 3.4889 17.6238
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 52.68484 22.78042 2.313 0.022239 *
age_430-49 1.60724 1.68252 0.955 0.341143
age_450-69 2.20143 1.60474 1.372 0.172376
age_470+ -0.44332 2.06697 -0.214 0.830496
GENDERF 2.05628 1.09428 1.879 0.062369 .
ibddxUC -4.41134 1.21134 -3.642 0.000384 ***
ModSevere 0.01565 1.45163 0.011 0.991413
current_meds___1 4.89444 1.79275 2.730 0.007170 **
efficacy -8.03096 7.17514 -1.119 0.264995
SESIBD -0.19785 0.10372 -1.908 0.058556 .
efficacy:SESIBD 0.03130 0.03180 0.984 0.326732
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 6.492 on 136 degrees of freedom
(1 observation deleted due to missingness)
Multiple R-squared: 0.4738, Adjusted R-squared: 0.4351
F-statistic: 12.25 on 10 and 136 DF, p-value: 6.024e-15
broom::glance(efficacy3 )
broom::tidy(efficacy3)
model_performance(efficacy3)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
----------------------------------------------------------------
979.661 | 981.989 | 1015.546 | 0.474 | 0.435 | 6.244 | 6.492
tbl_regression(efficacy3)
| Characteristic |
Beta |
95% CI |
p-value |
| Age (years) |
|
|
|
| <30 |
— |
— |
|
| 30-49 |
1.6 |
-1.7, 4.9 |
0.3 |
| 50-69 |
2.2 |
-0.97, 5.4 |
0.2 |
| 70+ |
-0.44 |
-4.5, 3.6 |
0.8 |
| Female |
2.1 |
-0.11, 4.2 |
0.062 |
| IBD Diagnosis |
|
|
|
| CD |
— |
— |
|
| UC |
-4.4 |
-6.8, -2.0 |
<0.001 |
| Moderate to Severe Disease |
0.02 |
-2.9, 2.9 |
>0.9 |
| Active Steroid Use |
4.9 |
1.3, 8.4 |
0.007 |
| efficacy |
-8.0 |
-22, 6.2 |
0.3 |
| IBD SES |
-0.20 |
-0.40, 0.01 |
0.059 |
| efficacy * IBD SES |
0.03 |
-0.03, 0.09 |
0.3 |
# model performance
model_performance(efficacy3)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
----------------------------------------------------------------
979.661 | 981.989 | 1015.546 | 0.474 | 0.435 | 6.244 | 6.492
performance::check_model(efficacy3)
Variable `Component` is not in your data frame :/

VIF(efficacy3)
GVIF Df GVIF^(1/(2*Df))
age_4 1.259410 3 1.039189
GENDERF 1.038451 1 1.019044
ibddx 1.242650 1 1.114742
ModSevere 1.333483 1 1.154765
current_meds___1 1.087483 1 1.042825
efficacy 23.334379 1 4.830567
SESIBD 59.119916 1 7.688948
efficacy:SESIBD 115.285768 1 10.737121
# Margins
cplot(efficacy3, "efficacy", what = "prediction", main = "Predicted Daily Life Impact by Efficacy Score")

cplot(efficacy3, "SESIBD", what = "prediction", main = "Predicted Daily Life Impact by SES")

PAM - Internal Motivation Subtheme
Internal motivation variable
PAM_clean$motivation <- (PAM_clean$pam_1 + PAM_clean$pam_2 + PAM_clean$pam_10)/3
Does motivation correlate with SES?
cor(PAM_clean$motivation, PAM_clean$SESIBD, method = 'pearson') -> corr
print(corr)
[1] 0.3441378
## Pearson R = 0.344 so somewhat correlated but not the same
Motivation -> daily life impact
motivate1 <- lm(PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 + motivation,
data = PAM_clean)
summary(motivate1 )
Call:
lm(formula = PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 +
motivation, data = PAM_clean)
Residuals:
Symptom Burden Score
Min 1Q Median 3Q Max
-15.9568 -5.2004 -0.9668 4.3298 22.1372
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 23.2080 6.4190 3.616 0.000419 ***
age_430-49 2.6249 1.8939 1.386 0.167983
age_450-69 3.7599 1.7923 2.098 0.037741 *
age_470+ -1.5279 2.3187 -0.659 0.511035
GENDERF 2.4295 1.2322 1.972 0.050647 .
ibddxUC -4.4527 1.3658 -3.260 0.001403 **
ModSevere 0.8961 1.6116 0.556 0.579113
current_meds___1 7.2052 1.9609 3.674 0.000340 ***
motivation -5.4180 1.6865 -3.213 0.001637 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 7.332 on 138 degrees of freedom
(1 observation deleted due to missingness)
Multiple R-squared: 0.3188, Adjusted R-squared: 0.2793
F-statistic: 8.073 on 8 and 138 DF, p-value: 6.648e-09
broom::glance(motivate1 )
broom::tidy(motivate1)
model_performance(motivate1)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
------------------------------------------------------------------
1013.622 | 1015.239 | 1043.526 | 0.319 | 0.279 | 7.104 | 7.332
tbl_regression(motivate1)
| Characteristic |
Beta |
95% CI |
p-value |
| Age (years) |
|
|
|
| <30 |
— |
— |
|
| 30-49 |
2.6 |
-1.1, 6.4 |
0.2 |
| 50-69 |
3.8 |
0.22, 7.3 |
0.038 |
| 70+ |
-1.5 |
-6.1, 3.1 |
0.5 |
| Female |
2.4 |
-0.01, 4.9 |
0.051 |
| IBD Diagnosis |
|
|
|
| CD |
— |
— |
|
| UC |
-4.5 |
-7.2, -1.8 |
0.001 |
| Moderate to Severe Disease |
0.90 |
-2.3, 4.1 |
0.6 |
| Active Steroid Use |
7.2 |
3.3, 11 |
<0.001 |
| motivation |
-5.4 |
-8.8, -2.1 |
0.002 |
# Model performance
model_performance(motivate1)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
------------------------------------------------------------------
1013.622 | 1015.239 | 1043.526 | 0.319 | 0.279 | 7.104 | 7.332
performance::check_model(motivate1)
Variable `Component` is not in your data frame :/

VIF(motivate1)
GVIF Df GVIF^(1/(2*Df))
age_4 1.183810 3 1.028522
GENDERF 1.032034 1 1.015891
ibddx 1.238192 1 1.112741
ModSevere 1.288210 1 1.134993
current_meds___1 1.019718 1 1.009811
motivation 1.018660 1 1.009287
# Margins
cplot(motivate1, "motivation", what = "prediction", main = "Predicted Daily Life Impact by Motivation Score")

Motivation + SES -> daily life impact
motivate2 <- lm(PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 + motivation + SESIBD,
data = PAM_clean)
summary(motivate2 )
Call:
lm(formula = PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 +
motivation + SESIBD, data = PAM_clean)
Residuals:
Symptom Burden Score
Min 1Q Median 3Q Max
-18.1043 -4.7469 -0.6028 3.6850 17.7808
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 33.48244 5.88677 5.688 7.47e-08 ***
age_430-49 1.64882 1.67719 0.983 0.32730
age_450-69 2.35428 1.59594 1.475 0.14246
age_470+ -0.63286 2.04969 -0.309 0.75797
GENDERF 2.15767 1.08751 1.984 0.04925 *
ibddxUC -4.30962 1.20469 -3.577 0.00048 ***
ModSevere -0.09475 1.42976 -0.066 0.94726
current_meds___1 5.34380 1.75386 3.047 0.00277 **
motivation -1.94191 1.58453 -1.226 0.22247
SESIBD -0.09587 0.01507 -6.360 2.81e-09 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 6.466 on 137 degrees of freedom
(1 observation deleted due to missingness)
Multiple R-squared: 0.4741, Adjusted R-squared: 0.4395
F-statistic: 13.72 on 9 and 137 DF, p-value: 1.522e-15
broom::glance(motivate2 )
broom::tidy(motivate2)
model_performance(motivate2)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
----------------------------------------------------------------
977.596 | 979.551 | 1010.490 | 0.474 | 0.440 | 6.243 | 6.466
tbl_regression(motivate2)
| Characteristic |
Beta |
95% CI |
p-value |
| Age (years) |
|
|
|
| <30 |
— |
— |
|
| 30-49 |
1.6 |
-1.7, 5.0 |
0.3 |
| 50-69 |
2.4 |
-0.80, 5.5 |
0.14 |
| 70+ |
-0.63 |
-4.7, 3.4 |
0.8 |
| Female |
2.2 |
0.01, 4.3 |
0.049 |
| IBD Diagnosis |
|
|
|
| CD |
— |
— |
|
| UC |
-4.3 |
-6.7, -1.9 |
<0.001 |
| Moderate to Severe Disease |
-0.09 |
-2.9, 2.7 |
>0.9 |
| Active Steroid Use |
5.3 |
1.9, 8.8 |
0.003 |
| motivation |
-1.9 |
-5.1, 1.2 |
0.2 |
| IBD SES |
-0.10 |
-0.13, -0.07 |
<0.001 |
# Model performance
model_performance(motivate2)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
----------------------------------------------------------------
977.596 | 979.551 | 1010.490 | 0.474 | 0.440 | 6.243 | 6.466
performance::check_model(motivate2)
Variable `Component` is not in your data frame :/

VIF(motivate2)
GVIF Df GVIF^(1/(2*Df))
age_4 1.247206 3 1.037504
GENDERF 1.033631 1 1.016676
ibddx 1.238625 1 1.112935
ModSevere 1.303689 1 1.141792
current_meds___1 1.048930 1 1.024173
motivation 1.156247 1 1.075289
SESIBD 1.258579 1 1.121864
# Margins
cplot(motivate2, "motivation", what = "prediction", main = "Predicted Daily Life Impact by Motivation Score")

cplot(motivate2, "SESIBD", what = "prediction", main = "Predicted Daily Life Impact by SES")

Motivation/SES interaction -> daily life impact
motivate3 <- lm(PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 + motivation*SESIBD,
data = PAM_clean)
summary(motivate3 )
Call:
lm(formula = PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 +
motivation * SESIBD, data = PAM_clean)
Residuals:
Symptom Burden Score
Min 1Q Median 3Q Max
-16.7600 -4.2886 -0.5528 3.5846 18.1692
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 79.71319 24.47760 3.257 0.001424 **
age_430-49 1.95085 1.66766 1.170 0.244123
age_450-69 2.32463 1.58005 1.471 0.143538
age_470+ -0.01832 2.05365 -0.009 0.992897
GENDERF 2.18113 1.07670 2.026 0.044746 *
ibddxUC -4.06465 1.19927 -3.389 0.000917 ***
ModSevere 0.47516 1.44548 0.329 0.742873
current_meds___1 4.99439 1.74560 2.861 0.004889 **
motivation -15.49159 7.14218 -2.169 0.031819 *
SESIBD -0.31688 0.11463 -2.764 0.006494 **
motivation:SESIBD 0.06342 0.03261 1.945 0.053885 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 6.402 on 136 degrees of freedom
(1 observation deleted due to missingness)
Multiple R-squared: 0.4883, Adjusted R-squared: 0.4507
F-statistic: 12.98 on 10 and 136 DF, p-value: 1.018e-15
broom::glance(motivate3 )
broom::tidy(motivate3)
model_performance(motivate3)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
----------------------------------------------------------------
975.564 | 977.892 | 1011.449 | 0.488 | 0.451 | 6.158 | 6.402
tbl_regression(motivate3)
| Characteristic |
Beta |
95% CI |
p-value |
| Age (years) |
|
|
|
| <30 |
— |
— |
|
| 30-49 |
2.0 |
-1.3, 5.2 |
0.2 |
| 50-69 |
2.3 |
-0.80, 5.4 |
0.14 |
| 70+ |
-0.02 |
-4.1, 4.0 |
>0.9 |
| Female |
2.2 |
0.05, 4.3 |
0.045 |
| IBD Diagnosis |
|
|
|
| CD |
— |
— |
|
| UC |
-4.1 |
-6.4, -1.7 |
<0.001 |
| Moderate to Severe Disease |
0.48 |
-2.4, 3.3 |
0.7 |
| Active Steroid Use |
5.0 |
1.5, 8.4 |
0.005 |
| motivation |
-15 |
-30, -1.4 |
0.032 |
| IBD SES |
-0.32 |
-0.54, -0.09 |
0.006 |
| motivation * IBD SES |
0.06 |
0.00, 0.13 |
0.054 |
# Model performance
model_performance(motivate3)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
----------------------------------------------------------------
975.564 | 977.892 | 1011.449 | 0.488 | 0.451 | 6.158 | 6.402
performance::check_model(motivate3)
Variable `Component` is not in your data frame :/

VIF(motivate3)
GVIF Df GVIF^(1/(2*Df))
age_4 1.304421 3 1.045289
GENDERF 1.033761 1 1.016740
ibddx 1.252443 1 1.119126
ModSevere 1.359578 1 1.166010
current_meds___1 1.060163 1 1.029642
motivation 23.968638 1 4.895778
SESIBD 74.254203 1 8.617088
motivation:SESIBD 123.831123 1 11.127943
# Margins
cplot(motivate3, "motivation", what = "prediction", main = "Predicted Daily Life Impact by Motivation Score")

cplot(motivate3, "SESIBD", what = "prediction", main = "Predicted Daily Life Impact by SES")

PAM - Knowledge Subtheme
Knowledge variable
PAM_clean$knowledge <- (PAM_clean$pam_4 + PAM_clean$pam_8 + PAM_clean$pam_9 + PAM_clean$pam_11)/4
Does knowledge correlate with SES?
cor(PAM_clean$knowledge, PAM_clean$SESIBD, method = 'pearson') -> corr2
print(corr2)
[1] 0.1691957
# Pearson R = 0.17 so no
Knowledge -> daily life impact
know1 <- lm(PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 + knowledge,
data = PAM_clean)
summary(know1 )
Call:
lm(formula = PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 +
knowledge, data = PAM_clean)
Residuals:
Symptom Burden Score
Min 1Q Median 3Q Max
-14.803 -4.994 -1.376 3.970 21.624
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.81839 5.23657 0.729 0.467129
age_430-49 2.35473 1.98039 1.189 0.236473
age_450-69 3.84320 1.87454 2.050 0.042237 *
age_470+ -1.24984 2.43558 -0.513 0.608662
GENDERF 2.39857 1.28350 1.869 0.063774 .
ibddxUC -4.85555 1.41045 -3.443 0.000763 ***
ModSevere 0.92071 1.67547 0.550 0.583533
current_meds___1 7.45082 2.03213 3.667 0.000350 ***
knowledge 0.09407 1.35736 0.069 0.944851
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 7.602 on 138 degrees of freedom
(1 observation deleted due to missingness)
Multiple R-squared: 0.2679, Adjusted R-squared: 0.2254
F-statistic: 6.311 on 8 and 138 DF, p-value: 5.856e-07
broom::glance(know1 )
broom::tidy(know1)
model_performance(know1)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
------------------------------------------------------------------
1024.219 | 1025.837 | 1054.123 | 0.268 | 0.225 | 7.365 | 7.602
tbl_regression(know1)
| Characteristic |
Beta |
95% CI |
p-value |
| Age (years) |
|
|
|
| <30 |
— |
— |
|
| 30-49 |
2.4 |
-1.6, 6.3 |
0.2 |
| 50-69 |
3.8 |
0.14, 7.5 |
0.042 |
| 70+ |
-1.2 |
-6.1, 3.6 |
0.6 |
| Female |
2.4 |
-0.14, 4.9 |
0.064 |
| IBD Diagnosis |
|
|
|
| CD |
— |
— |
|
| UC |
-4.9 |
-7.6, -2.1 |
<0.001 |
| Moderate to Severe Disease |
0.92 |
-2.4, 4.2 |
0.6 |
| Active Steroid Use |
7.5 |
3.4, 11 |
<0.001 |
| knowledge |
0.09 |
-2.6, 2.8 |
>0.9 |
# Model performance
model_performance(know1)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
------------------------------------------------------------------
1024.219 | 1025.837 | 1054.123 | 0.268 | 0.225 | 7.365 | 7.602
performance::check_model(know1)
Variable `Component` is not in your data frame :/

VIF(know1)
GVIF Df GVIF^(1/(2*Df))
age_4 1.211075 3 1.032433
GENDERF 1.041825 1 1.020698
ibddx 1.228615 1 1.108429
ModSevere 1.295472 1 1.138188
current_meds___1 1.018974 1 1.009443
knowledge 1.040872 1 1.020231
# Margins
cplot(know1, "knowledge", what = "prediction", main = "Predicted Daily Life Impact by Knowledge Score")

Knowledge + SES -> daily life impact
know2 <- lm(PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 + knowledge + SESIBD,
data = PAM_clean)
summary(know2 )
Call:
lm(formula = PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 +
knowledge + SESIBD, data = PAM_clean)
Residuals:
Symptom Burden Score
Min 1Q Median 3Q Max
-18.2162 -4.3685 -0.5451 3.6720 16.7679
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 23.582204 5.196919 4.538 1.23e-05 ***
age_430-49 1.786255 1.684413 1.060 0.290801
age_450-69 2.521568 1.602801 1.573 0.117973
age_470+ -0.001792 2.076333 -0.001 0.999313
GENDERF 1.978105 1.092019 1.811 0.072266 .
ibddxUC -4.367045 1.200230 -3.639 0.000387 ***
ModSevere -0.044120 1.429587 -0.031 0.975424
current_meds___1 5.290534 1.751374 3.021 0.003009 **
knowledge 1.583700 1.170908 1.353 0.178431
SESIBD -0.105596 0.014349 -7.359 1.54e-11 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 6.459 on 137 degrees of freedom
(1 observation deleted due to missingness)
Multiple R-squared: 0.4753, Adjusted R-squared: 0.4408
F-statistic: 13.79 on 9 and 137 DF, p-value: 1.306e-15
broom::glance(know2 )
broom::tidy(know2)
model_performance(know2)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
----------------------------------------------------------------
977.249 | 979.204 | 1010.143 | 0.475 | 0.441 | 6.235 | 6.459
tbl_regression(know2)
| Characteristic |
Beta |
95% CI |
p-value |
| Age (years) |
|
|
|
| <30 |
— |
— |
|
| 30-49 |
1.8 |
-1.5, 5.1 |
0.3 |
| 50-69 |
2.5 |
-0.65, 5.7 |
0.12 |
| 70+ |
0.00 |
-4.1, 4.1 |
>0.9 |
| Female |
2.0 |
-0.18, 4.1 |
0.072 |
| IBD Diagnosis |
|
|
|
| CD |
— |
— |
|
| UC |
-4.4 |
-6.7, -2.0 |
<0.001 |
| Moderate to Severe Disease |
-0.04 |
-2.9, 2.8 |
>0.9 |
| Active Steroid Use |
5.3 |
1.8, 8.8 |
0.003 |
| knowledge |
1.6 |
-0.73, 3.9 |
0.2 |
| IBD SES |
-0.11 |
-0.13, -0.08 |
<0.001 |
# Model performance
model_performance(know2)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
----------------------------------------------------------------
977.249 | 979.204 | 1010.143 | 0.475 | 0.441 | 6.235 | 6.459
performance::check_model(know2)
Variable `Component` is not in your data frame :/

VIF(know2)
GVIF Df GVIF^(1/(2*Df))
age_4 1.265542 3 1.040031
GENDERF 1.044684 1 1.022098
ibddx 1.232384 1 1.110128
ModSevere 1.306460 1 1.143005
current_meds___1 1.048427 1 1.023927
knowledge 1.072935 1 1.035826
SESIBD 1.142972 1 1.069099
# Margins
cplot(know2, "knowledge", what = "prediction", main = "Predicted Daily Life Impact by Knowledge Score")

cplot(know2, "SESIBD", what = "prediction", main = "Predicted Daily Life Impact by SES")

Knowledge/SES interaction -> daily life impact
know3 <- lm(PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 + knowledge*SESIBD,
data = PAM_clean)
summary(know3 )
Call:
lm(formula = PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 +
knowledge * SESIBD, data = PAM_clean)
Residuals:
Symptom Burden Score
Min 1Q Median 3Q Max
-17.8393 -4.3115 -0.4205 3.5530 16.6724
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 14.36620 21.57312 0.666 0.506584
age_430-49 1.83651 1.69324 1.085 0.280012
age_450-69 2.58211 1.61341 1.600 0.111829
age_470+ -0.00830 2.08252 -0.004 0.996826
GENDERF 2.02247 1.09987 1.839 0.068123 .
ibddxUC -4.30304 1.21252 -3.549 0.000532 ***
ModSevere -0.01494 1.43534 -0.010 0.991707
current_meds___1 5.22268 1.76330 2.962 0.003610 **
knowledge 4.46362 6.64626 0.672 0.502978
SESIBD -0.06464 0.09414 -0.687 0.493492
knowledge:SESIBD -0.01289 0.02927 -0.440 0.660461
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 6.478 on 136 degrees of freedom
(1 observation deleted due to missingness)
Multiple R-squared: 0.476, Adjusted R-squared: 0.4375
F-statistic: 12.36 on 10 and 136 DF, p-value: 4.602e-15
broom::glance(know3 )
broom::tidy(know3)
model_performance(know3)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
----------------------------------------------------------------
979.039 | 981.368 | 1014.924 | 0.476 | 0.438 | 6.231 | 6.478
tbl_regression(know3)
| Characteristic |
Beta |
95% CI |
p-value |
| Age (years) |
|
|
|
| <30 |
— |
— |
|
| 30-49 |
1.8 |
-1.5, 5.2 |
0.3 |
| 50-69 |
2.6 |
-0.61, 5.8 |
0.11 |
| 70+ |
-0.01 |
-4.1, 4.1 |
>0.9 |
| Female |
2.0 |
-0.15, 4.2 |
0.068 |
| IBD Diagnosis |
|
|
|
| CD |
— |
— |
|
| UC |
-4.3 |
-6.7, -1.9 |
<0.001 |
| Moderate to Severe Disease |
-0.01 |
-2.9, 2.8 |
>0.9 |
| Active Steroid Use |
5.2 |
1.7, 8.7 |
0.004 |
| knowledge |
4.5 |
-8.7, 18 |
0.5 |
| IBD SES |
-0.06 |
-0.25, 0.12 |
0.5 |
| knowledge * IBD SES |
-0.01 |
-0.07, 0.05 |
0.7 |
# Model performance
model_performance(know3)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
----------------------------------------------------------------
979.039 | 981.368 | 1014.924 | 0.476 | 0.438 | 6.231 | 6.478
performance::check_model(know3)
Variable `Component` is not in your data frame :/

VIF(know3)
GVIF Df GVIF^(1/(2*Df))
age_4 1.281590 3 1.042217
GENDERF 1.053527 1 1.026415
ibddx 1.250359 1 1.118195
ModSevere 1.309250 1 1.144225
current_meds___1 1.056499 1 1.027861
knowledge 34.365275 1 5.862190
SESIBD 48.911411 1 6.993669
knowledge:SESIBD 95.254764 1 9.759855
# Margins
cplot(know3, "knowledge", what = "prediction", main = "Predicted Daily Life Impact by Knowledge Score")

cplot(know3, "SESIBD", what = "prediction", main = "Predicted Daily Life Impact by SES")

PAM-efficacy + motivation
Make combined efficacy+motivation variable
# This is just PAM minus the knowledge component, which didn't seem to matter
PAM_clean$eff_mot <- (PAM_clean$pam_3 + PAM_clean$pam_5 + PAM_clean$pam_6 + PAM_clean$pam_7 + PAM_clean$pam_12 + PAM_clean$pam_13 + PAM_clean$pam_1 + PAM_clean$pam_2 + PAM_clean$pam_10)/9
Does Efficacy+motivation correlate with SES-IBD?
cor(PAM_clean$eff_mot, PAM_clean$SESIBD, method = 'pearson') -> corr
print(corr)
[1] 0.5192165
## Pearson R = 0.52 so yes
Efficacy+motivation -> daily life impact
eff_mot1 <- lm(PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 + eff_mot,
data = PAM_clean)
summary(eff_mot1 )
Call:
lm(formula = PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 +
eff_mot, data = PAM_clean)
Residuals:
Symptom Burden Score
Min 1Q Median 3Q Max
-15.479 -5.240 -1.271 3.317 21.765
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 31.7407 7.1746 4.424 1.95e-05 ***
age_430-49 2.3075 1.8526 1.246 0.215041
age_450-69 3.1085 1.7639 1.762 0.080232 .
age_470+ -1.7037 2.2719 -0.750 0.454603
GENDERF 2.3545 1.2068 1.951 0.053079 .
ibddxUC -4.8340 1.3318 -3.630 0.000399 ***
ModSevere 0.4796 1.5818 0.303 0.762199
current_meds___1 6.3789 1.9367 3.294 0.001256 **
eff_mot -7.9236 1.9417 -4.081 7.56e-05 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 7.181 on 138 degrees of freedom
(1 observation deleted due to missingness)
Multiple R-squared: 0.3467, Adjusted R-squared: 0.3088
F-statistic: 9.154 on 8 and 138 DF, p-value: 4.725e-10
broom::glance(eff_mot1 )
broom::tidy(eff_mot1)
model_performance(eff_mot1)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
------------------------------------------------------------------
1007.476 | 1009.094 | 1037.381 | 0.347 | 0.309 | 6.958 | 7.181
tbl_regression(eff_mot1)
| Characteristic |
Beta |
95% CI |
p-value |
| Age (years) |
|
|
|
| <30 |
— |
— |
|
| 30-49 |
2.3 |
-1.4, 6.0 |
0.2 |
| 50-69 |
3.1 |
-0.38, 6.6 |
0.080 |
| 70+ |
-1.7 |
-6.2, 2.8 |
0.5 |
| Female |
2.4 |
-0.03, 4.7 |
0.053 |
| IBD Diagnosis |
|
|
|
| CD |
— |
— |
|
| UC |
-4.8 |
-7.5, -2.2 |
<0.001 |
| Moderate to Severe Disease |
0.48 |
-2.6, 3.6 |
0.8 |
| Active Steroid Use |
6.4 |
2.5, 10 |
0.001 |
| eff_mot |
-7.9 |
-12, -4.1 |
<0.001 |
# Model performance
model_performance(eff_mot1)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
------------------------------------------------------------------
1007.476 | 1009.094 | 1037.381 | 0.347 | 0.309 | 6.958 | 7.181
performance::check_model(eff_mot1)
Variable `Component` is not in your data frame :/

VIF(eff_mot1)
GVIF Df GVIF^(1/(2*Df))
age_4 1.194450 3 1.030057
GENDERF 1.032119 1 1.015933
ibddx 1.227636 1 1.107987
ModSevere 1.294004 1 1.137543
current_meds___1 1.037158 1 1.018410
eff_mot 1.041668 1 1.020621
# Margins
cplot(eff_mot1, "eff_mot", what = "prediction", main = "Predicted Daily Life Impact by Combined Efficacy Motivation Score")

Efficacy+motivation + SES -> daily life impact
eff_mot2 <- lm(PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 + eff_mot + SESIBD,
data = PAM_clean)
summary(eff_mot2 )
Call:
lm(formula = PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 +
eff_mot + SESIBD, data = PAM_clean)
Residuals:
Symptom Burden Score
Min 1Q Median 3Q Max
-18.4361 -4.2317 -0.7577 3.6167 17.6325
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 33.52792 6.47760 5.176 7.90e-07 ***
age_430-49 1.55616 1.67583 0.929 0.354733
age_450-69 2.21936 1.59823 1.389 0.167198
age_470+ -0.67475 2.05668 -0.328 0.743354
GENDERF 2.14155 1.08891 1.967 0.051240 .
ibddxUC -4.45795 1.20285 -3.706 0.000305 ***
ModSevere -0.18160 1.43116 -0.127 0.899216
current_meds___1 5.19111 1.75881 2.951 0.003722 **
eff_mot -2.12689 2.02333 -1.051 0.295024
SESIBD -0.09362 0.01637 -5.718 6.48e-08 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 6.476 on 137 degrees of freedom
(1 observation deleted due to missingness)
Multiple R-squared: 0.4725, Adjusted R-squared: 0.4379
F-statistic: 13.64 on 9 and 137 DF, p-value: 1.833e-15
broom::glance(eff_mot2 )
broom::tidy(eff_mot2)
model_performance(eff_mot2)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
----------------------------------------------------------------
978.018 | 979.973 | 1010.912 | 0.473 | 0.438 | 6.252 | 6.476
tbl_regression(eff_mot2)
| Characteristic |
Beta |
95% CI |
p-value |
| Age (years) |
|
|
|
| <30 |
— |
— |
|
| 30-49 |
1.6 |
-1.8, 4.9 |
0.4 |
| 50-69 |
2.2 |
-0.94, 5.4 |
0.2 |
| 70+ |
-0.67 |
-4.7, 3.4 |
0.7 |
| Female |
2.1 |
-0.01, 4.3 |
0.051 |
| IBD Diagnosis |
|
|
|
| CD |
— |
— |
|
| UC |
-4.5 |
-6.8, -2.1 |
<0.001 |
| Moderate to Severe Disease |
-0.18 |
-3.0, 2.6 |
0.9 |
| Active Steroid Use |
5.2 |
1.7, 8.7 |
0.004 |
| eff_mot |
-2.1 |
-6.1, 1.9 |
0.3 |
| IBD SES |
-0.09 |
-0.13, -0.06 |
<0.001 |
# Model performance
model_performance(eff_mot2)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
----------------------------------------------------------------
978.018 | 979.973 | 1010.912 | 0.473 | 0.438 | 6.252 | 6.476
performance::check_model(eff_mot2)
Variable `Component` is not in your data frame :/

VIF(eff_mot2)
GVIF Df GVIF^(1/(2*Df))
age_4 1.246677 3 1.037430
GENDERF 1.033327 1 1.016527
ibddx 1.231318 1 1.109648
ModSevere 1.302508 1 1.141275
current_meds___1 1.051832 1 1.025589
eff_mot 1.390870 1 1.179351
SESIBD 1.480528 1 1.216770
# Margins
cplot(eff_mot2, "eff_mot", what = "prediction", main = "Predicted Daily Life Impact by Combined Efficacy Motivation Score")

cplot(eff_mot2, "SESIBD", what = "prediction", main = "Predicted Daily Life Impact by SES")

Efficacy+Motivation/SES interaction -> daily life impact
eff_mot3 <- lm(PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 + eff_mot*SESIBD,
data = PAM_clean)
summary(eff_mot3 )
Call:
lm(formula = PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 +
eff_mot * SESIBD, data = PAM_clean)
Residuals:
Symptom Burden Score
Min 1Q Median 3Q Max
-18.529 -4.126 -0.612 3.299 17.630
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 67.98735 25.12556 2.706 0.007685 **
age_430-49 1.75235 1.67537 1.046 0.297442
age_450-69 2.20957 1.59236 1.388 0.167527
age_470+ -0.35488 2.06147 -0.172 0.863575
GENDERF 2.06950 1.08609 1.905 0.058831 .
ibddxUC -4.30894 1.20302 -3.582 0.000474 ***
ModSevere 0.18677 1.44933 0.129 0.897656
current_meds___1 4.79459 1.77448 2.702 0.007771 **
eff_mot -12.74683 7.75032 -1.645 0.102344
SESIBD -0.25473 0.11469 -2.221 0.028012 *
eff_mot:SESIBD 0.04871 0.03433 1.419 0.158157
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 6.452 on 136 degrees of freedom
(1 observation deleted due to missingness)
Multiple R-squared: 0.4802, Adjusted R-squared: 0.442
F-statistic: 12.57 on 10 and 136 DF, p-value: 2.755e-15
broom::glance(eff_mot3 )
broom::tidy(eff_mot3)
model_performance(eff_mot3)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
----------------------------------------------------------------
977.857 | 980.185 | 1013.742 | 0.480 | 0.442 | 6.206 | 6.452
tbl_regression(eff_mot3)
| Characteristic |
Beta |
95% CI |
p-value |
| Age (years) |
|
|
|
| <30 |
— |
— |
|
| 30-49 |
1.8 |
-1.6, 5.1 |
0.3 |
| 50-69 |
2.2 |
-0.94, 5.4 |
0.2 |
| 70+ |
-0.35 |
-4.4, 3.7 |
0.9 |
| Female |
2.1 |
-0.08, 4.2 |
0.059 |
| IBD Diagnosis |
|
|
|
| CD |
— |
— |
|
| UC |
-4.3 |
-6.7, -1.9 |
<0.001 |
| Moderate to Severe Disease |
0.19 |
-2.7, 3.1 |
0.9 |
| Active Steroid Use |
4.8 |
1.3, 8.3 |
0.008 |
| eff_mot |
-13 |
-28, 2.6 |
0.10 |
| IBD SES |
-0.25 |
-0.48, -0.03 |
0.028 |
| eff_mot * IBD SES |
0.05 |
-0.02, 0.12 |
0.2 |
# Model performance
model_performance(eff_mot3)
# Indices of model performance
AIC | AICc | BIC | R2 | R2 (adj.) | RMSE | Sigma
----------------------------------------------------------------
977.857 | 980.185 | 1013.742 | 0.480 | 0.442 | 6.206 | 6.452
performance::check_model(eff_mot3)
Variable `Component` is not in your data frame :/

VIF(eff_mot3)
GVIF Df GVIF^(1/(2*Df))
age_4 1.278739 3 1.041830
GENDERF 1.035590 1 1.017640
ibddx 1.240770 1 1.113899
ModSevere 1.345673 1 1.160031
current_meds___1 1.078576 1 1.038545
eff_mot 20.558735 1 4.534174
SESIBD 73.187533 1 8.554971
eff_mot:SESIBD 129.265467 1 11.369497
# Margins
cplot(eff_mot3, "eff_mot", what = "prediction", main = "Predicted Daily Life Impact by Combined Efficacy Motivation Score")

cplot(eff_mot3, "SESIBD", what = "prediction", main = "Predicted Daily Life Impact by SES")

SES-IBD as a mediator for efficacy+motivation -> daily life
impact
Impact_EM <- lm(SESIBD ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 + eff_mot + PROImp,
data = PAM_clean)
summary(Impact_EM )
Call:
lm(formula = SESIBD ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 +
eff_mot + PROImp, data = PAM_clean)
Residuals:
IBD SES
Min 1Q Median 3Q Max
-76.03 -18.76 0.05 19.68 55.33
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 84.4101 32.4147 2.604 0.0102 *
age_430-49 -3.2770 7.8768 -0.416 0.6780
age_450-69 -3.1004 7.5412 -0.411 0.6816
age_470+ 7.4846 9.6253 0.778 0.4382
GENDERF 2.5709 5.1723 0.497 0.6199
ibddxUC -5.9307 5.8938 -1.006 0.3161
ModSevere -6.0758 6.6903 -0.908 0.3654
current_meds___1 0.4394 8.5042 0.052 0.9589
eff_mot 45.6133 8.6908 5.248 5.70e-07 ***
PROImp -2.0579 0.3599 -5.718 6.48e-08 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 30.36 on 137 degrees of freedom
(1 observation deleted due to missingness)
Multiple R-squared: 0.4547, Adjusted R-squared: 0.4189
F-statistic: 12.69 on 9 and 137 DF, p-value: 1.573e-14
broom::glance(Impact_EM )
tbl_regression(Impact_EM)
| Characteristic |
Beta |
95% CI |
p-value |
| Age (years) |
|
|
|
| <30 |
— |
— |
|
| 30-49 |
-3.3 |
-19, 12 |
0.7 |
| 50-69 |
-3.1 |
-18, 12 |
0.7 |
| 70+ |
7.5 |
-12, 27 |
0.4 |
| Female |
2.6 |
-7.7, 13 |
0.6 |
| IBD Diagnosis |
|
|
|
| CD |
— |
— |
|
| UC |
-5.9 |
-18, 5.7 |
0.3 |
| Moderate to Severe Disease |
-6.1 |
-19, 7.2 |
0.4 |
| Active Steroid Use |
0.44 |
-16, 17 |
>0.9 |
| eff_mot |
46 |
28, 63 |
<0.001 |
| Symptom Burden Score |
-2.1 |
-2.8, -1.3 |
<0.001 |
impact_em <- lm(PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 + eff_mot + SESIBD,
data = PAM_clean)
summary(impact_em )
Call:
lm(formula = PROImp ~ age_4 + GENDERF + ibddx + ModSevere + current_meds___1 +
eff_mot + SESIBD, data = PAM_clean)
Residuals:
Symptom Burden Score
Min 1Q Median 3Q Max
-18.4361 -4.2317 -0.7577 3.6167 17.6325
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 33.52792 6.47760 5.176 7.90e-07 ***
age_430-49 1.55616 1.67583 0.929 0.354733
age_450-69 2.21936 1.59823 1.389 0.167198
age_470+ -0.67475 2.05668 -0.328 0.743354
GENDERF 2.14155 1.08891 1.967 0.051240 .
ibddxUC -4.45795 1.20285 -3.706 0.000305 ***
ModSevere -0.18160 1.43116 -0.127 0.899216
current_meds___1 5.19111 1.75881 2.951 0.003722 **
eff_mot -2.12689 2.02333 -1.051 0.295024
SESIBD -0.09362 0.01637 -5.718 6.48e-08 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 6.476 on 137 degrees of freedom
(1 observation deleted due to missingness)
Multiple R-squared: 0.4725, Adjusted R-squared: 0.4379
F-statistic: 13.64 on 9 and 137 DF, p-value: 1.833e-15
broom::glance(impact_em )
broom::tidy(impact_em)
tbl_regression(impact_em)
| Characteristic |
Beta |
95% CI |
p-value |
| Age (years) |
|
|
|
| <30 |
— |
— |
|
| 30-49 |
1.6 |
-1.8, 4.9 |
0.4 |
| 50-69 |
2.2 |
-0.94, 5.4 |
0.2 |
| 70+ |
-0.67 |
-4.7, 3.4 |
0.7 |
| Female |
2.1 |
-0.01, 4.3 |
0.051 |
| IBD Diagnosis |
|
|
|
| CD |
— |
— |
|
| UC |
-4.5 |
-6.8, -2.1 |
<0.001 |
| Moderate to Severe Disease |
-0.18 |
-3.0, 2.6 |
0.9 |
| Active Steroid Use |
5.2 |
1.7, 8.7 |
0.004 |
| eff_mot |
-2.1 |
-6.1, 1.9 |
0.3 |
| IBD SES |
-0.09 |
-0.13, -0.06 |
<0.001 |
# Step 3: Mediation analysis
results_5 <- mediation::mediate(Impact_EM, impact_em, treat= "eff_mot", mediator="SESIBD",
boot=TRUE, sims=500)
Running nonparametric bootstrap
summary(results_5)
Causal Mediation Analysis
Nonparametric Bootstrap Confidence Intervals with the Percentile Method
Estimate 95% CI Lower 95% CI Upper p-value
ACME -4.270 -6.355 -2.31 <2e-16 ***
ADE -2.127 -5.379 1.32 0.24
Total Effect -6.397 -9.596 -3.41 <2e-16 ***
Prop. Mediated 0.668 0.367 1.31 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Sample Size Used: 147
Simulations: 500
LS0tCnRpdGxlOiAiUEFNIEFuYWx5c2lzIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRoZW1lczogcGFwZXIKICAgIHRvYzogeWVzCiAgICB0b2NfZmxvYXQ6IHllcwplZGl0b3Jfb3B0aW9uczoKICBjaHVua19vdXRwdXRfdHlwZTogaW5saW5lCi0tLQoKIyBMb2FkIHBhY2thZ2VzIApgYGB7ciBlY2hvPVRSVUV9CgpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShicm9vbSkgCmxpYnJhcnkocGVyZm9ybWFuY2UpCmxpYnJhcnkoZ3QpCmxpYnJhcnkoZ3RzdW1tYXJ5KQpsaWJyYXJ5KGphbml0b3IpCmxpYnJhcnkoZm9yY2F0cykKbGlicmFyeShoZXJlKQpsaWJyYXJ5KG1lZGlhdGlvbikKbGlicmFyeShuRmFjdG9ycykKbGlicmFyeShwc3ljaCkKbGlicmFyeShtZWRpYXRpb24pCmBgYAoKCiMgSW1wb3J0IERhdGEgCmBgYHtyIGVjaG89VFJVRX0KbG9hZCgifi9EZXNrdG9wL1ItQ29kZS9QQU0vcGFtX2RhdGEucmRhIikKYGBgCgojIERhdGEgQ2xlYW5pbmcgey50YWJzZXR9CiMjIFN1YnNldCB0aG9zZSB3aXRoIGNvbXBsZXRlIFBBTSBkYXRhIApgYGB7cn0KcGFtX2RhdGExIDwtIHN1YnNldChwYW1fZGF0YSwgcGFtdG90YWwgIT0gMSkKYGBgCgojIyBNYWtlIGFnZSBhIGZhY3RvciAKYGBge3J9CiMgTmVlZCB0byBjb25zb2xpZGF0ZSB0aGVzZSBvbmNlIEkgaGF2ZSBjdXRvZmZzIApwYW1fZGF0YTEkYWdlIDwtIGFzLm51bWVyaWMocGFtX2RhdGExJGFnZSkKCnBhbV9kYXRhMSRhZ2VfNCA8LSBjdXQocGFtX2RhdGExJGFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtzPWMoMCwgMywgNSwgNywgMTApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHM9YygnPDMwJywgJzMwLTQ5JywgJzUwLTY5JywgJzcwKycpKQpgYGAKCiMjIFJlY29kZSB0eXBlIG9mIGluZmxhbW1hdG9yeSBib3dlbCBkaXNlYXNlCmBgYHtyfQpjbGFzcyhwYW1fZGF0YTEkdHlwZV9vZl9pbmZsYW1tYXRvcnkpCnBhbV9kYXRhMSR0eXBlX29mX2luZmxhbW1hdG9yeSA8LSBhcy5mYWN0b3IocGFtX2RhdGExJHR5cGVfb2ZfaW5mbGFtbWF0b3J5KQpjbGFzcyhwYW1fZGF0YTEkdHlwZV9vZl9pbmZsYW1tYXRvcnkpCgpwYW1fZGF0YTEgJT4lIAogIG11dGF0ZShpYmRkeCA9IGFzX2ZhY3Rvcih0eXBlX29mX2luZmxhbW1hdG9yeSksCiBpYmRkeCA9IGZjdF9yZWNvZGUoaWJkZHgsIFVDID0gIjEiLApDRCA9ICIyIiwgVUMgPSAiMyIsIFVDID0gIjQiKSwKaWJkZHggPSBmY3RfcmVsZXZlbChpYmRkeCwgcmVmID0gJ0NEJykpIC0+IFBBTV9jbGVhbgpgYGAKCgojIyBNYWtlIGxhYmVscyAKYGBge3J9ClBBTV9jbGVhbiA9IGFwcGx5X2xhYmVscyhQQU1fY2xlYW4sIAogICAgYWdlXzQgPSAiQWdlICh5ZWFycykiLAogICAgR0VOREVSRiA9ICJGZW1hbGUiLAogICAgU0VTSUJEID0gIklCRCBTRVMiLAogICAgUFJPSW1wID0gIlN5bXB0b20gQnVyZGVuIFNjb3JlIiwKICAgIGliZGR4ID0gIklCRCBEaWFnbm9zaXMiLAogICAgTW9kU2V2ZXJlID0gIk1vZGVyYXRlIHRvIFNldmVyZSBEaXNlYXNlIiwKICAgIHBhbXRvdGFsID0gIlBBTSAxMyIsCiAgICBjdXJyZW50X21lZHNfX18xID0iQWN0aXZlIFN0ZXJvaWQgVXNlIikKYGBgCgoKIyBCYXNlbGluZSBjaGFyYWN0ZXJpc3RpY3MgCmBgYHtyfQpQQU1fY2xlYW4gJT4lIAogIGRwbHlyOjpzZWxlY3QoYWdlXzQsIEdFTkRFUkYsIGliZGR4LCBNb2RTZXZlcmUsY3VycmVudF9tZWRzX19fMSwgcGFtdG90YWwsIFNFU0lCRCwgUFJPSW1wKSAtPiBiYXNlbGluZQoKbmEub21pdChiYXNlbGluZSkgJT4lIHRibF9zdW1tYXJ5KAogICAgICAgIHN0YXRpc3RpYyA9IGxpc3QoYWxsX2NvbnRpbnVvdXMoKSB+ICJ7bWVhbn0gKHtzZH0pIikpCgpgYGAKCgojIFRvdGFsIFBBTSBNb2RlbHMgey50YWJzZXR9CgojIyBQQU0gLT4gZGFpbHkgbGlmZSBpbXBhY3QgCmBgYHtyfQpQUk9JbXAxIDwtIGxtKFBST0ltcCB+IGFnZV80ICsgR0VOREVSRiArIGliZGR4ICsgTW9kU2V2ZXJlICsgY3VycmVudF9tZWRzX19fMSArIHBhbXRvdGFsLAogICAgICAgICAgICAgIGRhdGEgPSBQQU1fY2xlYW4pCnN1bW1hcnkoUFJPSW1wMSApCmJyb29tOjpnbGFuY2UoUFJPSW1wMSApCmJyb29tOjp0aWR5KFBST0ltcDEpCm1vZGVsX3BlcmZvcm1hbmNlKFBST0ltcDEpCnRibF9yZWdyZXNzaW9uKFBST0ltcDEpCgojIE1vZGVsIHBlcmZvcm1hbmNlIAptb2RlbF9wZXJmb3JtYW5jZShQUk9JbXAxKQpwZXJmb3JtYW5jZTo6Y2hlY2tfbW9kZWwoUFJPSW1wMSkKCiMgTWFyZ2lucwpjcGxvdChQUk9JbXAxLCAicGFtdG90YWwiLCB3aGF0ID0gInByZWRpY3Rpb24iLCBtYWluID0gIlByZWRpY3RlZCBEYWlseSBMaWZlIEltcGFjdCBieSBQYXRpZW50IEFjdGl2YXRpb24gTGV2ZWwiKQptYXJnaW5zKFBST0ltcDEpCmBgYAoKCiMjIFNFUyAtLT4gRGFpbHkgbGlmZSBpbXBhY3QgCmBgYHtyfQpQUk9JbXAyIDwtIGxtKFBST0ltcCB+IGFnZV80ICsgR0VOREVSRiArIGliZGR4ICsgTW9kU2V2ZXJlICsgY3VycmVudF9tZWRzX19fMSArIFNFU0lCRCwKICAgICAgICAgICAgICBkYXRhID0gUEFNX2NsZWFuKQpzdW1tYXJ5KFBST0ltcDIgKQpicm9vbTo6Z2xhbmNlKFBST0ltcDIgKQpicm9vbTo6dGlkeShQUk9JbXAyKQptb2RlbF9wZXJmb3JtYW5jZShQUk9JbXAyKQp0YmxfcmVncmVzc2lvbihQUk9JbXAyKQoKIyBNb2RlbCBwZXJmb3JtYW5jZSAKbW9kZWxfcGVyZm9ybWFuY2UoUFJPSW1wMikKcGVyZm9ybWFuY2U6OmNoZWNrX21vZGVsKFBST0ltcDIpCgojIE1hcmdpbnMKY3Bsb3QoUFJPSW1wMiwgIlNFU0lCRCIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIERhaWx5IExpZmUgSW1wYWN0IGJ5IElCRCBTRVMgTGV2ZWwiKQptYXJnaW5zKFBST0ltcDIpCmBgYAoKIyMgUEFNICsgU0VTIC0tPiBEYWlseSBsaWZlIGltcGFjdCAKYGBge3J9CgpQUk9JbXAzIDwtIGxtKFBST0ltcCB+IGFnZV80ICsgR0VOREVSRiArIGliZGR4ICsgTW9kU2V2ZXJlICsgY3VycmVudF9tZWRzX19fMSArIFNFU0lCRCArIHBhbXRvdGFsLAogICAgICAgICAgICAgIGRhdGEgPSBQQU1fY2xlYW4pCnN1bW1hcnkoUFJPSW1wMyApCmJyb29tOjpnbGFuY2UoUFJPSW1wMyApCmJyb29tOjp0aWR5KFBST0ltcDMpCm1vZGVsX3BlcmZvcm1hbmNlKFBST0ltcDMpCnRibF9yZWdyZXNzaW9uKFBST0ltcDMpCgojIE1vZGVsIHBlcmZvcm1hbmNlIAptb2RlbF9wZXJmb3JtYW5jZShQUk9JbXAzKQpwZXJmb3JtYW5jZTo6Y2hlY2tfbW9kZWwoUFJPSW1wMykKVklGKFBST0ltcDMpCgojIE1hcmdpbnMKY3Bsb3QoUFJPSW1wMywgInBhbXRvdGFsIiwgd2hhdCA9ICJwcmVkaWN0aW9uIiwgbWFpbiA9ICJQcmVkaWN0ZWQgRGFpbHkgTGlmZSBJbXBhY3QgYnkgUGF0aWVudCBBY3RpdmF0aW9uIExldmVsIikKY3Bsb3QoUFJPSW1wMywgIlNFU0lCRCIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIERhaWx5IExpZmUgSW1wYWN0IGJ5IElCRCBTRVMgTGV2ZWwiKQoKCmBgYAoKIyMgUEFNLVNFUyBpbnRlcmFjdGlvbiAtPiBkYWlseSBsaWZlIGltcGFjdApgYGB7cn0KUFJPSW1wNCA8LSBsbShQUk9JbXAgfiBhZ2VfNCArIEdFTkRFUkYgKyBpYmRkeCArIE1vZFNldmVyZSArIGN1cnJlbnRfbWVkc19fXzEgKyBTRVNJQkQqcGFtdG90YWwsCiAgICAgICAgICAgICAgZGF0YSA9IFBBTV9jbGVhbikKc3VtbWFyeShQUk9JbXA0ICkKYnJvb206OmdsYW5jZShQUk9JbXA0ICkKYnJvb206OnRpZHkoUFJPSW1wNCkKbW9kZWxfcGVyZm9ybWFuY2UoUFJPSW1wNCkKdGJsX3JlZ3Jlc3Npb24oUFJPSW1wNCkKCiMgTW9kZWwgcGVyZm9ybWFuY2UgCm1vZGVsX3BlcmZvcm1hbmNlKFBST0ltcDQpCnBlcmZvcm1hbmNlOjpjaGVja19tb2RlbChQUk9JbXA0KQpWSUYoUFJPSW1wNCkKCiMgTWFyZ2lucwpjcGxvdChQUk9JbXA0LCAicGFtdG90YWwiLCB3aGF0ID0gInByZWRpY3Rpb24iLCBtYWluID0gIlByZWRpY3RlZCBEYWlseSBMaWZlIEltcGFjdCBieSBQYXRpZW50IEFjdGl2YXRpb24gTGV2ZWwiKQpjcGxvdChQUk9JbXA0LCAiU0VTSUJEIiwgd2hhdCA9ICJwcmVkaWN0aW9uIiwgbWFpbiA9ICJQcmVkaWN0ZWQgRGFpbHkgTGlmZSBJbXBhY3QgYnkgSUJEIFNFUyBMZXZlbCIpCmBgYAoKCiMjIFNFUyBhcyBhIG1lZGlhdG9yIG9mIFBBTQpgYGB7cn0KCgpJbXBhY3RfTSA8LSBsbShTRVNJQkQgfiBhZ2VfNCArIEdFTkRFUkYgKyBpYmRkeCArIE1vZFNldmVyZSArIGN1cnJlbnRfbWVkc19fXzEgKyBwYW10b3RhbCArIFBST0ltcCwKICAgICAgICAgICAgICBkYXRhID0gUEFNX2NsZWFuKQpzdW1tYXJ5KEltcGFjdF9NICkKYnJvb206OmdsYW5jZShJbXBhY3RfTSApCnRibF9yZWdyZXNzaW9uKEltcGFjdF9NKQoKCmltcGFjdDEgPC0gbG0oUFJPSW1wIH4gYWdlXzQgKyBHRU5ERVJGICsgaWJkZHggKyBNb2RTZXZlcmUgKyBjdXJyZW50X21lZHNfX18xICsgcGFtdG90YWwgKyBTRVNJQkQsCiAgICAgICAgICAgICAgZGF0YSA9IFBBTV9jbGVhbikKc3VtbWFyeShpbXBhY3QxICkKYnJvb206OmdsYW5jZShpbXBhY3QxICkKYnJvb206OnRpZHkoaW1wYWN0MSkKdGJsX3JlZ3Jlc3Npb24oaW1wYWN0MSkKCiMgU3RlcCAzOiBNZWRpYXRpb24gYW5hbHlzaXMKcmVzdWx0cyA8LSBtZWRpYXRpb246Om1lZGlhdGUoSW1wYWN0X00sIGltcGFjdDEsIHRyZWF0PSJwYW10b3RhbCIsIG1lZGlhdG9yPSJTRVNJQkQiLAogICAgICAgICAgICAgICAgICAgYm9vdD1UUlVFLCBzaW1zPTUwMCkgCnN1bW1hcnkocmVzdWx0cykKCgpgYGAKCgojIFBBTSAtIFNlbGYtZWZmaWNhY3kgc3VidGhlbWV7LnRhYnNldH0KCiMjIE1ha2UgUEFNLWVmZmljYWN5IHZhcmlhYmxlCmBgYHtyfQpQQU1fY2xlYW4kZWZmaWNhY3kgPC0gKFBBTV9jbGVhbiRwYW1fMyArIFBBTV9jbGVhbiRwYW1fNSArIFBBTV9jbGVhbiRwYW1fNiArIFBBTV9jbGVhbiRwYW1fNyArIFBBTV9jbGVhbiRwYW1fMTIgKyBQQU1fY2xlYW4kcGFtXzEzKS82CmBgYAoKIyMgRG9lcyBTRVMtSUJEIGNvcnJlbGF0ZSB3aXRoIFBBTS1FZmZpY2FjeQpgYGB7cn0KUEFNX2NsZWFuJGVmZmljYWN5IDwtIGFzLm51bWVyaWMoUEFNX2NsZWFuJGVmZmljYWN5KQpjb3IoUEFNX2NsZWFuJGVmZmljYWN5LCBQQU1fY2xlYW4kU0VTSUJELCBtZXRob2QgPSAncGVhcnNvbicpIC0+IGNvcnIxIApwcmludChjb3JyMSkKCiMjIG1vZGVyYXRlbHkgY29ycmVsYXRlZCAtIFBlYXJzb24ncyBSIGlzIDAuNTAKYGBgCgojIyBQQU0tZWZmaWNhY3kgLT4gZGFpbHkgbGlmZSBpbXBhY3QKYGBge3J9CgplZmZpY2FjeTEgPC0gbG0oUFJPSW1wIH4gYWdlXzQgKyBHRU5ERVJGICsgaWJkZHggKyBNb2RTZXZlcmUgKyBjdXJyZW50X21lZHNfX18xICsgZWZmaWNhY3ksCiAgICAgICAgICAgICAgZGF0YSA9IFBBTV9jbGVhbikKc3VtbWFyeShlZmZpY2FjeTEgKQpicm9vbTo6Z2xhbmNlKGVmZmljYWN5MSApCmJyb29tOjp0aWR5KGVmZmljYWN5MSkKbW9kZWxfcGVyZm9ybWFuY2UoZWZmaWNhY3kxKQp0YmxfcmVncmVzc2lvbihlZmZpY2FjeTEpCgojIE1vZGVsIHBlcmZvcm1hbmNlCm1vZGVsX3BlcmZvcm1hbmNlKGVmZmljYWN5MSkKcGVyZm9ybWFuY2U6OmNoZWNrX21vZGVsKGVmZmljYWN5MSkKVklGKGVmZmljYWN5MSkKCiMgTWFyZ2lucwpjcGxvdChlZmZpY2FjeTEsICJlZmZpY2FjeSIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIERhaWx5IExpZmUgSW1wYWN0IGJ5IEVmZmljYWN5IFNjb3JlIikKYGBgCgojIyBQQU0tRWZmaWNhY3kgKyBTRVMtSUJEIC0+IGRhaWx5IGxpZmUgaW1wYWN0CmBgYHtyfQplZmZpY2FjeTIgPC0gbG0oUFJPSW1wIH4gYWdlXzQgKyBHRU5ERVJGICsgaWJkZHggKyBNb2RTZXZlcmUgKyBjdXJyZW50X21lZHNfX18xICsgZWZmaWNhY3kgKyBTRVNJQkQsCiAgICAgICAgICAgICAgZGF0YSA9IFBBTV9jbGVhbikKc3VtbWFyeShlZmZpY2FjeTIgKQpicm9vbTo6Z2xhbmNlKGVmZmljYWN5MiApCmJyb29tOjp0aWR5KGVmZmljYWN5MikKbW9kZWxfcGVyZm9ybWFuY2UoZWZmaWNhY3kyKQp0YmxfcmVncmVzc2lvbihlZmZpY2FjeTIpCgojIG1vZGVsIHBlcmZvcm1hbmNlCm1vZGVsX3BlcmZvcm1hbmNlKGVmZmljYWN5MikKcGVyZm9ybWFuY2U6OmNoZWNrX21vZGVsKGVmZmljYWN5MikKVklGKGVmZmljYWN5MikKCiMgTWFyZ2lucwpjcGxvdChlZmZpY2FjeTIsICJlZmZpY2FjeSIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIERhaWx5IExpZmUgSW1wYWN0IGJ5IEVmZmljYWN5IFNjb3JlIikKY3Bsb3QoZWZmaWNhY3kyLCAiU0VTSUJEIiwgd2hhdCA9ICJwcmVkaWN0aW9uIiwgbWFpbiA9ICJQcmVkaWN0ZWQgRGFpbHkgTGlmZSBJbXBhY3QgYnkgU0VTIikKYGBgCgojIyBQQU0tZWZmaWNhY3kvU0VTIGludGVyYWN0aW9uIC0+IGRhaWx5IGxpZmUgaW1wYWN0IApgYGB7cn0KCmVmZmljYWN5MyA8LSBsbShQUk9JbXAgfiBhZ2VfNCArIEdFTkRFUkYgKyBpYmRkeCArIE1vZFNldmVyZSArIGN1cnJlbnRfbWVkc19fXzEgKyBlZmZpY2FjeSpTRVNJQkQsCiAgICAgICAgICAgICAgZGF0YSA9IFBBTV9jbGVhbikKc3VtbWFyeShlZmZpY2FjeTMgKQpicm9vbTo6Z2xhbmNlKGVmZmljYWN5MyApCmJyb29tOjp0aWR5KGVmZmljYWN5MykKbW9kZWxfcGVyZm9ybWFuY2UoZWZmaWNhY3kzKQp0YmxfcmVncmVzc2lvbihlZmZpY2FjeTMpCgojIG1vZGVsIHBlcmZvcm1hbmNlCm1vZGVsX3BlcmZvcm1hbmNlKGVmZmljYWN5MykKcGVyZm9ybWFuY2U6OmNoZWNrX21vZGVsKGVmZmljYWN5MykKVklGKGVmZmljYWN5MykKCiMgTWFyZ2lucwpjcGxvdChlZmZpY2FjeTMsICJlZmZpY2FjeSIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIERhaWx5IExpZmUgSW1wYWN0IGJ5IEVmZmljYWN5IFNjb3JlIikKY3Bsb3QoZWZmaWNhY3kzLCAiU0VTSUJEIiwgd2hhdCA9ICJwcmVkaWN0aW9uIiwgbWFpbiA9ICJQcmVkaWN0ZWQgRGFpbHkgTGlmZSBJbXBhY3QgYnkgU0VTIikKYGBgCgojIyBTRVMtSUJEIGFzIGEgbWVkaWF0b3Igb2YgUEFNLWVmZmljYWN5IApgYGB7cn0KSW1wYWN0X0UgPC0gbG0oU0VTSUJEIH4gYWdlXzQgKyBHRU5ERVJGICsgaWJkZHggKyBNb2RTZXZlcmUgKyBjdXJyZW50X21lZHNfX18xICsgZWZmaWNhY3kgKyBQUk9JbXAsCiAgICAgICAgICAgICAgZGF0YSA9IFBBTV9jbGVhbikKc3VtbWFyeShJbXBhY3RfRSApCmJyb29tOjpnbGFuY2UoSW1wYWN0X0UgKQp0YmxfcmVncmVzc2lvbihJbXBhY3RfRSkKCgppbXBhY3RfZSA8LSBsbShQUk9JbXAgfiBhZ2VfNCArIEdFTkRFUkYgKyBpYmRkeCArIE1vZFNldmVyZSArIGN1cnJlbnRfbWVkc19fXzEgKyBlZmZpY2FjeSArIFNFU0lCRCwKICAgICAgICAgICAgICBkYXRhID0gUEFNX2NsZWFuKQpzdW1tYXJ5KGltcGFjdF9lICkKYnJvb206OmdsYW5jZShpbXBhY3RfZSApCmJyb29tOjp0aWR5KGltcGFjdF9lKQp0YmxfcmVncmVzc2lvbihpbXBhY3RfZSkKCiMgU3RlcCAzOiBNZWRpYXRpb24gYW5hbHlzaXMKcmVzdWx0c18zIDwtIG1lZGlhdGlvbjo6bWVkaWF0ZShJbXBhY3RfRSwgaW1wYWN0X2UsIHRyZWF0PSAiZWZmaWNhY3kiLCBtZWRpYXRvcj0iU0VTSUJEIiwKICAgICAgICAgICAgICAgICAgIGJvb3Q9VFJVRSwgc2ltcz01MDApIApzdW1tYXJ5KHJlc3VsdHNfMykKYGBgCgoKIyBQQU0gLSBJbnRlcm5hbCBNb3RpdmF0aW9uIFN1YnRoZW1lIHsudGFic2V0fQojIyBJbnRlcm5hbCBtb3RpdmF0aW9uIHZhcmlhYmxlIApgYGB7cn0KUEFNX2NsZWFuJG1vdGl2YXRpb24gPC0gKFBBTV9jbGVhbiRwYW1fMSArIFBBTV9jbGVhbiRwYW1fMiArIFBBTV9jbGVhbiRwYW1fMTApLzMKYGBgCgojIyBEb2VzIG1vdGl2YXRpb24gY29ycmVsYXRlIHdpdGggU0VTPwpgYGB7cn0KY29yKFBBTV9jbGVhbiRtb3RpdmF0aW9uLCBQQU1fY2xlYW4kU0VTSUJELCBtZXRob2QgPSAncGVhcnNvbicpIC0+IGNvcnIgCnByaW50KGNvcnIpCgojIyBQZWFyc29uIFIgPSAwLjM0NCBzbyBzb21ld2hhdCBjb3JyZWxhdGVkIGJ1dCBub3QgdGhlIHNhbWUgCgoKYGBgCgoKIyMgTW90aXZhdGlvbiAtPiBkYWlseSBsaWZlIGltcGFjdCAKYGBge3J9Cgptb3RpdmF0ZTEgPC0gbG0oUFJPSW1wIH4gYWdlXzQgKyBHRU5ERVJGICsgaWJkZHggKyBNb2RTZXZlcmUgKyBjdXJyZW50X21lZHNfX18xICsgbW90aXZhdGlvbiwKICAgICAgICAgICAgICBkYXRhID0gUEFNX2NsZWFuKQpzdW1tYXJ5KG1vdGl2YXRlMSApCmJyb29tOjpnbGFuY2UobW90aXZhdGUxICkKYnJvb206OnRpZHkobW90aXZhdGUxKQptb2RlbF9wZXJmb3JtYW5jZShtb3RpdmF0ZTEpCnRibF9yZWdyZXNzaW9uKG1vdGl2YXRlMSkKCiMgTW9kZWwgcGVyZm9ybWFuY2UKbW9kZWxfcGVyZm9ybWFuY2UobW90aXZhdGUxKQpwZXJmb3JtYW5jZTo6Y2hlY2tfbW9kZWwobW90aXZhdGUxKQpWSUYobW90aXZhdGUxKQoKIyBNYXJnaW5zCmNwbG90KG1vdGl2YXRlMSwgIm1vdGl2YXRpb24iLCB3aGF0ID0gInByZWRpY3Rpb24iLCBtYWluID0gIlByZWRpY3RlZCBEYWlseSBMaWZlIEltcGFjdCBieSBNb3RpdmF0aW9uIFNjb3JlIikKYGBgCgojIyBNb3RpdmF0aW9uICsgU0VTIC0+IGRhaWx5IGxpZmUgaW1wYWN0IApgYGB7cn0KIAptb3RpdmF0ZTIgPC0gbG0oUFJPSW1wIH4gYWdlXzQgKyBHRU5ERVJGICsgaWJkZHggKyBNb2RTZXZlcmUgKyBjdXJyZW50X21lZHNfX18xICsgbW90aXZhdGlvbiArIFNFU0lCRCwKICAgICAgICAgICAgICBkYXRhID0gUEFNX2NsZWFuKQpzdW1tYXJ5KG1vdGl2YXRlMiApCmJyb29tOjpnbGFuY2UobW90aXZhdGUyICkKYnJvb206OnRpZHkobW90aXZhdGUyKQptb2RlbF9wZXJmb3JtYW5jZShtb3RpdmF0ZTIpCnRibF9yZWdyZXNzaW9uKG1vdGl2YXRlMikKCiMgTW9kZWwgcGVyZm9ybWFuY2UKbW9kZWxfcGVyZm9ybWFuY2UobW90aXZhdGUyKQpwZXJmb3JtYW5jZTo6Y2hlY2tfbW9kZWwobW90aXZhdGUyKQpWSUYobW90aXZhdGUyKQoKIyBNYXJnaW5zCmNwbG90KG1vdGl2YXRlMiwgIm1vdGl2YXRpb24iLCB3aGF0ID0gInByZWRpY3Rpb24iLCBtYWluID0gIlByZWRpY3RlZCBEYWlseSBMaWZlIEltcGFjdCBieSBNb3RpdmF0aW9uIFNjb3JlIikKY3Bsb3QobW90aXZhdGUyLCAiU0VTSUJEIiwgd2hhdCA9ICJwcmVkaWN0aW9uIiwgbWFpbiA9ICJQcmVkaWN0ZWQgRGFpbHkgTGlmZSBJbXBhY3QgYnkgU0VTIikKYGBgCgojIyBNb3RpdmF0aW9uL1NFUyBpbnRlcmFjdGlvbiAtPiBkYWlseSBsaWZlIGltcGFjdCAKYGBge3J9Cgptb3RpdmF0ZTMgPC0gbG0oUFJPSW1wIH4gYWdlXzQgKyBHRU5ERVJGICsgaWJkZHggKyBNb2RTZXZlcmUgKyBjdXJyZW50X21lZHNfX18xICsgbW90aXZhdGlvbipTRVNJQkQsCiAgICAgICAgICAgICAgZGF0YSA9IFBBTV9jbGVhbikKc3VtbWFyeShtb3RpdmF0ZTMgKQpicm9vbTo6Z2xhbmNlKG1vdGl2YXRlMyApCmJyb29tOjp0aWR5KG1vdGl2YXRlMykKbW9kZWxfcGVyZm9ybWFuY2UobW90aXZhdGUzKQp0YmxfcmVncmVzc2lvbihtb3RpdmF0ZTMpCgojIE1vZGVsIHBlcmZvcm1hbmNlCm1vZGVsX3BlcmZvcm1hbmNlKG1vdGl2YXRlMykKcGVyZm9ybWFuY2U6OmNoZWNrX21vZGVsKG1vdGl2YXRlMykKVklGKG1vdGl2YXRlMykKCiMgTWFyZ2lucwpjcGxvdChtb3RpdmF0ZTMsICJtb3RpdmF0aW9uIiwgd2hhdCA9ICJwcmVkaWN0aW9uIiwgbWFpbiA9ICJQcmVkaWN0ZWQgRGFpbHkgTGlmZSBJbXBhY3QgYnkgTW90aXZhdGlvbiBTY29yZSIpCmNwbG90KG1vdGl2YXRlMywgIlNFU0lCRCIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIERhaWx5IExpZmUgSW1wYWN0IGJ5IFNFUyIpCmBgYAoKIyMgU2VsZi1lZmZpY2FjeSBhcyBhIG1lZGlhdG9yIGZvciBtb3RpdmF0aW9uIC0+IGRhaWx5IGxpZmUgaW1wYWN0IApgYGB7cn0KSW1wYWN0X00yIDwtIGxtKFNFU0lCRCB+IGFnZV80ICsgR0VOREVSRiArIGliZGR4ICsgTW9kU2V2ZXJlICsgY3VycmVudF9tZWRzX19fMSArIG1vdGl2YXRpb24gKyBQUk9JbXAsCiAgICAgICAgICAgICAgZGF0YSA9IFBBTV9jbGVhbikKc3VtbWFyeShJbXBhY3RfTTIgKQpicm9vbTo6Z2xhbmNlKEltcGFjdF9NMiApCnRibF9yZWdyZXNzaW9uKEltcGFjdF9NMikKCgppbXBhY3QyIDwtIGxtKFBST0ltcCB+IGFnZV80ICsgR0VOREVSRiArIGliZGR4ICsgTW9kU2V2ZXJlICsgY3VycmVudF9tZWRzX19fMSArIG1vdGl2YXRpb24gKyBTRVNJQkQsCiAgICAgICAgICAgICAgZGF0YSA9IFBBTV9jbGVhbikKc3VtbWFyeShpbXBhY3QyICkKYnJvb206OmdsYW5jZShpbXBhY3QyICkKYnJvb206OnRpZHkoaW1wYWN0MikKdGJsX3JlZ3Jlc3Npb24oaW1wYWN0MikKCiMgU3RlcCAzOiBNZWRpYXRpb24gYW5hbHlzaXMKcmVzdWx0c18yIDwtIG1lZGlhdGlvbjo6bWVkaWF0ZShJbXBhY3RfTTIsIGltcGFjdDIsIHRyZWF0PSAibW90aXZhdGlvbiIsIG1lZGlhdG9yPSJTRVNJQkQiLAogICAgICAgICAgICAgICAgICAgYm9vdD1UUlVFLCBzaW1zPTUwMCkgCnN1bW1hcnkocmVzdWx0c18yKQpgYGAKCgoKCiMgUEFNIC0gS25vd2xlZGdlIFN1YnRoZW1lIHsudGFic2V0fQojIyBLbm93bGVkZ2UgdmFyaWFibGUgCmBgYHtyfQpQQU1fY2xlYW4ka25vd2xlZGdlIDwtIChQQU1fY2xlYW4kcGFtXzQgKyBQQU1fY2xlYW4kcGFtXzggKyBQQU1fY2xlYW4kcGFtXzkgKyBQQU1fY2xlYW4kcGFtXzExKS80CmBgYAoKIyMgRG9lcyBrbm93bGVkZ2UgY29ycmVsYXRlIHdpdGggU0VTPwpgYGB7cn0KY29yKFBBTV9jbGVhbiRrbm93bGVkZ2UsIFBBTV9jbGVhbiRTRVNJQkQsIG1ldGhvZCA9ICdwZWFyc29uJykgLT4gY29ycjIKcHJpbnQoY29ycjIpCgojIFBlYXJzb24gUiA9IDAuMTcgc28gbm8gCmBgYAoKCiMjIEtub3dsZWRnZSAtPiBkYWlseSBsaWZlIGltcGFjdCAKYGBge3J9Cmtub3cxIDwtIGxtKFBST0ltcCB+IGFnZV80ICsgR0VOREVSRiArIGliZGR4ICsgTW9kU2V2ZXJlICsgY3VycmVudF9tZWRzX19fMSArIGtub3dsZWRnZSwKICAgICAgICAgICAgICBkYXRhID0gUEFNX2NsZWFuKQpzdW1tYXJ5KGtub3cxICkKYnJvb206OmdsYW5jZShrbm93MSApCmJyb29tOjp0aWR5KGtub3cxKQptb2RlbF9wZXJmb3JtYW5jZShrbm93MSkKdGJsX3JlZ3Jlc3Npb24oa25vdzEpCgojIE1vZGVsIHBlcmZvcm1hbmNlCm1vZGVsX3BlcmZvcm1hbmNlKGtub3cxKQpwZXJmb3JtYW5jZTo6Y2hlY2tfbW9kZWwoa25vdzEpClZJRihrbm93MSkKCiMgTWFyZ2lucwpjcGxvdChrbm93MSwgImtub3dsZWRnZSIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIERhaWx5IExpZmUgSW1wYWN0IGJ5IEtub3dsZWRnZSBTY29yZSIpCmBgYAoKIyMgS25vd2xlZGdlICsgU0VTIC0+IGRhaWx5IGxpZmUgaW1wYWN0IApgYGB7cn0Ka25vdzIgPC0gbG0oUFJPSW1wIH4gYWdlXzQgKyBHRU5ERVJGICsgaWJkZHggKyBNb2RTZXZlcmUgKyBjdXJyZW50X21lZHNfX18xICsga25vd2xlZGdlICsgU0VTSUJELAogICAgICAgICAgICAgIGRhdGEgPSBQQU1fY2xlYW4pCnN1bW1hcnkoa25vdzIgKQpicm9vbTo6Z2xhbmNlKGtub3cyICkKYnJvb206OnRpZHkoa25vdzIpCm1vZGVsX3BlcmZvcm1hbmNlKGtub3cyKQp0YmxfcmVncmVzc2lvbihrbm93MikKCiMgTW9kZWwgcGVyZm9ybWFuY2UKbW9kZWxfcGVyZm9ybWFuY2Uoa25vdzIpCnBlcmZvcm1hbmNlOjpjaGVja19tb2RlbChrbm93MikKVklGKGtub3cyKQoKIyBNYXJnaW5zCmNwbG90KGtub3cyLCAia25vd2xlZGdlIiwgd2hhdCA9ICJwcmVkaWN0aW9uIiwgbWFpbiA9ICJQcmVkaWN0ZWQgRGFpbHkgTGlmZSBJbXBhY3QgYnkgS25vd2xlZGdlIFNjb3JlIikKY3Bsb3Qoa25vdzIsICJTRVNJQkQiLCB3aGF0ID0gInByZWRpY3Rpb24iLCBtYWluID0gIlByZWRpY3RlZCBEYWlseSBMaWZlIEltcGFjdCBieSBTRVMiKQpgYGAKCiMjIEtub3dsZWRnZS9TRVMgaW50ZXJhY3Rpb24gLT4gZGFpbHkgbGlmZSBpbXBhY3QgCmBgYHtyfQprbm93MyA8LSBsbShQUk9JbXAgfiBhZ2VfNCArIEdFTkRFUkYgKyBpYmRkeCArIE1vZFNldmVyZSArIGN1cnJlbnRfbWVkc19fXzEgKyBrbm93bGVkZ2UqU0VTSUJELAogICAgICAgICAgICAgIGRhdGEgPSBQQU1fY2xlYW4pCnN1bW1hcnkoa25vdzMgKQpicm9vbTo6Z2xhbmNlKGtub3czICkKYnJvb206OnRpZHkoa25vdzMpCm1vZGVsX3BlcmZvcm1hbmNlKGtub3czKQp0YmxfcmVncmVzc2lvbihrbm93MykKCiMgTW9kZWwgcGVyZm9ybWFuY2UKbW9kZWxfcGVyZm9ybWFuY2Uoa25vdzMpCnBlcmZvcm1hbmNlOjpjaGVja19tb2RlbChrbm93MykKVklGKGtub3czKQoKIyBNYXJnaW5zCmNwbG90KGtub3czLCAia25vd2xlZGdlIiwgd2hhdCA9ICJwcmVkaWN0aW9uIiwgbWFpbiA9ICJQcmVkaWN0ZWQgRGFpbHkgTGlmZSBJbXBhY3QgYnkgS25vd2xlZGdlIFNjb3JlIikKY3Bsb3Qoa25vdzMsICJTRVNJQkQiLCB3aGF0ID0gInByZWRpY3Rpb24iLCBtYWluID0gIlByZWRpY3RlZCBEYWlseSBMaWZlIEltcGFjdCBieSBTRVMiKQpgYGAKCiMjIFNFUy1JQkQgYXMgYSBtZWRpYXRvciBvZiBrbm93bGVkZ2UgLT4gZGFpbHkgbGlmZSBpbXBhY3QgCmBgYHtyfQpJbXBhY3RfSyA8LSBsbShTRVNJQkQgfiBhZ2VfNCArIEdFTkRFUkYgKyBpYmRkeCArIE1vZFNldmVyZSArIGN1cnJlbnRfbWVkc19fXzEgKyBrbm93bGVkZ2UgKyBQUk9JbXAsCiAgICAgICAgICAgICAgZGF0YSA9IFBBTV9jbGVhbikKc3VtbWFyeShJbXBhY3RfSyApCmJyb29tOjpnbGFuY2UoSW1wYWN0X0sgKQp0YmxfcmVncmVzc2lvbihJbXBhY3RfSykKCgppbXBhY3RrIDwtIGxtKFBST0ltcCB+IGFnZV80ICsgR0VOREVSRiArIGliZGR4ICsgTW9kU2V2ZXJlICsgY3VycmVudF9tZWRzX19fMSArIGtub3dsZWRnZSArIFNFU0lCRCwKICAgICAgICAgICAgICBkYXRhID0gUEFNX2NsZWFuKQpzdW1tYXJ5KGltcGFjdGsgKQpicm9vbTo6Z2xhbmNlKGltcGFjdGsgKQpicm9vbTo6dGlkeShpbXBhY3RrKQp0YmxfcmVncmVzc2lvbihpbXBhY3RrKQoKIyBTdGVwIDM6IE1lZGlhdGlvbiBhbmFseXNpcwpyZXN1bHRzXzQgPC0gbWVkaWF0aW9uOjptZWRpYXRlKEltcGFjdF9LLCBpbXBhY3RrLCB0cmVhdD0gImtub3dsZWRnZSIsIG1lZGlhdG9yPSJTRVNJQkQiLAogICAgICAgICAgICAgICAgICAgYm9vdD1UUlVFLCBzaW1zPTUwMCkgCnN1bW1hcnkocmVzdWx0c180KQpgYGAKCiMgUEFNLWVmZmljYWN5ICsgbW90aXZhdGlvbiB7LnRhYnNldH0KCiMjIE1ha2UgY29tYmluZWQgZWZmaWNhY3krbW90aXZhdGlvbiB2YXJpYWJsZQpgYGB7cn0KCiMgVGhpcyBpcyBqdXN0IFBBTSBtaW51cyB0aGUga25vd2xlZGdlIGNvbXBvbmVudCwgd2hpY2ggZGlkbid0IHNlZW0gdG8gbWF0dGVyIAoKUEFNX2NsZWFuJGVmZl9tb3QgPC0gKFBBTV9jbGVhbiRwYW1fMyArIFBBTV9jbGVhbiRwYW1fNSArIFBBTV9jbGVhbiRwYW1fNiArIFBBTV9jbGVhbiRwYW1fNyArIFBBTV9jbGVhbiRwYW1fMTIgKyBQQU1fY2xlYW4kcGFtXzEzICsgUEFNX2NsZWFuJHBhbV8xICsgUEFNX2NsZWFuJHBhbV8yICsgUEFNX2NsZWFuJHBhbV8xMCkvOQpgYGAKCiMjIERvZXMgRWZmaWNhY3krbW90aXZhdGlvbiBjb3JyZWxhdGUgd2l0aCBTRVMtSUJEPwpgYGB7cn0KY29yKFBBTV9jbGVhbiRlZmZfbW90LCBQQU1fY2xlYW4kU0VTSUJELCBtZXRob2QgPSAncGVhcnNvbicpIC0+IGNvcnIgCnByaW50KGNvcnIpCgojIyBQZWFyc29uIFIgPSAwLjUyIHNvIHllcwoKCmBgYAoKCiMjIEVmZmljYWN5K21vdGl2YXRpb24gLT4gZGFpbHkgbGlmZSBpbXBhY3QgCmBgYHtyfQoKZWZmX21vdDEgPC0gbG0oUFJPSW1wIH4gYWdlXzQgKyBHRU5ERVJGICsgaWJkZHggKyBNb2RTZXZlcmUgKyBjdXJyZW50X21lZHNfX18xICsgZWZmX21vdCwKICAgICAgICAgICAgICBkYXRhID0gUEFNX2NsZWFuKQpzdW1tYXJ5KGVmZl9tb3QxICkKYnJvb206OmdsYW5jZShlZmZfbW90MSApCmJyb29tOjp0aWR5KGVmZl9tb3QxKQptb2RlbF9wZXJmb3JtYW5jZShlZmZfbW90MSkKdGJsX3JlZ3Jlc3Npb24oZWZmX21vdDEpCgojIE1vZGVsIHBlcmZvcm1hbmNlCm1vZGVsX3BlcmZvcm1hbmNlKGVmZl9tb3QxKQpwZXJmb3JtYW5jZTo6Y2hlY2tfbW9kZWwoZWZmX21vdDEpClZJRihlZmZfbW90MSkKCiMgTWFyZ2lucwpjcGxvdChlZmZfbW90MSwgImVmZl9tb3QiLCB3aGF0ID0gInByZWRpY3Rpb24iLCBtYWluID0gIlByZWRpY3RlZCBEYWlseSBMaWZlIEltcGFjdCBieSBDb21iaW5lZCBFZmZpY2FjeSBNb3RpdmF0aW9uIFNjb3JlIikKYGBgCgojIyBFZmZpY2FjeSttb3RpdmF0aW9uICsgU0VTIC0+IGRhaWx5IGxpZmUgaW1wYWN0IApgYGB7cn0KIAplZmZfbW90MiA8LSBsbShQUk9JbXAgfiBhZ2VfNCArIEdFTkRFUkYgKyBpYmRkeCArIE1vZFNldmVyZSArIGN1cnJlbnRfbWVkc19fXzEgKyBlZmZfbW90ICsgU0VTSUJELAogICAgICAgICAgICAgIGRhdGEgPSBQQU1fY2xlYW4pCnN1bW1hcnkoZWZmX21vdDIgKQpicm9vbTo6Z2xhbmNlKGVmZl9tb3QyICkKYnJvb206OnRpZHkoZWZmX21vdDIpCm1vZGVsX3BlcmZvcm1hbmNlKGVmZl9tb3QyKQp0YmxfcmVncmVzc2lvbihlZmZfbW90MikKCiMgTW9kZWwgcGVyZm9ybWFuY2UKbW9kZWxfcGVyZm9ybWFuY2UoZWZmX21vdDIpCnBlcmZvcm1hbmNlOjpjaGVja19tb2RlbChlZmZfbW90MikKVklGKGVmZl9tb3QyKQoKIyBNYXJnaW5zCmNwbG90KGVmZl9tb3QyLCAiZWZmX21vdCIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIERhaWx5IExpZmUgSW1wYWN0IGJ5IENvbWJpbmVkIEVmZmljYWN5IE1vdGl2YXRpb24gU2NvcmUiKQpjcGxvdChlZmZfbW90MiwgIlNFU0lCRCIsIHdoYXQgPSAicHJlZGljdGlvbiIsIG1haW4gPSAiUHJlZGljdGVkIERhaWx5IExpZmUgSW1wYWN0IGJ5IFNFUyIpCmBgYAoKIyMgRWZmaWNhY3krTW90aXZhdGlvbi9TRVMgaW50ZXJhY3Rpb24gLT4gZGFpbHkgbGlmZSBpbXBhY3QgCmBgYHtyfQoKZWZmX21vdDMgPC0gbG0oUFJPSW1wIH4gYWdlXzQgKyBHRU5ERVJGICsgaWJkZHggKyBNb2RTZXZlcmUgKyBjdXJyZW50X21lZHNfX18xICsgZWZmX21vdCpTRVNJQkQsCiAgICAgICAgICAgICAgZGF0YSA9IFBBTV9jbGVhbikKc3VtbWFyeShlZmZfbW90MyApCmJyb29tOjpnbGFuY2UoZWZmX21vdDMgKQpicm9vbTo6dGlkeShlZmZfbW90MykKbW9kZWxfcGVyZm9ybWFuY2UoZWZmX21vdDMpCnRibF9yZWdyZXNzaW9uKGVmZl9tb3QzKQoKIyBNb2RlbCBwZXJmb3JtYW5jZQptb2RlbF9wZXJmb3JtYW5jZShlZmZfbW90MykKcGVyZm9ybWFuY2U6OmNoZWNrX21vZGVsKGVmZl9tb3QzKQpWSUYoZWZmX21vdDMpCgojIE1hcmdpbnMKY3Bsb3QoZWZmX21vdDMsICJlZmZfbW90Iiwgd2hhdCA9ICJwcmVkaWN0aW9uIiwgbWFpbiA9ICJQcmVkaWN0ZWQgRGFpbHkgTGlmZSBJbXBhY3QgYnkgQ29tYmluZWQgRWZmaWNhY3kgTW90aXZhdGlvbiBTY29yZSIpCmNwbG90KGVmZl9tb3QzLCAiU0VTSUJEIiwgd2hhdCA9ICJwcmVkaWN0aW9uIiwgbWFpbiA9ICJQcmVkaWN0ZWQgRGFpbHkgTGlmZSBJbXBhY3QgYnkgU0VTIikKYGBgCgojIyBTRVMtSUJEIGFzIGEgbWVkaWF0b3IgZm9yIGVmZmljYWN5K21vdGl2YXRpb24gLT4gZGFpbHkgbGlmZSBpbXBhY3QgCmBgYHtyfQpJbXBhY3RfRU0gPC0gbG0oU0VTSUJEIH4gYWdlXzQgKyBHRU5ERVJGICsgaWJkZHggKyBNb2RTZXZlcmUgKyBjdXJyZW50X21lZHNfX18xICsgZWZmX21vdCArIFBST0ltcCwKICAgICAgICAgICAgICBkYXRhID0gUEFNX2NsZWFuKQpzdW1tYXJ5KEltcGFjdF9FTSApCmJyb29tOjpnbGFuY2UoSW1wYWN0X0VNICkKdGJsX3JlZ3Jlc3Npb24oSW1wYWN0X0VNKQoKCmltcGFjdF9lbSA8LSBsbShQUk9JbXAgfiBhZ2VfNCArIEdFTkRFUkYgKyBpYmRkeCArIE1vZFNldmVyZSArIGN1cnJlbnRfbWVkc19fXzEgKyBlZmZfbW90ICsgU0VTSUJELAogICAgICAgICAgICAgIGRhdGEgPSBQQU1fY2xlYW4pCnN1bW1hcnkoaW1wYWN0X2VtICkKYnJvb206OmdsYW5jZShpbXBhY3RfZW0gKQpicm9vbTo6dGlkeShpbXBhY3RfZW0pCnRibF9yZWdyZXNzaW9uKGltcGFjdF9lbSkKCiMgU3RlcCAzOiBNZWRpYXRpb24gYW5hbHlzaXMKcmVzdWx0c181IDwtIG1lZGlhdGlvbjo6bWVkaWF0ZShJbXBhY3RfRU0sIGltcGFjdF9lbSwgdHJlYXQ9ICJlZmZfbW90IiwgbWVkaWF0b3I9IlNFU0lCRCIsCiAgICAgICAgICAgICAgICAgICBib290PVRSVUUsIHNpbXM9NTAwKSAKc3VtbWFyeShyZXN1bHRzXzUpCmBgYAoKCgoKIyBGYWN0b3IgYW5hbHlzaXMKIyMgTG9hZCBwYWNrYWdlcywgc2VsZWN0IHZhcmlhYmxlcyAKYGBge3IgZXZhbD1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KbGlicmFyeShwc3ljaCkKbGlicmFyeShuRmFjdG9ycykKCnBhbV9kYXRhICU+JSBkcGx5cjo6c2VsZWN0KHBhbV8xOnBhbV8xMykgLT4gUEFNMTMKYGBgCgojIyBGYWN0b3IgYW5hbHlzaXMgd2l0aCBvYmxpcXVlIHJvdGF0aW9uCmBgYHtyIGV2YWw9RkFMU0UsIGluY2x1ZGU9RkFMU0V9Ck5mYWNzIDwtIDMgICMgVGhpcyBpcyBmb3IgZm91ciBmYWN0b3JzLiBZb3UgY2FuIGNoYW5nZSB0aGlzIGFzIG5lZWRlZC4KCmZpdCA8LSBmYWN0YW5hbChQQU0xMywgTmZhY3MsIHJvdGF0aW9uPSJwcm9tYXgiKQoKCnByaW50KGZpdCwgZGlnaXRzPTIsIGN1dG9mZj0wLjMsIHNvcnQ9VFJVRSkKYGBgCgo=