#import data
data <- read.table("Q_Data.csv", header = TRUE, sep = "\t") 
data_Q<- read.csv("Q_Data.csv")
View(data_Q)

#clean data
names(data_Q)
##  [1] "StartDate"             "EndDate"               "Status"               
##  [4] "IPAddress"             "Progress"              "Duration..in.seconds."
##  [7] "Finished"              "RecordedDate"          "ResponseId"           
## [10] "RecipientLastName"     "RecipientFirstName"    "RecipientEmail"       
## [13] "ExternalReference"     "LocationLatitude"      "LocationLongitude"    
## [16] "DistributionChannel"   "UserLanguage"          "Q0"                   
## [19] "Q2_1"                  "Q3_1"                  "Q3_2"                 
## [22] "Q3_3"                  "Q4_1"                  "Q4_2"                 
## [25] "Q4_3"                  "Q5_1"                  "Q5_2"                 
## [28] "Q6_1"                  "Q6_2"                  "Q6_3"                 
## [31] "Q7"                    "Q8"                    "Q9_1"                 
## [34] "FL_24_DO"
data_clean <- subset(data_Q, 
                     select = -c(StartDate,EndDate,Status,IPAddress,Progress,Duration..in.seconds., 
                                 Finished, RecordedDate, ResponseId,           
                                 RecipientLastName,RecipientFirstName, RecipientEmail,
                                 ExternalReference,LocationLatitude, LocationLongitude,    
                                 DistributionChannel,UserLanguage,Q0))
# Remove rows 1 and 2 from the data frame also empty lines for language
data_clean <- data_clean [-c(1:2), ]
View(data_clean)
#Turn the condition value into numerical data
data_clean$FL_24_DO <- as.numeric(factor(data_clean$FL_24_DO, levels = c("Block1", "Block2"), labels = c(1,2)))
head(data_clean)
##   Q2_1 Q3_1 Q3_2 Q3_3 Q4_1 Q4_2 Q4_3 Q5_1 Q5_2 Q6_1 Q6_2 Q6_3 Q7 Q8 Q9_1
## 3    5    5    5    5    5    5    5    6    6    5    5    5  2  2    4
## 4    1    4    3    2    2    2    1    2    5    2    3    2  2  1    4
## 5    1    3    3    3    5    6    5    6    6    4    4    4  1  1    5
## 6    5    5    6    6    3    2    2    3    4    5    6    5  2  2    4
## 7    1    2    5    2    3    5    2    2    6    6    7    6  2  1    4
## 8    5    5    5    3    3    6    2    5    3    3    6    3  2  1    3
##   FL_24_DO
## 3        2
## 4        1
## 5        1
## 6        2
## 7        1
## 8        2
#checking gender
table(data_clean$Q7)
## 
##  1  2  3 
## 35 66  2
##Factor analysis
factor_subset <- c("Q3_1", "Q3_2", "Q3_3", "Q4_1", "Q4_2", "Q4_3", "Q5_1", "Q5_2", "Q6_1", "Q6_2", "Q6_3")
#compute eigenvalues
print(factor_subset)
##  [1] "Q3_1" "Q3_2" "Q3_3" "Q4_1" "Q4_2" "Q4_3" "Q5_1" "Q5_2" "Q6_1" "Q6_2"
## [11] "Q6_3"
fa_data <- data_clean[factor_subset]
fa_data <- as.data.frame(lapply(fa_data, as.numeric))
pca_result <- principal(fa_data, nfactors = length(factor_subset), rotate = "none")
eigenvalues <- pca_result$values
print(eigenvalues)
##  [1] 4.3602363 2.1423453 1.0878602 0.9804088 0.6080216 0.4082431 0.3675702
##  [8] 0.3490782 0.2996597 0.2253682 0.1712083
#perform factor analysis
cor_matrix <- cor(fa_data, use = "pairwise.complete.obs")
fa_result <- fa(cor_matrix, nfactors = 4, rotate = "varimax")
print(fa_result)
## Factor Analysis using method =  minres
## Call: fa(r = cor_matrix, nfactors = 4, rotate = "varimax")
## Standardized loadings (pattern matrix) based upon correlation matrix
##       MR1  MR2  MR3   MR4    h2     u2 com
## Q3_1 0.21 0.11 0.74  0.02 0.602 0.3977 1.2
## Q3_2 0.35 0.16 0.73 -0.09 0.679 0.3209 1.6
## Q3_3 0.32 0.11 0.72 -0.10 0.648 0.3524 1.5
## Q4_1 0.06 0.81 0.10  0.09 0.671 0.3293 1.1
## Q4_2 0.23 0.77 0.16  0.05 0.677 0.3232 1.3
## Q4_3 0.03 0.78 0.06  0.01 0.620 0.3804 1.0
## Q5_1 0.06 0.50 0.19  0.84 0.995 0.0047 1.8
## Q5_2 0.00 0.02 0.06 -0.21 0.049 0.9507 1.2
## Q6_1 0.80 0.03 0.38 -0.01 0.795 0.2052 1.4
## Q6_2 0.80 0.21 0.25 -0.02 0.749 0.2506 1.3
## Q6_3 0.83 0.08 0.26  0.07 0.759 0.2405 1.2
## 
##                        MR1  MR2  MR3  MR4
## SS loadings           2.30 2.21 1.95 0.78
## Proportion Var        0.21 0.20 0.18 0.07
## Cumulative Var        0.21 0.41 0.59 0.66
## Proportion Explained  0.32 0.30 0.27 0.11
## Cumulative Proportion 0.32 0.62 0.89 1.00
## 
## Mean item complexity =  1.3
## Test of the hypothesis that 4 factors are sufficient.
## 
## df null model =  55  with the objective function =  5.61
## df of  the model are 17  and the objective function was  0.18 
## 
## The root mean square of the residuals (RMSR) is  0.02 
## The df corrected root mean square of the residuals is  0.04 
## 
## Fit based upon off diagonal values = 1
## Measures of factor score adequacy             
##                                                    MR1  MR2  MR3  MR4
## Correlation of (regression) scores with factors   0.92 0.91 0.88 0.97
## Multiple R square of scores with factors          0.85 0.84 0.77 0.94
## Minimum correlation of possible factor scores     0.70 0.67 0.54 0.88
#Compute Cronbach's alpha
#trust = customer trust, close = customer perceived closeness towards chatbot, SC = self-congruence, PI = purchase intention
trust_items <- c("Q3_1", "Q3_2", "Q3_3")
close_items <- c("Q4_1", "Q4_2", "Q4_3")
SC_items <- c("Q5_1", "Q5_2")
PI_items <- c("Q6_1", "Q6_2", "Q6_3")

cols_to_convert <- c("Q2_1", "Q3_1", "Q3_2", "Q3_3", "Q4_1", "Q4_2", "Q4_3", "Q5_1", "Q5_2", "Q6_1", "Q6_2", "Q6_3")
data_clean[, cols_to_convert] <- lapply(data_clean[, cols_to_convert], as.numeric)
trust_alpha <- psych::alpha(data_clean[trust_items])
print(trust_alpha)
## 
## Reliability analysis   
## Call: psych::alpha(x = data_clean[trust_items])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.84      0.84    0.78      0.63 5.2 0.028  4.1 1.3     0.62
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.77  0.84  0.89
## Duhachek  0.78  0.84  0.89
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## Q3_1      0.80      0.80    0.67      0.67 4.0    0.039    NA  0.67
## Q3_2      0.76      0.76    0.61      0.61 3.1    0.048    NA  0.61
## Q3_3      0.76      0.77    0.62      0.62 3.3    0.046    NA  0.62
## 
##  Item statistics 
##        n raw.r std.r r.cor r.drop mean  sd
## Q3_1 103  0.85  0.86  0.73   0.67  4.1 1.4
## Q3_2 103  0.89  0.88  0.79   0.72  4.0 1.5
## Q3_3 103  0.87  0.87  0.78   0.71  4.1 1.4
## 
## Non missing response frequency for each item
##         1    2    3    4    5    6    7 miss
## Q3_1 0.02 0.13 0.17 0.29 0.19 0.18 0.02    0
## Q3_2 0.05 0.15 0.21 0.20 0.18 0.18 0.02    0
## Q3_3 0.03 0.13 0.22 0.17 0.25 0.20 0.00    0
closeness_alpha <- psych::alpha(data_clean[close_items])
print(closeness_alpha)
## 
## Reliability analysis   
## Call: psych::alpha(x = data_clean[close_items])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##       0.84      0.84    0.78      0.64 5.3 0.027  3.4 1.5     0.64
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.78  0.84  0.89
## Duhachek  0.79  0.84  0.89
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## Q4_1      0.76      0.76    0.62      0.62 3.2    0.047    NA  0.62
## Q4_2      0.78      0.78    0.64      0.64 3.6    0.043    NA  0.64
## Q4_3      0.80      0.80    0.66      0.66 3.9    0.040    NA  0.66
## 
##  Item statistics 
##        n raw.r std.r r.cor r.drop mean  sd
## Q4_1 103  0.88  0.88  0.79   0.72  3.4 1.8
## Q4_2 103  0.88  0.87  0.77   0.71  3.8 1.8
## Q4_3 103  0.86  0.86  0.75   0.69  3.0 1.6
## 
## Non missing response frequency for each item
##         1    2    3    4    5    6    7 miss
## Q4_1 0.17 0.18 0.17 0.14 0.20 0.11 0.03    0
## Q4_2 0.16 0.13 0.10 0.20 0.23 0.15 0.04    0
## Q4_3 0.21 0.27 0.16 0.14 0.16 0.05 0.02    0
self_congruence_alpha <- psych::alpha(data_clean[SC_items],check.keys=TRUE)
## Warning in psych::alpha(data_clean[SC_items], check.keys = TRUE): Some items were negatively correlated with the first principal component and were automatically reversed.
##  This is indicated by a negative sign for the variable name.
## Warning in sqrt(Vtc): 产生了NaNs
print(self_congruence_alpha)
## 
## Reliability analysis   
## Call: psych::alpha(x = data_clean[SC_items], check.keys = TRUE)
## 
##   raw_alpha std.alpha G6(smc) average_r   S/N  ase mean  sd median_r
##       0.27     -0.37   -0.15     -0.15 -0.27 0.14  4.3 1.2    -0.15
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt    -0.08  0.27  0.50
## Duhachek -0.01  0.27  0.55
## 
##  Reliability if an item is dropped:
##       raw_alpha std.alpha G6(smc) average_r   S/N alpha se var.r med.r
## Q5_1-      0.15     -0.15   0.024     -0.15 -0.13       NA     0 -0.15
## Q5_2       0.16     -0.15   0.024     -0.15 -0.13       NA     0 -0.15
## 
##  Item statistics 
##         n raw.r std.r r.cor r.drop mean  sd
## Q5_1- 103  0.75  0.65   NaN   0.15  4.6 1.5
## Q5_2  103  0.77  0.65   NaN   0.15  4.0 1.5
## 
## Non missing response frequency for each item
##         1    2    3    4    5    6    7 miss
## Q5_1 0.12 0.22 0.18 0.19 0.21 0.07 0.00    0
## Q5_2 0.05 0.17 0.15 0.24 0.20 0.16 0.03    0
purchase_intention_alpha <- psych::alpha(data_clean[PI_items])
print(purchase_intention_alpha)
## 
## Reliability analysis   
## Call: psych::alpha(x = data_clean[PI_items])
## 
##   raw_alpha std.alpha G6(smc) average_r S/N   ase mean  sd median_r
##        0.9       0.9    0.86      0.75 9.1 0.017    4 1.3     0.75
## 
##     95% confidence boundaries 
##          lower alpha upper
## Feldt     0.86   0.9  0.93
## Duhachek  0.87   0.9  0.93
## 
##  Reliability if an item is dropped:
##      raw_alpha std.alpha G6(smc) average_r S/N alpha se var.r med.r
## Q6_1      0.85      0.85    0.73      0.73 5.5    0.030    NA  0.73
## Q6_2      0.87      0.87    0.77      0.77 6.6    0.026    NA  0.77
## Q6_3      0.86      0.86    0.75      0.75 6.1    0.028    NA  0.75
## 
##  Item statistics 
##        n raw.r std.r r.cor r.drop mean  sd
## Q6_1 103  0.92  0.92  0.86   0.82  3.8 1.4
## Q6_2 103  0.91  0.91  0.83   0.79  4.2 1.5
## Q6_3 103  0.91  0.91  0.85   0.80  3.9 1.4
## 
## Non missing response frequency for each item
##         1    2    3    4    5    6    7 miss
## Q6_1 0.10 0.12 0.15 0.31 0.23 0.10 0.00    0
## Q6_2 0.09 0.08 0.12 0.18 0.35 0.17 0.01    0
## Q6_3 0.06 0.15 0.15 0.26 0.26 0.13 0.00    0
#calculate age mean
data_clean$Q8 <- as.numeric(data_clean$Q8)
age_mapping <- c(21.5, 30.5, 40.5, 50.5, 60)
data_clean$age_numeric <- age_mapping[data_clean$Q8]
age_mean <- mean(data_clean$age_numeric, na.rm = TRUE)
age_mean
## [1] 24.00971
age_sd <- sd(data_clean$age_numeric, na.rm = TRUE)
age_sd
## [1] 6.241457
SC_items <- "Q5_1"
##Randomization check
#Define variables
age_column <- "Q8"
gender_column <- "Q7"
usage_column <- "Q9_1"
condition_column <- "FL_24_DO"

#Randomization check of age, gender, and usage
age_table <- table(data_clean[[age_column]], data_clean[[condition_column]])
age_test <- chisq.test(age_table)
## Warning in chisq.test(age_table): Chi-squared近似算法有可能不准
print(age_test)
## 
##  Pearson's Chi-squared test
## 
## data:  age_table
## X-squared = 2.897, df = 3, p-value = 0.4078
gender_table <- table(data_clean[[gender_column]], data_clean[[condition_column]])
gender_test <- chisq.test(gender_table)
## Warning in chisq.test(gender_table): Chi-squared近似算法有可能不准
print(gender_test)
## 
##  Pearson's Chi-squared test
## 
## data:  gender_table
## X-squared = 1.5396, df = 2, p-value = 0.4631
usage_test <- aov(as.numeric(data_clean[[usage_column]]) ~ data_clean[[condition_column]])
print(usage_test)
## Call:
##    aov(formula = as.numeric(data_clean[[usage_column]]) ~ data_clean[[condition_column]])
## 
## Terms:
##                 data_clean[[condition_column]] Residuals
## Sum of Squares                          0.7370  321.2435
## Deg. of Freedom                              1       101
## 
## Residual standard error: 1.783432
## Estimated effects may be unbalanced
##Manipulation check
data_clean$condition <- factor(ifelse(data_clean$FL_24_DO == "1", 1, 2))
manipulation_check <- data_clean$Q2_1
condition <- data_clean$condition
anova_data <- data.frame(manipulation_check, condition)
anova_result <- aov(manipulation_check ~ condition, data = anova_data)
summary(anova_result)
##              Df Sum Sq Mean Sq F value   Pr(>F)    
## condition     1  101.2  101.25    39.3 9.05e-09 ***
## Residuals   101  260.2    2.58                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Correlation analysis
gender_item <- "Q7"
age_item <- "age_numeric"
freq_item <- "Q9_1"

data_clean[trust_items] <- lapply(data_clean[trust_items], as.numeric)
data_clean[close_items] <- lapply(data_clean[close_items], as.numeric)
data_clean[SC_items] <- lapply(data_clean[SC_items], as.numeric)
data_clean[PI_items] <- lapply(data_clean[PI_items], as.numeric)
data_clean[gender_item] <- lapply(data_clean[gender_item], as.numeric)  
as.numeric(data_clean[[gender_item]])
##   [1] 2 2 1 2 2 2 1 1 1 2 2 2 2 1 1 2 2 2 1 2 1 2 2 1 1 1 2 1 1 2 1 1 1 2 2 3 1
##  [38] 2 2 2 2 2 1 2 2 1 1 1 1 1 3 1 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 2 2 1 2 1 1 2
##  [75] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 1 2 2 1 1 2 2 1 2
data_clean[age_item] <- as.numeric(data_clean[[age_item]])
data_clean[freq_item] <- as.numeric(data_clean[[freq_item]])

data_clean$customer_trust <- rowMeans(data_clean[trust_items], na.rm = TRUE)
data_clean$customer_closeness <- rowMeans(data_clean[close_items], na.rm = TRUE)
data_clean$self_congruence <- rowMeans(data_clean[SC_items], na.rm = TRUE)
data_clean$purchase_intention <- rowMeans(data_clean[PI_items], na.rm = TRUE)
data_clean$gender <- data_clean[[gender_item]]
data_clean$age <- data_clean[[age_item]]
data_clean$frequency_of_usage <- rowMeans(data_clean[freq_item], na.rm = TRUE)

correlation_data <- data_clean[, c("customer_trust", "customer_closeness", "self_congruence", "purchase_intention", "gender", "age", "frequency_of_usage")]

correlation_matrix <- cor(correlation_data, use = "pairwise.complete.obs")

print(correlation_matrix)
##                    customer_trust customer_closeness self_congruence
## customer_trust         1.00000000         0.27211792      0.20076515
## customer_closeness     0.27211792         1.00000000      0.52942327
## self_congruence        0.20076515         0.52942327      1.00000000
## purchase_intention     0.58583396         0.26128257      0.19380459
## gender                 0.02905525        -0.08117518     -0.06216484
## age                    0.23632541         0.32307028      0.19661239
## frequency_of_usage     0.10862192         0.06027996     -0.07005607
##                    purchase_intention        gender          age
## customer_trust             0.58583396  0.0290552468 0.2363254121
## customer_closeness         0.26128257 -0.0811751788 0.3230702780
## self_congruence            0.19380459 -0.0621648352 0.1966123927
## purchase_intention         1.00000000 -0.0518922632 0.2054707959
## gender                    -0.05189226  1.0000000000 0.0009887015
## age                        0.20547080  0.0009887015 1.0000000000
## frequency_of_usage         0.18499834  0.0739908151 0.2217920433
##                    frequency_of_usage
## customer_trust             0.10862192
## customer_closeness         0.06027996
## self_congruence           -0.07005607
## purchase_intention         0.18499834
## gender                     0.07399082
## age                        0.22179204
## frequency_of_usage         1.00000000
#calculate p-value
correlation_test <- corr.test(correlation_data)
print(correlation_test$p)
##                    customer_trust customer_closeness self_congruence
## customer_trust       0.000000e+00       9.764494e-02    5.461177e-01
## customer_closeness   5.424719e-03       0.000000e+00    1.787241e-07
## self_congruence      4.200906e-02       8.936207e-09    0.000000e+00
## purchase_intention   8.008005e-11       7.679550e-03    4.981638e-02
## gender               7.707903e-01       4.149978e-01    5.327535e-01
## age                  1.624707e-02       8.730893e-04    4.653374e-02
## frequency_of_usage   2.747568e-01       5.452727e-01    4.819442e-01
##                    purchase_intention    gender        age frequency_of_usage
## customer_trust           1.681681e-09 1.0000000 0.25995319          1.0000000
## customer_closeness       1.305523e-01 1.0000000 0.01658870          1.0000000
## self_congruence          5.584049e-01 1.0000000 0.55840485          1.0000000
## purchase_intention       0.000000e+00 1.0000000 0.52263824          0.6137323
## gender                   6.026646e-01 0.0000000 1.00000000          1.0000000
## age                      3.733130e-02 0.9920917 0.00000000          0.3652197
## frequency_of_usage       6.137323e-02 0.4576153 0.02434798          0.0000000
corrplot(correlation_matrix, method = "number", type = "upper", tl.col = "black")

##Calculate descriptive statistics
correlation_data_2 <- data_clean[, c("customer_trust", "customer_closeness", "self_congruence", "purchase_intention", "frequency_of_usage")]
descriptive_stats <- describe(correlation_data_2)
print(descriptive_stats)
##                    vars   n mean   sd median trimmed  mad min  max range  skew
## customer_trust        1 103 4.07 1.27   4.00    4.10 1.48   1 6.33  5.33 -0.14
## customer_closeness    2 103 3.41 1.50   3.33    3.41 1.98   1 7.00  6.00  0.04
## self_congruence       3 103 3.37 1.50   3.00    3.37 1.48   1 6.00  5.00  0.02
## purchase_intention    4 103 3.95 1.34   4.00    4.04 1.48   1 6.33  5.33 -0.58
## frequency_of_usage    5 103 3.63 1.78   3.00    3.54 1.48   1 7.00  6.00  0.44
##                    kurtosis   se
## customer_trust        -0.65 0.12
## customer_closeness    -0.94 0.15
## self_congruence       -1.15 0.15
## purchase_intention    -0.42 0.13
## frequency_of_usage    -0.72 0.18
summary_stats <- data_clean |>
  group_by(condition)|>
  summarise(
    mean_customer_trust = mean(customer_trust, na.rm = TRUE),
    sd_customer_trust = sd(customer_trust, na.rm = TRUE),
    mean_customer_closeness = mean(customer_closeness, na.rm = TRUE),
    sd_customer_closeness = sd(customer_closeness, na.rm = TRUE),
    mean_self_congruence = mean(self_congruence, na.rm = TRUE),
    sd_self_congruence = sd(self_congruence, na.rm = TRUE),
    mean_purchase_intention = mean(purchase_intention, na.rm = TRUE),
    sd_purchase_intention = sd(purchase_intention, na.rm = TRUE),
  )
summary_stats
## # A tibble: 2 × 9
##   condition mean_customer_trust sd_customer_trust mean_customer_closeness
##   <fct>                   <dbl>             <dbl>                   <dbl>
## 1 1                        3.90              1.19                    3.89
## 2 2                        4.27              1.34                    2.84
## # ℹ 5 more variables: sd_customer_closeness <dbl>, mean_self_congruence <dbl>,
## #   sd_self_congruence <dbl>, mean_purchase_intention <dbl>,
## #   sd_purchase_intention <dbl>
summary_table <- as.data.frame(summary_stats)
summary_table
##   condition mean_customer_trust sd_customer_trust mean_customer_closeness
## 1         1            3.898810          1.187340                3.892857
## 2         2            4.269504          1.338104                2.843972
##   sd_customer_closeness mean_self_congruence sd_self_congruence
## 1              1.451028             3.571429           1.499784
## 2              1.368823             3.127660           1.468762
##   mean_purchase_intention sd_purchase_intention
## 1                3.773810              1.402893
## 2                4.163121              1.235295
##Hypothesis test
# PROCESS for R version 4.3.1
# Written by Andrew F. Hayes
# www.afhayes.com
# www.processmacro.org
# Copyright 2012-2022 by Andrew F. Hayes ALL RIGHTS RESERVED
# Documented in http://www.guilford.com/p/hayes3 and supplements
# PROCESS workshop schedule at http://haskayne.ucalgary.ca/CCRAM
#
# Distribution of this code in any form except through processmacro.org 
# is prohibited without the permission of the copyright holder, as is
# distribution after modification.
#
# THIS SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
# IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM
# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
# OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
# USE OF THIS SOFTWARE IMPLIES AGREEMENT WITH THESE TERMS
#
# To activate, run this script. It may take a few minutes. 
# This will produce a function called process. The other functions
# it creates cannot be accessed by the user but are used by the master 
# process function. This code was not written to be easy for others to
# understand or to look pretty. It was written to work and make some things
# easier to do than they otherwise would be.

process.bcboot3<-function(databcbt,estmte,xp2,badend,priorlo,priorhi)
{
  databcbt<-as.matrix(sort(databcbt))
  badlo<-0;badhi<-0
  pv<-matrix(as.numeric(databcbt < estmte));
  pv<-sum(pv)/nrow(databcbt);ppv<-pv;
  if (pv > .5){ppv<-(1-pv)}
  y5<-sqrt(-2*log(ppv))
  p0<-(-.322232431088);p1<-(-1);p2<-(-.342242088547);p3<-(-.0204231210245)
  p4<-(-.0000453642210148);q0<-(.0993484626060);q1<-(.588581570495)
  q2<-(.531103462366);q3<-(.103537752850);q4<-(.0038560700634)
  xp<-y5+((((y5*p4+p3)*y5+p2)*y5+p1)*y5+p0)/((((y5*q4+q3)*y5+q2)*y5+q1)*y5+q0)
  if (pv <= .5){xp<-(-xp)}
  cilow<-round(nrow(databcbt)*pnorm(2*xp-xp2))
  cihigh<-trunc(nrow(databcbt)*pnorm(2*xp+xp2))+1
  if (cilow < 1){cilow<-1;booterr<-1;badlo<-1}
  if (cihigh > nrow(databcbt)){cihigh<-nrow(databcbt);booterr<-1;badhi<-1}
  llcit<-databcbt[cilow,1]
  ulcit<-databcbt[cihigh,1]
  if ((badlo==1) & (llcit != priorlo)){priorlo<-llcit;badend<-c(badend,llcit)}
  if ((badhi==1) & (ulcit != priorhi)){priorhi<-ulcit;badend<-c(badend,ulcit)}
  bootse<-sd(databcbt)
  cires<-as.matrix(c(bootse,llcit,ulcit))
  cires<-list(cires,badend,priorlo,priorhi)
  return(cires)
}

process.pboot3<-function(databcbt,lcval,hcval)
{
  databcbt<-as.matrix(sort(databcbt))
  llcit<-databcbt[lcval,1]
  ulcit<-databcbt[hcval,1]
  bootse<-sd(databcbt)
  cires<-as.matrix(c(bootse,llcit,ulcit))
  return(cires)
}

process.outform3<-function(outtodo,outbig,resultm,outformc=0)
{
  if ((ncol(outtodo)==1) & (outformc==0)){outtodo<-t(outtodo)}
  resultm2<-matrix(99999,nrow(outtodo),outbig)
  if (ncol(outtodo) <= outbig)
  {
    resultm2[1:nrow(outtodo),1:ncol(outtodo)]<-outtodo
    resultm<-rbind(resultm,resultm2)
    maxresm<-ncol(resultm)
  }
  if (ncol(outtodo) > outbig)
  {
    resultmt<-matrix(99999,nrow(resultm),ncol(outtodo))
    resultmt[1:nrow(resultm),1:ncol(resultm)]<-resultm
    resultm<-resultmt
    resultm2<-matrix(99999,nrow(outtodo),ncol(resultm))
    resultm2[1:nrow(outtodo),1:ncol(outtodo)]<-outtodo
    resultm<-rbind(resultm,resultm2)
    maxresm<-ncol(resultm)
  }
  outform3res<-list(resultm,maxresm)
  return(outform3res)
}

process.llrtest3<-function(lm,y,x,b,basemod,iterate,converge)
{
  lm<-as.matrix(lm)
  btemphld<-b
  llrdat<-matrix(-999,nrow(x),(nrow(lm)-sum(lm)))
  llrdf<-ncol(x)-ncol(llrdat)
  llrcnt<-0
  for (llri in (1:nrow(lm)))
  {
    if (lm[llri,1]==0){llrcnt<-llrcnt+1;llrdat[,llrcnt]<-x[,llri]}
  }
  LL2<-process.modelest(y,llrdat,2,0,xp2,5,iterate,converge)
  b<-btemphld
  pvchi<-(1-pchisq((LL2-basemod),df=llrdf))
  fresult<-cbind((LL2-basemod),llrdf,pvchi)
  return(fresult)
}

process.describ3<-function(descdatf,type=0,quantle=1)
{
  desctmp<-matrix(-999,(8-(4*type)),ncol(descdatf))
  # mean, sd, min, max, 16th, 50th, 84th, dich toggle
  for (jd in c(1:ncol(descdatf)))
  {
    descdat<-descdatf[,jd]
    #get the mean, sd, minimum, and maximum */
    desctmp[1,jd]<-mean(descdat)
    desctmp[2,jd]<-sd(descdat)
    desctmp[3,jd]<-min(descdat)
    desctmp[4,jd]<-max(descdat)
    if (type==0)
    {
      minwarn<-0;maxwarn<-0
      tmp=as.numeric(descdat==desctmp[3,jd])+as.numeric(descdat==desctmp[4,jd])
      desctmp[8,jd]<-as.numeric(sum(tmp)==length(tmp))
      if (desctmp[3,jd]==desctmp[4,jd]){desctmp[8,jd]<-2}
      descdat<-matrix(sort(descdat))
      decval<-c(.16,.5,.84)
      for (kd in c(1:3))
      {
        low<-trunc(decval[kd]*(length(descdat)+1))
        lowdec<-decval[kd]*(length(descdat)+1)-low
        value<-descdat[low,1]+(descdat[(low+1),1]-descdat[low,1])*lowdec
        desctmp[(4+kd),jd]<-value
      }
      mnotev<-(1)
      modvals<-matrix(desctmp[5:7,],ncol=ncol(descdatf))
      if (quantle != 1)
      {
        desctmp[5,jd]<-desctmp[1,jd]-desctmp[2,jd]
        desctmp[6,jd]<-desctmp[1,jd]
        desctmp[7,jd]<-desctmp[1,jd]+desctmp[2,jd]
        modvals<-matrix(desctmp[5:7,],ncol=ncol(descdatf))
        mnotev<-(2)
        if (modvals[1,1] < desctmp[3,1]){modvals[1,1]<-desctmp[3,1];minwarn<-1}
        if (modvals[3,1] > desctmp[4,1]){modvals[3,1]<-desctmp[4,1];maxwarn<-1}
      }
      if (desctmp[8,jd]==1)
      {modvals<-matrix(c(desctmp[3,1],desctmp[4,1]))
      mnotev<-0;minwarn<-0;maxwarn<-0
      }
      descrtrn<-list(desctmp,modvals,minwarn,maxwarn,mnotev)
    }
  }
  if (type==1)
  {descrtrn<-list(desctmp)}
  return(descrtrn)
}

process.ftest3<-function(lm,bcoef,cv=0,chr=0,brsq=0,skip=0,y,x)
{
  lmat2<-as.matrix(lm)
  y<-as.matrix(y)
  x<-as.matrix(x)
  n<-nrow(y)
  if (skip==0)
  {
    lmat2<-as.matrix(diag(as.numeric(lm)))
    lmat3<-matrix(0,nrow(lmat2),1)
    for (flp in c(1:ncol(lmat2)))
    {
      if (sum(lmat2[,flp])==1)
      {lmat3<-cbind(as.matrix(lmat3),as.matrix(lmat2[,flp]))}
    }
    lmat2<-as.matrix(lmat3[,2:ncol(lmat3)])
  }
  fratio<-(t(t(lmat2)%*%bcoef)%*%solve(t(lmat2)%*%cv%*%lmat2)%*%((t(lmat2)%*%bcoef)))/ncol(lmat2)
  pfr<-(1-pf(fratio,ncol(lmat2),(n-nrow(bcoef))))
  fresult<-matrix(c(fratio,ncol(lmat2),(n-nrow(bcoef)),pfr),ncol=4)
  if (chr==1)
  {
    lmat3<-as.matrix(1-rowSums(lmat2))
    xfm<-matrix(0,n,sum(lmat3))
    flpc<-1
    for (flp in (1:nrow(lmat3)))
    {
      if (lmat3[flp,1]==1){xfm[,flpc]=x[,flp];flpc<-flpc+1}
    }
    bfm<-solve(t(xfm)%*%xfm)%*%t(xfm)%*%y
    resid<-y-(xfm%*%bfm)
    sstotal<-t(y-(sum(y)/n))%*%(y-(sum(y)/n))
    ssresid<-t(resid)%*%resid
    rsqch<-as.numeric(brsq)-((sstotal-ssresid)/sstotal)
    fresult<-matrix(c(rsqch,fresult),ncol=5)
  }
  ftestout<-as.matrix(fresult)
  return(ftestout)
}

#type1 for ols, type2 for logistic LLR, type3 for logistic bootstrapping
process.modelest<-function(y,x,type,full,xp2,hc=5,iterate=100,converge=.00001)
{
  if (type==1)
  {
    invxtx<-solve(t(x)%*%x)
    b<-invxtx%*%t(x)%*%y
    modres<-b
    if (full==1)
    {
      n1<-nrow(x)
      dfres<-(n1-(ncol(x)))
      sstotal<-t(y-(sum(y)/n1))%*%(y-(sum(y)/n1))
      resid=y-x%*%b
      ssresid<-sum(t(resid)%*%resid)       
      r2<-(sstotal-ssresid)/sstotal
      adjr2<-(1-((1-r2)*(n1-1)/(dfres)))
      mse<-ssresid/(n1-ncol(x))
      #HC covariance matrix
      varb<-mse*invxtx
      k3<-ncol(x)
      xhc<-0
      if (hc != 5)
      {
        xhc<-x
        hat<-matrix(xhc[,1])
        for (i3 in c(1:nrow(xhc)))
        {
          xhcm<-matrix(xhc[i3,])
          hat[i3,1]<-t(xhcm)%*%invxtx%*%xhcm
        }     
        if ((hc==0) | (hc==1))
        {
          for (i3 in c(1:k3)){xhc[,i3]<-xhc[,i3]*resid}
        }
        if ((hc==3) | (hc==2))
        {
          for (i3 in c(1:k3))
          {xhc[,i3]<-(resid/(1-hat)^(1/(4-hc)))*xhc[,i3]}
        }
        if (hc==4)
        {
          hcmn<-matrix(4,n1,2);hcmn[,2]<-(n1*hat)/k3
          minr<-apply(hcmn,1,FUN=min)
          for (i3 in c(1:k3))
          {
            xhc[,i3]<-(resid/(1-hat)^(minr/2))*xhc[,i3]
          }
        }
        varb<-(invxtx%*%t(xhc)%*%xhc%*%invxtx)
        if (hc==1){varb<-(n1/(n1-ncol(x)))*varb}
      }
      seb<-sqrt(diag(varb))
      trat<-b/seb
      p<-2*pt(-abs(trat),df=dfres)
      tval<-sqrt(dfres* (exp((dfres-(5/6))*((xp2/(dfres-(2/3)+(.11/dfres)))*(xp2/(dfres-(2/3)+(.11/dfres)))))-1))
      modres<-matrix(c(modres,seb, trat,p,(b-tval*seb),(b+tval*seb)),ncol=6)
      modresl<-t(matrix(c("coeff","hclab","t","p","LLCI","ULCI")))
      lmat<-diag(ncol(x));lmat<-lmat[,2:ncol(lmat)]
      fratio<-(t(t(lmat)%*%b)%*%solve(t(lmat)%*%varb%*%lmat)%*%((t(lmat)%*%b)))/(ncol(x)-1)
      pfr<-1-pf(fratio,(ncol(x)-1),dfres)
      modsum=matrix(c(sqrt(r2),r2,mse,fratio,(ncol(x)-1),dfres,pfr))
      modsuml=matrix(c("R","R-sq","MSE","hcflab","df1","df2", "p"))
      modretrn<-list(modres,modresl,modsum,modsuml,b,varb,tval,resid)
      return(modretrn)
    }
    if (full==0){return(modres)} 
  }
  #for logistic Y model
  if ((type==2) | (type==3))
  {
    xlp<-x;ylp<-as.matrix(y)
    pt2<-matrix((sum(ylp)/nrow(ylp)),nrow(ylp),1)
    if ((type==2)|(type==3)) {LL3<-(ylp*log(pt2)+(1-ylp)*log(1-pt2))}    
    LL3<-(-2*sum(LL3))
    bt1<-matrix(0,ncol(xlp),1);LL1<-0
    pt1<-matrix(0.5,nrow(ylp),1);pt1lp<-pt1
    for (jjj in (1:iterate))
    {
      xlptmp<-t(xlp)
      vecprb<-(pt1lp*(1-pt1lp))
      for (kkk in (1:ncol(xlp))){xlptmp[kkk,]<-xlptmp[kkk,]*t(vecprb)}
      b<-bt1+solve(xlptmp%*%xlp)%*%t(xlp)%*%(ylp-pt1lp)
      if ((type==2) | (type==3))
      {
        xlpb<-xlp%*%b
        xlpbt<-as.numeric(xlpb > -709.7)
        xlpb709<-((1-xlpbt)*(-709.7))
        xlpb<-((xlpb*xlpbt)+xlpb709)
        pt1lp<-1/(1+exp(-(xlpb)))
      }
      itprob<-sum((pt1lp < .00000001) | (pt1lp > .9999999))
      if (itprob > 0)
      {
        for (kkk in (1:nrow(pt1lp)))
        {
          if (pt1lp[kkk,1] > .9999999){pt1lp[kkk,1]<-.9999999}     
          if (pt1lp[kkk,1] < .00000001){pt1lp[kkk,1]<-.00000001}     
        }
        itprob<-0
      }
      if (itprob==0)
      {
        if ((type==2)|(type==3)){LL<-(ylp*log(pt1lp)+(1-ylp)*log(1-pt1lp))}
        LL2<-(-2*sum(LL))
      }
      if (abs(LL1-LL2) < converge)
      {
        if (full==1)
        {
          xlptmp<-t(xlp)
          vecprb<-(pt1lp*(1-pt1lp))   
          for (kkk in (1:ncol(xlp))){xlptmp[kkk,]<-xlptmp[kkk,]*t(vecprb)} 
          varb<-solve(xlptmp%*%xlp)
          seb<-matrix(sqrt(diag(varb)))
        }
        break
      }
      bt1<-b;LL1<-LL2
    }
    modres<-b
    if (jjj > iterate)
    {
      itprob<-2
      if (booting==0){iterrmod<-1}   
      if (booting==1){bootiter==1}   
      if (itprobtg==0)
      {   
        itprobtg<-1;errcode[errs,1]<-47;errs<-errs+1
        if ((booting==0) & (full==1))
        {
          pt1lpc<-(pt1lp*(1-pt1lp))
          vt1<-diag(pt1lpc)
          varb<-solve(t(xlp)%*%vt1%*%xlp)
          seb<-matrix(sqrt(diag(varb)))
        }
      }
    }
    if (full==1)
    {
      trat<-b/seb
      dfres<-nrow(xlp)   
      p<-2*(1-pnorm(abs(trat)))
      modres<-cbind(modres,seb,trat,p) 
      modres<-matrix(c(modres,(b-xp2*seb),(b+xp2*seb)),ncol=6)
      pvchi<-(1-pchisq((LL3-LL2),df=(nrow(modres)-1)))
      mcF<-(LL3-LL2)/LL3
      cox<-1-exp(-(LL3-LL2)/nrow(xlp))
      nagel<-cox/(1-exp(-(LL3)/nrow(xlp)))
      modsum<-matrix(c(LL2,(LL3-LL2),(nrow(modres)-1),pvchi, mcF,cox,nagel))
      modsuml<-matrix(c("-2LL","ModelLL", "df", "p", "McFadden", "CoxSnell", "Nagelkrk"))
      modresl<-t(matrix(c("coeff","se","Z","p","LLCI","ULCI")))
      modretrn<-list(modres,modresl,modsum,modsuml,b,varb,xp2)
      return(modretrn)
    }
    if ((full==0) & (type==2)){return(LL2)} 
    if ((full==0) & (type==3)){return(modres)}
  }
}


process.dummy3<-function(dd)
{
  uq<-unique(dd)
  uq<-matrix(unlist(uq[1]))
  dummy<-matrix(0,nrow(dd),nrow(uq))
  uq<-matrix(sort(uq))
  uq2<-matrix(seq(1:nrow(uq)))
  for (i in c(1:nrow(dd)))
  {for (j in c(1:nrow(uq)))
  {if (dd[i,1]==uq[j,1])
  {dummy[i,uq2[j,1]]<-1}  
  }
  }
  return(dummy)
}

process.makdummy<-function(dd,method,custcov=0,custcode=999)
{
  dd<-dd[order(dd[,2]),]
  newrow<-dd[,1]
  dd<-dd[,2]
  dd<-as.data.frame(dd)
  dummy<-process.dummy3(dd)
  uq<-unique(dd);uq<-matrix(unlist(uq[1]))
  criterrd<-0;errcode5<-0;errcode4<-0;errcode6<-0
  nvls<-ncol(dummy)
  nnvls<-colSums(dummy)
  mnvls<-min(nnvls)
  nnvls<-matrix(sort(uq))
  conmat1<-1
  if (mnvls < 2){errcode5<-1;criterrd<-1}
  if (nvls > 9){errcode4<-1;criterrd<-1}
  x<-0;dummat<-0
  if (criterrd==0)
  {
    dumok<-1
    if (method > 0)
    {
      x<-dummy[,2:ncol(dummy)]
      nx<-ncol(x)
      minus1<-matrix(-1,1,ncol(x))
      if (method==4)
      {
        for (k in (1:nrow(dd)))
        {shole<-sum(x[k,])
        if (shole==0)
        {x[k,]<-minus1}}
      }
      if ((method==2) | (method==3) | (method==5))
      {
        for (k in (1:nrow(dd)))
        {shole<-sum(x[k,])
        if (shole > 0)
        {
          for (i in (1:ncol(x)))
          {if (x[k,i]==0){x[k,i]<-1} else{break}
          }
        }
        }
        if (method==3)
        {
          conmat1=c(-8,1,1,1,1,1,1,1,1,0,-7,1,1,1,1,1,1,1,0,0,-6,1,1,1,1,1,1,0,0,0,-5,1,1,1,1,1,0,0,0,0,-4,1,1,1,1,0,0,0,0,0,-3,1,1,1,0,0,0,0,0,0,-2,1,1,0,0,0,0,0,0,0,-1,1)
          conmat1<-t(matrix(conmat1,9,8))
          for (i in (1:8)){conmat1[i,]=conmat1[i,]/(10-i)}
          conmat1<-t(conmat1[(10-nvls):8,(10-nvls):9])
          for (k in (1:nrow(dd)))
          {shole<-sum(x[k,]);x[k,]=conmat1[(shole+1),]}
        }
      }
      if (method==5)
      {
        if (ncol(custcode) != (nvls*(nvls-1)))
        {errcode6<-1}
        if (ncol(custcode)==(nvls*(nvls-1)))
        {
          conmat1<-matrix(0,nvls,(nvls-1));cnt<-1
          for (i in (1:nvls))
          {
            for (k in (1:(nvls-1)))
            {conmat1[i,k]<-custcode[1,cnt];cnt<-cnt+1}
          }
          for (k in (1:nrow(dd))){x[k,]<-conmat1[(sum(x[k,])+1),]}   #check this
        }
      }
      xskip<-1
      dummat<-matrix(0,(nx+1),nx)
      dummat[(2:nrow(dummat)),]<-diag(nx)
      if (method==4){dummat[1,]<-minus1}
      if (method==2)
      {for (i in 2:nrow(dummat))
      {for (j in (1:(i-1))){dummat[i,j]<-1}}
      }
      if (method==3){dummat<-conmat1}
      if ((method==5) & (errcode6==0)){dummat<-conmat1}
      dummat<-cbind(nnvls,dummat)
    } 
    x<-cbind(newrow,x)
    x<-x[order(x[,1]),]
  }
  dummrn<-list(x,dummat,nvls,nnvls,errcode4,errcode5,errcode6)
  return(dummrn)
}



process<-function(data,y="xxxxx",x="xxxxx",m="xxxxx",w="xxxxx",z="xxxxx",cov="xxxxx",
                  model=999,converge=.00001,iterate=100,hc=5,jn=0,effsize=0,stand=0,xmtest=0,normal=0,
                  mdichok=0,contrast=999,modelbt=0,matrices=0,covmy=0,covcoeff=0,boot=5000,mc=0,
                  intprobe=0.1,plot=0,total=0,save=0,mcx=0,mcw=0,mcz=0,moments=0,progress=1,exclude=0,
                  bmatrix=-999,wmatrix=-999,zmatrix=-999,wzmatrix=-999,cmatrix=-999,xcatcode=999,
                  wcatcode=999,zcatcode=999,wmodval=999,zmodval=999,center=0,conf=95,seed=-999,
                  decimals=9.4,maxboot=0,modelres=0,bc=0,outscreen=1,activate=0,describe=0,listmiss=0,
                  linsum=-999,xmint=0,xrefval=999,coval=-999,cdeval=-999)
{
  
  #all this is initiation of variables and matrices
  ranseed<-0;
  if (seed != -999)
  {seed<-trunc(abs(seed));set.seed(seed)}
  wnames<-w;znames<-z;mcerpt<-0;wiscov<-0;ziscov<-0;itprobtg<-0;
  v2tag<-0;maxwwarn<-0;minwwarn<-0;maxzwarn<-0;minzwarn<-0
  toomany<-0;wdich<-0;zdich<-0;wnotev<-0;znotev<-0;singlr<-0
  nxpval<-1;nwpval<-1;nzpval<-1;errs<-1;notes<-1;criterr<-0
  novar<-0;adjust<-0;ncs<-0;serial<-0;sobelok<-0;hasw<-0;ydich<-0;
  hasz<-0;printw<-0;printz<-0;xmint<-as.numeric(xmint==1);
  wmodcust<-0;zmodcust<-0
  booting<-0;bootiter<-0;iterrmod<-0;model<-trunc(model)
  errcode<-matrix(0,100,1);notecode<-matrix(0,100,1)
  iterate<-abs(trunc(iterate));converge=abs(converge);badend<-0;booterr<-0;
  itprobtg<-0;v2tag<-0;maxwwarn<-0;minwwarn<-0;maxzwarn<-0
  minzwarn<-0;toomany<-0;wdich<-0;zdich<-0;wnotev<-0;znotev<-0
  nws<-0;nzs<-0;nms<-0;nys<-0;nxs<-0;maxresm<-9;bc<-as.numeric(bc==1);progress<-as.numeric(progress==1)
  mcxok<-0;mcwok<-0;mczok<-0;xprod<-0;zprod<-0;wprod<-0;modcok<-0;alttotal=0;bc<-as.numeric(bc==1)
  jn<-as.numeric(jn==1);effsize<-as.numeric(effsize==1);maxboots=abs(trunc(maxboot))
  normal<-as.numeric(normal==1);xmtest<-as.numeric(xmtest==1);modelres<-as.numeric(modelres==1)
  stand<-as.numeric(stand==1);outscreen<-as.numeric(outscreen==1);activate<-as.numeric(activate==1)
  xrefvals<-t(matrix(xrefval));xcontcf<-0;xscaling<-1;
  cdeval<-t(matrix(cdeval))
  cuscoval=0
  if (model==74)
  {errcode[errs,1]<-7;errs<-errs+1;criterr<-1}
  if ((xmint==1) & (model != 4))
  {errcode[errs,1]<-63;errs<-errs+1;criterr<-1}
  if ((xmint==1) & (model==4))
  {
    w<-x;model<-74;intprobe<-1
    notecode[notes,1]<-32;
    notes<-notes+1
    if ((effsize==1) | (stand==1))
    {notecode[notes,1]<-34;notes<-notes+1;stand<-0;effsize<-0}
    if (center != 0)
    {center<-0;errcode[errs,1]<-71;errs<-errs+1;criterr<-1}
  }
  describe<-as.numeric(describe==1);listmiss<-as.numeric(listmiss==1);
  if (stand==1) {effsize<-1}
  pstog<-0;sobelok<-0;mdichok=as.numeric(mdichok==1)
  resultm<-matrix(99999,1,maxresm)
  linsum<-t(matrix(linsum))
  nlinsum<-ncol(linsum)
  if (linsum[1,1]==-999){nlinsum<-0}
  deleteme<-matrix(exclude)
  #contrast matrix
  contrast<-matrix(contrast)
  contrast<-t(contrast)
  ncontr<-ncol(contrast)
  if (contrast[1,1]==999) {ncontr<-1;contrast[1,1]<-0}
  if (ncontr==1)
  {
    contrast<-trunc(contrast)
    if ((contrast[1,1] > 2) | (contrast[1,1] < 0))
    {ncontr<-1;contrast[1,1]<-0}
  }
  if (ncontr > 1)
  {
    contvec<-contrast;contrast[1,1]<-3
    if (((model==2) | (model==3)) & (nms==0))
    {
      if (ncontr==4)
      {
        contvec<-t(matrix(contvec,2,2))
        contrast[1,1]<-0;modcok<-1;wcontval<-matrix(contvec[,1]);zcontval<-matrix(contvec[,2])
      }
      if (ncontr !=4)
      {
        notecode[notes,1]<-19;notes<-notes+1
        contrast[1,1]<-0
      }
    }
  }
  contrast<-contrast[1,1]
  if ((xmint==1) & (contrast != 0))
  {contrast<-0;notecode[notes,1]<-37;notes<-notes+1}
  modelbt<-as.numeric(modelbt==1);matrices<-as.numeric(matrices==1)
  covcoeff<-as.numeric(covcoeff==1);covmy<-trunc(covmy)
  if ((covmy < 0) | (covmy > 2)) {covmy<-0} 
  boot<-abs(trunc(boot));mc=abs(trunc(mc));hc=trunc(hc)
  if ((intprobe < 0) | (intprobe > 1))
  {intprobe<-0.10}
  plot<-trunc(plot)
  if ((plot < 0) | (plot > 2)) {plot<-0}
  total<-as.numeric(total==1)
  dototal<-0
  saveboot<-as.numeric((save==1)|(save==3))
  saveest<-as.numeric(save > 1)
  if (saveest==1){intprobe=1}
  if ((hc >=0) & (hc < 5)) {notecode[notes,1]<-4;notes=notes+1}
  if ((hc > 5) | (hc < 0)) {hc=5}
  ####dont use these when y is dichotomous
  hclab<-matrix(c("se(HC0)","se(HC1)","se(HC2)","se(HC3)","se(HC4)","se"))
  hclab<-hclab[(hc+1),1]
  hcflab<-matrix(c("F(HC0)","F(HC1)","F(HC2)","F(HC3)","F(HC4)","F"))
  hcflab<-hcflab[(hc+1),1] 
  mcw=trunc(mcw);mcz=trunc(mcz);mcx=trunc(mcx);
  if ((mcx > 0) & (mcx < 3) &(model==74)) {mcw<-mcx;xscaling<-1}
  if ((mcx > 2) & (model==74))
  {errcode[errs,1]<-65;errs<-errs+1;criterr<-1}
  if ((model==74) & (normal==1))
  {notecode[notes,1]<-33;normal<-0;notes<-notes+1}
  if ((mcx > 0) & (contrast > 0))
  {notecode[notes,1]<-28;notes<-notes+1;contrast<-0}
  nxvls<-1;nmvls<-1;nwvls<-1;nzvls<-1
  paths<-matrix(999);pathsw<-matrix(999);pathsz<-matrix(999);
  pathswz<-matrix(999);pathsmod<-matrix(999);pathtype<-matrix(999);obscoeff<-999;
  pathsdv=matrix(" ");quantile<-1;moments=as.numeric(moments==1)
  if (moments==1){quantile<-0}
  bmatrix=t(matrix(bmatrix));wmatrix=t(matrix(wmatrix));zmatrix=t(matrix(zmatrix));
  wzmatrix=t(matrix(wzmatrix));cmatrix=t(matrix(cmatrix));xcatcode=t(matrix(xcatcode));
  wcatcode=t(matrix(wcatcode));zcatcode=t(matrix(zcatcode));
  needed<-0
  decimals<-paste("%",decimals,"f",sep='')
  if ((trunc(conf) >= 100) | (trunc(conf <= 50)))
  {conf=95;notecode[notes,1]<-2;notes=notes+1}
  if ((model >= 0)  & (model < 4) & (modelbt==0)) {boot<-0;mc<-0;bc<-0;saveboot<-0}
  if ((boot > 0) & (mc > 0)) {boot<-0;bc<-0}
  if ((boot < 1000) & (boot > 0) & (mc==0)){boot=5000}
  if ((mc < 1000) & (mc > 0) & (boot==0)){mc=5000}
  
  #if ((model > 0) & (model < 4) & (boot = 98765) & (modelbt=1)) then;do;mc=0;boot=5000;end;
  #if ((model > 0) & (model < 4) & ((boot = 98765) | (mc > 0))) then;do;boot=0;mc=0;bc=0;end;
  #if ((boot = 98765) & (mc = 0)) then;do;boot=5000;end;
  
  p0<- -.322232431088;p1<- -1;p2<- -.342242088547;p3<- -.0204231210245;
  p4<- -.0000453642210148;q0<- .0993484626060;q1<- .588581570495;
  q2<- .531103462366;q3<- .103537752850;q4<- .0038560700634;
  priorlo<-(-9999999);priorhi<-9999999
  alpha2<-(1-(conf/100))/2;cilm<-alpha2*2;y5<-sqrt(-2*log(alpha2));
  xp2=(y5+((((y5*p4+p3)*y5+p2)*y5+p1)*y5+p0)/((((y5*q4+q3)*y5+q2)*y5+q1)*y5+q0))
  medlb=matrix(c("   M1 :","   M2 :","   M3 :","   M4 :","   M5 :","   M6 :","   M7 :","   M8 :","   M9 :","  M10 :"))
  medlb2=matrix(c("(M1)","(M2)","(M3)","(M4)","(M5)","(M6)","(M7)","(M8)","(M9)","(M10)"))
  xlb=matrix(c("X1 :","X2 :","X3 :","X4 :","X5 :","X6 :","X7 :","X8 :","X9 :","X10:"))
  highlbw=matrix(c("M1*W","M2*W","M3*W","M4*W","M5*W","M6*W","M7*W","M8*W","M9*W","M10*W"))
  if (xmint==1)
  {highlbw=matrix(c("M1*X","M2*X","M3*X","M4*X","M5*X","M6*X","M7*X","M8*X","M9*X","M10*X"))}
  highlbz=matrix(c("M1*Z","M2*Z","M3*Z","M4*Z","M5*Z","M6*Z","M7*Z","M8*Z","M9*Z","M10*Z"))
  highlbwz=matrix(c("M1*W*Z","M2*W*Z","M3*W*Z","M4*W*Z","M5*W*Z","M6*W*Z","M7*W*Z","M8*W*Z","M9*W*Z","M10*W*Z"))
  highlbx=matrix(c("M1*X","M2*X","M3*X","M4*X","M5*X","M6*X","M7*X","M8*X","M9*X","M10*X"))
  highlbbt=matrix(c("BOTH(M1)","BOTH(M2)","BOTH(M3)","BOTH(M4)","BOTH(M5)","BOTH(M6)","BOTH(M7)","BOTH(M8)","BOTH(M9)","BTH(M10)"))
  skipwz=0
  xnck=matrix(x);ynck=matrix(y);wnck=matrix(w);znck=matrix(z);mnck=matrix(m);cnck=matrix(cov)
  if ((nrow(xnck)>1) | (nrow(ynck)>1) | (nrow(wnck)>1) | (nrow(znck)>1))
  {errcode[errs,1]<-3;errs<-errs+1;criterr<-1}
  
  
  validm=matrix(c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0,
                  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1))
  dim(validm)<-c(1,92)
  
  # check for major errors in syntax
  if (activate==1)
  {errcode[errs,1]<-60;errs<-errs+1;criterr<-1}
  if (criterr==0)
  {
    if ((model > 0) & (model < 93))
    {
      if (validm[1,model]==0)
      {
        errcode[errs,1]<-6;errs<-errs+1;criterr<-1
      }
    }
    if (((model > 92) | (model < 0)) & (model != 999))
    {errcode[errs,1]<-7;errs<-errs+1;criterr<-1}
    if ((model==999) & (bmatrix[1,1]==-999))
    {errcode[errs,1]<-24;errs<-errs+1;criterr<-1}
    if ((model != 999) & (bmatrix[1,1] != -999))
    {errcode[errs,1]<-25;errs<-errs+1;criterr<-1}
    if (((model==74) | ((model > 0) & (model < 4))) & ((wmatrix[1,1] !=-999) | (zmatrix[1,1] != -999) | (wzmatrix[1,1] != -999)))
    {errcode[errs,1]<-41;errs<-errs+1;criterr<-1}
    if ((y=="xxxxx") | (x=="xxxxx"))
    {errcode[errs,1]<-1;errs<-errs+1;criterr<-1}
    if ((mnck[1,1]=="xxxxx") & (model > 3))
    {errcode[errs,1]<-8;errs<-errs+1;criterr<-1}
  } 
  #end of check for major errors in syntax
  
  
  #A loop reads data and does some other things
  
  if (criterr==0)
  {
    #read y data
    ytmp<-data[y];nys<-ncol(ytmp);needed<-nys
    ynames<-matrix(y);n<-nrow(ytmp);varnames<-matrix(ynames)
    dat<-ytmp
    modelvar<-matrix(c(model,ynames))
    if (xmint==1)
    {modelvar[1,1]="4"}
    if (model==999){modelvar[1,1]="CUSTOM"}
    
    #read x data
    xtmp<-data[x];
    nxs<-ncol(xtmp);needed<-needed+nxs;
    dat<-cbind(dat,xtmp)
    xnames<-matrix(x);n<-nrow(xtmp);xcatlab<-xnames;
    varnames<-matrix(c(varnames,xnames))
    modelvar<-matrix(c(modelvar,xnames))
    if (nxs==1){modelvlb<-matrix(c("Model :","    Y :","    X :"))}
    
    #read m data
    if (mnck[1,1] != "xxxxx")
    {
      mtmp<-data[m]
      nms<-ncol(mtmp)
      mnames<-matrix(m)
      mprod<-matrix(0,1,nms)
      n<-nrow(mtmp)
      needed<-needed+nms
      varnames<-matrix(c(varnames,mnames))
      dat<-cbind(dat,mtmp)
      modelvar<-matrix(c(modelvar,mnames))
      x2m<-matrix(0,99,nms)
      x2m<-matrix(0,99,nms)
      x2y<-matrix(0,99,nms)
      onem<-matrix(1,nms,1)
      if ((nms > 1) & (nms < 11))
      {modelvlb<-matrix(c(modelvlb,medlb[1:nms,1]))}
      if (nms==1)
      {modelvlb<-matrix(c(modelvlb,"    M :"))}
      if ((nms > 0) & (model < 4)){errcode[errs,1]<-9;errs<-errs+1;criterr<-1}
    }
    
    #read w data
    wlocatet<-0;wlocate<-0
    if (w != "xxxxx")
    {
      if (xmint==0)
      {wtmp<-data[w];wnames<-matrix(w)}
      if (xmint==1)
      {wtmp<-data[x];wnames<-matrix(x)}
      nws=ncol(wtmp);n<-nrow(wtmp)
      dat<-cbind(dat,wtmp)
      wcatlab<-wnames
      varnames<-matrix(c(varnames,wnames))
      wlocate<-nrow(varnames)
      if (model==74)
      {
        wlocatet<-1;
        if (xnames != wnames)
        {errcode[errs,1]<-45;errs<-errs+1;criterr<-1}
      }
      if (xmint != 1)
      {modelvar<-matrix(c(modelvar,wnames))
      modelvlb<-matrix(c(modelvlb,"    W :"))}     
    }
    
    #read z data
    if (z != "xxxxx")
    {
      ztmp<-data[z];nzs<-ncol(ztmp);n<-nrow(ztmp);
      dat<-cbind(dat,ztmp)
      znames<-matrix(z);zcatlab<-znames;
      varnames<-matrix(c(varnames,znames))
      modelvar<-matrix(c(modelvar,znames))
      modelvlb<-matrix(c(modelvlb,"    Z :"))
    }
    
    #read cov data
    if (cnck[1,1] != "xxxxx")
    {
      ctmp<-data[cov];ncs<-ncol(ctmp);n<-nrow(ctmp);
      dat<-cbind(dat,ctmp)
      covnames<-matrix(cov);varnames<-matrix(c(varnames,covnames));  
    }
    
    if (((model==80) | (model==81)) & ((nms < 3) | (nms > 6)))
    {errcode[errs,1]<-32;errs<-errs+1;criterr<-1}
    if ((model==82) & (nms != 4))
    {errcode[errs,1]<-33;errs<-errs+1;criterr<-1}
    if (nms > 10)
    {errcode[errs,1]<-37;errs<-errs+1;criterr<-1}
    if (((model==6) | ((model > 82) & (model < 999))) & ((nms < 2) | (nms > 6)))
    {errcode[errs,1]<-34;errs<-errs+1;criterr<-1}
    
    #check for redundant variable names
    match<-0;match2<-0;mcwzcov<-0
    for (i in c(1:(nrow(varnames)-1)))
    {
      for (j in c((i+1):nrow(varnames)))
      {
        if (varnames[i]==varnames[j])
        {
          if (i < (nxs+nms+nys+1)){match2<-match2+1}
          if ((wlocatet==1) & (i==2) & (j==wlocate)){match2<-match2-1}
          if ((wnames==znames) & ((nws > 0) | (nzs > 0))){match<-match2+1} 
          if ((i < (nrow(varnames)-ncs+1)) & (j > (ncol(varnames)-ncs)))
          {
            if ((varnames[j]==wnames) & (mcw==0))
            {match<-0;wiscov<-(j-(nrow(varnames)-ncs))}
            if ((varnames[j]==wnames) & (mcw !=0)){mcwzcov<=0}
            if ((varnames[j]==znames) & (mcz==0))
            {match<-0;ziscov<-(j-nrow(varnames)-ncs)}
            if ((varnames[j]==znames) & (mcz !=0)){mcwzcov<-0}
          }
        }
      }
    }  
    if ((match2 > 0) | (match==1))
    {errcode[errs,1]<-2;errs<-errs+1;criterr<-1}
    if (mcwzcov==1)
    {errcode[errs,1]<-50;errs<-errs+1;criterr<-1}
    
    #check for factors and non numeric
    hello<-as.numeric(sapply(dat,is.factor))
    nfacs<-sum(hello)
    hello2<-as.numeric(sapply(dat,is.numeric))
    nnonnum<-sum(1-hello2)
    if ((nfacs > 0) | (nnonnum > 0)){errcode[errs,1]<-53;errs<-errs+1;criterr<-1}
    
    if (criterr==0)
    {
      
      #listwise deletion
      ninit<-nrow(dat);rownum<-seq(1:nrow(dat));rownumd<-matrix(0,nrow(dat),1);dat<-cbind(rownum,dat)
      datms<-is.na(dat)
      datms<-matrix(as.numeric(datms),nrow(datms))
      datms<-matrix(rowSums(datms))
      missrow<-0;delrow<-0;nmiss<-0;delident<-0;j<-1
      for (i in 1:ninit)
      {
        for (k in 1:nrow(deleteme))
        {if (deleteme[k,1]==i){rownumd[i,1]<-1}}
      }
      missrow<-matrix(missrow)
      for (i in 1:ninit)
      {
        delskip<-0;
        if ((rownumd[i,1]==1) & (delskip==0)){delskip<-1;delident<-1}
        if ((datms[i,1] > 0) & (delskip==0))
        {missrow<-cbind(missrow,i);nmiss<-nmiss+1;delskip<-1}
        if (delskip==0)
        {dat[j,]<-dat[i,];j<-(j+1)}      
      }   
      if (delident==1){notecode[notes,1]<-38;notes<-notes+1}
      missrow<-matrix(missrow)
      if (nrow(missrow) > 1)
      {
        missrow<-missrow[2:nrow(missrow)]
        notecode[notes,1]<-29;
        notes<-notes+1;
        missrow<-t(matrix(missrow))
      }  
      #dat<-na.omit(dat);n<-nrow(dat);
      if (j < 5)
      {errcode[errs,1]<-62;errs<-errs+1;criterr<-1}
      if (criterr==0)
        #startit
      {
        rownum<-matrix(dat[1:(j-1),1]);dat<-dat[1:(j-1),2:ncol(dat)]
        n<-nrow(dat)
        #extract the data back into vectors or matrices
        ytmp=as.data.frame(dat[,1:nys])
        desctmp2<-process.describ3(ytmp,0,quantile)
        desctmp<-matrix(unlist(desctmp2[1]))
        ysd<-desctmp[2,1];ovsd<-matrix(ysd);ydich<-0
        if (desctmp[8,1]==2){errcode[errs,1]<-15;errs<-errs+1;criterr<-1;novar<-1}
        if (desctmp[8,1]==1)
        {
          ydich<-1;
          if (total==1){total<-0;notecode[notes,1]<-24;notes<-notes+1}
          if (effsize==1){effsize<-0;notecode[notes,1]<-25;notes<-notes+1}
          if (model==74){errcode[errs,1]<-72;errs<-errs+1;criterr<-1}
          omx<-max(ytmp);omn<-min(ytmp)
          ytmp<-matrix(as.numeric(ytmp==omx),ncol=nys)
          dat[,1:nys]<-matrix(as.numeric(dat[,1:nys]==omx),ncol=nys)
          rcd<-c(omn,omx,0,1);dim(rcd)<-c(2,2)
        }
        xtmp<-as.data.frame(dat[,(nys+1):(nys+nxs)])
        desctmp2<-process.describ3(xtmp,0,quantile)
        desctmp<-matrix(unlist(desctmp2[1]))
        xsd<-desctmp[2,1]
        if ((desctmp[8,1]==2) & (novar==0))
        {errcode[errs,1]<-15;errs<-errs+1;criterr<-1;novar<-1}
        xmodvals<-matrix(unlist(desctmp2[2]))
        xdich<-desctmp[8,1]
        xmx=max(xtmp);xmn=min(xtmp)
        if ((mcx > 0) & (xrefvals[1,1] != 999) & (xmint==1) & (model== 74))
        {notecode[notes,1]<-36;notes=notes<-1}
        if (mcx==0)
        {
          if ((ncol(xrefvals)>2) & (model==74) & (xmint==1))
          {errcode[errs,1]<-67;errs<-errs+1;criterr<-1}
          if ((model==74) & (xmint==1))
          {
            if ((xrefvals[1,1]==999) & (nxvls==1) & (xdich==0))
            {errcode[errs,1]<-66;errs=errs<-1;criterr<-1}
            if ((xrefvals[1,1]==999) & (xdich==1))
            {xrefvals<-t(matrix(c(xmn,xmx)));xscaling<-xrefvals[1,2]-xrefvals[1,1]}
            if ((ncol(xrefvals)==1) & (xrefvals[1,1] != 999))
            {
              if (xdich==0)
              {
                xrefvals<-t(matrix(c(xrefvals,(xrefvals[1,1]+1))))
                xscaling<-xrefvals[1,2]-xrefvals[1,1]
              }
              if (xdich==1)
              {
                if ((xrefvals[1,1] != xmx) & (xrefvals[1,1] != xmn))
                {errcode[errs,1]<-70;errs<-errs+1;criterr<-1}
                if (xrefvals[1,1]==xmx)
                {xrefvals<-t(matrix(c(xrefvals,xmn)));xscaling<-xrefvals[1,2]-xrefvals[1,1]}
                if (xrefvals[1,1]==xmn)
                {xrefvals<-t(matrix(c(xrefvals,xmx)));xscaling<-xrefvals[1,2]-xrefvals[1,1]}
              }
            }
            if (ncol(xrefvals)==2)
            {
              xscaling<-xrefvals[1,2]-xrefvals[1,1]
              if (xdich==1)
              {
                xreferr<-1
                if (((xrefvals[1,1]==xmx) & (xrefvals[1,2]==xmn)) | ((xrefvals[1,1]==xmn) & (xrefvals[1,2]==xmx)))
                {xreferr<-0}
                if (xreferr==1)
                {errcode[errs,1]<-70;errs<-errs+1;criterr<-1}                
              }
            }
          }
        }
        if ((xmint==1) & (model==74) & (mcx==0))
        {xmodvals=t(xrefvals);xcontcf=1}
        nxpval<-nrow(xmodvals)
        xprobval<-as.matrix(xmodvals)
        if ((xdich==1) & (mcx > 0))
        {mcx<-0;errcode[errs,1]<-52;errs<-errs+1;criterr<-1}
        #if ((model==74) & (xdich==1)){xmint=1}
        if (nms > 0)
        {
          mtmp<-as.data.frame(dat[,(nys+nxs+1):(nys+nxs+nms)])
          desctmp2<-process.describ3(mtmp,0,quantile)
          desctmp<-matrix(unlist(desctmp2[1]),ncol=ncol(mtmp))
          ovsd<-matrix(c(desctmp[2,],ysd))
          medmeans<-cdeval;
          if ((cdeval[1,1] != -999) & (ncol(medmeans) != nms) & (model==74))
          {errcode[errs,1]<-64;errs<-errs+1;criterr<-1}
          if ((cdeval[1,1]==-999) & (model==74))     
          {medmeans<-t(matrix(desctmp[1,]))}
          if ((cdeval[1,1] != -999) & (model==74) & (criterr==0))
          {notecode[notes,1]<-31;notes<-notes+1}
          zzzz<-rowSums(desctmp)
          if ((zzzz[8]>0) & (mdichok != 1))
          {errcode[errs,1]<-43;errs<-errs+1;criterr<-1}   
          mmodvals<-matrix(unlist(desctmp2[2]),ncol=ncol(mtmp))
          mprobval<-mmodvals
        }
        
        
        if (nws > 0)
        {
          wtmp<-as.data.frame(dat[,(nys+nxs+nms+1):(nys+nxs+nms+nws)])
          desctmp2<-process.describ3(wtmp,0,quantile)
          desctmp<-matrix(unlist(desctmp2[1]))
          if ((desctmp[8,1]==2) & (novar==0))
          {errcode[errs,1]<-15;errs<-errs+1;criterr<-1;novar<-1}
          wmodvals<-matrix(unlist(desctmp2[2]))
          wdich<-desctmp[8,1]
          if ((wdich==1) & (mcw > 0))
          {mcw<-0;errcode[errs,1]<-52;errs<-errs+1;criterr<-1}
          wmin<-desctmp[3,1]
          wmax<-desctmp[4,1] 
          minwwarn<-matrix(unlist(desctmp2[3]));maxwwarn<-matrix(unlist(desctmp2[4]))
          wnotev<-matrix(unlist(desctmp2[5]))
          wmodval<-t(matrix(wmodval))
          if ((xmint==1) & (model==74) & (mcx==0))
          {wmodval<-xrefvals}
          nwcontr<-ncol(wmodval)
          if (wmodval[1,1] != 999)
          {
            wmodvals<-matrix(wmodval[1,1]);wmodcust<-1
            if (nwcontr > 1){wmodvals<-t(wmodval)}
            minwwarn<-0;maxwwarn<-0;wnotev<-0
          }
          wprobval<-as.matrix(wmodvals)
          nwpval<-nrow(wmodvals)
        }
        
        if (nzs > 0)
        {
          ztmp<-as.data.frame(dat[,(nys+nxs+nms+nws+1):(nys+nxs+nms+nws+nzs)])
          desctmp2<-process.describ3(ztmp,0,quantile)
          desctmp<-matrix(unlist(desctmp2[1]))
          if ((desctmp[8,1]==2) & (novar==0))
          {errcode[errs,1]<-15;errs<-errs+1;criterr<-1;novar<-1}
          zmodvals<-matrix(unlist(desctmp2[2]))
          zdich<-desctmp[8,1]
          if ((zdich==1) & (mcz > 0))
          {mcz<-0;errcode[errs,1]<-52;errs<-errs+1;criterr<-1}
          zmin<-desctmp[3,1]
          zmax<-desctmp[4,1] 
          minzwarn<-matrix(unlist(desctmp2[3]));maxzwarn<-matrix(unlist(desctmp2[4]));
          znotev<-matrix(unlist(desctmp2[5]))
          zmodval<-t(matrix(zmodval))
          nzcontr<-ncol(zmodval)
          if (zmodval[1,1] != 999)
          {
            zmodvals<-matrix(zmodval[1,1]);zmodcust<-1
            if (nzcontr > 1){zmodvals<-t(zmodval)}
            minzwarn<-0;maxzwarn<-0;znotev<-0
          }
          zprobval<-as.matrix(zmodvals)
          nzpval<-nrow(zmodvals)
        }
        if (ncs > 0)
        {
          ctmp<-as.data.frame(dat[,(nys+nxs+nms+nws+nzs+1):(nys+nxs+nms+nws+nzs+ncs)])
          covmean2<-process.describ3(ctmp,1,quantile)
          covmeans<-matrix(unlist(covmean2[1]),ncol=ncs);covmeans<-matrix(covmeans[1,],nrow=1)
        }
        coval<-t(matrix(coval))
        if ((coval[1,1] != -999) & (ncol(coval) != ncs) & (model==74))
        {errcode[errs,1]<-69;errs<-errs+1;criterr<-1}
        if ((coval[1,1] != -999) & (criterr==0) & (model==74))
        {notecode[notes,1]<-35;notes<-notes+1;cuscoval<-1}
        n<-nrow(ytmp)
        ones<-matrix(1,n,1)
        modresid<-matrix(9999,n,1)
        #creat codes for categorical variables
        if ((nws > 0) & (mcw > 0))
        {
          tmp<-cbind(rownum,wtmp[,1])
          dumtmp<-process.makdummy(tmp,mcw,2,wcatcode)
          wmodvals<-matrix(unlist(dumtmp[4]))
          nwpval<-nrow(wmodvals)
          errcode4<-unlist(dumtmp[5])
          errcode5<-unlist(dumtmp[6])
          errcode6<-unlist(dumtmp[7])
          if (errcode4==1){errcode[errs,1]<-4;errs<-errs+1;criterr<-1}
          if (errcode5==1){errcode[errs,1]<-5;errs<-errs+1;criterr<-1}
          if (errcode6==1){errcode[errs,1]<-39;errs<-errs+1;criterr<-1}   
          if (criterr==0)
          {
            nvls<-unlist(dumtmp[3])
            nwvls<-nvls-1
            minwwarn<-0;maxwwarn<-0;wnotev<-0
            wtmp<-matrix(unlist(dumtmp[1]),ncol=(nwvls+1))
            wtmp<-wtmp[,2:ncol(wtmp)];wtmp<-as.data.frame(wtmp)
            wcatlab<-c("W1","W2","W3","W4","W5","W6","W7","W8","W9")
            if (xmint==1)
            {wcatlab<-c("X1","X2","X3","X4","X5","X6","X7","X8","X9")}
            wcatlab<-matrix(wcatlab)
            mcwok<-1
            dummatw<-matrix(unlist(dumtmp[2]),ncol=(nwvls+1),nrow=(nwvls+1))
            wprobval<-dummatw[,2:ncol(dummatw)]
            if (modcok==1)
            {
              wcontval<-matrix(-999,2,ncol(wprobval))
              temp<-0
              for (i in (1:2))
              {
                for (j in (1:nrow(dummatw)))
                {
                  if (contvec[i,1]==dummatw[j,1])
                  {wcontval[i,]<-wprobval[j,];temp<-temp+1}
                }
              }
              if (temp < 2)
              {notecode[notes,1]<-20;notes<-notes+1;modcok<-0}
            }
            if ((wmodval[1,1] != 999) & (xmint != 1))
            {notecode[notes,1]<-9;notes<-notes+1}
          }
        }
        if ((nzs > 0) & (mcz > 0))
        {
          tmp<-cbind(rownum,ztmp[,1])
          dumtmp<-process.makdummy(tmp,mcz,3,zcatcode)
          zmodvals<-matrix(unlist(dumtmp[4]))
          nzpval<-nrow(zmodvals)
          errcode4<-unlist(dumtmp[5])
          errcode5<-unlist(dumtmp[6])
          errcode6<-unlist(dumtmp[7])
          if (errcode4==1){errcode[errs,1]<-4;errs<-errs+1;criterr<-1}
          if (errcode5==1){errcode[errs,1]<-5;errs<-errs+1;criterr<-1}
          if (errcode6==1){errcode[errs,1]<-40;errs<-errs+1;criterr<-1}
          if (criterr==0)
          {
            nvls<-unlist(dumtmp[3])
            nzvls<-nvls-1
            minzwarn<-0;maxzwarn<-0;znotev<-0
            ztmp<-matrix(unlist(dumtmp[1]),ncol=(nzvls+1))
            ztmp<-ztmp[,2:ncol(ztmp)];ztmp<-as.data.frame(ztmp)
            zcatlab<-c("Z1","Z2","Z3","Z4","Z5","Z6","Z7","Z8","Z9");zcatlab=matrix(zcatlab)
            mczok<-1
            dummatz<-matrix(unlist(dumtmp[2]),ncol=(nzvls+1),nrow=(nzvls+1))
            zprobval<-dummatz[,2:ncol(dummatz)]
            if (modcok==1)
            {
              zcontval<-matrix(-999,2,ncol(zprobval))
              temp<-0
              for (i in (1:2))
              {
                for (j in (1:nrow(dummatz)))
                {
                  if (contvec[i,2]==dummatz[j,1])
                  {zcontval[i,]<-zprobval[j,];temp<-temp+1}
                }
              }
              if (temp < 2)
              {notecode[notes,1]<-20;notes<-notes+1;modcok<-0}
            }
            if (zmodval[1,1] != 999)
            {notecode[notes,1]<-10;notes<-notes+1}
          }
        }
        if ((nxs > 0) & (mcx > 0))
        {
          tmp<-cbind(rownum,xtmp[,1])
          dumtmp<-process.makdummy(tmp,mcx,1,xcatcode)
          errcode4<-unlist(dumtmp[5])
          errcode5<-unlist(dumtmp[6])
          errcode6<-unlist(dumtmp[7])
          if (errcode4==1){errcode[errs,1]<-4;errs<-errs+1;criterr<-1}
          if (errcode5==1){errcode[errs,1]<-5;errs<-errs+1;criterr<-1}
          if (errcode6==1){errcode[errs,1]<-38;errs<-errs+1;criterr<-1}
          if (criterr==0)
          {
            nvls<-unlist(dumtmp[3])
            nxvls<-nvls-1
            xtmp<-matrix(unlist(dumtmp[1]),ncol=(nxvls+1))
            xtmp<-xtmp[,2:ncol(xtmp)];xtmp<-as.data.frame(xtmp)
            xcatlab<-c("X1","X2","X3","X4","X5","X6","X7","X8","X9");xcatlab=matrix(xcatlab)
            xdich<-as.numeric(nvls==2)
            mcxok<-1
            dummatx<-matrix(unlist(dumtmp[2]),ncol=(nxvls+1),nrow=(nxvls+1))
            xmodvals<-as.matrix(dummatx[,1])
            nxpval<-nrow(xmodvals)
          }
        }
        intlab<-matrix(" ",100,1)
        for (i in c(1:100)){intlab[i,1]<-paste("Int_",i,sep='')}
        bcmat<-matrix(0,needed,needed)
        wcmat<-matrix(0,needed,needed)
        zcmat<-matrix(0,needed,needed)
        wzcmat<-matrix(0,needed,needed)
        wsum<-0;zsum<-0;wzsum<-0
      }
    }
    
  }
  #endit
  
  # End A loop reads data and does some other things
  
  # Define model matrices for canned models
  if ((criterr==0) & (model != 999))
  { 
    # X->MW, X->MZ, X->MWZ, M->YW, M->YZ, M->YWZ, X->YW, X->YZ, X->YWZ
    modelmat<-
      matrix(c(1,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,1,1,0,3,0,0,0,0,0,0,1,1,1,4,0,0,0,0,0,0,0,0,0,
               5,0,0,0,0,0,0,1,0,0,6,0,0,0,0,0,0,0,0,0,7,1,0,0,0,0,0,0,0,0,8,1,0,0,0,0,0,1,0,0,
               9,1,1,0,0,0,0,0,0,0,10,1,1,0,0,0,0,1,1,0,11,1,1,1,0,0,0,0,0,0,12,1,1,1,0,0,0,1,1,1,
               13,1,1,1,0,0,0,1,0,0,14,0,0,0,1,0,0,0,0,0,15,0,0,0,1,0,0,1,0,0,16,0,0,0,1,1,0,0,0,0,
               17,0,0,0,1,1,0,1,1,0,18,0,0,0,1,1,1,0,0,0,19,0,0,0,1,1,1,1,1,1,20,0,0,0,1,1,1,1,0,0,
               21,1,0,0,0,1,0,0,0,0,22,1,0,0,0,1,0,1,0,0,23,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,0,0,
               25,0,0,0,0,0,0,0,0,0,26,0,0,0,0,0,0,0,0,0,27,0,0,0,0,0,0,0,0,0,28,1,0,0,0,1,0,0,1,0,
               29,1,0,0,0,1,0,1,1,0,30,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,
               33,0,0,0,0,0,0,0,0,0,34,0,0,0,0,0,0,0,0,0,35,0,0,0,0,0,0,0,0,0,36,0,0,0,0,0,0,0,0,0,
               37,0,0,0,0,0,0,0,0,0,38,0,0,0,0,0,0,0,0,0,39,0,0,0,0,0,0,0,0,0,40,0,0,0,0,0,0,0,0,0,
               41,0,0,0,0,0,0,0,0,0,42,0,0,0,0,0,0,0,0,0,43,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,
               45,0,0,0,0,0,0,0,0,0,46,0,0,0,0,0,0,0,0,0,47,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,
               49,0,0,0,0,0,0,0,0,0,50,0,0,0,0,0,0,0,0,0,51,0,0,0,0,0,0,0,0,0,52,0,0,0,0,0,0,0,0,0,
               53,0,0,0,0,0,0,0,0,0,54,0,0,0,0,0,0,0,0,0,55,0,0,0,0,0,0,0,0,0,56,0,0,0,0,0,0,0,0,0,
               57,0,0,0,0,0,0,0,0,0,58,1,0,0,1,0,0,0,0,0,59,1,0,0,1,0,0,1,0,0,60,1,1,0,1,0,0,0,0,0,
               61,1,1,0,1,0,0,1,0,0,62,1,1,0,1,0,0,0,1,0,63,1,1,0,1,0,0,1,1,0,64,1,0,0,1,1,0,0,0,0,
               65,1,0,0,1,1,0,1,0,0,66,1,0,0,1,1,0,0,1,0,67,1,0,0,1,1,0,1,1,0,68,1,1,1,1,0,0,0,0,0,
               69,1,1,1,1,0,0,1,1,1,70,1,0,0,1,1,1,0,0,0,71,1,0,0,1,1,1,1,1,1,72,1,1,1,1,1,1,0,0,0,
               73,1,1,1,1,1,1,1,1,1,74,0,0,0,1,0,0,0,0,0,75,1,1,0,1,1,0,0,0,0,76,1,1,0,1,1,0,1,1,0,
               77,0,0,0,0,0,0,0,0,0,78,0,0,0,0,0,0,0,0,0,79,0,0,0,0,0,0,0,0,0,80,0,0,0,0,0,0,0,0,0,
               81,0,0,0,0,0,0,0,0,0,82,0,0,0,0,0,0,0,0,0,83,1,0,0,0,0,0,0,0,0,84,1,0,0,0,0,0,0,0,0,
               85,1,0,0,0,0,0,1,0,0,86,1,0,0,0,0,0,1,0,0,87,0,0,0,1,0,0,0,0,0,88,0,0,0,1,0,0,0,0,0,
               89,0,0,0,1,0,0,1,0,0,90,0,0,0,1,0,0,1,0,0,91,0,0,0,0,0,0,0,0,0,92,1,0,0,1,0,0,1,0,0))
    dim(modelmat)<-c(10,92);modelmat=t(modelmat);
    if (model > 0){tmp<-modelmat[model,2:ncol(modelmat)];tmp=t(matrix(tmp))}
    if (model == 0){tmp<-matrix(0,1,9)}
    if (model < 4) {bcmat[(nxs+1),1]<-1}
    if ((model > 3) & (model != 6))
    {bcmat[(nxs+1):(nxs+nms),1]<-onem
    bcmat[nrow(bcmat),(nxs+1):(nxs+nms)]<-t(onem)
    bcmat[nrow(bcmat),1]<-1}
    if ((model==6) | ((model > 82) & (model < 93)))
    {
      for (j in c(2:nrow(bcmat)))
      {for (i in c(1:(j-1)))
      {bcmat[j,i]<-1}
      }
    } 
    if (model==80)
    {for (i in c(1:nms)){bcmat[(nrow(bcmat)-1),i]<-1}}
    if (model==81)
    {for (j in c(3:nrow(bcmat))){bcmat[j,2]<-1}}
    if (model==82)
    {bcmat[3,2]<-1;bcmat[5,4]<-1}
    if (tmp[1,1]==1)
    {
      wcmat[(nxs+1):(nxs+nms),1]=onem;wprod<-1;xprod<-1
      if ((model==83) | (model==86))
      {onemsx<-onem
      for (i in c(1:(nms-1))){onemsx[(i+1),1]<-0}
      wcmat[(nxs+1):(nxs+nms),1]<-onemsx
      } 
    }
    if (tmp[1,4]==1)
    {
      wcmat[nrow(wcmat),(nxs+1):(nxs+nms)]<-t(onem);wprod<-1;
      if ((model==87) | (model==90))
      {onemsx<-onem
      for (i in c(1:(nms-1))){onemsx[i,1]=0}
      wcmat[nrow(wcmat),(nxs+1):(nxs+nms)]=t(onemsx)
      }
    }
    if (tmp[1,7]==1){wcmat[nrow(wcmat),1]<-1;wprod<-1;xprod<-1}
    if (tmp[1,2]==1){zcmat[(nxs+1):(nxs+nms),1]<-onem;zprod<-1;xprod<-1}
    if (tmp[1,5]==1){zcmat[nrow(zcmat),(nxs+1):(nxs+nms)]=t(onem);zprod<-1}
    if (tmp[1,8]==1){zcmat[nrow(zcmat),1]<-1;zprod<-1;xprod<-1}
    if (tmp[1,3]==1){wzcmat[(nxs+1):(nxs+nms),1]<-onem;xprod<-1;wprod<-1;zprod<-1}
    if (tmp[1,6]==1){wzcmat[nrow(wzcmat),(nxs+1):(nxs+nms)]<-t(onem)}
    if (tmp[1,9]==1){wzcmat[nrow(wzcmat),1]<-1;xprod<-1;wprod<-1;zprod<-1}
    if ((model==91) | (model==92))
    {
      for (j in c(1:(nms-1)))
      {for (i in c(1:j)){wcmat[(nxs+1+j),(nxs+i)]<-1}
      }
    }
  }
  #define and check covariates matrix
  if (ncs > 0)
  {
    ccmat<-matrix(1,(nms+nys),ncs);ccmatoff<-ccmat
    if (covmy==1){ccmat[nrow(ccmat),]<-matrix(0,1,ncs)}
    if (covmy==2){ccmat[1:nms,]<-matrix(0,nms,ncs)}
    if (cmatrix[1,1] != -999)
    {if (ncol(cmatrix) != ((nms+nys)*ncs)){errcode[errs,1]<-29;errs<-errs+1;criterr<-1}
      if (criterr==0)
      {
        tmp<-1;for (i in c(1:(nms+nys)))
        {
          for (j in c(1:ncs))
          {ccmat[i,j]<-(1-as.numeric(cmatrix[1,tmp]==0));tmp<-tmp+1}
        }
        tmpcov<-colSums(ccmat);tmpcov<-as.numeric(tmpcov==0);tmpcov<-sum(tmpcov)
        if (tmpcov !=0)
        {errcode[errs,1]<-30;errs<-errs+1;criterr<-1}
      }
      if (covmy != 0){notecode[notes,1]<-1;notes<-notes+1}
    } 
  } 
  
  #Define matrices for custom models and do some error checking
  if (criterr==0)
  {
    needed<-needed*(needed-1)/2;nopath<-0
    if (bmatrix[1,1] != -999)
    {tmp<-1
    if ((ncol(bmatrix) != needed) | (sum(bmatrix)==0))
    {errcode[errs,1]<-16;errs<-errs+1;criterr<-1} else {
      for (i in c(2:nrow(bcmat)))
      {for (j in c(1:(i-1)))
      {bcmat[i,j]<-(1-as.numeric(bmatrix[1,tmp]==0));tmp<-tmp+1}        
      } 
    }
    #check to make sure X affects something */
    tmpcov<-sum(bcmat[,1])
    if ((tmpcov==0) & (criterr==0))
    {errcode[errs,1]<-22;errs<-errs+1;criterr<-1}
    #check to make sure Y is affected by something */
    tmpcov<-sum(bcmat[nrow(bcmat),])
    if ((tmpcov==0) & (criterr==0))
    {errcode[errs,1]<-23;errs<-errs+1;criterr<-1}
    #check for dangling mediators
    dm<-0
    if (nms > 0)
    {
      for (i in c(1:nms))
        tmpcov<-sum(bcmat[(nxs+i),]);tmpcov2<-sum(bcmat[,(nxs+i)])
        {if (((tmpcov==0) | (tmpcov2==0)) & (dm==0) & (criterr==0))
        {errcode[errs,1]<-26;errs<-errs+1;criterr<-1;dm<-1}       
        }
    }
    }
  }
  
  #start b
  if (criterr==0)
  {
    if (wmatrix[1,1] != -999)
    {
      tmp<-1
      if (ncol(wmatrix) != needed)
      {errcode[errs,1]<-17;errs<-errs+1;criterr<-1} else { 
        modelvar[1,1]="CUSTOM"
        for (i in (2:nrow(wcmat)))
        {     
          for (j in (1:(i-1)))       
          {wcmat[i,j]<-(1-as.numeric(wmatrix[1,tmp]==0))
          #dont allow to specify moderation of a path that doesnt exist
          if ((wcmat[i,j]==1) & (bcmat[i,j]==0) & (nopath==0))
          {errcode[errs,1]<-20;errs<-errs+1;criterr<-1;nopath<-1}   
          tmp<-tmp+1
          }
        } 
      }
    }
    
    if (zmatrix[1,1] != -999)
    {
      tmp<-1
      if (ncol(zmatrix) != needed)
      {errcode[errs,1]<-18;errs<-errs+1;criterr<-1} else {
        modelvar[1,1]="CUSTOM"
        if ((sum(wcmat)==0) & (model==999))
        {errcode[errs,1]<-21;errs<-errs+1;criterr<-1}
        for (i in (2:nrow(zcmat)))
        {     
          for (j in (1:(i-1)))       
          {zcmat[i,j]<-(1-as.numeric(zmatrix[1,tmp]==0))
          #dont allow to specify moderation of a path that doesnt exist
          if ((zcmat[i,j]==1) & (bcmat[i,j]==0) & (nopath==0))
          {errcode[errs,1]<-20;errs<-errs+1;criterr<-1;nopath<-1}   
          tmp<-tmp+1
          }
        } 
      }
    }
    tmp<-1
    if (wzmatrix[1,1] != -999)
    {
      if (ncol(wzmatrix) != needed)
      {errcode[errs,1]<-19;errs<-errs+1;criterr<-1}
      modelvar[1,1]="CUSTOM"
    } 
    if (criterr==0)
    {
      for (i in (2:nrow(wzcmat)))
      {
        for (j in (1:(i-1)))
        {
          #set corresponding elements in W and Z for three way interaction
          if (wzmatrix[1,1] != -999){wzcmat[i,j]<-(1-as.numeric(wzmatrix[1,tmp]==0))}
          if (wzcmat[i,j]==1){wcmat[i,j]<-1;zcmat[i,j]<-1}       
          #dont allow to specify moderation of a path that doesnt exist
          if ((wzcmat[i,j]==1) & (bcmat[i,j]==0) & (nopath==0))
          {errcode[errs,1]<-20;errs<-errs+1;criterr<-1;nopath<-1}
          tmp<-tmp+1
        }
      }
    }
  }
  # end B
  
  if (criterr==0)
  {
    xprod<-(sum(wcmat[,1])+sum(zcmat[,1])+sum(wzcmat[,1]))
    xprod<-as.numeric(xprod > 0)
    wsum<-sum(wcmat)
    wprod<-as.numeric(wsum > 0)
    if (nms > 0)
    {
      for (i in c(1:nms))
      {
        tmp<-(sum(wcmat[,(1+i)])+sum(zcmat[,(1+i)])+sum(wzcmat[,(1+i)]))
        mprod[1,i]<-as.numeric(tmp>0)
      }
    }
    if ((wsum > 0) & (w=="xxxxx")){errcode[errs,1]<-11;errs<-errs+1;criterr<-1}
    if ((wsum==0) & (w != "xxxxx")){errcode[errs,1]<-10;errs<-errs+1;criterr<-1}
    zsum<-sum(zcmat)
    zprod<-as.numeric(zsum > 0)
    if ((zsum > 0) & (z=="xxxxx")){errcode[errs,1]<-13;errs<-errs+1;criterr<-1}
    if ((zsum==0) & (z != "xxxxx")){errcode[errs,1]<-12;errs<-errs+1;criterr<-1}
    if ((zsum > 0) & (wsum==0)){errcode[errs,1]<-35;errs<-errs+1;criterr<-1}
  }
  if ((criterr==0) & (nms > 1))
  {
    serchk<-bcmat[2:(nrow(bcmat)-1),2:ncol(bcmat)]
    if (sum(serchk) > 0)
    {serial<-1
    if (nms > 6){errcode[errs,1]<-36;errs<-errs+1;criterr<-1}
    }
  }
  #mean center if needed
  if ((center > 0) & (criterr==0))
  {
    centvar<-matrix(c(" "))
    if (criterr==0)
    {
      if ((center==1) | ((center==2) & (wdich==0)))
      {
        if ((wprod==1) & (mcwok==0) & (nwpval > 0))
        {
          for (i in c(1:nws))
          {
            wtmp[,i]<-wtmp[,i]-(sum(wtmp[,i])/n)
            centvar<-cbind(centvar,wnames[1,i])
          }
          desctmp2<-process.describ3(wtmp,wmodcust,quantile)
          desctmp<-matrix(unlist(desctmp2[1]))
          wmin<-desctmp[3,1];wmax<-desctmp[4,1]
          if (wmodcust==0)
          {modvals<-matrix(unlist(desctmp2[2]))
          wmodvals<-modvals;wprobval<-wmodvals}
        }
      }    
      if ((center==1) | ((center==2) & (zdich==0)))
      { 
        if ((zprod==1) & (mczok==0) & (nzpval > 0))
        {
          for (i in c(1:nzs))
          {
            ztmp[,i]<-ztmp[,i]-(sum(ztmp[,i])/n)
            centvar<-cbind(centvar,znames[1,i])
          }
          desctmp2<-process.describ3(ztmp,zmodcust,quantile)
          desctmp<-matrix(unlist(desctmp2[1]))
          zmin<-desctmp[3,1];zmax<-desctmp[4,1]
          if (zmodcust==0)
          {modvals<-matrix(unlist(desctmp2[2]))
          zmodvals<-modvals;zprobval<-zmodvals}
        }
      }
      if ((center==1) | ((center==2) & (xdich==0)))
      {
        if ((xprod==1) & (mcxok==0))
        {
          for (i in c(1:nxs))
          {
            xtmp[,i]<-xtmp[,i]-(sum(xtmp[,i])/n)
            centvar<-cbind(centvar,xnames[1,i])
          }
          desctmp2<-process.describ3(xtmp,0,quantile)
          modvals<-matrix(unlist(desctmp2[2]))
          xmodvals<-modvals;xprobval<-as.matrix(xmodvals)
        }
      }
      if (nms > 0)
      {
        for (i in c(1:nms))
        {
          if (mprod[1,i]==1)
          {
            mtmp[,i]<-mtmp[,i]-(sum(mtmp[,i])/n)
            centvar<-cbind(centvar,mnames[i,1])
          }
        }
        desctmp2<-process.describ3(mtmp,0,quantile)
        desct12<-matrix(unlist(desctmp2[1]),ncol=ncol(mtmp))
        if ((cdeval[1,1]==-999) & (model==74))
        {medmeans<-t(matrix(desct12[1,]))}
        modvals<-matrix(unlist(desctmp2[2]),ncol=ncol(mtmp))
        mmodvals<-modvals;mprobval<-mmodvals;
      }
    }
    if (ncol(centvar) > 1)
    {notecode[notes,1]<-3;notes<-notes+1}
  }
  
  
  # Start D
  #CONSTRUCT THE DATA MATRICES FOR EACH OF THE MODELS
  if (criterr==0)
  {
    # The i loop is the dependent variable in the model matrices
    # The j loop is the predictor variables in the model matrices
    wsum<-sum(wcmat);zsum<-sum(zcmat);wzsum<-sum(wzcmat)
    nump<-matrix(-999,1,(nys+nms));numint<-matrix(0,1,(nys+nms))
    #DV
    datcount<-1;
    xtmpuse<-0;wtmpuse<-0;ztmpuse<-0;xwtmpus<-0;xztmpus<-0;wztmpus<-0;xwztmpu<-0;
    xtmploc<- matrix(-999);wtmploc<- -999;xwtmplo<- -999;ztmploc<- -999
    xztmplo<- -999;wztmplo<- -999;xwztmplo<- -999
    vlabs<-" "
    if (ncs > 0){ctmpuse<-matrix(0,1,ncs)}
    if (nms > 0)
    {
      mtmpuse<-matrix(0,1,nms)
      mwtmpus<-matrix(0,1,nms)
      mztmpus<-matrix(0,1,nms)
      mwztmpu<-matrix(0,1,nms)
      mtmploc<-matrix(0,1,nms)
      mwtmplo<-matrix(-999,nwvls,nms)
      mztmplo<-matrix(-999,nzvls,nms)
      mwztmplo<-matrix(-999,(nwvls*nzvls),nms)
    }
    if (ncs > 0){ctmploc<-matrix(0,1,ncs)}
    fulldat<-matrix(1,n,1)
    datindx<-matrix(-999,1000,(nms+nys))
    wherew<-matrix(-999,2,(nms+nys));wherex<-matrix(-999,2,(nms+nys))
    wherez<-matrix(-999,2,(nms+nys));wherexw<-matrix(-999,2,(nms+nys))
    wherexz<-matrix(-999,2,(nms+nys));wherewz<-matrix(-999,2,(nms+nys))
    wherexwz<-matrix(-999,2,(nms+nys))
    if (nms > 0)
    {
      wherem<-matrix(-999,nms,(nms+nys))
      wheremw<-matrix(-999,(nms*2),(nms+nys))
      wheremz<-matrix(-999,(nms*2),(nms+nys))
      wheremwz<-matrix(-999,(nms*2),(nms+nys))
    }  
    wzhigh<-matrix(0,1000,(((nms+1)*(nms+2))/2))
    whigh<-matrix(0,1000,(((nms+1)*(nms+2))/2))
    zhigh<-matrix(0,1000,(((nms+1)*(nms+2))/2))
    fochigh<-matrix(0,1000,(((nms+1)*(nms+2))/2))
    xcoefloc<-matrix(c(1,2,3,4,5,6,7,8,9))
    intkey<-t(matrix(c(" ", " ", " ", " ", " ", " ", " ")))
    wzhighct<-0;whighct<-0;zhighct<-0;foccnt<-0
    if (nms > 0){mnames<-t(mnames)}
    if (ncs > 0){covnames<-t(covnames)}
    xtmp<-data.matrix(xtmp)
    
    #START DV LOOP
    for (i in (2:nrow(bcmat)))
    {  
      wdid<-0;zdid<-0;wzdid<-0;cntmp<-1;start<-1;
      if (i < nrow(bcmat))
      {outv<-mtmp[,(i-1)]  
      modlabel<-matrix(c(mnames[1,(i-1)],"constant"))}
      if (i==nrow(bcmat))
      {outv<-ytmp;modlabel<-matrix(c(ynames,"constant"))}
      # The j loop is the mediator
      # START MED
      
      for (j in (1:(i-1)))
      {
        foccnt<-foccnt+1
        if ((j==1) & (bcmat[i,j]==1))
        {
          outv<-cbind(outv,xtmp)
          modlabel<-matrix(c(modlabel,xcatlab[1:nxvls,1]))
          if (xtmpuse==0)
          {
            fulldat<-matrix(c(fulldat,xtmp),nrow=n)
            xtmpuse<-1
            for (k4 in (datcount:(datcount+(nxvls-1))))
            {xtmploc<-matrix(c(xtmploc,k4))}
            xtmploc<-matrix(xtmploc[2:nrow(xtmploc),1])
            datcount<-datcount+nxvls
          }
          datindx[start:(start+nrow(xtmploc)-1),(i-1)]<-xtmploc
          wherex[1,(i-1)]<-start+1
          wherex[2,(i-1)]<-start+nrow(xtmploc)-1+1
          #do if (model = 74)
          #end if
          onebl<-matrix(1,nrow(xtmploc),1)
          fochigh[(start+1):(start+nrow(xtmploc)),foccnt]<-onebl
          start<-start+nrow(xtmploc)
        }  
        if ((j > 1) & (bcmat[i,j]==1))
        {
          outv<-cbind(outv,mtmp[,(j-1)])
          modlabel<-matrix(c(modlabel,mnames[1,(j-1)]))
          if (mtmpuse[1,(j-1)]==0)
          {
            fulldat<-matrix(c(fulldat,mtmp[,(j-1)]),nrow=n)
            mtmpuse[1,(j-1)]<-1
            mtmploc[1,(j-1)]<-datcount
            datcount<-datcount+1
          }
          datindx[start:(start+nrow(mtmploc)-1),(i-1)]<-mtmploc[1,(j-1)]
          wherem[(j-1),(i-1)]<-start+1
          #onebl<-matrix(1,(nrow(mtmploc[1,(j-1)])),1)
          #onebl<-matrix(1,mtmploc[1,(j-1)],1)
          onebl<-1
          #ttt<-nrow(mtmploc[1,(j-1)])+start-1
          #fochigh[(start+1):(start+nrow(mtmploc[1,(j-1)])),foccnt]<-onebl
          #fochigh[(start+1):(start+mtmploc[1,(j-1)]),foccnt]<-onebl
          fochigh[(start+1):(start+1),foccnt]<-onebl
          #start<-start+mtmploc[1,(j-1)]
          start<-start+1
        }
      }
      #END MED
      
      #START W
      if (wsum > 0)
        wtmp<-data.matrix(wtmp)
      {
        for (j in c(1:(i-1)))
        {
          whighct<-whighct+1
          if ((j==1) & (wcmat[i,j]==1))
          {
            if (wdid==0)
            {
              outv<-cbind(outv,wtmp)
              if ((ncs > 0) & (wiscov > 0)){ccmatoff[(i-1),wiscov]<-0}
              modlabel<-matrix(c(modlabel,wcatlab[1:nwvls,1]))
              wdid<-1
              if (wtmpuse==0)
              {
                fulldat<-matrix(c(fulldat,wtmp),nrow=n)
                if ((ncs > 0) & (wiscov > 0)){ccmatoff[(i-1),wiscov]<-0}         
                wtmpuse<-1
                for (k4 in (datcount:(datcount+(nwvls-1))))
                {wtmploc<-matrix(c(wtmploc,k4))}    
                wtmploc<-matrix(wtmploc[2:nrow(wtmploc),1])
                datcount<-datcount+nwvls
              }
            }     
            datindx[start:(start+nrow(wtmploc)-1),(i-1)]<-wtmploc
            wherew[1,(i-1)]<-start+1
            wherew[2,(i-1)]<-start+nrow(wtmploc)-1+1
            start<-start+nrow(wtmploc)
            for (k1 in c(1:nxvls))
            {
              for (k2 in c(1:nwvls))
              {
                outv<-as.matrix(cbind(outv,(xtmp[,k1]*wtmp[,k2])))
                if ((ncs > 0) & (wiscov > 0)){ccmatoff[(i-1),wiscov]<-0}          
                modlabel<-matrix(c(modlabel,intlab[cntmp,1]))
                intkeyt<-matrix(c(intlab[cntmp,1],":",xcatlab[k1,1],"x",wcatlab[k2,1]," "," "),ncol=7)
                intkey<-rbind(intkey,intkeyt)
                cntmp<-cntmp+1
              }
            }
            if (xwtmpus==0)
            {
              fulldat<-matrix(c(fulldat,outv[,(ncol(outv)-(nxvls*nwvls)+1):ncol(outv)]),nrow=n)
              xwtmpus<-1
              if ((ncs > 0) & (wiscov > 0)){ccmatoff[(i-1),wiscov]<-0}
              for (k4 in (datcount:(datcount+((nwvls*nxvls)-1))))
              {xwtmplo<-matrix(c(xwtmplo,k4))}
              xwtmplo<-matrix(xwtmplo[2:nrow(xwtmplo),1])
              datcount<-datcount+(nxvls*nwvls)
            }
            datindx[start:(start+nrow(xwtmplo)-1),(i-1)]<-xwtmplo
            wherexw[1,(i-1)]<-start+1
            wherexw[2,(i-1)]<-start+nrow(xwtmplo)-1+1
            onebl<-matrix(1,nrow(xwtmplo),1)
            whigh[(start+1):(start+nrow(xwtmplo)),whighct]<-onebl
            start<-start+nrow(xwtmplo)
          }
          if ((j > 1) & (wcmat[i,j]==1))
          {
            if ((wdid==0) & (model != 74))
            {
              outv<-cbind(outv,wtmp)
              if ((ncs > 0) & (wiscov > 0)){ccmatoff[(i-1),wiscov]<-0}
              modlabel<-matrix(c(modlabel,wcatlab[1:nwvls,1]))
              wdid<-1
              if (wtmpuse==0)
              {
                fulldat<-matrix(c(fulldat,wtmp),nrow=n)
                if ((ncs > 0) & (wiscov > 0)){ccmatoff[(i-1),wiscov]<-0}
                wtmpuse<-1
                for (k4 in (datcount:(datcount+(nwvls-1))))
                {wtmploc<-matrix(c(wtmploc,k4))}    
                wtmploc<-matrix(wtmploc[2:nrow(wtmploc),1])
                datcount<-datcount+nwvls
              }
              datindx[start:(start+nrow(wtmploc)-1),(i-1)]<-wtmploc
              wherew[1,(i-1)]<-start+1
              wherew[2,(i-1)]<-start+nrow(wtmploc)-1+1
              start<-start+nrow(wtmploc)
            }         
            for (k2 in c(1:nwvls))
            {
              outv<-as.matrix(cbind(outv,(mtmp[,(j-1)]*wtmp[,k2])))
              if ((ncs > 0) & (wiscov > 0)){ccmatoff[(i-1),wiscov]<-0}
              modlabel<-matrix(c(modlabel,intlab[cntmp,1]))
              intkeyt<-matrix(c(intlab[cntmp,1],":",mnames[1,(j-1)],"x",wcatlab[k2,1]," "," "),ncol=7)
              intkey<-rbind(intkey,intkeyt)
              cntmp<-cntmp+1
            }
            if (mwtmpus[1,(j-1)]==0)
            {
              fulldat<-matrix(c(fulldat,outv[,(ncol(outv)-nwvls+1):ncol(outv)]),nrow=n)
              if ((ncs > 0) & (wiscov > 0)){ccmatoff[(i-1),wiscov]<-0}
              mwtmpus[1,(j-1)]<-1
              mw22<- -999
              for (k4 in (datcount:(datcount+(nwvls-1))))
              {mw22<-matrix(c(mw22,k4))}
              mwtmplo[,(j-1)]=matrix(mw22[2:nrow(mw22),1])
              datcount<-datcount+nwvls
            }
            datindx[start:(start+nrow(mwtmplo)-1),(i-1)]<-mwtmplo[,(j-1)]
            wheremw[((2*j)-3),(i-1)]<-start+1
            wheremw[((2*j)-2),(i-1)]<-start+nrow(mwtmplo)-1+1
            onebl<-matrix(1,nrow(mwtmplo),1)
            whigh[(start+1):(start+nrow(mwtmplo)),whighct]<-onebl
            start<-start+nrow(mwtmplo)
          }
        }
        }
      #END W
      #START Z
      if (zsum > 0)
        ztmp<-data.matrix(ztmp)
      {
        for (j in c(1:(i-1)))    
        {
          zhighct<-zhighct+1
          if ((j==1) & (zcmat[i,j]==1))
          {
            if (zdid==0)
            {
              outv<-cbind(outv,ztmp)
              if ((ncs > 0) & (ziscov > 0)){ccmatoff[(i-1),ziscov]<-0}         
              modlabel<-matrix(c(modlabel,zcatlab[1:nzvls,1]))
              zdid<-1
              if (ztmpuse==0)
              {
                fulldat<-matrix(c(fulldat,ztmp),nrow=n)
                if ((ncs > 0) & (ziscov > 0)){ccmatoff[(i-1),ziscov]<-0} 
                ztmpuse<-1
                for (k4 in (datcount:(datcount+(nzvls-1))))
                {ztmploc<-matrix(c(ztmploc,k4))}      
                ztmploc<-matrix(ztmploc[2:nrow(ztmploc),1])
                datcount<-datcount+nzvls
              }
            }   
            datindx[start:(start+nrow(ztmploc)-1),(i-1)]<-ztmploc
            wherez[1,(i-1)]<-start+1
            wherez[2,(i-1)]<-start+nrow(ztmploc)-1+1
            start<-start+nrow(ztmploc)
            for (k1 in c(1:nxvls))
            {for (k2 in c(1:nzvls))
            {        
              outv=as.matrix(cbind(outv,(xtmp[,k1]*ztmp[,k2])))
              if ((ncs > 0) & (ziscov > 0)){ccmatoff[(i-1),ziscov]<-0}
              modlabel<-matrix(c(modlabel,intlab[cntmp,1]))
              intkeyt<-matrix(c(intlab[cntmp,1],":",xcatlab[k1,1],"x",zcatlab[k2,1]," "," "),ncol=7)
              intkey<-rbind(intkey,intkeyt)
              cntmp<-cntmp+1
            }
            }
            if (xztmpus==0)
            {
              fulldat<-matrix(c(fulldat,outv[,(ncol(outv)-(nxvls*nzvls)+1):ncol(outv)]),nrow=n)
              if ((ncs > 0) & (ziscov > 0)){ccmatoff[(i-1),ziscov]<-0}
              xztmpus<-1
              for (k4 in (datcount:(datcount+((nzvls*nxvls)-1)))){xztmplo<-matrix(c(xztmplo,k4))}       
              xztmplo<-matrix(xztmplo[2:nrow(xztmplo),1])
              datcount<-datcount+(nxvls*nzvls)
            }
            datindx[start:(start+nrow(xztmplo)-1),(i-1)]<-xztmplo
            wherexz[1,(i-1)]<-start+1
            wherexz[2,(i-1)]<-start+nrow(xztmplo)-1+1
            onebl<-matrix(1,nrow(xztmplo),1)
            zhigh[(start+1):(start+nrow(xztmplo)),zhighct]<-onebl
            start<-start+nrow(xztmplo)
          }
          if ((j > 1) & (zcmat[i,j]==1))
          {
            if (zdid==0)
            {
              outv<-cbind(outv,ztmp)
              if ((ncs > 0) & (ziscov > 0)){ccmatoff[(i-1),ziscov]<-0}
              modlabel<-matrix(c(modlabel,zcatlab[1:nzvls,1]))
              zdid<-1
              if (ztmpuse==0)
              {
                fulldat<-matrix(c(fulldat,ztmp),nrow=n)
                if ((ncs > 0) & (ziscov > 0)){ccmatoff[(i-1),ziscov]<-0}
                ztmpuse<-1
                for (k4 in (datcount:(datcount+(nzvls-1))))
                {ztmploc<-matrix(c(ztmploc,k4))}
                ztmploc<-matrix(ztmploc[2:nrow(ztmploc),1])
                datcount<-datcount+nzvls
              }
              datindx[start:(start+nrow(ztmploc)-1),(i-1)]<-ztmploc
              wherez[1,(i-1)]<-start+1
              wherez[2,(i-1)]<-start+nrow(ztmploc)-1+1
              start<-start+nrow(ztmploc)
            }    
            for (k2 in (1:nzvls))
            {
              outv=as.matrix(cbind(outv,(mtmp[,(j-1)]*ztmp[,k2])))
              if ((ncs > 0) & (ziscov > 0)){ccmatoff[(i-1),ziscov]<-0}
              modlabel<-matrix(c(modlabel,intlab[cntmp,1]))
              intkeyt<-matrix(c(intlab[cntmp,1],":", mnames[1,(j-1)],"x",zcatlab[k2,1]," "," "),ncol=7)
              intkey<-rbind(intkey,intkeyt)
              cntmp<-cntmp+1
            }
            if (mztmpus[1,(j-1)]==0)
            {
              fulldat<-matrix(c(fulldat,outv[,(ncol(outv)-nzvls+1):ncol(outv)]),nrow=n)
              if ((ncs > 0) & (ziscov > 0)){ccmatoff[(i-1),ziscov]<-0}
              mztmpus[1,(j-1)]<-1
              mz22<- -999
              for (k4 in (datcount:(datcount+(nzvls-1)))){mz22<-matrix(c(mz22,k4))}
              mztmplo[,(j-1)]<-matrix(mz22[2:nrow(mz22),1])
              datcount<-datcount+nzvls
            }
            datindx[start:(start+nrow(mztmplo)-1),(i-1)]<-mztmplo[,(j-1)]
            wheremz[((2*j)-3),(i-1)]<-start+1
            wheremz[((2*j)-2),(i-1)]<-start+nrow(mztmplo)-1+1
            onebl<-matrix(1,nrow(mztmplo),1)
            zhigh[(start+1):(start+nrow(mztmplo)),zhighct]<-onebl
            start<-start+nrow(mztmplo)
          }
        }
        }
      #END Z
      
      #START WZ
      if (wzsum > 0)
      {  
        for (j in (1:(i-1)))
        {
          wzhighct<-wzhighct+1
          if ((j==1) & (wzcmat[i,j]==1))
          {
            if (wzdid==0)
            {
              for (k1 in (1:nwvls))
              {
                for (k2 in (1:nzvls))
                {
                  outv<-as.matrix(cbind(outv,(wtmp[,k1]*ztmp[,k2]))) 
                  if ((ncs > 0) & (ziscov > 0)){ccmatoff[(i-1),ziscov]<-0}
                  if ((ncs > 0) & (wiscov > 0)){ccmatoff[(i-1),wiscov]<-0}
                  modlabel<-matrix(c(modlabel,intlab[cntmp,1]))
                  intkeyt<-matrix(c(intlab[cntmp,1],":",wcatlab[k1,1],"x",zcatlab[k2,1]," "," "),ncol=7)
                  intkey<-rbind(intkey,intkeyt)
                  cntmp<-cntmp+1
                }
              }
              if (wztmpus==0)
              {
                fulldat<-matrix(c(fulldat,outv[,(ncol(outv)-(nwvls*nzvls)+1):ncol(outv)]),nrow=n)
                if ((ncs > 0) & (ziscov > 0)){ccmatoff[(i-1),ziscov]<-0}  
                if ((ncs > 0) & (wiscov > 0)){ccmatoff[(i-1),wiscov]<-0}
                wztmpus<-1
                for (k4 in (datcount:(datcount+((nwvls*nzvls)-1))))
                {wztmplo<-matrix(c(wztmplo,k4))}   
                wztmplo<-matrix(wztmplo[2:nrow(wztmplo),1])
                datcount<-datcount+(nzvls*nwvls)
              }
              wzdid<-1         
            }
            datindx[start:(start+nrow(wztmplo)-1),(i-1)]<-wztmplo
            wherewz[1,(i-1)]<-start+1
            wherewz[2,(i-1)]<-start+nrow(wztmplo)-1+1
            start<-start+nrow(wztmplo)
            for (k1 in (1:nxvls))
            {
              for (k2 in (1:nwvls))
              {
                for (k3 in (1:nzvls))
                {
                  outv<-as.matrix(cbind(outv,(xtmp[,k1]*wtmp[,k2]*ztmp[,k3]))) 
                  if ((ncs > 0) & (ziscov > 0)){ccmatoff[(i-1),ziscov]<-0}  
                  if ((ncs > 0) & (wiscov > 0)){ccmatoff((i-1),wiscov)<-0}    
                  modlabel<-matrix(c(modlabel,intlab[cntmp,1]))
                  intkeyt<-matrix(c(intlab[cntmp,1],":",xcatlab[k1,1],"x",wcatlab[k2,1],"x",zcatlab[k3,1]),ncol=7)
                  intkey<-rbind(intkey,intkeyt) 
                  cntmp<-cntmp+1 
                }
              }
            }
            if (xwztmpu==0)
            {
              fulldat<-matrix(c(fulldat,outv[,(ncol(outv)-(nxvls*nwvls*nzvls)+1):ncol(outv)]),nrow=n)
              if ((ncs > 0) & (ziscov > 0)){ccmatoff[(i-1),ziscov]<-0} 
              if ((ncs > 0) & (wiscov > 0)){ccmatoff((i-1),wiscov)<-0}
              xwztmpu<-1
              for (k4 in (datcount:(datcount+((nzvls*nxvls*nwvls)-1))))
              {xwztmplo<-matrix(c(xwztmplo,k4))}  
              xwztmplo<-matrix(xwztmplo[2:nrow(xwztmplo),1])
              datcount<-datcount+(nxvls*nzvls*nwvls)
            }
            datindx[start:(start+nrow(xwztmplo)-1),(i-1)]<-xwztmplo
            wherexwz[1,(i-1)]<-start+1
            wherexwz[2,(i-1)]<-start+nrow(xwztmplo)-1+1
            onebl<-matrix(1,nrow(xwztmplo),1)
            wzhigh[(start+1):(start+nrow(xwztmplo)),wzhighct]<-onebl
            start<-start+nrow(xwztmplo)
          }
          if ((j > 1) & (wzcmat[i,j]==1))
          {
            if (wzdid==0)
            {
              for (k1 in (1:nwvls))
              {
                for (k2 in (1:nzvls))
                {
                  outv<-as.matrix(cbind(outv,(wtmp[,k1]*ztmp[,k2])))
                  if ((ncs > 0) & (ziscov > 0)){ccmatoff[(i-1),ziscov]<-0}  
                  if ((ncs > 0) & (wiscov > 0)){ccmatoff[(i-1),wiscov]<-0}
                  modlabel<-matrix(c(modlabel,intlab[cntmp,1]))
                  intkeyt<-matrix(c(intlab[cntmp,1],":",wcatlab[k1,1],"x",zcatlab[k2,1]," "," "),ncol=7)
                  intkey<-rbind(intkey,intkeyt) 
                  cntmp<-cntmp+1
                }
              }
              if (wztmpus==0)
              {
                fulldat<-matrix(c(fulldat,outv[,(ncol(outv)-(nwvls*nzvls)+1):ncol(outv)]),nrow=n)
                if ((ncs > 0) & (ziscov > 0)){ccmatoff[(i-1),ziscov]<-0}
                if ((ncs > 0) & (wiscov > 0)){ccmatoff[(i-1),wiscov]<-0}
                wztmpus<-1
                for (k4 in (datcount:(datcount+((nwvls*nzvls)-1))))
                {wztmplo<-matrix(c(wztmplo,k4))}    
                wztmplo<-matrix(wztmplo[2:nrow(wztmplo),1])
                datcount<-datcount+(nzvls*nwvls)
              }
              wzdid<-1
              datindx[start:(start+nrow(wztmplo)-1),(i-1)]<-wztmplo
              wherewz[1,(i-1)]<-start+1
              wherewz[2,(i-1)]<-start+nrow(wztmplo)-1+1
              start<-start+nrow(wztmplo)
            }
            for (k1 in (1:nwvls))
            {
              for (k2 in (1:nzvls))
              {
                outv<-as.matrix(cbind(outv,(mtmp[,(j-1)]*wtmp[,k1]*ztmp[,k2])))
                if ((ncs > 0) & (ziscov > 0)){ccmatoff[(i-1),ziscov]<-0}  
                if ((ncs > 0) & (wiscov > 0)){ccmatoff[(i-1),wiscov]<-0} 
                modlabel<-matrix(c(modlabel,intlab[cntmp,1]))
                intkeyt<-matrix(c(intlab[cntmp,1],":",mnames[1,(j-1)],"x",wcatlab[k1,1],"x",zcatlab[k2,1]),ncol=7)
                intkey<-rbind(intkey,intkeyt) 
                cntmp<-cntmp+1
              }
            }
            if (mwztmpu[1,(j-1)]==0)
            {
              fulldat<-matrix(c(fulldat,outv[,(ncol(outv)-(nwvls*nzvls)+1):ncol(outv)]),nrow=n)
              if ((ncs > 0) & (ziscov > 0)){ccmatoff[(i-1),ziscov]<-0} 
              if ((ncs > 0) & (wiscov > 0)){ccmatoff[(i-1),wiscov]<-0}
              mwztmpu[1,(j-1)]<-1
              mz22<- -999
              for (k4 in (datcount:(datcount+(nwvls*nzvls)-1)))
              {mz22<-matrix(c(mz22,k4))}
              mwztmplo[,(j-1)]<-matrix(mz22[2:nrow(mz22),1])
              datcount<-datcount+(nwvls*nzvls)
            }
            datindx[start:(start+nrow(mwztmplo)-1),(i-1)]<-mwztmplo[,(j-1)]
            wheremwz[((2*j)-3),(i-1)]<-start+1
            wheremwz[((2*j)-2),(i-1)]<-start+nrow(mwztmplo)-1+1
            onebl<-matrix(1,nrow(mwztmplo),1)
            wzhigh[(start+1):(start+nrow(mwztmplo)),wzhighct]<-onebl
            start<-start+nrow(mwztmplo)
          }
        }
      }
      #END WZ
      
      #START COV
      if (ncs > 0)
      {  
        ccmat<-ccmat*ccmatoff
        for (j in c(1:ncs))
        {
          if (ccmat[(i-1),j]==1)
          {
            if (j==wiscov){ctmp[,j]<-wtmp}
            if (j==ziscov){ctmp[,j]<-ztmp}
            outv<-cbind(outv,ctmp[,j])
            modlabel<-matrix(c(modlabel,covnames[1,j]))
            if (ctmpuse[1,j]==0)
            {
              fulldat<-matrix(c(fulldat,ctmp[,j]),nrow=n)
              ctmpuse[1,j]<-1
              ctmploc[1,j]<-datcount
              datcount<-datcount+1
            }
            datindx[start:(start+nrow(ctmploc)-1),(i-1)]<-ctmploc[1,j]
            start<-start+1
          }
        }
      }
      #END COV
      
      wdid<-0;zdid<-0;wzdid<-0
      vlabs<-matrix(c(vlabs,modlabel[2:nrow(modlabel),1]))
      numint[1,(i-1)]<-cntmp-1
      nump[1,(i-1)]<-nrow(modlabel)-1
      
    } 
    #END DV LOOP
    
    if ((modcok==1) & ((nms > 0) | (zcmat[2,1] != 1) | (mcx != 0)))
    {notecode[notes,1]<-19;notes<-notes + 1;modcok<-0}
    if (((serial==1) | (sum(numint)>0) | (nms==0)) & (mc > 0))
    {notecode[notes,1]<-15;notes<-notes+1;boot<-mc;mc<-0}
    
    
    if ((boot != 0) | (mc != 0))
    {
      bootsz<-boot
      if (mc > 0){bootsz<-mc;saveboot<-0}
      cilow<-0;cihigh<-bootsz+1
      while ((cilow <=0) | (cihigh > bootsz))
      {
        cilow<-round(bootsz*(1-(conf/100))/2)
        cihigh<-trunc((bootsz*(conf/100)+(bootsz*(1-(conf/100))/2)))+1
        if ((cilow < 1) | (cihigh > bootsz))
        {bootsz<-trunc((bootsz+1000)/1000)*1000;adjust<-1}
      }
      if (boot > 0){boot<-bootsz}
      if (mc > 0){mc<-bootsz}
      if ((adjust==1) & (boot > 0)){notecode[notes,1]<-8;notes<-notes+1}
      if ((adjust==1) & (mc > 0)){notecode[notes,1]<-16;notes<-notes+1}
    }
    maxboot<-trunc(2*boot)
    if (maxboots > maxboot){maxboot<-trunc(maxboots)}
    #insert seed here  
    if ((seed==-999) & (boot > 0) | (mc > 0))
    {seed<-trunc(runif(1,1,1000000));set.seed(seed);ranseed<-1}
    if (sum(numint) > 0){intkey<-matrix(intkey[2:nrow(intkey),],ncol=7)}
    vlabs<-matrix(vlabs[2:nrow(vlabs),1])
    fulldat<-as.data.frame(fulldat[,2:ncol(fulldat)])
    fulldat<-data.matrix(fulldat)
    fochigh<-fochigh[1:max(nump),]
    whigh<-as.matrix(whigh[1:max(nump),])
    zhigh<-as.matrix(zhigh[1:max(nump),])
    wzhigh<-as.matrix(wzhigh[1:max(nump),])
    coeffs<-fochigh+whigh+zhigh+wzhigh
    bootloc<-matrix(0,max(nump),ncol(nump))
    
    #Here is am deriving the locations in bootfile needed for indirect effects
    if (nms > 0)
    {
      cntmp<-1
      for (i in (1:ncol(nump)))
      {for (j in (1:nump[1,i]))
      {bootloc[j,i]<-cntmp;cntmp<-cntmp+1}
      }
      fochighb<-matrix(0,nrow(fochigh),ncol(fochigh))
      whighb<-fochighb
      zhighb<-fochighb
      wzhighb<-fochighb
      thetaxmb<-matrix(0,nrow(fochighb),nms)
      thetaxyb<-matrix(0,nrow(fochighb),1)
      pathsfoc<-matrix(0,nxvls,1)
      cntmp<-1
      for (i in (1:(nms+nys)))
      {
        for (j in (1:i))
        {
          fochighb[,cntmp]<-(fochigh[,cntmp]*bootloc[,i])
          whighb[,cntmp]<-(whigh[,cntmp]*bootloc[,i])
          zhighb[,cntmp]<-(zhigh[,cntmp]*bootloc[,i])
          wzhighb[,cntmp]<-(wzhigh[,cntmp]*bootloc[,i])
          coeffsb<-(fochighb+whighb+zhighb+wzhighb)
          if ((i < (nms+nys)) & (j==1)){thetaxmb[,i]<-coeffsb[,cntmp]}
          if ((i==(nms+nys)) & (j==1)){thetaxyb[,1]<-coeffsb[,cntmp]}
          cntmp<-cntmp+1
        }
      }
      thetamyb<-as.matrix(coeffsb[,(ncol(coeffsb)-nms+1):ncol(coeffsb)])
      if (serial==1)
      {thetammb<-matrix(0,nrow(coeffsb),((nms*(nms-1))/2))}
      cntmp<-1
      if ((nms > 1) & (serial==1))
      {
        for (i in (1:(nms-1)))
        {
          start<-((i+2)*(i+1))/2
          for (j in (2:(nms-i+1)))
          {
            thetammb[,cntmp]<-coeffsb[,start]
            start<-start+j+i-1
            cntmp<-cntmp+1
          }
        } 
      }
    }
    
    if ((total==1) & ((sum(numint)==0) | (xmint==1)))
    {
      dototal<-1
      if ((sum(bcmat[,1]) != (nms+nys)) | (sum(bcmat[nrow(bcmat),]) != (nms+nys)))
      {dototal<-0;alttotal<-1;notecode[notes,1]<-12;notes<-notes+1}
      if (ncs > 0)
      {
        if ((sum(ccmat)) < (nrow(ccmat)*ncol(ccmat)))
        {dototal<-0;alttotal<-1;notecode[notes,1]<-11;notes<-notes+1}
      }
      if (model==74)
      {
        if ((xdich==0) & (nxvls==1))
        {dototal<-0;alttotal<-1}
        if (((xdich==1) | (nxvls > 1)) & (ncs > 0) & (model==74))
        {dototal<-0;alttotal<-1}
      }
    }
  }
  # End D
  if ((criterr==0) & (ncs > 0))
  {
    tmperr<-sum(as.numeric(colSums(ccmat)==0))
    if (sum(tmperr)!=0)
    {errcode[errs,1]<-51;errs<-errs+1;criterr<-1}
  }
  if (outscreen==1)
  {
    cat("\n")
    cat("********************* PROCESS for R Version 4.3.1 ********************* \n \n")
    cat("           Written by Andrew F. Hayes, Ph.D.  www.afhayes.com              \n")
    cat("   Documentation available in Hayes (2022). www.guilford.com/p/hayes3   \n \n")
  }
  if (criterr==0)
  {
    if ((stand==1) & (ydich==1)){stand<-0}
    anymod2<-sum(wcmat+zcmat+wzcmat)
    if ((anymod2 > 0) & (stand==1))
    {notecode[notes,1]<-27;notes<-notes+1;stand<-0}
    rownames(modelvar)<-modelvlb
    colnames(modelvar)<-" "
    funny<-1
    if (outscreen==1)
    {
      cat("*********************************************************************** \n")
      print(noquote(modelvar))
      cat("\n")
      if (ncs > 0)
      {
        cat("Covariates: \n")
        covname2<-c("      ", covnames)
        covname2<-t(noquote(covname2))  
        write.table(covname2,quote=FALSE,row.names=FALSE,col.names=FALSE)
        cat("\n")
      }
      cat("Sample size: ")
      write.table(n,quote=FALSE,row.names=FALSE,col.names=FALSE)
      cat("\n")
      if (seed != -999)    
      {if (ranseed==0)
      {cat("Custom seed: ")}
        if (ranseed==1)
        {cat("Random seed: ")}
        write.table(seed,quote=FALSE,row.names=FALSE,col.names=FALSE)
        cat("\n")
      }
      #maxresm<-9;
      #resultm<-matrix(99999,1,maxresm)
    }  
    if (describe==1)
    {
      means=apply(dat,2,mean);sdvec=apply(dat,2,sd);corall=cor(dat);
      means<-rbind(t(matrix(means)),t(matrix(sdvec)))
      means2<-noquote(matrix(sprintf(decimals,means),nrow=nrow(means)))
      corall2<-noquote(matrix(sprintf(decimals,corall),nrow=nrow(corall)))
      #if (ncol(means) > 9)
      #{resultm<-matrix(99999,1,ncol(means));maxresm<-ncol(means)}
      outformres<-process.outform3(means,maxresm,resultm)
      maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
      outformres<-process.outform3(corall,maxresm,resultm)
      maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
      
      if (outscreen==1)
      {
        colnames(means2)<-varnames
        colnames(corall2)<-varnames
        rownames(corall2)<-varnames
        rownames(means2)<-matrix(c("Mean","SD"))
        cat("Variable means and standard deviations:\n")
        print(means2,right=T)
        cat("\n")
        cat("Variable intercorrelations (Pearson's r):\n")
        print(corall2,right=T)
      }     
    }
    
    if (outscreen==1)
    {
      if (mcxok==1)
      {cat("Coding of categorical X variable for analysis: \n")
        dummatx2<-noquote(matrix(sprintf(decimals,dummatx),nrow=nrow(dummatx)))
        colnames(dummatx2)<-c(xnames,xcatlab[1:nxvls,1])
        rownames(dummatx2)<-t(matrix(replicate((nxvls+1)," ")))
        print(dummatx2,right=T)}
      if ((mcwok==1) & (xmint==0))
      {cat("Coding of categorical W variable for analysis: \n")
        dummatw2<-noquote(matrix(sprintf(decimals,dummatw),nrow=nrow(dummatw)))
        colnames(dummatw2)<-c(wnames,t(wcatlab[1:nwvls,1]))
        rownames(dummatw2)<-t(matrix(replicate((nwvls+1)," ")))
        print(dummatw2,right=T)}
      if (mczok==1)
      {cat("Coding of categorical Z variable for analysis: \n")
        dummatz2<-noquote(matrix(sprintf(decimals,dummatz),nrow=nrow(dummatz)))
        colnames(dummatz2)<-c(znames,t(zcatlab[1:nzvls,1]))
        rownames(dummatz2)<-t(matrix(replicate((nzvls+1)," ")))
        print(dummatz2,right=T)}
    }
  } 
  #START cycle through the models  
  if (criterr==0)
  {
    outnames<-ynames
    outvars<-ytmp
    if (nms > 0)
    {
      outnames<-matrix(c(mnames,ynames))
      outvars<-cbind(mtmp,ytmp)
      indcov<-matrix(0,((nms*2)+(nms*(nxvls-1))),((nms*2)+(nms*(nxvls-1))))
      mcsopath<-matrix(0,((nms*2)+(nms*(nxvls-1))),1)
    }
    labstart<-1
    intstart<-1
    start<-1
    coeffmat<-matrix(0,1,6)
    conseq<-"        "
    dfmat<-0;coeffcol<-0;pathscnt<-1;pathscn2<-1
    
    # START G LOOP
    for (i in c(1:(nms+nys)))
    {
      if (outscreen==1)
      {cat("\n*********************************************************************** \n")}
      highf<-matrix(0,1,5);highf2<-highf
      if ((i==(nms+nys)) & (ydich==1)){highf=matrix(0,1,3);highf2<-highf}
      flabel<-" "   
      y<-outvars[,i]
      xindx<-datindx[1:(nump[1,i]-1),i]
      x<-fulldat[,xindx]
      x<-cbind(ones,x)
      xsq<-t(x)%*%x
      exsq<-eigen(xsq)
      exsq<-matrix(unlist(exsq[1]))
      zeroeig<-sum(as.numeric(exsq <= 0.000000000002))
      if (outscreen==1)
      {
        cat("Outcome Variable: ")
        write.table(outnames[i,1],quote=FALSE,row.names=FALSE,col.names=FALSE)
        cat("\n")
        if ((ydich==1) & (i==(nms+nys)))
        {
          cat("Coding of binary Y for logistic regression analysis:\n")
          rcd<-noquote(matrix(sprintf(decimals,rcd),nrow=nrow(rcd)))
          colnames(rcd)<-c(outnames[i,1], "Analysis")
          rownames(rcd)<-t(matrix(replicate(nrow(rcd)," ")))
          print(rcd,right=T)
          cat("\n")
        }
      }
      if (zeroeig > 0)
      {
        cat("\nSINGULAR OR NEAR SINGULAR DATA MATRIX.\n")
        criterr<-1;errcode[errs,1]<-31;errs<-errs+1;
      }    
      means<-colSums(x)/n
      vlabsm<-matrix(vlabs[labstart:(labstart+(nump[1,i]-1)),1])
      #START E
      if (criterr==0)
      {
        if ((ydich==0) | (i < (nms+nys)))
        {
          modoutz<-process.modelest(y,x,1,1,xp2,hc)
          modres<-matrix(unlist(modoutz[1]),nrow=nump[1,i])
          direff<-matrix(modres,nrow=ncol(x))
          #modresl<-matrix(unlist(modoutz[2]))  
          modsum<-matrix(unlist(modoutz[3]))
          tval<-matrix(unlist(modoutz[7]))
          resid<-matrix(unlist(modoutz[8]))
          modresid<-cbind(modresid,resid)
          brsq2<-modsum[2,1]
          dfres<-modsum[6,1]
          #for recording results
          outformres<-process.outform3(modsum,maxresm,resultm)
          maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
          outformres<-process.outform3(modres,maxresm,resultm)
          maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
          #end recording results
          modrest9<-modres
          modres<-noquote(matrix(sprintf(decimals,modres),nrow=nump[1,i]))
          modsum<-noquote(matrix(sprintf(decimals,modsum),nrow=1))
          b<-matrix(unlist(modoutz[5]))
          varb<-matrix(unlist(modoutz[6]),nrow=nump[1,i])
          dfmatt<-matrix(modsum[1,6],nrow(modres),1)
          modsuml<-matrix(c("R","R-sq","MSE",hcflab,"df1","df2", "p"))
          modresl<-t(matrix(c("coeff",hclab,"t","p","LLCI","ULCI")))
        }
        if ((ydich==1) & (i==(nms+nys)))
        {
          modoutz<-process.modelest(y,x,2,1,xp2,5,iterate,converge)
          modres<-matrix(unlist(modoutz[1]),nrow=nump[1,i])
          direff<-matrix(modres,nrow=ncol(x))
          modsum<-matrix(unlist(modoutz[3]))
          basemod<-modsum[1,1]
          basemodx<-basemod
          tval<-matrix(unlist(modoutz[7]))
          outformres<-process.outform3(modsum,maxresm,resultm)
          maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
          outformres<-process.outform3(modres,maxresm,resultm)
          maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
          modrest9<-modres
          modres<-noquote(matrix(sprintf(decimals,modres),nrow=nump[1,i]))
          modsum<-noquote(matrix(sprintf(decimals,modsum),nrow=1))
          b<-matrix(unlist(modoutz[5]))
          varb<-matrix(unlist(modoutz[6]),nrow=nump[1,i])
          modsuml<-matrix(c("-2LL","ModelLL", "df", "p", "McFadden", "CoxSnell", "Nagelkrk"))
          modresl<-t(matrix(c("coeff","se","Z","p","LLCI","ULCI")))
          #modretrn<-list(modres,modresl,modsum,modsuml,b,varb,xp2)
          dfmatt<-matrix(-999,nrow(modres),1)
        } 
        obscoeff<-cbind(obscoeff,t(b))
        if (outscreen==1)
        {
          cat("Model Summary: \n")
          colnames(modsum)<-modsuml;rownames(modsum)<-" "
          print(modsum,right=T)
          cat("\n")
          cat("Model: \n")
          rownames(modres)<-vlabsm;colnames(modres)<-modresl
          print(modres,right=T)   
          if ((ydich==1) & (i==(nms+nys)))
          {
            cat("\nThese results are expressed in a log-odds metric.\n")
            notecode[notes,1]<-26;notes<-notes+1
          }
        }
        coeffmat<-rbind(coeffmat,modres)
        conseqt<-matrix(outnames[i,1],nrow(modres),1)
        conseq<-matrix(c(conseq,conseqt))
        dfmat<-rbind(dfmat,dfmatt)
        labstart<-labstart+nump[1,i] 
        
        if (stand==1)
        {
          predsd<-matrix(0,nrow(modres),1)
          stdmod<-as.numeric(modres[,1])/ovsd[i,1]
          for (jd in c(1:ncol(x)))
          {
            predsd[jd,1]<-sd(x[,jd])
          }
          if ((wherex[1,i] != -999) & ((nxvls > 1) | (xdich==1)))    
          {
            sdmsone<-matrix(1,nxvls,1)
            predsd[wherex[1,i]:wherex[2,i],1]<-sdmsone    
            pstog<-1    
          }
          predsd[1,1]<-1
          stdmod<-stdmod*predsd
          stdmod<-matrix(stdmod[2:nrow(stdmod),1])
          sdvlabs<-vlabsm[2:nrow(vlabsm),1]
          if (outscreen==1){cat("\nStandardized coefficients:\n")}
          outformres<-process.outform3(stdmod,maxresm,resultm,1)
          maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
          stdmod<-noquote(matrix(sprintf(decimals,stdmod),nrow=(nump[1,i]-1)))
          colnames(stdmod)<-"coeff"
          rownames(stdmod)<-sdvlabs
          if (outscreen==1)
          {print(stdmod,right=T)}
        }
        if ((nms > 0) & (serial==0) & (sum(numint)==0) & ((normal==1) | (mc > 0)))
        {
          if (i < (nms+nys))
          {
            indcov[(((i-1)*nxvls)+1):(i*nxvls),(((i-1)*nxvls)+1):(i*nxvls)]<-varb[2:(1+nxvls),2:(1+nxvls)]
            mcsopath[(((i-1)*nxvls)+1):(i*nxvls),1]<-matrix(modrest9[2:(1+nxvls),1])
          }
          if (i==(nms+nys))
          {
            atm<-ncol(wherem)
            indcov[((nms*nxvls)+1):nrow(mcsopath),((nms*nxvls)+1):nrow(mcsopath)]<-varb[wherem[1,atm]:(wherem[1,atm]+nms-1),wherem[1,atm]:(wherem[1,atm]+nms-1)]
            mcsopath[((nms*nxvls)+1):nrow(mcsopath),1]<-matrix(modrest9[wherem[1,atm]:(wherem[1,atm]+nms-1),1])
            sobelok<-1          
          }
        }
        obsdirfx<-matrix(0,1,nxvls);dirzes<-matrix(0,1,nxvls)    
        if ((i ==(nms+nys)) & (bcmat[nrow(bcmat),1]==1))
        {
          direff<-matrix(direff[2:(1+nxvls),],nrow=nxvls)
          obsdirfx<-t(direff[,1])
          direfflb<-modresl
          direffl2<-vlabsm[2:(1+nxvls),]
          lmat<-matrix(0,nrow(b),1)
          lmat2<-matrix(1,nxvls,1)
          lmat[2:(1+nxvls),1]<-lmat2
          if (ydich != 1)
          {
            diromni<-process.ftest3(lmat,b,varb,1,brsq2,0,y,x)
          }
          if (ydich==1){diromni<-process.llrtest3(lmat,y,x,b,basemod,iterate,converge)}
        }
        
        if (numint[1,i] > 0)
        {
          if (outscreen==1)
          {
            cat("\nProduct terms key:\n")
            intkeym<-matrix(intkey[intstart:(intstart+numint[1,i]-1),],ncol=7)
            write.table(intkeym,quote=FALSE,row.names=FALSE,col.names=FALSE,sep = "  ")
          }
        }
        if (covcoeff==1)
        {
          if (outscreen==1){cat("\nCovariance matrix of regression parameter estimates:\n")}
          outformres<-process.outform3(varb,maxresm,resultm)
          maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
          varbpr<-noquote(matrix(sprintf(decimals,varb),nrow=nump[1,i]))
          rownames(varbpr)<-vlabsm;colnames(varbpr)<-vlabsm
          if (outscreen==1)
          {print(varbpr,right=T)}
        }
        #start X by M interaction */
        if ((model != 74) & (xmtest==1) & (nms > 0))
        {
          r2tmp<-brsq2;btmp<-b;varbtmp<-varb
          dfrestmp<-dfres
          tvaltmp<-tval
          xmtst<-matrix(0,nms,4)
          xmtstlbc=matrix(c(hcflab,"df1","df2","p"))
          if ((i==(nms+nys)) & (ydich==1))
          {xmtst<-matrix(0,nms,3);xmtstlbc<-c("Chi-sq","df","p")
          }
          xmtstlb<-" ";xmtmat<-x;numxint<-0
          if (i > 1)
          {
            for (xmints in (2:i))
            {
              x<-xmtmat
              if ((bcmat[(i+1),xmints]==1) & (wzcmat[(i+1),xmints] != 1)) 
              {
                if (bcmat[(i+1),1]==0)
                {
                  x<-cbind(xmtmat,xtmp)
                  if ((ydich==1) & (i==(nms+nys)))
                  {
                    LL2<-process.modelest(y,x,2,0,xp2,5,iterate,converge)
                    basemodx<-LL2
                  }
                }
                for (xmtlp1 in (1:nxvls))
                {
                  mtmpmns<-sum(mtmp[,(xmints-1)])/nrow(mtmp)
                  x<-as.matrix(cbind(x,(xtmp[,xmtlp1]*((mtmp[,(xmints-1)])-mtmpmns))))
                }
                if ((i < (nms+nys)) | (ydich==0))
                {
                  modoutz<-process.modelest(y,x,1,1,xp2,hc)
                  b<-matrix(unlist(modoutz[5]))
                  varb<-matrix(unlist(modoutz[6]),nrow=nrow(b))
                  lmat<-matrix(0,nrow(b),nxvls)
                  lmattmp<-diag(nxvls)
                  lmat[(nrow(lmat)-nxvls+1):nrow(lmat),]<-lmattmp
                  fresult2<-process.ftest3(lmat,b,varb,0,0,1,y,x)
                  numxint<-numxint+1
                  xmtst[numxint,]<-fresult2
                }
                #right here
                if ((i==(nms+nys)) & (ydich==1))
                {
                  LL2<-process.modelest(y,x,2,0,xp2,5,iterate,converge)
                  chidfxm<-(basemodx-LL2)
                  numxint<-numxint+1
                  xmtst[numxint,1]<-chidfxm
                  xmtst[numxint,3]<-(1-pchisq(chidfxm,df=nxvls))
                }
                xmtstlbt<-matrix(c(highlbx[(xmints-1),1]))
                xmtstlb<-rbind(xmtstlb,xmtstlbt)     
              }      
            }
          }
          x<-xmtmat
          if (numxint > 0)
          {           
            xmtstlb<-matrix(xmtstlb[(2:(numxint+1)),])
            xmtst<-matrix(xmtst[1:numxint,],nrow=numxint)
            if (nms==1){xmtstlb<-" "}
            outformres<-process.outform3(xmtst,maxresm,resultm)
            maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
            if ((i < (nms+nys)) | (ydich==0))
            {
              xmtst<-noquote(matrix(sprintf(decimals,xmtst),ncol=4))
              colnames(xmtst)<-xmtstlbc
              rownames(xmtst)<-xmtstlb
              if (outscreen==1)
              {cat("\nTest(s) of X by M interaction:\n")
                print(xmtst,right=T)}
            } 
            if ((i==(nms+nys)) & (ydich==1))
            {
              xmtst<-noquote(matrix(sprintf(decimals,xmtst),ncol=3))
              colnames(xmtst)<-xmtstlbc
              rownames(xmtst)<-xmtstlb
              if (outscreen==1)
              {cat("\nLikelihood ratio test(s) of X by M interaction:\n")
                print(xmtst,right=T)}
            } 
          }   
          b<-btmp;varb<-varbtmp;dfres<-dfrestmp;tval<-tvaltmp;brsq2<-r2tmp
        }
        #end X by M interaction
        
        #here is where we do F tests
        #START F
        if (criterr==0)
        {
          jj<-0
          for (j in (start:((start+i)-1)))
          {
            dbint<-0
            lmat<-whigh[1:nump[1,i],j]
            lmat2<-wzhigh[1:nump[1,i],j]
            if ((sum(lmat) > 0) & (sum(lmat2)==0)) 
            {         
              if ((i < (nms+nys)) | (ydich != 1))
              {
                fresult2<-process.ftest3(lmat,b,varb,chr=1,brsq2,0,y,x)
                lmatdb<-lmat
                dbint=dbint<-1
              }
              if ((ydich==1) & (i==(nms+nys)))
              {                      
                fresult2<-process.llrtest3(lmat,y,x,b,basemod,iterate,converge)
                lmatdb<-lmat
                dbint<-dbint+1
              }
              highf<-rbind(highf,fresult2)
              highf2<-rbind(highf2,fresult2)
              if (j==start){flabel<-matrix(c(flabel,"X*W"))}      
              if (j > start)
              {
                if (nms > 1){flabel<-matrix(c(flabel,highlbw[jj,1]))}
                if (nms==1)
                {
                  if (xmint==0){flabel<-matrix(c(flabel,"M*W"))}
                  if (xmint==1){flabel<-matrix(c(flabel,"X*M"))}       
                }
              }
            }     
            lmat<-zhigh[1:nump[1,i],j]
            lmat2<-wzhigh[1:nump[1,i],j]
            if ((sum(lmat) > 0) & (sum(lmat2)==0))
            {
              if ((i < (nms+nys)) | (ydich != 1))
              {
                fresult2<-process.ftest3(lmat,b,varb,chr=1,brsq2,0,y,x)
                dbint<-dbint+1             
              }
              if ((ydich==1) & (i==(nms+nys)))
              {
                fresult2<-process.llrtest3(lmat,y,x,b,basemod,iterate,converge)
                dbint<-dbint+1    
              }
              highf<-rbind(highf,fresult2)   
              highf2<-rbind(highf2,fresult2)                
              if (j==start){flabel<-matrix(c(flabel,"X*Z"))}
              if (j > start)
              {
                if (nms > 1){flabel<-matrix(c(flabel,highlbz[jj,1]))}
                if (nms==1){flabel<-matrix(c(flabel,"M*Z"))}
              }
            }
            if (dbint==2)
            {
              lmatdb<-(lmatdb+lmat)
              if ((ydich==1) & (i==(nms+nys)))
              {fresult2<-process.llrtest3(lmatdb,y,x,b,basemod,iterate,converge)}       
              if ((ydich != 1) | (i < (nms+nys)))
              {
                fresult2<-process.ftest3(lmatdb,b,varb,chr=1,brsq2,0,y,x)
              }
              dbint<-0 
              highf<-rbind(highf,fresult2)
              if ((jj==0) & (nms > 0)){flabel<-matrix(c(flabel,"BOTH(X)"))}  
              if ((jj==0) & (nms==0)){flabel<-matrix(c(flabel,"BOTH"))}  
              if ((jj > 0) & (nms==1)){flabel<-matrix(c(flabel,"BOTH(M)"))}  
              if ((nms > 1) & (jj > 0)){flabel<-matrix(c(flabel,highlbbt[jj,1]))}         
            } 
            lmat2<-wzhigh[1:nump[1,i],j]
            if (sum(lmat2) > 0)
            {
              if ((i < (nms+nys)) | (ydich != 1))
              {
                fresult2<-process.ftest3(lmat2,b,varb,chr=1,brsq2,0,y,x)
              }
              if ((ydich==1) & (i==(nms+nys)))
              {fresult2<-process.llrtest3(lmat2,y,x,b,basemod,iterate,converge)}
              highf<-rbind(highf,fresult2)
              highf2<-rbind(highf2,fresult2)
              if (j==start){flabel<-matrix(c(flabel,"X*W*Z"))}
              if (j > start)
              {
                if (nms > 1){flabel<-matrix(c(flabel,highlbwz[jj,1]))}
                if (nms==1){flabel<-matrix(c(flabel,"M*W*Z"))}
              }
            }
            jj<-jj+1
          }
          start<-start+i
          highfsz<-ncol(highf)
        }
        #END F
        
        if (nrow(highf) > 1)
        {
          highf<-matrix(highf[2:nrow(highf),],ncol=highfsz)
          highf2<-matrix(highf2[2:nrow(highf2),],ncol=highfsz)
          flabel<-as.matrix(flabel[2:nrow(flabel),])
          outformres<-process.outform3(highf,maxresm,resultm)
          maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
          highf<-noquote(matrix(sprintf(decimals,highf),ncol=highfsz))
          if (outscreen==1)
          {
            if ((i < (nms+nys)) | (ydich==0))
            {      
              cat("\nTest(s) of highest order unconditional interaction(s):\n")
              colnames(highf)<-matrix(c("R2-chng",hcflab,"df1","df2","p"))
              rownames(highf)<-flabel
              print(highf,right=T)      
            }
            if ((ydich==1) & (i==(nms+nys)))
            {
              cat("\nLikelihood ratio test of highest order\n")
              cat("unconditional interaction(s):\n")
              colnames(highf)<-matrix(c("Chi-sq", "df","p"))
              rownames(highf)<-flabel
              print(highf,right=T)
            }
          }      
          intpb<-as.matrix(highf2[,ncol(highf2)])
        }
        intstart<-intstart+numint[1,i]
      }
      #END E
      
      #Start PROBEandPLOT
      if (criterr==0)
      {
        threeway<-0;didprint<-0;didsome<-0;sigintct<-0
        #Start R
        for (jmed in (1:(nms+1)))
        {
          hasw<-0;hasz<-0;jnok<-0;nm1vls<-0;nm2vls<-0;panelgrp<-0
          focpred4<-matrix(" ")
          intprint<-0;modcat<-0    
          #Start A
          if (jmed <= i)
          {
            if ((jmed==1) & ((i+1)==nrow(bcmat)))
            {pathscnt<-pathscnt+1} else {
              paths<-cbind(paths,bcmat[(i+1),jmed])
              pathsw<-cbind(pathsw,wcmat[(i+1),jmed])
              pathsz<-cbind(pathsz,zcmat[(i+1),jmed])
              pathswz<-cbind(pathswz,wzcmat[(i+1),jmed])
              temp<-matrix(fochigh[,pathscnt]*bootloc[,i])
              pathsfoc<-as.matrix(cbind(pathsfoc,pathsfoc[,1]))
              if (jmed==1){pathtype<-cbind(pathtype,1)}
              if ((i+1)==nrow(bcmat)){pathtype<-cbind(pathtype,3)}
              if ((jmed > 1) & ((i+1) < nrow(bcmat))){pathtype<-cbind(pathtype,2)}
              if ((jmed==1) & (nxvls > 1) & (bcmat[(i+1),jmed]==1))
              {pathsfoc[,(pathscn2+1)]<-temp[2:(nxvls+1),1]}
              if ((jmed > 1) | ((jmed==1) & (nxvls==1)))
              {
                temp<-matrix(apply(temp,2,max))  #column max
                pathsfoc[1,(pathscn2+1)]<-temp
              }
              pathscnt<-pathscnt+1;pathscn2<-pathscn2+1
              if (i <= nms){pathsdv<-matrix(c(pathsdv,mnames[1,i]))}
              if (i > nms){pathsdv<-matrix(c(pathsdv,ynames))}
            }
            coeffcol<-coeffcol+1
            probettt<-matrix(coeffs[1:nrow(b),coeffcol])
            if ((jmed==1) & (bcmat[(i+1),jmed]==1))
            {
              omni<-matrix(0,nrow(probettt),nxvls)
              omnitmp<-diag(nxvls)
              omni[2:(1+nxvls),]<-omnitmp
            }
            if (sum(probettt) > 0)
            {
              probvarb<-matrix(999,sum(probettt),sum(probettt))
              probcoef<-matrix(999,sum(probettt),1)
              coefflp2<-1
              for (coefflp in (1:nrow(probettt)))
              {
                if (probettt[coefflp,1]==1)
                {
                  probcoef[coefflp2,1]<-b[coefflp,1]
                  coefflp2<-coefflp2+1
                }
              }
              coefflp<-0;coefflp2<-0
              for (iclp in (1:nrow(probettt)))
              {
                if (probettt[iclp,1]==1)
                {
                  coefflp<-coefflp+1
                  coefflp2<-coefflp
                  probvarb[coefflp,coefflp]<-varb[iclp,iclp]
                  if (iclp < nrow(probettt))
                  {
                    for (jclp in ((iclp+1):nrow(probettt)))
                    {       
                      if (probettt[jclp,1]==1)
                      {
                        coefflp2<-coefflp2+1
                        probvarb[coefflp,coefflp2]<-varb[iclp, jclp]
                        probvarb[coefflp2,coefflp]<-varb[iclp, jclp]
                      }
                    }
                  }
                }
              } 
            } 
          }
          #End A
          xprobval<-as.matrix(xmodvals)
          if ((nxvls > 1) | (mcx > 0)){xprobval<-as.matrix(dummatx[,2:ncol(dummatx)])}
          #Start B
          if ((wcmat[(i+1),jmed]==1) & (zcmat[(i+1),jmed]==0))
          {
            numplps<-1;modvals<-wmodvals;probeval<-wmodvals;wheremv1<-wherexw
            nm1vls<-nwvls;lpstsp<-t(matrix(c(1,1)));modcat<-0;jnmod<-wtmp;jnmodlab<-wnames
            jnok<-1;jnmin<-wmin;jnmax<-wmax;wherejn1<-2
            if (jmed==1)
            {
              wherejn3<-wherexw[1,i]
              if (nxvls > 1){jnok<-0}
            }
            if (jmed > 1)
            {
              wherejn1<-wherem[(jmed-1),i]
              wherejn3<-wheremw[((2*jmed)-3),i]
            }
            if (nwvls > 1)
            {
              probeval<-wprobval
              lpstsp[1,2]<-ncol(probeval)
              modcat<-1;jnok<-0
            }
            if (wdich==1){modcat<-1;jnok<-0}
            problabs<-wnames
            focpred3<-t(matrix(c(wnames,"(W)"))) 
            if (xmint==1)
            {focpred3<-t(matrix(c(wnames,"(X)")))}
            hasw<-1
            modgrph<-wnames;intprint<-1;sigintct<-sigintct+1;
            printpbe<-intpb[sigintct,1]
          }
          #end B
          #start C
          if ((wcmat[(i+1),jmed]==0) & (zcmat[(i+1),jmed]==1))
          {
            numplps<-1;modvals<-zmodvals;probeval<-zmodvals;wheremv1<-wherexz
            nm1vls<-nzvls;lpstsp<-t(matrix(c(1,1)));jnok<-1;jnmod<-ztmp;jnmin<-zmin;jnmax<-zmax
            jnmodlab<-znames;wherejn1<-2
            if (jmed==1)
            { 
              wherejn3<-wherexz[1,i]
              if (nxvls > 1){jnok<-0}
            }
            if (jmed > 1){wherejn1<-wherem[(jmed-1),i];wherejn3<-wheremz[((2*jmed)-3),i]}
            if (nzvls > 1)
            {
              probeval<-zprobval;lpstsp[1,2]<-ncol(probeval);modcat<-1;jnok<-0
            }
            if (zdich == 1){modcat<-1;jnok<-0}
            problabs<-znames
            focpred3<-t(matrix(c(znames,"(Z)"))) 
            modgrph<-znames;hasz<-1;intprint<-1;sigintct<-sigintct+1;
            printpbe<-intpb[sigintct,1]
          }
          # end C
          # start D
          if ((wzcmat[(i+1),jmed]==1) |  ((wcmat[(i+1),jmed]==1) & (zcmat[(i+1),jmed]==1)))
          {
            numplps<-2;probecnt<-1;intprint<-1
            if (wzcmat[(i+1),jmed]==1)
            {
              sigintct<-sigintct+1;printpbe<-intpb[sigintct,1]
            } else {
              sigintct<-sigintct+2;printpbe<-min(intpb[(sigintct-1):sigintct,1])
            } 
            panelgrp<-1;hasw<-1;hasz<-1
            modgrph<-wnames
            lpstsp<-matrix(1,2,2)
            wheremv1<-wherexw;nm1vls<-nwvls;wheremv2<-wherexz;nm2vls<-nzvls;jnok<-0
            if (wzcmat[(i+1),jmed]==1){jnok<-1}
            if (jmed > 1){mprobval<-mmodvals}
            if (jmed==1){if (nxvls > 1){jnok<-0}}
            if (nwvls > 1){lpstsp[1,2]<-ncol(wprobval);modcat<-1;jnok<-0}
            if (zdich==1){modcat<-1;jnok<-0}
            lpstsp[2,1]<-lpstsp[1,2]+1;lpstsp[2,2]<-lpstsp[1,2]+1
            if (nzvls > 1)
            {
              lpstsp[2,1]<-lpstsp[1,2]+1
              lpstsp[2,2]<-lpstsp[1,2]+ncol(zprobval)
              jnok<-0
            }
            if (zdich==1){jnok<-0}
            omni3<-matrix(0,nrow(b),(nxvls*nwvls),0)
            if (jmed > 1){omni3<-matrix(0,nrow(b),nwvls)}
            focpred3<-t(matrix(c(wnames,"(W)")))
            if (xmint==1)
            {focpred3<-t(matrix(c(wnames,"(X)")))}
            focpred4<-t(matrix(c("      Moderator:", znames, "(Z)"))) 
            modvals<-matrix(0,(nrow(wmodvals)*nrow(zmodvals)),2)
            probeval<-matrix(0,(nrow(wmodvals)*nrow(zmodvals)),(ncol(wprobval)+ncol(zprobval)))
            for (probei in (1:nrow(wmodvals)))
            {
              for (probej in (1:nrow(zmodvals)))
              {
                modvals[probecnt,1]<-wmodvals[probei,1]
                probeval[probecnt,1:nwvls]<-wprobval[probei,]
                modvals[probecnt,2]<-zmodvals[probej,1]
                probeval[probecnt,(nwvls+1):(nwvls+nzvls)]<-zprobval[probej,]
                probecnt<-probecnt+1
              }
            }
            if (wzcmat[(i+1),jmed]==1)
            {
              numplps<-numplps+1
              probprod<-matrix(0,1,(ncol(wprobval)*ncol(zprobval)))
              lpstsp2<-t(matrix(c(1,1)))
              lpstsp=rbind(lpstsp,lpstsp2)
              lpstsp[3,1]<-lpstsp[2,2]+1
              lpstsp[3,2]<-lpstsp[2,2]+ncol(probprod)
              jnmod<-ztmp;jnmin<-zmin;jnmax<-zmax;jnmodlab<-znames
              if (jmed == 1){wherejn1<-wherexw[1,i];wherejn3<-wherexwz[1,i]}
              if (jmed > 1)
              {
                wherejn1<-wheremw[((2*jmed)-3),i]
                wherejn3<-wheremwz[((2*jmed)-3),i]
              }
              for (probei in (1:nrow(wmodvals)))
              {
                for (probej in (1:nrow(zmodvals)))
                {
                  probtemp<-1
                  for (probek in (1:ncol(wprobval)))
                  {
                    #probtemp<-cbind(probtemp,(wprobval[probei,probek]*zprobval[probej,]))
                    probtemp<-cbind(probtemp,matrix((wprobval[probei,probek]*zprobval[probej,]),ncol=ncol(zprobval)))
                  }
                  probprod<-rbind(probprod,probtemp[1,2:ncol(probtemp)])
                }
              }
              probprod<-probprod[2:nrow(probprod),]
              probeval<-cbind(probeval,probprod)
            }
            problabs<-cbind(wnames,znames)
          }
          # end D
          # start E
          if (intprint==1)
          {
            focpred<-"Focal predictor:"
            if (jmed==1)
            {focpred<-cbind(focpred,xnames,"(X)");focplotv<-as.matrix(xmodvals)}
            if (jmed >1)
            {
              if (nms > 1){focpred<-cbind(focpred,mnames[1,(jmed-1)], medlb2[(jmed-1),1])}
              if (nms==1){focpred<-cbind(focpred,mnames[1,(jmed-1)], "(M)")}
              focplotv<-as.matrix(mmodvals[,(jmed-1)],nrow=nrow(mmodvals))
            }
            focpred2<-cbind("      Moderator:",focpred3)
            focpred<-rbind(focpred,focpred2)
            if (ncol(focpred4) > 1){focpred<-rbind(focpred,focpred4);focpred4<-matrix(c(" "))}
            if (outscreen==1)
            {
              if (((plot==1) | (plot==2)) | (printpbe <= intprobe))      
              {cat("----------\n");write.table(focpred,quote=FALSE,row.names=FALSE,col.names=FALSE)}
            }
            foctmp<-matrix(1,nrow(modvals),1)
            probexpl<-1
            probeva2<-cbind(foctmp,probeval)
            if ((jmed==1) & (nxs > 0) & (mcx > 0)){probexpl<-nxvls}
            foctmp<-matrix(1,nrow(modvals),1)
            modvals3<-matrix(0,1,(6+ncol(problabs)))
            probrown<-matrix(0,nrow(probeval),1)
            jtmp<-1
            for (probei in (1:nrow(probeval))){probrown[probei,1]<-jtmp;jtmp<-jtmp+nxvls}
            probrow<-999;modvarl<-problabs     
            
            # start F */ 
            if ((plot==1) | (plot==2) | (nxvls > 1))
            {
              plotvals<-matrix(999,(nrow(modvals)*nrow(focplotv)),(ncol(modvals)+1))
              for (ploti in (1:nrow(modvals)))
              {
                for (plotj in (1:nrow(focplotv)))
                {
                  plotvals[(((ploti-1)*nrow(focplotv))+plotj),2:ncol(plotvals)]<-modvals[ploti,]
                  plotvals[(((ploti-1)*nrow(focplotv))+plotj),1]<-focplotv[plotj,1]
                }
              }
              focpredn<-3
              if (jmed==1)
              {
                if (nxvls > 1){focpredn<-(nxvls+1)}
                if ((nxvls==1) & (xdich==1)){focpredn<-2}
              }
              meanmat<-diag(c(means))
              onesmat<-matrix(1,nrow(meanmat),(nrow(probeval)*focpredn))
              probeplt<-t(diag(means)%*%onesmat)
              # start G
              if (jmed==1)
              {
                if ((wcmat[(i+1),1]==1) | (zcmat[(i+1),1]==1))
                {
                  plotcnt<-1;iloops<-nwpval*nzpval;plotmx<-nxpval*nzpval
                  if ((wcmat[(i+1),1]==1) & (zcmat[(i+1),1]==0))
                  {iloops<-nwpval;plotmx<-nxpval}
                  if ((wcmat[(i+1),1]==0) & (zcmat[(i+1),1]==1))
                  {iloops<-nzpval;plotmx<-nxpval}     
                  xestvals<-matrix(-999,(nxpval*iloops),ncol(xprobval))
                  if (wcmat[(i+1),1]==1){westvals<-matrix(-999,nrow(xestvals),ncol(wprobval))} 
                  if (zcmat[(i+1),1]==1){zestvals<-matrix(-999,nrow(xestvals),ncol(zprobval))}
                  for (ploti in (1:iloops))
                  {
                    for (plotj in (1:nxpval))
                    {xestvals[plotcnt,]<-xprobval[plotj,];plotcnt<-plotcnt+1}
                  }
                  plotcnt<-1;plotcnt1<-1;plotcnt2<-1;plotcntz<-1
                  for (ploti in (1:(iloops*nxpval)))
                  {
                    if (wcmat[(i+1),1]==1){westvals[ploti,]=wprobval[plotcnt1,]}        
                    if ((wcmat[(i+1),1]==0) & (zcmat[(i+1),1]==1))
                    {zestvals[ploti,]<-zprobval[plotcnt1,]}   
                    if ((wcmat[(i+1),1]==1) & (zcmat[(i+1),1]==1))
                    {zestvals[ploti,]<-zprobval[plotcnt2,];plotcntz=plotcntz+1}
                    plotcnt<-plotcnt+1
                    if (plotcnt > plotmx){plotcnt<-1;plotcnt1<-plotcnt1+1}
                    if (plotcntz > nxpval)
                    {
                      plotcnt2<-plotcnt2+1;plotcntz<-1
                      if (plotcnt2 > nzpval){plotcnt2<-1} 
                    }
                  }
                  probeplt[,2:(1+(ncol(xestvals)))]<-xestvals 
                  if (wcmat[(i+1),1]==1)
                  {probeplt[,wherew[1,i]:wherew[2,i]]<-westvals}            
                  if (zcmat[(i+1),1]==1)
                  {probeplt[,wherez[1,i]:wherez[2,i]]<-zestvals}  
                }
              }
              # end G
              # start H
              if (jmed > 1)
              {
                if ((wcmat[(i+1),jmed]==1) | (zcmat[(i+1),jmed]==1))
                {
                  plotcnt<-1;iloops<-(nwpval*nzpval);plotmx<-(3*nzpval)
                  if ((wcmat[(i+1),jmed]==1) & (zcmat[(i+1),jmed]==0))
                  {iloops<-nwpval;plotmx<-3}
                  if ((wcmat[(i+1),jmed]==0) & (zcmat[(i+1),jmed]==1))
                  {iloops<-nzpval;plotmx<-3}
                  mestvals<-matrix(-999,(3*iloops),1)
                  if (wcmat[(i+1),jmed]==1)
                  {westvals<-matrix(-999,nrow(mestvals),ncol(wprobval))}
                  if (zcmat[(i+1),jmed]==1)
                  {zestvals<-matrix(-999,nrow(mestvals),ncol(zprobval))}
                  for (ploti in (1:iloops))
                  {
                    for (plotj in (1:3))
                    {
                      mestvals[plotcnt,]<-mprobval[plotj,(jmed-1)]
                      plotcnt<-plotcnt+1
                    }
                  }
                  plotcnt<-1;plotcnt1<-1;plotcnt2<-1;plotcntz<-1
                  for (ploti in (1:(iloops*3)))
                  {
                    if (wcmat[(i+1),jmed]==1)
                    {westvals[ploti,]<-wprobval[plotcnt1,]}     
                    if ((wcmat[(i+1),jmed]==0) & (zcmat[(i+1),jmed]==1))
                    {zestvals[ploti,]<-zprobval[plotcnt1,]}   
                    if ((wcmat[(i+1),jmed]==1) & (zcmat[(i+1),jmed]==1))
                    {zestvals[ploti,]<-zprobval[plotcnt2,];plotcntz<-plotcntz+1}
                    plotcnt<-plotcnt+1
                    if (plotcnt > plotmx){plotcnt<-1;plotcnt1<-plotcnt1+1}        
                    if (plotcntz > 3)
                    {
                      plotcnt2<-plotcnt2+1;plotcntz<-1
                      if (plotcnt2 > nzpval){plotcnt2<-1} 
                    }
                  }
                  probeplt[,wherem[(jmed-1),i]]<-mestvals
                  if (wcmat[(i+1),jmed]==1)
                  {
                    if (model != 74)
                    {probeplt[,(wherew[1,i]):(wherew[2,i])]<-westvals}
                    if (model==74)
                    {probeplt[,(wherex[1,i]):(wherex[2,i])]<-westvals}
                  }    
                  if (zcmat[(i+1),jmed]==1)
                  {probeplt[,(wherez[1,i]):(wherez[2,i])]<-zestvals}  
                }
              } 
              # end H
              # Here I am doing the multiplications to produce data for the plot
              prodloop <-1
              if (jmed==1){prodloop<-ncol(xestvals)}
              if ((wcmat[(i+1),jmed])==1)
              {
                plotcnt<-0
                for (ploti in (1:prodloop))
                {
                  for (plotj in (1:ncol(westvals)))
                  {
                    if (jmed==1)
                    {probeplt[,(wherexw[1,i]+plotcnt)]<-(xestvals[,ploti]*westvals[,plotj])}
                    if (jmed > 1)
                    {probeplt[,(wheremw[((jmed*2)-3) ,i]+plotcnt)]<-(mestvals[,ploti]*westvals[,plotj])}
                    plotcnt<-plotcnt+1
                  }
                } 
              }
              if ((zcmat[(i+1),jmed])==1)
              {
                plotcnt<-0
                for (ploti in (1:prodloop))
                {
                  for (plotj in (1:ncol(zestvals)))
                  {   
                    if (jmed==1)
                    {probeplt[,(wherexz[1,i]+plotcnt)]<-(xestvals[,ploti]*zestvals[,plotj])}    
                    if (jmed > 1)
                    {probeplt[,(wheremz[((jmed*2)-3),i]+plotcnt)]<-(mestvals[,ploti]*zestvals[,plotj])}
                    plotcnt<-plotcnt+1
                  }
                } 
              }
              if ((wzcmat[(i+1),jmed])==1)
              {
                plotcnt<-0;threeway<-1
                for (ploti in (1:ncol(westvals)))
                {
                  for (plotj in (1:ncol(zestvals)))
                  {
                    probeplt[,(wherewz[1,i]+plotcnt)]<-(westvals[,ploti]*zestvals[,plotj])
                    plotcnt<-plotcnt+1
                  }
                }  
                plotcnt<-0
                for (plotk in (1:prodloop))
                {
                  for (ploti in (1:ncol(westvals)))
                  {
                    for (plotj in (1:ncol(zestvals)))
                    {
                      if (jmed==1)
                      {probeplt[,(wherexwz[1,i]+plotcnt)]<-(xestvals[,plotk]*westvals[,ploti]*zestvals[,plotj])}          
                      if (jmed > 1)
                      {probeplt[,(wheremwz[((jmed*2)-3),i]+plotcnt)]<-(mestvals[,plotk]*westvals[,ploti]*zestvals[,plotj])}          
                      plotcnt<-plotcnt+1
                    }
                  } 
                }
              }
              # here is where we add holding constant products as needed
              # start I
              for (newplp in (1:i))
              {  
                if (newplp != jmed)
                {  
                  if (wcmat[(i+1),newplp]==1)
                  {
                    prodloop<-1
                    if (newplp==1){prodloop<-nxvls}
                    plotcnt<-0
                    for (ploti in (1:prodloop))
                    {
                      for (plotj in (1:nwvls))
                      {
                        if (newplp==1)
                        {probeplt[,(wherexw[1,i]+plotcnt)]<-probeplt[,(1+ploti)]*probeplt[,(wherew[1,i]+plotj-1)]}
                        if (newplp > 1)
                        {
                          if (model != 74)
                          {probeplt[,(wheremw[((newplp*2)-3) ,i]+plotcnt)]<-probeplt[,wherem[(newplp-1),i]]*probeplt[,(wherew[1,i]+plotj-1)]}
                          if (model==74)
                          {probeplt[,(wheremw[((newplp*2)-3) ,i]+plotcnt)]<-probeplt[,wherem[(newplp-1),i]]*probeplt[,(wherex[1,i]+plotj-1)]}           
                        }
                        plotcnt<-plotcnt+1
                      }
                    } 
                  }  
                  if (zcmat[(i+1),newplp]==1)
                  {
                    prodloop<-1
                    if (newplp==1){prodloop<-nxvls}
                    plotcnt<-0
                    for (ploti in (1:prodloop))
                    {
                      for (plotj in (1:nzvls))
                      {
                        if (newplp==1)
                        {probeplt[,(wherexz[1,i]+plotcnt)]<-probeplt[,(1+ploti)]*probeplt[,(wherez[1,i]+plotj-1)]}
                        if (newplp > 1)
                        {probeplt[,(wheremz[((newplp*2)-3),i]+plotcnt)]<-probeplt[,wherem[(newplp-1),i]]*probeplt[,(wherez[1,i]+plotj-1)]}
                        plotcnt<-plotcnt+1
                      }
                    } 
                  }
                  if (wzcmat[(i+1),newplp]==1)
                  {
                    plotcnt<-0
                    if (threeway==0)
                    {
                      for (ploti in (1:nwvls))
                      {
                        for (plotj in (1:nzvls))
                        {
                          probeplt[,(wherewz[1,i]+plotcnt)]<-probeplt[,(wherew[1,i]+ploti-1)]*probeplt[,(wherez[1,i]+plotj-1)]
                          plotcnt<-plotcnt+1
                        }
                      }
                    } 
                    prodloop<-1
                    if (newplp==1){prodloop<-nxvls}
                    plotcnt<-0
                    for (plotk in (1:prodloop))
                    {
                      for (ploti in (1:nwvls))
                      {
                        for (plotj in (1:nzvls))
                        {
                          if (newplp==1)
                          {probeplt[,(wherexwz[1,i]+plotcnt)]<-probeplt[,(1+plotk)]*probeplt[,(wherew[1,i]+ploti-1)]*probeplt[,(wherez[1,i]+plotj-1)]}      
                          if (newplp > 1)
                          {probeplt[,(wheremwz[((newplp*2)-3),i]+plotcnt)]<-probeplt[,wherem[(newplp-1),i]]*probeplt[,(wherew[1,i]+ploti-1)]*probeplt[,(wherez[1,i]+plotj-1)]}      
                          plotcnt<-plotcnt+1
                        }
                      } 
                    }
                  }      
                }
              }
              #END I
              predvals<-probeplt%*%b
              
              if ((i==(nms+nys)) & (ydich==1))
              {
                predvalt<-as.numeric(predvals < 709.7)
                prevalt7<-(1-predvalt)*(709.7)
                predvals<-(predvals*predvalt)+prevalt7
                expyhat<-exp(predvals)/(1+exp(predvals))
              } 
              sepred<-matrix(999,nrow(plotvals),3)
              for (sei in (1:nrow(plotvals)))
              {
                ask<-as.matrix(probeplt[sei,],ncol=ncol(probeplt))       
                sepred[sei,1]<-sqrt(t(ask)%*%varb%*%ask)
                if ((i < (nms+nys)) | (ydich==0))
                {
                  sepred[sei,2]<-predvals[sei,1]-tval*sepred[sei,1]
                  sepred[sei,3]<-predvals[sei,1]+tval*sepred[sei,1]
                }
                if ((i==(nms+nys)) & (ydich==1))
                {
                  sepred[sei,2]<-predvals[sei,1]-xp2*sepred[sei,1]
                  sepred[sei,3]<-predvals[sei,1]+xp2*sepred[sei,1]
                }
              }
              prevloc<-ncol(plotvals)+1
              probeplt<-cbind(plotvals,predvals)
              if (plot==2){probeplt<-cbind(probeplt,sepred)}
              if ((i==(nms+nys)) & (ydich==1))
              {probeplt<-cbind(probeplt,expyhat)}
              didsome<-0
            }
            # END F
            
            # here is the loop that is printing the conditional effects
            # this does conditional two way interactions
            # START J
            if ((wzcmat[(i+1),jmed]==1) & (printpbe <= intprobe))
            {
              if (jmed==1)
              {omnilp2<-nxvls*nwvls;omnitmp<-diag(omnilp2);omni3[wherexw[1,i]:wherexw[2,i],]<-omnitmp}  
              if (jmed>1)
              {omnilp2<-nwvls;omnitmp<-diag(omnilp2);omni3[wheremw[((jmed*2)-3),i]:wheremw[((jmed*2)-2),i],]<-omnitmp}
              omnif<-matrix(0,1,4)
              if ((i==(nms+nys)) & (ydich==1))
              {omnif<-matrix(0,1,3)}
              condeff3<-0
              for (omnilp1 in (1:nrow(zprobval)))
              {
                for (omnilp in (1:omnilp2))
                {
                  if (jmed==1)
                  {
                    omni3[(wherexwz[1,i]+((omnilp-1)*nzvls)):(wherexwz[1,i]+((omnilp-1)*nzvls)+(nzvls-1)),omnilp]<-t(zprobval[omnilp1,])
                  }
                  if (jmed > 1)
                  {
                    omni3[(wheremwz[((jmed*2)-3),i]+((omnilp-1)*nzvls)):(wheremwz[((jmed*2)-3),i]+((omnilp-1)*nzvls)+(nzvls-1)),omnilp]<-t(zprobval[omnilp1,])
                  }
                }
                condeff<-t(omni3)%*%b
                condeff3<-rbind(condeff3,condeff)
                fresult2<-process.ftest3(omni3,b,varb,chr=0,brsq2,1,y,x)
                
                if ((i==(nms+nys)) & (ydich==1))
                {
                  fratio<-fresult2[1,1]*ncol(omni3)
                  pfr<-(1-pchisq(fratio,df=ncol(omni3)))
                  fresult2<-cbind(fratio,ncol(omni3),pfr)
                }
                omnif<-rbind(omnif,fresult2)
              }
              omnif<-matrix(omnif[2:nrow(omnif),],ncol=ncol(omnif))
              clabtmp<-znames
              condeff3<-matrix(condeff3[2:nrow(condeff3),],ncol=ncol(condeff3))
              if ((nxvls*nwvls)==1)
              {
                omnif<-cbind(condeff3,omnif)
                clabtmp<-cbind(clabtmp,"effect")
              } 
              omnif<-cbind(zmodvals,omnif)
              if ((i < nms+nys) | (ydich==0))
              {clabtmp<-c(clabtmp,hcflab,"df1","df2","p")}      
              if ((i==(nms+nys)) & (ydich==1))
              {clabtmp<-c(clabtmp,"Chi-sq","df","p")}
              outformres<-process.outform3(omnif,maxresm,resultm)
              maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
              omnif2<-noquote(matrix(sprintf(decimals,omnif),nrow=nrow(omnif)))
              colnames(omnif2)<-clabtmp
              rownames(omnif2)<-t(matrix(replicate(nrow(omnif)," ")))
              if (outscreen==1)
              {
                if (jmed==1)
                {cat("\nTest of conditional X*W interaction at value(s) of Z:\n")
                  print(omnif2,right=T)}
                if (jmed > 1)
                {cat("\nTest of conditional M*W interaction at value(s) of Z:\n")
                  print(omnif2,right=T)}
              }
            }
            # END J
            
            # start O 
            for (probei in (1:probexpl))
            {
              if (probexpl > 1)
              {
                foctmp<-matrix(0,nrow(modvals),probexpl)
                foctmp[,probei]<-foctmp[,probei]+1
                probtemp<-matrix(0,nrow(modvals),1)
                for (probem in (1:numplps))
                {for (probek in (1:nxvls))
                {for (probej in (lpstsp[probem,1]:lpstsp[probem,2]))
                {probtemp<-cbind(probtemp,foctmp[,probek]*probeval[,probej])}  
                }
                }
                probeva2<-probtemp[,2:ncol(probtemp)]
                probeva2<-cbind(foctmp,probeva2)
              }    
              probres<-probeva2%*%probcoef
              probrese<-as.matrix(sqrt(diag(probeva2%*%probvarb%*%t(probeva2)))) 
              tratio<-probres/probrese
              if ((ydich==1) & (i==(nms+nys)))
              {
                p<-2*(1-pnorm(abs(tratio)))
              } else {
                p<-2*pt(-abs(tratio),df=dfres)
              }
              modvals2<-cbind(modvals,probres,probrese,tratio, p)
              if ((i < nms+nys) | (ydich==0))
              {
                modvals2<-cbind(modvals2,(probres-as.numeric(tval)*probrese),(probres+as.numeric(tval)*probrese))   
                problabs<-cbind(problabs,"effect",hclab,"t", "p", "LLCI", "ULCI")
              }
              if ((ydich==1) & (i==(nms+nys)))
              {
                modvals2<-cbind(modvals2,(probres-xp2*probrese),(probres+xp2*probrese))
                problabs<-cbind(problabs,"effect","se","Z", "p", "LLCI", "ULCI")
              }
              # start L
              if ((probexpl > 1) & (printpbe <= intprobe))
              {
                if (hasz==1){printz<-1}
                if (hasw==1){printw<-1}
                probrlab<-matrix(xcatlab[probei,1],nrow(modvals),1)
                modvals3<-rbind(modvals3,modvals2)
                probrow<-rbind(probrow,probrown)
                probrown<-probrown+1
                if (probei==probexpl)
                {
                  xproblab<-xcatlab[1:nxvls,1]
                  probrow<-matrix(probrow[2:nrow(probrow),1])
                  modvals3<-modvals3[2:nrow(modvals3),]
                  #modvals3<-modvals3[order(modvals3[,1]),]
                  modvals3<-modvals3[order(probrow[,1]),]
                  start2<-1
                  problabs<-problabs[1,(1+(ncol(modvarl))):ncol(problabs)]
                  pstart<-1
                  # start K
                  for (probek in (1:nrow(probeval)))
                  {
                    endstart<-start2+(nxvls-1)
                    temp<-modvals3[start2:endstart,(1+ncol(modvarl)):ncol(modvals3)]
                    temp2<-t(modvals3[start2:start2,1:ncol(modvarl)])
                    trnames<-t(modvarl)
                    if (outscreen==1)
                    {
                      if (probek > 1){cat("----------\n")}
                      if (probek==1)
                      {
                        cat("\nConditional effects of the focal predictor at values of the moderator(s):\n")
                        if ((jmed==1) & (i ==(nms+nys)) & (nms > 0))
                        {
                          if (nxvls==1)
                          {cat("\n(These are also the conditional direct effects of X on Y.)\n")}
                          if (nxvls != 1)
                          {cat("\n(These are also the relative conditional direct effects of X on Y.)\n")}
                        }
                        cat("\n")
                      }
                      cat("Moderator value(s):\n")
                    }
                    temp22<-matrix(temp2)
                    outformres<-process.outform3(temp22,maxresm,resultm,1)
                    maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
                    temp2<-noquote(matrix(sprintf(decimals,temp2),nrow=nrow(temp2)))
                    temp3<-matrix(temp2[1,1:ncol(temp2)])
                    rownames(temp3)<-trnames
                    colnames(temp3)<-" "
                    if (outscreen==1)
                    {print(temp3,right=TRUE,quote=FALSE)
                      cat("\n")}
                    #for (mdpntr in (1:ncol(temp2)))
                    #{
                    #write.table(temp2[1,mdpntr],quote=FALSE,row.names=trnames[mdpntr,1],col.names=FALSE)
                    #}          
                    outformres<-process.outform3(temp,maxresm,resultm)
                    maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
                    temp<-noquote(matrix(sprintf(decimals,temp),nrow=nrow(temp)))
                    colnames(temp)<-problabs[1:ncol(temp)]
                    rownames(temp)<-xproblab
                    if (outscreen==1)
                    {print(temp,right=T)}
                    start2<-start2+nxvls
                    didsome<-1
                    if (jmed==1)
                    {
                      mod1val<-probeval[probek,1:nm1vls]
                      for (omnilp in (1:nxvls))
                      {
                        omni[(wheremv1[1,i]+((omnilp-1)*nm1vls)):(wheremv1[1,i]+((omnilp-1)*nm1vls)+(nm1vls-1)),omnilp]<-t(mod1val)
                        if (nm1vls < ncol(probeval))
                        {
                          mod2val<-probeval[probek,(nm1vls+1):(nm1vls+nm2vls)]
                          omni[(wheremv2[1,i]+((omnilp-1)*nm2vls)):(wheremv2[1,i]+((omnilp-1)*nm2vls)+(nm2vls-1)),omnilp]<-t(mod2val)
                          if ((nm1vls+nm2vls) < ncol(probeval))
                          {
                            intlen<-(nm1vls*nm2vls)
                            modintvl<-probeval[probek,(nm1vls+nm2vls+1):ncol(probeval)]
                            omni[(wherexwz[1,i]+((omnilp-1)*intlen)):(wherexwz[1,i]+((omnilp-1)*intlen)+(intlen-1)),omnilp]<-t(modintvl)
                          }
                        }
                      }
                      fresult2<-process.ftest3(omni,b,varb,0,brsq2,1,y,x)
                      if ((i == (nms+nys)) & (ydich==1))
                      {
                        fratio<-fresult2[1,1]*nxvls
                        pfr<-(1-pchisq(fratio,df=nxvls))
                        fresult2<-cbind(fratio,nxvls,pfr)
                      }
                      outformres<-process.outform3(fresult2,maxresm,resultm)
                      maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
                      fresult2<-noquote(matrix(sprintf(decimals,fresult2),nrow=nrow(fresult2)))
                      if (outscreen==1)
                      {
                        if (i < (nms + nys) | (ydich == 0))
                        {
                          cat("\nTest of equality of conditional means\n")            
                          colnames(fresult2)<-c(hcflab,"df1","df2","p")
                          rownames(fresult2)<-" "
                          print(fresult2,right=T)
                        }
                        if ((i==(nms + nys)) & (ydich==1))
                        {
                          cat("\nTest of equality of conditional logits or probabilities\n")
                          rownames(fresult2)<-" "
                          colnames(fresult2)<-c("Chi-sq","df","p")
                          print(fresult2,right=T)            
                        }
                      }
                      probetmp<-probeplt[pstart:(pstart+nxvls),1]
                      probetmp<-cbind(probetmp,probeplt[pstart:(pstart+nxvls),prevloc:ncol(probeplt)])
                      pstart<-pstart+(nxvls+1)
                      outformres<-process.outform3(probetmp,maxresm,resultm)
                      maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
                      probetmp<-noquote(matrix(sprintf(decimals,probetmp),nrow=nrow(probetmp)))
                      if (outscreen==1)
                      {
                        if (i < ((nms + nys)) | (ydich==0))
                        {   
                          clabtmp<-cbind(xnames, outnames[i,1], hclab, "LLCI", "ULCI")
                          cat("\nEstimated conditional means being compared:\n")
                          colnames(probetmp)<-clabtmp[1:ncol(probetmp)]
                          rownames(probetmp)<-t(matrix(replicate(nrow(probetmp)," ")))
                          print(probetmp,right=T)
                        }
                        if ((i==(nms+nys)) & (ydich==1))
                        {
                          cat("\nEstimated conditional logits and probabilities:\n")
                          clabtmp<-c(xnames, outnames[i,1], "prob")
                          probetm2<-matrix(probetmp[,1:2],ncol=2)
                          probetm2<-cbind(probetm2,probetmp[,ncol(probetmp)])
                          probetm2<-noquote(probetm2)
                          colnames(probetm2)<-clabtmp[1:ncol(probetm2)]
                          rownames(probetm2)<-t(matrix(replicate(nrow(probetm2)," ")))
                          print(probetm2,right=T)
                        }
                      }
                    }
                  }
                  # end K
                }
              }
              # end L
              # start N
              if ((probexpl==1) & (printpbe <= intprobe))
              {
                outformres<-process.outform3(modvals2,maxresm,resultm)
                maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
                modva2<-noquote(matrix(sprintf(decimals,modvals2),nrow=nrow(modvals2)))
                colnames(modva2)<-problabs[1:ncol(modva2)]
                rownames(modva2)<-t(matrix(replicate(nrow(modva2)," ")))
                if (outscreen==1)
                {cat("\nConditional effects of the focal predictor at values of the moderator(s):\n")
                  print(modva2,right=T)}
                didsome<-1
                if (hasz==1){printz<-1}
                if (hasw==1){printw<-1}
                # start M (JN method)
                if ((jn==1) & (jnok==1))
                {
                  if (criterr==0)
                  {
                    dfres<-(n-nrow(b));
                    roots<-as.matrix(99999)
                    jncrit<-(dfres* (exp((dfres-(5/6))*((xp2/(dfres-(2/3)+(.11/dfres)))*(xp2/(dfres-(2/3)+(.11/dfres)))))-1))
                    if ((i ==(nms+nys)) & (ydich==1)){jncrit<-xp2*xp2}
                    jnb1<-b[wherejn1,1]
                    jnb3<-b[wherejn3,1]
                    jnsb1<-varb[wherejn1,wherejn1]
                    jnsb3<-varb[wherejn3,wherejn3]
                    jnsb1b3<-varb[wherejn1,wherejn3]
                    ajn<-(jncrit*jnsb3)-(jnb3*jnb3)
                    bjn<-2*((jncrit*jnsb1b3)-(jnb1*jnb3))
                    cjn<-((jncrit*jnsb1)-(jnb1*jnb1))
                    radarg<-(bjn*bjn)-(4*ajn*cjn)
                    den<-2*ajn
                    nrts<-0
                    if ((radarg >= 0) & (den != 0))
                    {
                      x21<-(-bjn+sqrt(radarg))/den
                      x22<-(-bjn-sqrt(radarg))/den
                      if ((x21 >= jnmin) & (x21 <= jnmax))
                      {nrts<-1;roots<-rbind(roots,x21)}
                      if ((x22 >= jnmin) & (x22 <= jnmax))
                      {nrts<-nrts+1;roots<-rbind(roots,x22)}
                      roots<-cbind(roots,matrix(0,nrow(roots),2))
                    }
                    if (nrts > 0)
                    {                             
                      roots<-matrix(roots[2:nrow(roots),1:3],ncol=3)
                      roots[1,2]<-sum((as.numeric(jnmod < roots[1,1]))/n)*100
                      roots[1,3]<-sum((as.numeric(jnmod > roots[1,1]))/n)*100
                      if (nrow(roots)==2)
                      {
                        roots[2,2]<-sum((as.numeric(jnmod < roots[2,1]))/n)*100
                        roots[2,3]<-sum((as.numeric(jnmod > roots[2,1]))/n)*100
                      }
                      roots2<-noquote(matrix(sprintf(decimals,roots),nrow=nrow(roots)))
                      colnames(roots2)<-c("Value", "% below", "% above")
                      rownames(roots2)<-t(matrix(replicate(nrow(roots)," ")))
                      if (nrts==1){tmprts=matrix(99999,1,3);roots<-rbind(roots,tmprts)}
                      if (outscreen==1)
                      {cat("\nModerator value(s) defining Johnson-Neyman significance region(s):\n")
                        print(roots2,right=T)}
                    }
                    if (nrts==0)
                    {
                      roots<-as.matrix(c(99999,99999))
                      if (outscreen==1)
                      {cat("\nThere are no statistical significance transition points within the observed\n")
                        cat("range of the moderator found using the Johnson-Neyman method.\n")}
                    }
                    outformres<-process.outform3(roots,maxresm,resultm,1)
                    maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
                    jnvals<-matrix(0,23,7)
                    for (jni in (0:(21-nrts)))
                    {jnvals[(jni+1),1]<-jnmin+(jni*((jnmax-jnmin)/(21-nrts)))}
                    if (nrts > 0)
                    {
                      for (jni in (1:nrts))
                      {
                        for (jnj in (2:nrow(jnvals)))
                        {
                          if ((roots[jni,1] > jnvals[(jnj-1),1]) & (roots[jni,1] < jnvals[jnj,1]))
                          {
                            jnvals[(jnj+1):(21+jni),1]<-jnvals[jnj:(20+jni),1]
                            jnvals[jnj,1]<-roots[jni,1]
                          }
                        }
                      }
                    }
                    jnvals<-jnvals[1:22,] 
                    for (jni in (1:nrow(jnvals)))
                    {
                      jnvals[jni,2]<-jnb1+jnb3*jnvals[jni,1]
                      jnvals[jni,3]<-sqrt(jnsb1+2*jnvals[jni,1]*jnsb1b3+(jnvals[jni,1]*jnvals[jni,1])*jnsb3)
                      jnvals[jni,4]<-jnvals[jni,2]/jnvals[jni,3]
                      jnvals[jni,5]<-2*pt(-abs(jnvals[jni,4]), df=dfres)
                      jnvals[jni,6]<-jnvals[jni,2]-sqrt(jncrit)*jnvals[jni,3]
                      jnvals[jni,7]<-jnvals[jni,2]+sqrt(jncrit)*jnvals[jni,3]
                      if ((i==(nms + nys)) & (ydich==1))
                      {
                        jnvals[jni,5]<-2*(1-pnorm(abs(jnvals[jni,4])))
                        jnvals[jni,6]<-jnvals[jni,2]-xp2*jnvals[jni,3]
                        jnvals[jni,7]<-jnvals[jni,2]+xp2*jnvals[jni,3]
                      }
                    } 
                    outformres<-process.outform3(jnvals,maxresm,resultm)
                    maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
                    jnvals2<-noquote(matrix(sprintf(decimals,jnvals),nrow=nrow(jnvals)))
                    rownames(jnvals2)<-t(matrix(replicate(nrow(jnvals)," ")))
                    if ((i < nms+nys) | (ydich==0))
                    {colnames(jnvals2)<-c(jnmodlab,"effect", hclab, "t", "p", "LLCI", "ULCI")}          
                    if ((i==(nms+nys)) & (ydich==1))
                    {colnames(jnvals2)<-c(jnmodlab,"effect","se","Z", "p", "LLCI", "ULCI")}
                    if (outscreen==1)
                    {
                      if (((wcmat[(i+1),jmed]==1) | (zcmat[(i+1),jmed]==1)) & (wzcmat[(i+1),jmed]==0))
                      {cat("\nConditional effect of focal predictor at values of the moderator:\n");print(jnvals2,right=T)}          
                      if ((jmed==1) & (wzcmat[(i+1),jmed]==1))
                      {cat("\nConditional X*W interaction at values of the moderator Z:\n");print(jnvals2,right=T)}   
                      if ((jmed > 1) & (wzcmat[(i+1),jmed]==1))
                      {cat("\nConditional M*W interaction at values of the moderator Z:\n");print(jnvals2,right=T)} 
                    }  
                  }
                }
                # END M (JN method)
              }
              if ((i==(nms+nys)) & (jmed==1) & (bcmat[nrow(bcmat),1]==1))
              {
                if (probei==1)
                {direfflb<-problabs;direff<-modvals2}
                if (probei>1)
                {direff<-rbind(direff,modvals2)}  
              }
              intprint<-0
              #  This does the contrast for conditional effects */
              if ((jmed==1) & (i==1) & (nms==0) & (modcok==1))
              {
                contvec2=matrix(1,2,1)
                contvec2<-cbind(contvec2,wcontval,zcontval)
                if (wzcmat[(i+1),jmed]==1)
                {
                  for (conti in (1:ncol(wcontval)))
                  {
                    for (contj in (1:ncol(zcontval)))
                    {contvec2<-cbind(contvec2,wcontval[,conti]*zcontval[,contj])}
                  }
                }
                conteff<-contvec2%*%probcoef
                contdiff<-matrix(contvec2[1,]-contvec2[2,])
                contse<-sqrt(t(contdiff)%*%probvarb%*%contdiff)
                conteffd<-conteff[1,1]-conteff[2,1]
                contvec=cbind(contvec,conteff)
                contvecm<-contvec
                outformres<-process.outform3(contvecm,maxresm,resultm)
                maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
                contvecm<-noquote(matrix(sprintf(decimals,contvecm),nrow=nrow(contvecm)))
                rownames(contvecm)<-c("Effect1:","Effect2:")
                colnames(contvecm)<-problabs[1:3]
                if (outscreen==1)
                {cat("\nContrast between conditional effects of X:\n")
                  print(contvecm,right=T)}
                if (ydich==0)
                {
                  p<-2*pt(-abs(conteffd/contse),df=dfres)
                  contvec<-cbind(conteffd,contse,conteffd/contse, p)
                  contvec<-cbind(contvec,(conteffd-(tval*contse)))
                  contvec<-cbind(contvec,(conteffd+(tval*contse)))
                  contlabs<-c("Contrast", hclab, "t", "p", "LLCI", "ULCI")
                }
                if (ydich==1)
                { 
                  p<-2*(1-pnorm(abs(conteffd/contse)))
                  contvec<-cbind(conteffd,contse,conteffd/contse, p)
                  contvec<-cbind(contvec,(conteffd-(xp2*contse)))
                  contvec<-cbind(contvec,(conteffd+(xp2*contse)))
                  contlabs<-c("Contrast", "se", "Z", "p", "LLCI", "ULCI")
                } 
                outformres<-process.outform3(contvec,maxresm,resultm)
                maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
                contvec<-noquote(matrix(sprintf(decimals,contvec),nrow=nrow(contvec)))
                colnames(contvec)<-contlabs
                rownames(contvec)<-" "
                if (outscreen==1)
                {cat("\nTest of Effect1 minus Effect2\n")
                  print(contvec,right=T)}
              }
            }
            # end O
            
            if ((plot==1) | (plot==2))
            { 
              datalabs<-cbind(t(focpred[,2]),outnames[i,1])
              if (plot==2)
              {datalabs<-c(datalabs,"se", "LLCI", "ULCI")}
              if ((i==(nms+nys)) & (ydich==1))
              {datalabs<-c(datalabs,"prob")}
              outformres<-process.outform3(probeplt,maxresm,resultm)
              maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
              probepnt<-noquote(matrix(sprintf(decimals,probeplt),nrow=nrow(probeplt)))
              colnames(probepnt)<-datalabs
              rownames(probepnt)<-t(matrix(replicate(nrow(probepnt)," ")))
              if (outscreen==1)
              {cat("\nData for visualizing the conditional effect of the focal predictor:\n")
                print(probepnt,right=T)}
            }    
          }      
          #End E
        }
        #End R
      }
      #End PROBEandPLOT
      
      if ((model==74) & (i <= nms))
      {
        onetemp<-matrix(1,nrow(xprobval),1)
        mestmt74<-cbind(onetemp,xprobval)
        if (ncs > 0)
        {
          ncovmdl<-sum(ccmat[i,])
          if (ncovmdl > 0)
          {
            cvmnc<-matrix(1,nrow(mestmt74),ncovmdl)
            cvmnctmp<-t(matrix(apply(matrix(x[,(ncol(x)-ncovmdl+1):ncol(x)],nrow=nrow(x)),2,mean)))
            if (cuscoval > 0){cvmnctmp<-coval}            
            for (mestlp in c(1:ncovmdl))
            {cvmnc[,mestlp]<-cvmnc[,mestlp]*cvmnctmp[,mestlp]}
            mestmt74<-cbind(mestmt74,cvmnc)
          }
        }
        mest74t<-mestmt74%*%b
        if (i==1){mest74<-mest74t}
        if (i > 1){mest74<-cbind(mest74,mest74t)}      
      }
      
      #linear sum
      if (ydich==0)
      {
        if ((i==(nms+nys)) & (model >= 0) & (model < 4) & (linsum[1,1] != -999))
        {
          lhyprob<-1;meansub<-0
          if (((nlinsum==nrow(b)) | (nlinsum==(nrow(b)-ncs))))
          {
            if ((nlinsum ==(nrow(b)-ncs)) & (ncs > 0))
            {
              linsum<-cbind(linsum,covmeans)
              meansub<-1
            }
            lhyprob<-0;hypest<-linsum%*%b
            sehypest<-sqrt(linsum%*%varb%*%t(linsum))
            phypest<-2*(pt((-abs(hypest/sehypest)),dfres))
            hypest<-matrix(c(hypest,sehypest,(hypest/sehypest),phypest,(hypest-tval*sehypest),(hypest+tval*sehypest)),ncol=6)
            outformres<-process.outform3(t(linsum),maxresm,resultm,1)
            maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
            outformres<-process.outform3(hypest,maxresm,resultm)
            maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
            if (outscreen==1)
            {
              hyplabs<-c("Estimate",hclab,"t","p","LLCI","ULCI")
              cat("\n----------\n")
              cat("Linear Combination Estimate and Hypothesis Test\n")
              linsumpt<-noquote(matrix(sprintf(decimals,linsum),ncol=1))
              colnames(linsumpt)<-"weight"
              rownames(linsumpt)<-vlabsm
              cat("\nWeight vector:\n")
              print(linsumpt,right=TRUE)
              hypestpt<-noquote(matrix(sprintf(decimals,hypest),ncol=6))
              colnames(hypestpt)<-hyplabs
              rownames(hypestpt)<-" "
              cat("\n")
              print(hypestpt,right=TRUE)
              if (meansub==1)
              {cat("\nCovariate weight(s) set to the sample mean.\n")}
            }
          }
          if (lhyprob==1){notecode[notes,1]<-30;notes<-notes + 1}
        }
      }
    }
    #END G LOOP
    lastb<-b
    lastcov<-varb
    if ((criterr==0) & (dototal==1))
    {
      x<-xtmp
      vlabsm<-matrix(c("constant",xcatlab[1:nxvls,1]))
      if (ncs > 0)
      {
        x<-cbind(as.matrix(x),as.matrix(ctmp))
        vlabsm<-matrix(c(vlabsm,t(covnames)))
      }
      x<-cbind(ones,x)
      modoutz<-process.modelest(y,x,1,1,xp2,hc)
      modsum<-matrix(unlist(modoutz[3]))
      modres<-matrix(unlist(modoutz[1]),nrow=ncol(x))
      toteff<-matrix(modres,nrow=ncol(x))
      toteff<-matrix(toteff[2:(1+nxvls),],nrow=nxvls)
      nodotot<-0
      if ((xdich==1) & (xmint==1) & (model==74))
      {
        toteff[,1]<-toteff[,1]*xscaling
        toteff[,2]<-toteff[,2]*abs(xscaling)
        toteff[,3]<-toteff[,3]*xscaling
        toteff[,5]<-toteff[,5]*xscaling
        toteff[,6]<-toteff[,6]*xscaling
        citmp<-t(matrix(toteff[,5:6]))
        if (xscaling < 0)
        {
          toteff[,5]<-citmp[,2]
          toteff[,6]<-citmp[,1]
        }
        nodotot<-1
      }
      if (outscreen==1)
      {
        if (nodotot==0)
        {cat("\n************************ TOTAL EFFECT MODEL *************************** \n")}
        if (nodotot==1)
        {cat("\n*********************************************************************** \n")}
        cat("Outcome Variable: ")
        write.table(outnames[nrow(outnames),1],quote=FALSE,row.names=FALSE,col.names=FALSE)
        cat("\n")
      }
      outformres<-process.outform3(modsum,maxresm,resultm)
      maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
      modsum<-noquote(matrix(sprintf(decimals,modsum),nrow=1))
      outformres<-process.outform3(modres,maxresm,resultm)
      maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
      modres<-noquote(matrix(sprintf(decimals,modres),nrow=ncol(x)))
      varb<-matrix(unlist(modoutz[6]),nrow=ncol(x))
      brsq2<-modsum[1,2]
      b<-matrix(unlist(modoutz[5]))
      colnames(modsum)<-modsuml;rownames(modsum)<-" "
      rownames(modres)<-vlabsm;colnames(modres)<-modresl
      if (outscreen==1)
      {
        cat("Model Summary: \n")
        print(modsum,right=T)
        cat("\n")
        cat("Model: \n")
        print(modres,right=T)
      }   
      totefflb<-modresl
      toteffl2<-vlabsm[2:(1+nxvls),]
      lmat<-matrix(0,nrow(b),1)
      lmat2<-matrix(1,nxvls,1)
      lmat[2:(1+nxvls),1]<-lmat2
      if (ydich != 1)
      {totomni<-process.ftest3(lmat,b,varb,1,brsq2,0,y,x)} 
      if (stand==1)
      {
        predsd<-matrix(0,nrow(modres),1)
        stdmod<-as.numeric(modres[,1])/ovsd[nrow(ovsd),1]
        for (jd in c(1:ncol(x)))
        {predsd[jd,1]<-sd(x[,jd])}   
        if ((wherex[1,ncol(wherex)] != -999) & ((nxvls > 1) | (xdich==1)))  
        {  
          sdmsone<-matrix(1,nxvls,1)
          predsd[wherex[1,ncol(wherex)]:wherex[2,ncol(wherex)],1]<-sdmsone    
          pstog<-1    
        }
        predsd[1,1]<-1
        stdmod<-stdmod*predsd
        stdmod<-matrix(stdmod[2:nrow(stdmod),1])
        sdvlabs<-vlabsm[2:nrow(vlabsm),1]
        outformres<-process.outform3(stdmod,maxresm,resultm,1)
        maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
        stdmod<-noquote(matrix(sprintf(decimals,stdmod),(nrow(b)-1)))
        colnames(stdmod)<-"coeff"
        rownames(stdmod)<-sdvlabs
        if (outscreen==1)
        {cat("\nStandardized coefficients:\n")
          print(stdmod,right=T)}
      }   
      
      if (covcoeff==1)
      {
        varbpr<-noquote(matrix(sprintf(decimals,varb),nrow=nrow(b)))
        rownames(varbpr)<-vlabsm;colnames(varbpr)<-vlabsm
        if (outscreen==1)
        {
          cat("\nCovariance matrix of regression parameter estimates:\n")
          print(varbpr,right=T)
          outformres<-process.outform3(varb,maxresm,resultm)
          maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)     
        }
      } 
    }
  }
  #END cycle through the models
  
  
  
  
  
  if ((criterr==0) & (nms > 0) & (ydich==0) & (modelres==1))
  {
    modresid<-matrix(modresid[,2:ncol(modresid)],ncol=(ncol(modresid)-1))
    corall<-cor(modresid)
    outformres<-process.outform3(corall,maxresm,resultm)
    maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
    corall2<-noquote(matrix(sprintf(decimals,corall),nrow=nrow(corall)))
    colnames(corall2)<-outnames
    rownames(corall2)<-outnames
    if (outscreen==1)
    {cat("\n*************** CORRELATIONS BETWEEN MODEL RESIDUALS **************** \n\n")
      print(corall2,right=T)}
  }
  
  #DO BOOTSTRAPPING
  if ((criterr==0) & (boot > 0))
  { 
    bootres<-matrix(-999,1,sum(nump))
    bootdir<-obsdirfx
    natdirbt<-matrix(-999,1,nxvls)
    if (effsize==1){bootysd<-matrix(-999,1,1);bootxsd<-matrix(-999,1,1)}
    badboot<-0;goodboot<-0;smallest<-1;booting<-1
    j<-1
    if (outscreen==1)
    {
      cat("\n*********************************************************************** \n")
      if (progress==1)
      {cat("Bootstrapping progress:\n")
        bootprog<-txtProgressBar(min=0,max=boot,char=">",width=62,style=3)}
      if (progress !=1){cat("Bootstrapping in progress. Please wait.\n");flush.console()}
    }
    while ((goodboot < boot) & (j <= maxboot))
    {
      if ((outscreen==1) & (progress==1)){setTxtProgressBar(bootprog,j)}   
      nobootx<-1;modres2<-999;bad<-0;
      v<-as.matrix(trunc(runif(n)*n)+1)
      for (i in (1:(nms+nys)))
      {
        y<-as.matrix(outvars[v,i])
        ynovar<-sum((y-(sum(y)/nrow(y)))*(y-(sum(y)/nrow(y))))
        if (ynovar==0){bad<-1}
        xindx<-datindx[1:(nump[1,i]-1),i]
        hello<-0
        x<-as.matrix(fulldat[v,xindx])
        x<-cbind(ones,x)
        xsq<-t(x)%*%x
        exsq<-eigen(xsq)
        exsq<-matrix(unlist(exsq[1]))
        holymoly<-min(exsq)
        zeroeig<-sum(as.numeric(exsq <= 0.000000000002))
        bad<-bad+as.numeric(zeroeig > 0)
        bad=bad+as.numeric(sd(y)==0)
        if (bad==0)
        {
          if (holymoly < smallest){smallest<-holymoly}
          if ((ydich==0) | (i < (nms+nys)))
          {modrest<-process.modelest(y,x,type=1,full=0,xp2,hc)}
          if ((ydich==1) & (i==(nms+nys)))
          {modrest<-process.modelest(y,x,3,0,xp2,hc,iterate,converge)}
          modres2<-as.matrix(c(modres2,modrest))
          if (i==(nms+nys))
          {
            if (bcmat[(i+1),1]==1)
            {bootdir<-rbind(bootdir,t(modrest[wherex[1,i]:wherex[2,i],1]))}             
            if (bcmat[(i+1),1]==0)
            {bootdir<-rbind(bootdir,dirzes)}         
          }
          
          if ((model==74) & (i <= nms))
          {
            onetemp<-matrix(1,nrow(xprobval),1)
            mestmtb<-cbind(onetemp,xprobval)
            if (ncs > 0)
            {        
              ncovmdlb<-sum(ccmat[i,])
              if (ncovmdl > 0)
              {
                cvmncb<-matrix(1,nrow(mestmtb),ncovmdlb)
                cvmnctmp<-t(matrix(apply(matrix(x[,(ncol(x)-ncovmdl+1):ncol(x)],nrow=nrow(x)),2,mean)))                
                if (cuscoval > 0){cvmnctmp<-coval}
                for (mestlp in c(1:ncovmdlb))
                {cvmncb[,mestlp]<-cvmncb[,mestlp]*cvmnctmp[,mestlp]}
                mestmtb<-cbind(mestmtb,cvmncb)
              }
            }
            mestbt<-mestmtb%*%modrest
            if (i == 1){mestb<-mestbt}
            if (i > 1){mestb<-cbind(mestb,mestbt)}
          }
          if ((model==74) & (i==(nms+nys)))
          {
            xvalptmp<-matrix(0,1,nxvls)
            mest74sp<-matrix(0,1,nms)
            mest74sp<-rbind(mest74sp,mestb)
            xvalptmp<-rbind(xvalptmp,diag(nxvls))
            dirfxcf<-matrix(0,nrow(mestb),1)         
            for (cfloop1 in (1:nrow(mestb)))
            {
              ndirfx<-matrix(0,nrow(modrest),1)
              ndirfx[2:(nxvls+1),1]<-t(xvalptmp[cfloop1,])
              for (cfloop3 in (1:nms))
              {
                if ((mcx==1) | (mcx==0))
                {ndirfx[wheremw[(1+((cfloop3-1)*2)),ncol(wheremw)]:wheremw[(2+((cfloop3-1)*2)),ncol(wheremw)]]<-t(xvalptmp[cfloop1,]*mestb[1,cfloop3])}
                if (mcx==2)
                {ndirfx[wheremw[(1+((cfloop3-1)*2)),ncol(wheremw)]:wheremw[(2+((cfloop3-1)*2)),ncol(wheremw)]]<-t(xvalptmp[cfloop1,]*mest74sp[cfloop1,cfloop3])}
              }
              if (cfloop1 > 1){dirfxcf[cfloop1,1]<-t(ndirfx)%*%modrest*xscaling}
            }
            natdirbt<-rbind(natdirbt,t(dirfxcf[2:nrow(dirfxcf),]))
          }
          
          if ((bcmat[(i+1),1]==1) & (nobootx==1) & (effsize==1))
          {
            nobootx<-0
            xsdtemp<-sum((x[,2]-(sum(x[,2])/nrow(x)))*(x[,2]-(sum(x[,2])/nrow(x))))
            xsdtemp<-sqrt(xsdtemp/(nrow(x)-1))
          }
        }
      }
      if (bad==0)
      {
        modres2<-t(modres2[2:nrow(modres2),])
        #modres2<-matrix(modres2[,2:nrow(modres2),ncol=ncol(modres)-1)
        bootres<-rbind(bootres,modres2)
        if (effsize==1)
        {
          ysdtemp<-sd(y)
          bootysd<-rbind(bootysd,ysdtemp)
          bootxsd<-rbind(bootxsd,xsdtemp)
        }
        goodboot<-goodboot+1
      }
      if (bad != 0){badboot<-badboot+1}
      j<-j+1
    }
    bootres<-as.matrix(bootres[2:nrow(bootres),])
    if (effsize==1)
    {
      bootysd<-matrix(bootysd[2:nrow(bootysd),])
      if (nrow(bootxsd) > 1){bootxsd<-matrix(bootxsd[2:nrow(bootxsd)])}
    }
    if (goodboot < (boot))
    {boot<-0;modelbt<-0;notecode[notes,1]<-7;notes<-notes+1}
    if (boot > 0)
    {
      if (effsize==1){bootysd<-rbind(ysd,bootysd);bootxsd<-rbind(xsd,bootxsd)}
      if (saveboot==1)
      {
        savlabs<-matrix(" ",ncol(bootres))
        for (i in c(1:ncol(bootres))){savlabs[i,1]<-paste("col",i,sep='')}
        boots<-as.data.frame(bootres)
        colnames(boots)<-savlabs
        #assign("process.boots", boots, envir = .GlobalEnv)
      }
      if (modelbt==1)
      {   
        bootcim<-matrix(-99999,ncol(bootres),5)
        bootcim[,2]<-t(colSums(bootres)/nrow(bootres))
        bootcim[,1]<-as.numeric(coeffmat[2:nrow(coeffmat),1])
        for (i in (1:ncol(bootres)))
        { 
          if (bc==0){bootcim[i,3:5]<-t(process.pboot3(bootres[,i],cilow,cihigh))}
          if (bc==1)
          {
            bcbout<-process.bcboot3(bootres[,i],bootcim[i,1],xp2,badend,priorlo,priorhi)
            bootcim[i,3:5]<-t(matrix(unlist(bcbout[1])))
            badend<-unlist(bcbout[2]);priorlo<-unlist(bcbout[3]);priorhi<-unlist(bcbout[4])
          }
        }
      } 
    }
    
    if (badboot > 0){notecode[notes,1]<-6;notes<-notes+1}
    if ((outscreen==1) & (progress==1)){close(bootprog)}
  }
  #end of bootstrapping
  if ((xmint==1) & (criterr==0))
  {
    xvalptmp<-matrix(0,1,nxvls)
    mest74sp<-matrix(0,1,nms)
    mest74sp<-rbind(mest74sp,mest74)
    xvalptmp<-rbind(xvalptmp,diag(nxvls))
    for (kcfuhd in (1:2))
    {
      dirfxcf<-matrix(0,nrow(mest74),6)
      for (cfloop1 in (1:nrow(mest74)))
      {
        ndirfx<-matrix(0,nrow(lastb),1)
        ndirfx[2:(nxvls+1),1]<-t(xvalptmp[cfloop1,])
        for (cfloop3 in (1:nms))
        {
          if (kcfuhd==1)
          {
            if ((mcx==1) | (mcx==0))
            {ndirfx[wheremw[(1+((cfloop3-1)*2)),ncol(wheremw)]:wheremw[(2+((cfloop3-1)*2)),ncol(wheremw)]]<-t(xvalptmp[cfloop1,]*mest74[1,cfloop3])}
            if (mcx==2)
            {ndirfx[wheremw[(1+((cfloop3-1)*2)),ncol(wheremw)]:wheremw[(2+((cfloop3-1)*2)),ncol(wheremw)]]<-t(xvalptmp[cfloop1,]*mest74sp[cfloop1,cfloop3])}
          }
          if (kcfuhd==2)
          {ndirfx[wheremw[(1+((cfloop3-1)*2)),ncol(wheremw)]:wheremw[(2+((cfloop3-1)*2)),ncol(wheremw)]]<-t(xvalptmp[cfloop1,]*medmeans[1,cfloop3])}
        }
        if (cfloop1 > 1)
        {
          dirfxcf[cfloop1,1]<-t(ndirfx)%*%lastb*xscaling
          dirfxcf[cfloop1,2]<-sqrt(diag(t(ndirfx)%*%lastcov%*%ndirfx))*abs(xscaling)
          dirfxcf[cfloop1,3]<-dirfxcf[cfloop1,1]/dirfxcf[cfloop1,2]
          dirfxcf[cfloop1,4]<-2*pt(-abs(dirfxcf[cfloop1,3]),df=dfres)
          dirfxcf[cfloop1,5]<-dirfxcf[cfloop1,1]-tval*dirfxcf[cfloop1,2]  
          dirfxcf[cfloop1,6]<-dirfxcf[cfloop1,1]+tval*dirfxcf[cfloop1,2]
        }
      }
      codireff<-matrix(dirfxcf[2:nrow(dirfxcf),],nrow=(nrow(dirfxcf)-1))
      if (kcfuhd==1){direff<-codireff}
    }
  }
  
  #Here is for the indirect effects
  if ((criterr==0) & (nms > 0))
  {
    paths<-matrix(paths[,2:ncol(paths)],nrow=nrow(paths))
    pathsw<-matrix(pathsw[,2:ncol(pathsw)],nrow=nrow(pathsw))
    pathsz<-matrix(pathsz[,2:ncol(pathsz)],nrow=nrow(pathsz))
    pathswz<-matrix(pathswz[,2:ncol(pathswz)],nrow=nrow(pathswz))
    pathsmod<-pathsw+pathsz+pathswz
    pathsdv<-t(pathsdv[2:nrow(pathsdv),])
    pathsfoc<-matrix(pathsfoc[,2:ncol(pathsfoc)],nrow=nrow(pathsfoc))
    pathtype<-matrix(pathtype[,2:ncol(pathtype)],nrow=nrow(pathtype))
    anymod<-as.numeric(sum(pathsmod) > 0)
    obscoeff<-t(as.matrix(obscoeff[1,2:ncol(obscoeff)]))
    if (outscreen==1)
    {
      if (xmint==1)
      {cat("\n********************** COUNTERFACTUALLY DEFINED ***********************")}
      if ((dototal==0) & (alttotal==0))
      {cat("\n**************** DIRECT AND INDIRECT EFFECTS OF X ON Y ****************\n")}
      if (alttotal==1)
      {cat("\n************ TOTAL, DIRECT AND INDIRECT EFFECTS OF X ON Y *************\n")}
    }
    if (dototal==1)
    {
      if (outscreen==1)
      {cat("\n************ TOTAL, DIRECT, AND INDIRECT EFFECTS OF X ON Y ************\n")}   
      totefflb[1,1]<-"effect"
      if (effsize==1)
      {
        toteffsz<-toteff[,1]/ysd 
        if ((xdich==1) | (mcx > 0)){totefflb<-cbind(totefflb,"c_ps")}
        if ((xdich==0) & (mcx==0))
        {toteffsz<-(toteffsz*xsd);totefflb<-cbind(totefflb,"c_cs")}     
        toteff<-cbind(toteff,toteffsz)
      }
      outformres<-process.outform3(toteff,maxresm,resultm)
      maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
      toteff2<-noquote(matrix(sprintf(decimals,toteff),nrow=nrow(toteff)))
      colnames(toteff2)<-totefflb
      if (nxvls > 1)
      {
        rownames(toteff2)<-toteffl2
        if (outscreen==1)
        {cat("\nRelative total effects of X on Y:\n")
          print(toteff2,right=T)}
        clabtmp<-c("R2-chng", hcflab, "df1","df2","p")
        outformres<-process.outform3(totomni,maxresm,resultm)
        maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
        totomni2<-noquote(matrix(sprintf(decimals,totomni),nrow=nrow(totomni)))
        colnames(totomni2)<-clabtmp
        rownames(totomni2)<-" "
        if (outscreen==1)
        {
          cat("\nOmnibus test of total effect of X on Y:\n")
          print(totomni2,right=T)
          cat("----------\n")
        }
      }
      if (nxvls < 2)
      {
        rownames(toteff2)<-" "
        if (outscreen==1)
        {cat("\nTotal effect of X on Y:\n")
          print(toteff2,right=T)}
      }
      
    }
    moddir<-wcmat[nrow(bcmat),1]+zcmat[nrow(bcmat),1]
    if (xmint==1){moddir<-1}
    if (bcmat[nrow(bcmat),1]==1)
    {
      if (ydich==1)
      {
        direfflb[,(ncol(direfflb)-5):ncol(direfflb)]<-t(matrix(c("Effect","se","Z","p","LLCI","ULCI")))
      } 
      if ((moddir==0) | (xmint==1)){direfflb[1,1]="effect"}
      if ((effsize==1) & (moddir==0) & (anymod == 0))
      {
        direffsz<-direff[,1]/ysd
        if ((xdich==1) | (mcx > 0)){direfflb<-cbind(direfflb,"c'_ps")}
        if ((xdich==0) & (mcx==0))
        {direffsz<-(direffsz*xsd);direfflb<-cbind(direfflb,"c'_cs")}    
        direff<-cbind(direff,direffsz)
      }
      outformres<-process.outform3(direff,maxresm,resultm)
      maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
      if (xmint==1)
      {
        outformres<-process.outform3(codireff,maxresm,resultm)
        maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
      }
      direff2<-noquote(matrix(sprintf(decimals,direff),nrow=nrow(direff)))
      colnames(direff2)<-direfflb
      if ((moddir==0) & (nxvls==1) & (outscreen==1))
      {
        rownames(direff2)<-" "
        cat("\nDirect effect of X on Y:\n")
        print(direff2,right=T)
      }
      if ((moddir==0) & (nxvls>1))  
      {
        rownames(direff2)<-direffl2
        if (outscreen==1)
        {cat("\nRelative direct effects of X on Y:\n")
          print(direff2,right=T)} 
        outformres<-process.outform3(diromni,maxresm,resultm)
        maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
        diromni2<-noquote(matrix(sprintf(decimals,diromni),nrow=nrow(diromni)))
        rownames(diromni2)<-" "
        if (ydich==0)
        {  
          colnames(diromni2)<-c("R2-chng", hcflab, "df1","df2","p")
          if (outscreen==1)
          {cat("\nOmnibus test of direct effect of X on Y:\n")
            print(diromni2,right=T)}
        }
        if (ydich==1)
        {  
          colnames(diromni2)<-c("Chi-sq", "df", "p")
          if (outscreen==1)
          {cat("\nOmnibus likelihood ratio test of direct effect of X on Y:\n")
            print(diromni2,right=T)}
        }
        if (outscreen==1)
        {cat("\n----------\n")}
      }
      if ((moddir > 0) & (nxvls==1))
      {
        if ((xmint==0) & (outscreen==1))
        {cat("\nConditional direct effect(s) of X on Y:\n")}
        if ((xmint==1) & (outscreen==1))
        {
          cat("\n(Pure) Natural direct effect of X on Y:\n") 
        }
        if (xmint==1){obnatdfx<-matrix(direff[,1],nrow=nrow(direff))}
        rownames(direff2)<-t(matrix(replicate(nrow(direff2)," ")))
        if (outscreen==1){print(direff2,right=T)}
        if (xmint==1)
        {
          if ((outscreen==1) & (xmint==1))
          {
            cat("\nControlled direct effect of X on Y:\n")
            codiref2<-noquote(matrix(sprintf(decimals,codireff),nrow=nrow(codireff)))
            rownames(codiref2)<-t(matrix(replicate(nrow(codireff)," ")))
            colnames(codiref2)<-direfflb
            print(codiref2,right=T)
            cat("\n----------\n")
          }
        }
      }
      direffl4<-direffl2
      if ((moddir > 0) & (nxvls>1))
      {
        direffl2=" "
        for (i in (1:nxvls))
        {
          for (j in (1:(nrow(direff)/nxvls)))
          {direffl2<-rbind(direffl2,xcatlab[i,1])}     
        }
        direffl2<-direffl2[2:nrow(direffl2),1]
        rownames(direff2)<-direffl2
        if ((xmint==0) & (outscreen==1))
        {cat("\nRelative conditional direct effects of X on Y:\n")}
        if ((xmint==1) & (outscreen==1))
        {
          cat("\nRelative (pure) natural direct effects of X on Y:\n")      
        }
        if (outscreen==1){print(direff2,right=T)}
        if (xmint==1){obnatdfx<-matrix(direff[,1],nrow=nrow(direff))}
        if ((xmint==1) & (outscreen==1))
        {
          cat("\nRelative controlled direct effects of X on Y:\n")
          codiref2<-noquote(matrix(sprintf(decimals,codireff),nrow=nrow(codireff)))
          rownames(codiref2)<-direffl2
          colnames(codiref2)<-direfflb
          print(codiref2,right=T)
          cat("\n----------\n")
        }    
      }
      direffl2<-direffl4    
    }
    
    if ((bcmat[nrow(bcmat),1]==0) & (xmint != 1) & (outscreen==1))
    {cat("\nThe direct effect of X on Y is fixed to zero.\n")}
    
    #Here is the start of the indirect effects
    if (nms==1){indmark<-matrix(2);indsets<-t(matrix(c(1,2)))}
    if (nms==2){indmark<-t(matrix(c(2,2,3)));indsets<-t(matrix(c(1,4,2,5,1,3,5)));thetam<-matrix(1)}
    if (nms==3) 
    {indmark<-t(matrix(c(2,2,2,3,3,3,4)))
    indsets<-t(matrix(c(1,7,2,8,4,9,1,3,8,1,5,9,2,6,9,1,3,6,9)))
    thetam<-t(matrix(c(1,2,3)))}
    if (nms==4)
    {indmark<-t(matrix(c(2,2,2,2,3,3,3,3,3,3,4,4,4,4,5)))
    indsets<-t(matrix(c(1,11,2,12,4,13,7,14,1,3,12,1,5,13,1,8,14,2,6)))
    indsets<-cbind(indsets,t(matrix(c(13,2,9,14,4,10,14,1,3,6,13,1,3,9,14,1,5,10,14,2,6,10,14,1,3,6,10,14))))
    thetam<-t(matrix(c(1,2,4,3,5,6)))}
    if (nms==5)
    {indmark<-t(matrix(c(2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,6)))
    indsets<-t(matrix(c(1,16,2,17,4,18,7,19,11,20,1,3,17,1,5,18,1,8,19,1,12,20,2,6,18,2,9,19,2)))
    indsets<-cbind(indsets,t(matrix(c(13,20,4,10,19,4,14,20,7,15,20,1,3,6,18,1,3,9,19,1,3,13,20,1,5,10))))
    indsets<-cbind(indsets,t(matrix(c(19,1,5,14,20,1,8,15,20,2,6,10,19,2,6,14,20,2,9,15,20,4,10,15,20,1))))
    indsets<-cbind(indsets,t(matrix(c(3,6,10,19,1,3,6,14,20,1,3,9,15,20,1,5,10,15,20,2,6,10,15,20,1,3))))
    indsets<-cbind(indsets,t(matrix(c(6,10,15,20))))
    thetam<-t(matrix(c(1,2,5,3,6,8,4,7,9,10)))}
    if (nms==6)
    {indmark<-t(matrix(c(2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5)))
    indmark<-cbind(indmark,t(matrix(c(5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,7))))
    indsets<-t(matrix(c(1,22,2,23,4,24,7,25,11,26,16,27,1,3,23,1,5,24,1,8,25,1,12,26,1,17,27,2,6,24,2,9,25,2,13,26,2,18)))
    indsets<-cbind(indsets,t(matrix(c(27,4,10,25,4,14,26,4,19,27,7,15,26,7,20,27,11,21,27,1,3,6,24,1,3,9,25,1,3,13,26,1,3))))
    indsets<-cbind(indsets,t(matrix(c(18,27,1,5,10,25,1,5,14,26,1,5,19,27,1,8,15,26,1,8,20,27,1,12,21,27,2,6,10,25,2,6,14,26))))
    indsets<-cbind(indsets,t(matrix(c(2,6,19,27,2,9,15,26,2,9,20,27,2,13,21,27,4,10,15,26,4,10,20,27,4,14,21,27,7,15,21,27))))
    indsets<-cbind(indsets,t(matrix(c(1,3,6,10,25,1,3,6,14,26,1,3,6,19,27,1,3,9,15,26,1,3,9,20,27,1,3,13,21,27,1,5,10,15,26))))
    indsets<-cbind(indsets,t(matrix(c(1,5,10,20,27,1,5,14,21,27,1,8,15,21,27,2,6,10,15,26,2,6,10,20,27,2,6,14,21,27,2,9,15))))
    indsets<-cbind(indsets,t(matrix(c(21,27,4,10,15,21,27,1,3,6,10,15,26,1,3,6,10,20,27,1,3,6,14,21,27,1,3,9,15,21,27,1,5,10))))
    indsets<-cbind(indsets,t(matrix(c(15,21,27,2,6,10,15,21,27,1,3,6,10,15,21,27))))
    thetam<-t(matrix(c(1,2,6,3,7,10,4,8,11,13,5,9,12,14,15)))}
    if (nms==7)
    {indmark<-t(matrix(c(2,2,2,2,2,2,2)));indsets<-t(matrix(c(1,29,2,30,4,31,7,32,11,33,16,34,22,35)))}
    if (nms==8)
    {indmark<-t(matrix(c(2,2,2,2,2,2,2,2)));indsets<-t(matrix(c(1,37,2,38,4,39,7,40,11,41,16,42,22,43,29,44)))}
    if (nms==9)
    {indmark<-t(matrix(c(2,2,2,2,2,2,2,2,2)));indsets<-t(matrix(c(1,46,2,47,4,48,7,49,11,50,16,51,22,52,29,53,37,54)))}
    if (nms==10)
    {indmark<-t(matrix(c(2,2,2,2,2,2,2,2,2,2))) 
    indsets<-t(matrix(c(1,56,2,57,4,58,7,59,11,60,16,61,22,62,29,63,37,64,46,65)))}
    indlbl<-"Ind1"
    for (indb in (2:90))
    {indlbl<-cbind(indlbl,paste("Ind",indb,sep=''))}
    indlbl<-matrix(indlbl)
    cntname<-"(C1)"
    for (indb in (2:105))
    {cntname<-cbind(cntname,paste("(C",indb,")",sep=''))}
    cntname<-matrix(cntname)
    indmake<-matrix(0,ncol(indmark),(nms+2))
    indmod<-matrix(999,ncol(indmark),1)
    indmmm<-matrix(0,ncol(indmark),1)
    indmmmt<-matrix(0,ncol(indmark),1)
    start<-1;end<-0;nindfx<-0
    indlocs<-matrix(999,nrow(thetaxmb),ncol(paths))
    indkey<-matrix("      ",ncol(indmark),1+((max(indmark)*2)+1))
    c1<-1;c2<-1;c3<-1
    for (i in (1:ncol(paths)))
    {
      if (pathtype[1,i]==1){indlocs[,i]<-thetaxmb[,c1];c1<-(c1+1)}
      if (pathtype[1,i]==3){indlocs[,i]<-thetamyb[,c2];c2<-(c2+1)}
      if ((pathtype[1,i]==2) & (nms < 7) & (serial==1)){indlocs[,i]<-thetammb[,thetam[1,c3]];c3<-(c3+1)}
    }
    for (i in (1:ncol(indlocs)))
    {
      c1<-2
      for (j in (2:nrow(indlocs)))
      {
        if (indlocs[j,i] != 0){indlocs[c1,i]<-indlocs[j,i];c1<-(c1+1)}
      }
      indlocs[1,i]<-(c1-2)
    }
    indlocs<-indlocs[1:max((indlocs[1,])+1),]
    for (i in (1:ncol(indmark)))
    { 
      numget<-indmark[1,i];end<-end+numget;gotcha<-t(matrix(indsets[1,start:end]))
      start<-end+1;ok<-1;temp<-0;repoman<-matrix(0,4,1)
      for (j in (1:ncol(gotcha)))
      {
        if (paths[1,gotcha[1,j]]==0){ok<-0}
        if (pathsmod[1,gotcha[1,j]] > 0)
        {
          temp<-1
          temp2<-rbind(pathsw[1,gotcha[1,j]],pathsz[1,gotcha[1,j]],pathswz[1,gotcha[1,j]],0)
          temp2<-matrix(temp2)
          if ((temp2[1,1]==1) & (temp2[2,1]==1) & (temp2[3,1]==0)){temp2[4,1]<-1}
          repoman<-repoman+temp2
        }
      }
      temp<-0;tempmmm<-0;typemmm<-0
      if ((repoman[1,1] > 0) & (repoman[2,1]==0))
      {
        temp<-1
        if (repoman[1,1]==1){tempmmm<-1} 
        if ((repoman[1,1] > 1) & ((wdich==1) | (mcw > 0)))
        {
          tempmmm<-12;typemmm<-mcw
          if (wdich==1){typemmm<-1}
        }
        if ((repoman[1,1] > 1) & ((wdich==0) & (mcw==0))){tempmmm<-101} 
      }
      if ((repoman[1,1]==0) & (repoman[2,1] > 0))
      {
        temp<-2
        if (repoman[2,1]==1){tempmmm<-2}
        if ((repoman[2,1] > 1) & ((zdich==1) | (mcz > 0)))
        {
          tempmmm<-22;typemmm<-mcz
          if (zdich==1){typemmm<-1}
        }
        if ((repoman[2,1] > 1) & ((zdich==0) & (mcw==0))){tempmmm<-102}
      }
      if ((repoman[1,1] > 0) & (repoman[2,1] > 0))
      {
        temp<-3
        if ((repoman[1,1]==1) & (repoman[2,1]==1))
        {
          if (repoman[4,1]==1){tempmmm<-31}
          if (repoman[3,1]==1){tempmmm<-41}
        }
      }
      if ((repoman[1,1]==1) & (repoman[2,1]==1) & (repoman[3,1]==0) & (repoman[4,1]==0)){tempmmm<-51}
      if (ok==1)
      {
        nindfx<-nindfx+1
        indmake[nindfx,1]<-numget;indmod[nindfx,1]<-temp;indmmm[nindfx,1]<-tempmmm
        indmmmt[nindfx,1]<-typemmm;indmake[nindfx,2:(1+numget)]<-gotcha;indkey[nindfx,1]<-xnames
        for (j in (1:numget))
        {
          indkey[nindfx,(j*2+1)]<-pathsdv[1,gotcha[1,j]]
          indkey[nindfx,(j*2)]<-"   ->   "
        }
      }
    }
    indkey<-matrix(indkey[1:nindfx,1:((max(indmake[,1])*2)+1)],nrow=nindfx)
    indmake<-matrix(indmake[1:nindfx,1:(max(indmake[,1])+1)],ncol=(max(indmake[,1])+1))
    indmod<-as.matrix(indmod[1:nrow(indmake),1])
    indmmm<-as.matrix(indmmm[1:nrow(indmake),1])
    indmmmt<-as.matrix(indmmmt[1:nrow(indmake),1])
    ncpairs<-(((nindfx)*(nindfx-1))/2)
    if (((contrast==1) | (contrast==2)) & (ncpairs > 105))
    {contrast<-0;notecode[notes,1]<-13;notes<-notes+1}
    if (contrast==3)
    {
      if (ncol(contvec) != nindfx)
      {contrast<-0;notecode[notes,1]<-14;notes<-notes+1}
    }
    
    #This is for models with no moderator */
    if (anymod==0)
    {
      if ((nms==1) & (contrast > 0)){contrast<-0}
      efloop<-(((1-as.numeric(effsize==0))*2)+1)-((((mcx>0) | (xdich==1)))*(1-as.numeric(effsize==0)))
      for (kk in (1:efloop))
      {
        if (boot==0)
        {
          bootres<-obscoeff
          if (kk==1){totbtvec<-matrix(0,1,nxvls)}
          indtab<-matrix(999);inddiff<-matrix(999);bootysd<-matrix(ysd);bootxsd<-matrix(xsd)
        }    
        if (boot > 0)
        {
          bootres<-rbind(obscoeff,bootres)
          if (kk==1){totbtvec<-matrix(0,nrow(bootres),nxvls)}
          indtab<-matrix(999,1,4);inddiff<-matrix(999,nrow(bootres))
        }
        indtotal<-matrix(0,nrow(bootres),1)
        for (i in (1:nrow(indmake)))
        {
          for (j in (1:nxvls))
          {
            indtemp<-matrix(1,nrow(bootres),1)
            for (k in (1:indmake[i,1]))
            {
              jtemp<-1
              if ((j > 1) & (k==1)){jtemp<-j}
              indtemp<-indtemp*bootres[,pathsfoc[jtemp,indmake[i,(k+1)]]]
            }
            if (kk==2){indtemp<-indtemp/bootysd}
            if (kk==3){indtemp<-((bootxsd*indtemp)/bootysd)}
            if (contrast != 0){inddiff<-cbind(inddiff,indtemp)}
            if (nxvls==1){indtotal<-(indtotal+indtemp)}
            indeff<-indtemp[1,1]
            if (kk==1){totbtvec[,j]<-totbtvec[,j]+indtemp}
            if (boot > 0)
            {
              if (bc==0){bcitmp<-process.pboot3(indtemp[2:nrow(indtemp),1],cilow,cihigh)}
              if (bc==1)
              {
                bcbout<-process.bcboot3(indtemp[2:nrow(indtemp),1],indtemp[1,1],xp2,badend,priorlo,priorhi)
                bcitmp<-matrix(unlist(bcbout[1]))
                badend<-unlist(bcbout[2]);priorlo<-unlist(bcbout[3]);priorhi<-unlist(bcbout[4])
              }
              indeff<-cbind(indeff,t(bcitmp))
            }
            if (kk==1){indtabn<-rbind(indtab,indeff)}
            indtab<-rbind(indtab,indeff)
          }
        }
        indtab<-matrix(indtab[2:nrow(indtab),],nrow=(nrow(indtab)-1))
        if (kk==1){indtabn<-matrix(indtabn[2:nrow(indtabn),],nrow=(nrow(indtabn)-1))}
        rowlbs<-matrix(indlbl[1:nrow(indtab),1])
        rowbls3<-rowlbs
        if (mc > 0)
        {
          inddiff<-matrix(-999,mc,1)
          indtab2<-matrix(-999,nrow(indtab),4)
          indtab2[,1]<-indtab;indtab<-indtab2;mcct<-0
          indtotal<-matrix(0,mc,1)
          if (kk==1)
          {
            x1<-sqrt(-2*log(matrix(runif(mc*nrow(mcsopath)),mc,nrow(mcsopath))))*cos((2*3.14159265358979)*matrix(runif(mc*nrow(mcsopath)),mc,nrow(mcsopath)))
            x1<-x1%*%chol(indcov)
            for (ii in (1:nrow(x1))){x1[ii,]<-(x1[ii,]+t(mcsopath))}
          }
          for (ii in (1:nms))
          {
            tmpb<-x1[,((nms*nxvls)+ii)];tmpb2<-tmpb
            if (nxvls > 1)
            {
              for (jj in (1:(nxvls-1)))
              {tmpb2<-cbind(tmpb2,tmpb)}        
            }
            indtemp<-as.matrix(x1[,(((ii-1)*nxvls)+1):(ii*nxvls)]*tmpb2)
            for (jj in (1:ncol(indtemp)))
            {
              if (kk==2){indtemp[,jj]<-indtemp[,jj]/ysd}
              if (kk==3){indtemp[,jj]<-(xsd*indtemp[,jj])/ysd}
              mcicon<-process.pboot3(indtemp[,jj],cilow,cihigh)
              mcct<-mcct+1
              indtab[mcct,2:4]<-t(mcicon)
            }
            if (nxvls==1)
            {
              indtotal<-indtotal+indtemp
              if (contrast != 0){inddiff=cbind(inddiff,indtemp)}
            }
          }
        }
        if ((normal==1) & (sobelok==1))
        {
          sobelmat<-matrix(indtab[,1])
          sobelmat<-cbind(sobelmat,(sobelmat/2),sobelmat,sobelmat)
          for (ii in (1:nms))
          {
            se2b<-(indcov[((nms*nxvls)+ii),((nms*nxvls)+ii)])
            bpath2<-(mcsopath[((nms*nxvls)+ii),1])^2
            se2a<-matrix(diag(matrix(indcov[(((ii-1)*nxvls)+1):(ii*nxvls),(((ii-1)*nxvls)+1):(ii*nxvls)],nrow=nxvls)))
            apath2<-matrix(mcsopath[(((ii-1)*nxvls)+1):(ii*nxvls),1])^2
            sesobel<-sqrt(apath2*se2b+bpath2*se2a+se2a*se2b)
            sobelmat[(((ii-1)*nxvls)+1):(ii*nxvls),2]<-sesobel
          }
          sobelmat[,3]<-sobelmat[,1]/sobelmat[,2]
          sobelmat[,4]<-2*(1-pnorm(abs(sobelmat[,3])))
        }
        if (serial==0){rowlbs<-t(mnames)}
        if ((nxvls==1) & (nms > 1))
        {
          rowlbs<-rbind("TOTAL",rowlbs)
          indtemp<-indtotal[1,1]
          if ((boot > 0) & (nxvls==1))
          {
            if (bc==0){bcitmp<-process.pboot3(indtotal[2:nrow(indtotal),1],cilow,cihigh)}
            if (bc==1)
            {
              bcbout<-process.bcboot3(indtotal[2:nrow(indtotal),1],indtotal[1,1],xp2,badend,priorlo,priorhi)
              bcitmp<-matrix(unlist(bcbout[1]))
              badend<-unlist(bcbout[2]);priorlo<-unlist(bcbout[3]);priorhi<-unlist(bcbout[4])
            }
            indtemp<-cbind(indtemp,t(bcitmp))
          }
          if (mc > 0)
          {
            obtmc<-indtab[,1];indtemp<-sum(obtmc)
            mcicon2<-process.pboot3(indtotal[,1],cilow,cihigh)
            indtemp<-cbind(indtemp,t(mcicon2))
          }
          indtab<-rbind(indtemp,indtab)
        }
        bootlbs<-"Effect"
        if (boot > 0){bootlbs<-c("Effect","BootSE","BootLLCI","BootULCI")}
        if (mc > 0){bootlbs<-c("Effect","MC SE","MC LLCI","MC ULCI")}
        if (nxvls==1)
        {
          if (contrast != 0)
          {
            inddiff<-matrix(inddiff[,2:ncol(inddiff)],nrow=nrow(inddiff))
            if (mc > 0){inddiff=rbind(t(obtmc),inddiff)}
            if (contrast==3)
            {
              inddifft<-matrix(inddiff%*%t(contvec))
              indtemp<-inddifft[1,1]
              if ((boot > 0) | (mc > 0))
              {
                if ((mc > 0) | ((boot > 0) & (bc==0)))
                {bcicon<-process.pboot3(inddifft[2:nrow(inddifft),1],cilow,cihigh)}
                if ((boot > 0) & (bc==1))
                {
                  bcbout<-process.bcboot3(inddifft[2:nrow(inddifft),1],inddifft[1,1],xp2,badend,priorlo,priorhi)
                  bcicon<-matrix(unlist(bcbout[1]))
                  badend<-unlist(bcbout[2]);priorlo<-unlist(bcbout[3]);priorhi<-unlist(bcbout[4])
                }
                indtemp<-cbind(indtemp,t(bcicon))
              }
              indtab<-rbind(indtab,indtemp)
            }
            if ((contrast==1) | (contrast==2))
            {
              conkey<-matrix(" ",1,4)
              for (i in (1:(ncol(inddiff)-1)))
              {     
                for (j in ((i+1):ncol(inddiff)))
                {           
                  inddifft<-matrix(inddiff[,i]-inddiff[,j])
                  if (contrast==2){inddifft<-matrix(abs(inddiff[,i])-abs(inddiff[,j]))}
                  indtemp<-inddifft[1,1]
                  conkeyt<-cbind(" ", rowlbs[(i+1),1]," minus  ",rowlbs[(j+1),1])
                  conkey<-rbind(conkey,conkeyt)
                  if ((boot > 0) | (mc > 0))
                  {
                    if ((mc > 0) | ((boot > 0) & (bc==0)))
                    {bcitmp2<-process.pboot3(inddifft[2:nrow(inddifft),1],cilow,cihigh)}
                    if ((boot > 0) & (bc==1))
                    {
                      bcbout<-process.bcboot3(inddifft[2:nrow(inddifft),1],inddifft[1,1],xp2,badend,priorlo,priorhi)
                      bcitmp2<-matrix(unlist(bcbout[1]))
                      badend<-unlist(bcbout[2]);priorlo<-unlist(bcbout[3]);priorhi<-unlist(bcbout[4])
                    }
                    indtemp<-cbind(indtemp,t(bcitmp2)) 
                  }
                  indtab<-rbind(indtab,indtemp)
                }
              }
            }
            if (contrast != 3)
            {contlbs<-matrix(cntname[1:(((nindfx)*(nindfx-1))/2),1])}
            if (contrast==3)
            {contlbs<-matrix("(C1)")}    
            rowlbs<-rbind(rowlbs,contlbs)
          }
          outformres<-process.outform3(indtab,maxresm,resultm,1)
          maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
          indtab5<-noquote(matrix(sprintf(decimals,indtab),nrow=nrow(indtab)))
          colnames(indtab5)<-bootlbs
          rownames(indtab5)<-rowlbs
          if (outscreen==1)
          {
            if (kk==1)
            {
              cat("\nIndirect effect(s) of X on Y:\n")
              print(indtab5,right=T)
            }
            
            if ((kk==2) & ((xdich==1) | (mcx > 0)))
            {
              cat("\nPartially standardized indirect effect(s) of X on Y:\n")
              print(indtab5,right=T)
            }
            if (kk==3)
            {
              cat("\nCompletely standardized indirect effect(s) of X on Y:\n")
              print(indtab5,right=T)
            }
          }
          if ((normal==1) & (sobelok==1) & (kk==1))
          {
            sobellab<-c("Effect",hclab,"Z","p")
            sobelrlb<-rowlbs
            if (nms > 1){sobelrlb<-matrix(rowlbs[2:(1+nms),1])}
            outformres<-process.outform3(sobelmat,maxresm,resultm)
            maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
            sobelmt2<-noquote(matrix(sprintf(decimals,sobelmat),nrow=nrow(sobelmat)))
            rownames(sobelmt2)<-sobelrlb
            colnames(sobelmt2)<-sobellab
            if (outscreen==1)
            {cat("\nNormal theory test for indirect effect(s):\n")
              print(sobelmt2,right=T)}
          }
          if (contrast != 0)
          {
            if (((contrast==1) | (contrast==2)) & (kk==efloop))
            {
              conkey<-matrix(conkey[2:nrow(conkey),],nrow=(nrow(conkey)-1))
              if (outscreen==1)
              {cat("\nSpecific indirect effect contrast definition(s):\n")
                write.table(conkey,quote=FALSE,row.names=contlbs,col.names=FALSE,sep = "  ")}
            }
            if ((contrast==3) & (kk=efloop))
            {
              crowlbs<-rowlbs[2:(nindfx+1),1]
              contvect<-noquote(matrix(sprintf(decimals,contvec),nrow=1))
              colnames(contvect)<-crowlbs
              rownames(contvect)<-"(C1)"
              if (outscreen==1)
              {cat("\nSpecific indirect effect contrast weights:\n")
                print(contvect,right=T)}
            }
            if ((contrast==2) & (kk==efloop) & (outscreen==1))
            {cat("\nContrasts are differences between absolute values of indirect effects\n")}
          }
          if ((serial==1) & (kk==efloop))
          {rowlbst<-matrix(rowlbs[2:nrow(rowlbs),1],nrow<-(nrow(rowlbs)-1))
          if (outscreen==1)
          {cat("\nIndirect effect key:\n")
            write.table(indkey,quote=FALSE,row.names=rowbls3,col.names=FALSE,sep=" ")}}
        }
        if (nxvls > 1)
        {
          if (outscreen==1)
          { 
            if (kk==1){cat("\nRelative indirect effects of X on Y:\n")}
            if (kk==2){cat("\nPartially standardized relative indirect effects of X on Y:\n")}
            if (kk==3){cat("\nCompletely standardized relative indirect effects of X on Y:\n")}
          }
          for (i in (1:nrow(indmake)))
          {
            indtabsm<-indtab[(((i-1)*nxvls)+1):(nxvls*i),]
            indkeyt<-indkey[i,]
            if (outscreen==1)
            {
              cat("\n")
              write.table(t(indkeyt),quote=FALSE,row.names=FALSE,col.names=FALSE,sep=" ")
              cat("\n")
            }
            if (bcmat[nrow(bcmat),1]==0)
            {direffl2<-xcatlab[1:nxvls,1]}
            outformres<-process.outform3(indtabsm,maxresm,resultm)
            maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
            indtasm2<-noquote(matrix(sprintf(decimals,indtabsm),nrow=nrow(indtabsm)))
            colnames(indtasm2)<-bootlbs
            rownames(indtasm2)<-direffl2
            if (outscreen==1)
            {print(indtasm2,right=T)}
            if ((normal==1) & (sobelok==1) & (kk==1))
            {
              sobelsm=sobelmat[(((i-1)*nxvls)+1):(nxvls*i),]
              sobellab=c("Effect",hclab,"Z","p")
              outformres<-process.outform3(sobelsm,maxresm,resultm)
              maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
              sobelsm2<-noquote(matrix(sprintf(decimals,sobelsm),nrow=nrow(sobelsm)))
              colnames(sobelsm2)<-sobellab
              rownames(sobelsm2)<-direffl2
              if (outscreen==1)
              {cat("\n   Normal theory test for relative indirect effects:\n")
                print(sobelsm2,right=T)}
            }
          }
        }
        if ((effsize==1) & (boot > 0)){bootres=bootres[2:nrow(bootres),]}
      }
      if (alttotal==1)
      {
        altcnms<-"Effect"
        totbtvec<-totbtvec+bootdir
        alttotfx<-t(totbtvec[1,])
        if (boot > 0)
        {
          alttotfx<-matrix(0,ncol(totbtvec),4)
          alttotfx[,1]<-t(totbtvec[1,])
          for (cec in (1:ncol(totbtvec)))
          {
            if (bc==0){bcitmp<-process.pboot3(totbtvec[2:nrow(totbtvec),cec],cilow,cihigh)}
            if (bc==1)
            {
              bcbout<-process.bcboot3(totbtvec[2:nrow(totbtvec),cec],totbtvec[1,cec],xp2,badend,priorlo,priorhi)
              bcitmp<-matrix(unlist(bcbout[1]))
              badend<-unlist(bcbout[2]);priorlo<-unlist(bcbout[3]);priorhi<-unlist(bcbout[4])
            }
            alttotfx[cec,2:4]<-t(bcitmp)
          }
          altcnms<-c(altcnms,"BootSE","BootLLCI","BootULCI")
        }
        outformres<-process.outform3(alttotfx,maxresm,resultm)
        maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
        if (outscreen==1)
        {
          if (nxvls > 1)
          {cat("----------\n")
            cat("\nRelative total effects of X on Y (sum of direct and indirect effects):\n")
            alttotfp<-noquote(matrix(sprintf(decimals,alttotfx),nrow=nrow(alttotfx)))
            colnames(alttotfp)<-altcnms
            rownames(alttotfp)<-direffl2
            print(alttotfp,right=T)
          }
          if (nxvls==1)
          {
            cat("\nTotal effects of X on Y (sum of direct and indirect effects):\n")
            alttotfp<-noquote(matrix(sprintf(decimals,alttotfx),nrow=nrow(alttotfx)))
            colnames(alttotfp)<-altcnms
            rownames(alttotfp)<-" "
            print(alttotfp,right=T)
          }
        }
      }
      
    }
    #this is the end of the no moderators loop */
    
    if (anymod > 0)
    {
      if (boot==0){bootres<-obscoeff;indtab<-999}
      if (boot > 0){bootres<-rbind(obscoeff,bootres);indtab<-matrix(999,1,4)}
      if (sum(as.numeric(indmod > 0))==nrow(indmod))
      {if (outscreen==1)
      {
        if (nxvls > 1)
        {
          if (xmint==0)
          {cat("\nRelative conditional indirect effects of X on Y:\n")}
          if (xmint==1)
          {cat("\nRelative (total) natural indirect effects of X on Y:\n\n")}
        }
        if (nxvls==1)
        {
          if (xmint==0)
          {cat("\nConditional indirect effects of X on Y:\n")}
          if (xmint==1)
          {cat("\n (Total) Natural indirect effect(s) of X on Y:\n\n")}
        }
      }
      }
      if (sum(as.numeric(indmod > 0)) < nrow(indmod))
      {if (outscreen==1)
      {
        if (nxvls > 1)
        {cat("\nRelative conditional and unconditional indirect effects of X on Y:\n")}
        if (nxvls==1)
        {cat("\nConditional and unconditional indirect effects of X on Y:\n")}
      }
      }
      cftotfx=matrix(0,nrow(bootres),nxvls)
      for (i in (1:nrow(indmake)))
      {
        indtab<-matrix(0,1,4)
        indkeyt<-indkey[i,]
        if (outscreen==1)
        {
          if (xmint==0)
          {cat("\nINDIRECT EFFECT:\n\n")}
          write.table(t(indkeyt),quote=FALSE,row.names=FALSE,col.names=FALSE,sep=" ")
          cat("\n")
        }
        if (indmod[i,1]==0)
        {
          for (j in (1:nxvls))
          {
            indtemp<-matrix(1,nrow(bootres),1)
            for (k in (1:indmake[i,1]))
            {
              jtemp<-1
              if ((j > 1) & (k==1)){jtemp<-j}       
              indtemp<-indtemp*bootres[,pathsfoc[jtemp,indmake[i,(k+1)]]]
            }
            indeff<-indtemp[1,1]
            if (boot > 0)
            {
              if (bc==0){bcitmp3<-process.pboot3(indtemp[2:nrow(indtemp),1],cilow,cihigh)}
              if (bc==1)
              {
                bcbout<-process.bcboot3(indtemp[2:nrow(indtemp),1],indtemp[1,1],xp2,badend,priorlo,priorhi)
                bcitmp3<-matrix(unlist(bcbout[1]))
                badend<-unlist(bcbout[2]);priorlo<-unlist(bcbout[3]);priorhi<-unlist(bcbout[4])
              }
              indeff<-cbind(indeff,t(bcitmp3))
            }  
            indtab<-rbind(indtab,indeff)
          }
          indtab<-matrix(indtab[2:nrow(indtab),],ncol=ncol(indtab))
          outformres<-process.outform3(indtab,maxresm,resultm)
          maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
          indtab10<-noquote(matrix(sprintf(decimals,indtab),nrow=nrow(indtab)))
          if (nxvls > 1)
          {rownames(indtab10)<-xcatlab[1:nxvls,1]}
          if (nxvls==1)
          {rownames(indtab10)<-" "}
          colnames(indtab10)<-c("Effect","BootSE","BootLLCI","BootULCI")
          if (outscreen==1)
          {print(indtab10,right=T)}
        }
        # end of unmoderated
        # start of moderated
        if (indmod[i,1] > 0)
        {
          if (indmod[i,1]==1)
          {indmodva<-wmodvals;indprova<-wprobval;condlbs<-wnames;printw<-1}
          if (indmod[i,1]==2)
          {indmodva<-zmodvals;indprova<-zprobval;condlbs<-znames;printz<-1}
          if (indmod[i,1]==3)
          {
            cntmp<-1;printz<-1;printw<-1
            indmodva<-matrix(999,(nrow(wmodvals)*nrow(zmodvals)),2)
            for (k7 in (1:nrow(wmodvals)))
            {
              for (k8 in (1:nrow(zmodvals)))
              {indmodva[cntmp,]<-cbind(wmodvals[k7,1],zmodvals[k8,1]);cntmp<-cntmp+1}
            }
            condlbs<-cbind(wnames,znames)
          }
          condres<-matrix(999,nrow(indmodva),1)
          if (boot > 0)
          {condres=matrix(999,nrow(indmodva),4)}  
          condres<-cbind(indmodva,condres)
          
          # Here is where the computations start
          for (k4 in (1:nxvls))
          {
            imm3<-matrix(1,nrow(bootres),1);imm4<-matrix(1,nrow(bootres),1);indcontr<-0  
            if (indmod[i,1]==3){tihsw<-wprobval;tihsz<-zprobval}
            for (k1 in (1:nrow(indmodva)))
            {
              tucker2<-matrix(1,nrow(bootres),1)
              imm2<-matrix(1,nrow(bootres),1)
              wfirst<-0;zfirst<-0;immset<-0
              for (k2 in (1:indmake[i,1]))
              { 
                colnumb<-indmake[i,(k2+1)]
                if (k2==1)
                {
                  wbb<-matrix(0,nrow(bootres),(nwvls*nxvls))
                  zbb<-matrix(0,nrow(bootres),(nzvls*nxvls))
                  wzbb<-matrix(0,nrow(bootres),(nwvls*nzvls*nxvls))
                }
                if (k2 != 1)
                {
                  wbb<-matrix(0,nrow(bootres),nwvls)
                  zbb<-matrix(0,nrow(bootres),nzvls)
                  wzbb<-matrix(0,nrow(bootres),(nwvls*nzvls))
                }
                cnt<-1;tihs<-matrix(indlocs[2:((indlocs[1,colnumb])+1),colnumb])
                if (k2==1)
                {
                  focbb<-matrix(tihs[1:nxvls,1]);focbb<-matrix(bootres[,focbb],ncol=nxvls)
                  if (indmmm[i,1] > 0)
                  {imm<-matrix(focbb[,k4]);condbb<-matrix(imm,ncol=ncol(imm))}
                  focaddon<-matrix(0,1,nxvls);focaddon[1,k4]<-1;cnt<-cnt+nxvls;placeh<-nxvls
                  if (indmod[i,1]==1)
                  {
                    tihsz<-matrix(0,nrow(wprobval),(nzvls*nxvls))
                    tihswz<-matrix(0,nrow(wprobval),(nwvls*nzvls*nxvls))
                    if (pathsw[1,colnumb]==1)
                    {
                      temp<-matrix(0,nrow(wprobval),(nxvls*nwvls))
                      for (k5 in (1:nrow(wprobval)))
                      {
                        for (k6 in (1:nwvls))
                        {temp[k5, (((k4-1)*nwvls)+k6)]<-wprobval[k5,k6]}
                      }
                      indprova<-cbind(temp,tihsz,tihswz)
                    } else {
                      indprova<-cbind(wprobval,tihsz,tihswz)}
                  }
                  if (indmod[i,1]==2)
                  {
                    tihsw<-matrix(0,nrow(zprobval),(nwvls*nxvls))
                    tihswz<-matrix(0,nrow(zprobval),(nwvls*nzvls*nxvls))
                    if (pathsz[1,colnumb]==1)
                    {
                      temp<-matrix(0,nrow(zprobval),(nxvls*nzvls))
                      for (k5 in (1:nrow(zprobval)))
                      {
                        for (k6 in (1:nzvls))
                        {temp[k5,(((k4-1)*nzvls)+k6)]<-zprobval[k5,k6]}  
                      }
                      indprova<-cbind(tihsw,temp,tihswz)
                    } else {
                      indprova<-cbind(tihsw,zprobval,tihswz)}
                  }
                  if (indmod[i,1]==3)
                  {
                    indprova<-matrix(0,(nrow(wprobval)*nrow(zprobval)),((ncol(wprobval)*nxvls)+(ncol(zprobval)*nxvls)+(nwvls*nzvls*nxvls)))
                    cntemp<-1           
                    for (k7 in (1:nrow(wprobval)))
                    {
                      for (k8 in (1:nrow(zprobval)))
                      {
                        temp<-(wprobval[k7,]*focaddon[1,k4])
                        indprova[cntemp,(((k4-1)*nwvls)+1):(k4*(nwvls))]<-temp
                        temp<-zprobval[k8,]*focaddon[1,k4]
                        indprova[cntemp,((((k4-1)*nzvls)+1)+(nxvls*nwvls)):((((k4-1)*nzvls)+1)+(nxvls*nwvls)+(nzvls-1))]<-temp
                        cntemp<-cntemp+1
                      }
                    }
                    if (pathsz[1,colnumb]==0)
                    {
                      temp<-matrix(0,nrow(indprova),(ncol(zprobval)*nxvls))
                      indprova[,((ncol(wprobval)*nxvls)+1):((ncol(wprobval)+ncol(zprobval))*nxvls)]<-temp
                    }
                    if (pathsw[1,colnumb]==0)
                    {
                      temp<-matrix(0,nrow(indprova),(ncol(wprobval)*nxvls))
                      indprova[,1:(ncol(wprobval)*nxvls)]<-temp   
                    }
                    if (pathswz[1,colnumb]==1)
                    {
                      cntemp<-(ncol(wprobval)*nxvls)+(ncol(zprobval)*nxvls)+((k4-1)*ncol(wprobval)*ncol(zprobval))+1
                      for (k7 in (1:ncol(wprobval)))
                      {
                        for (k8 in (1:ncol(zprobval)))
                        {
                          indprova[,cntemp]<-matrix(indprova[,((ncol(wprobval)*(k4-1))+k7)])*matrix(indprova[,((((k4-1)*ncol(zprobval))+k8)+(nxvls*ncol(wprobval)))])
                          cntemp<-cntemp+1
                        }
                      }
                    }
                  }
                }
                if (k2 > 1)
                {
                  focbb<-tihs[1,1];focbb=matrix(bootres[,focbb])
                  if (indmmm[i,1] > 0){imm<-matrix(focbb[,1]);condbb<-matrix(imm)}     
                  focaddon<-matrix(1);cnt<-cnt+1;placeh<-1
                  if (indmod[i,1]==1)
                  {
                    tihsz<-matrix(0,nrow(wprobval),nzvls)
                    tihswz<-matrix(0,nrow(wprobval),(nwvls*nzvls))
                    indprova<-cbind(wprobval,tihsz,tihswz)
                  }
                  if (indmod[i,1]==2)
                  {
                    tihsw<-matrix(0,nrow(zprobval),nwvls)
                    tihswz<-matrix(0,nrow(zprobval),(nwvls*nzvls))
                    indprova<-cbind(tihsw,zprobval,tihswz)
                  }
                  if (indmod[i,1]==3)
                  {
                    indprova<-matrix(0,(nrow(wprobval)*nrow(zprobval)),((ncol(wprobval)+ncol(zprobval))+(nwvls*nzvls)))
                    cntemp<-1           
                    for (k7 in (1:nrow(wprobval)))
                    {
                      for (k8 in (1:nrow(zprobval)))
                      {
                        indprova[cntemp,1:(ncol(wprobval)+ncol(zprobval))]<-cbind(t(matrix(wprobval[k7,])),t(matrix(zprobval[k8,])))
                        cntemp<-cntemp+1
                      }
                    }
                    if (pathsz[1,colnumb]==0)
                    {
                      temp<-matrix(0,nrow(indprova),ncol(zprobval))
                      indprova[,(ncol(wprobval)+1):(ncol(wprobval)+ncol(zprobval))]<-temp
                    }
                    if (pathsw[1,colnumb]==0)
                    {
                      temp<-matrix(0,nrow(indprova),ncol(wprobval))
                      indprova[,1:ncol(wprobval)]<-temp   
                    }
                    if (pathswz[1,colnumb]==1)
                    {
                      cntemp<-(ncol(wprobval)+ncol(zprobval)+1)
                      for (k7 in (1:ncol(wprobval)))
                      {
                        for (k8 in (1:ncol(zprobval)))
                        {
                          indprova[,cntemp]<-matrix(indprova[,k7])*matrix(indprova[,(ncol(wprobval)+k8)])
                          cntemp<-cntemp+1
                        }
                      }
                    }
                  }
                }  
                if (pathsw[1,colnumb]==1)
                {
                  wbb<-matrix(tihs[cnt:(cnt+(placeh*nwvls)-1),1])
                  wbb<-matrix(bootres[,wbb],ncol=nrow(wbb))
                  immlbs2<-matrix(wcatlab[1:nwvls,1])
                  if (zfirst==0){wfirst<-1}              
                  if ((indmmm[i,1]==1) | (indmmm[i,1]==31) | (indmmm[i,1]==51))
                  {
                    imm<-matrix(wbb[,1])
                    for (k7 in (1:nwvls))
                    {imm<-cbind(imm,wbb[,(((k4-1)*nwvls*(as.numeric(k2==1)))+k7)])}
                    imm<-matrix(imm[,2:ncol(imm)],ncol=(ncol(imm)-1))               
                  }
                  if ((indmmm[i,1]==41) | (indmmm[i,1]==51))
                  {
                    condbb<-matrix(0,nrow(bootres),1)
                    for (k7 in (1:nwvls))        
                    {condbb<-cbind(condbb,wbb[,(((k4-1)*nwvls*(as.numeric(k2==1)))+k7)])}          
                    condbb<-matrix(condbb[,2:ncol(condbb)],ncol=(ncol(condbb)-1))
                  }    
                  cnt<-cnt+(placeh*nwvls)
                }
                if (pathsz[1,colnumb]==1)
                {
                  zbb<-matrix(tihs[cnt:(cnt+(placeh*nzvls)-1),1])
                  zbb<-matrix(bootres[,zbb],ncol=nrow(zbb))
                  if (wfirst==0){zfirst<-1}
                  if (indmmm[i,1] != 31){immlbs2<-matrix(zcatlab[1:nzvls,1])}
                  if ((indmmm[i,1]==2) | (indmmm[i,1]==31) | (indmmm[i,1]==51))
                  {
                    if (indmmm[i,1]==2){imm<-matrix(zbb[,1])}
                    for (k7 in (1:nzvls))
                    {imm<-cbind(imm,zbb[,(((k4-1)*nzvls*(as.numeric(k2==1)))+k7)])}
                    if ((indmmm[i,1]==2) | (indmmm[i,1]==51))
                    {
                      imm<-matrix(imm[,2:ncol(imm)],ncol=(ncol(imm)-1))  
                      if (indmmm[i,1]==51){condbb<-cbind(condbb,imm)}
                    }         
                  }
                  cnt<-cnt+(placeh*nzvls)
                }
                if (pathswz[1,colnumb]==1)
                {
                  wzbb<-matrix(tihs[cnt:(cnt+(placeh*nwvls*nzvls)-1),1])
                  wzbb<-matrix(bootres[,wzbb],ncol=nrow(wzbb))
                  if (indmmm[i,1]==41)
                  {
                    imm<-matrix(wzbb[,1])              
                    for (k7 in (1:(nwvls*nzvls)))
                    {imm<-cbind(imm,wzbb[,(((k4-1)*nzvls*nwvls*(as.numeric(k2==1)))+k7)])}
                  }
                  if (indmmm[i,1]==41)
                  {
                    imm<-matrix(imm[,2:ncol(imm)],ncol=(ncol(imm)-1))
                    condbb<-cbind(condbb,imm[,(ncol(imm)-(nwvls*nzvls)+1):ncol(imm)]) 
                  }
                  cnt<-cnt+(placeh*nzvls*nwvls)
                }
                indprobe<-cbind(focaddon,t(matrix(indprova[k1,])))
                tucker<-cbind(focbb,wbb,zbb,wzbb)
                for (k3 in (1:ncol(indprobe)))
                {tucker[,k3]<-matrix(tucker[,k3]*indprobe[1,k3])}
                tucker2<-tucker2*matrix(rowSums(tucker))
                if ((indmmm[i,1]==1) | (indmmm[i,1]==2) | (indmmm[i,1]==31) | (indmmm[i,1]==41) | (indmmm[i,1]==51))
                {
                  if (immset==1)
                  {
                    if ((ncol(imm2)==1) & (ncol(imm)==1)){imm2<-(matrix(imm2)*matrix(imm))}
                    if ((indmmm[i,1]==41) | (indmmm[i,1]==51))
                    {
                      if ((ncol(condbb2) > 1) & (ncol(condbb) > 1))
                      {
                        condbb2t<-matrix(-999999,nrow(condbb2),(ncol(condbb2)*ncol(condbb)))
                        k9<-1
                        if (wfirst==1)
                        {
                          for (k7 in (1:ncol(condbb2)))
                          {
                            for (k8 in (1:ncol(condbb)))
                            {condbb2t[,k9]<-(matrix(condbb2[,k7])*matrix(condbb[,k8]));k9<-k9+1}
                          }
                        }
                        if (zfirst==1)
                        {
                          for (k7 in (1:ncol(condbb)))
                          {
                            for (k8 in (1:ncol(condbb2)))
                            {condbb2t[,k9]<-(matrix(condbb[,k7])*matrix(condbb2[,k8]));k9<-k9+1}             
                          }
                        }
                        condbb2<-matrix(condbb2t,ncol=ncol(condbb2t))            
                      }
                      if ((ncol(condbb2) > 1) & (ncol(condbb)==1))
                      {
                        for (k7 in (1:ncol(condbb2)))
                        {condbb2[,k7]<-(matrix(condbb2[,k7])*matrix(condbb))}
                      }
                      if ((ncol(condbb2)==1) & (ncol(condbb) > 1))
                      {
                        for (k7 in (1:ncol(condbb)))
                        {condbb[,k7]<-(matrix(condbb2)*matrix(condbb[,k7]))}
                        condbb2<-matrix(condbb,ncol=ncol(condbb))
                      }                 
                    }
                    if ((ncol(imm2) != 1) & (ncol(imm) != 1))
                    {
                      imm2t<-matrix(-999999,nrow(imm2),(ncol(imm2)*ncol(imm)))
                      k9<-1
                      if (wfirst==1)
                      {
                        for (k7 in (1:ncol(imm2)))
                        {
                          for (k8 in (1:ncol(imm)))
                          {imm2t[,k9]<-(matrix(imm2[,k7])*matrix(imm[,k8]));k9<-k9+1}
                        }
                      }
                      if (zfirst==1)
                      {
                        for (k7 in (1:ncol(imm)))
                        {
                          for (k8 in (1:ncol(imm2)))
                          {imm2t[,k9]<-(matrix(imm[,k7])*matrix(imm2[,k8]));k9<-k9+1}
                        }
                      }
                      imm2<-matrix(imm2t,ncol=ncol(imm2t))
                    }
                    if ((ncol(imm2) > 1) & (ncol(imm)==1))
                    {
                      for (k7 in (1:ncol(imm2)))
                      {imm2[,k7]<-(matrix(imm2[,k7])*matrix(imm))}
                    }
                    if ((ncol(imm2)==1) & (ncol(imm) > 1))
                    {
                      for (k7 in (1:ncol(imm)))
                      {imm[,k7]<-(matrix(imm2)*matrix(imm[,k7]))}
                      imm2<-matrix(imm,ncol=ncol(imm))
                    }
                  }
                  if (immset==0)
                  {
                    imm2<-matrix(imm,ncol=ncol(imm))
                    if ((indmmm[i,1]==41) | (indmmm[i,1]==51))
                    {condbb2<-matrix(condbb,ncol=ncol(condbb))}
                    immset<-1
                  }
                }
                # that is it for mmm loop */
              }
              # end of looping through paths: k2
              indtemp<-tucker2[1,1]
              if ((indmmm[i,1]==12) | (indmmm[i,1]==22))
              {
                imm3<-cbind(imm3,tucker2)
                if (k1==nrow(indmodva))
                {
                  imm3<-matrix(imm3[,2:ncol(imm3)],ncol=(ncol(imm3)-1))
                  immstop<-ncol(imm3)
                  for (k8 in (2:immstop))
                  {
                    if (indmmmt[i,1]==1){imm3<-cbind(imm3,(imm3[,k8]-imm3[,1]))}
                    if (indmmmt[i,1]==2){imm3=cbind(imm3,(imm3[,k8]-imm3[,(k8-1)]))}
                    if (indmmmt[i,1]==3)
                    {
                      imm3<-cbind(imm3,((rowSums(imm3[,(k8:immstop)])/(immstop-k8+1))-imm3[,(k8-1)]))
                    }
                    if (indmmmt[i,1]==4)
                    {imm3<-cbind(imm3,(imm3[,k8]-(rowSums(imm3[,1:immstop])/immstop)))}
                  }
                  if (indmmmt[i,1] < 5)
                  {imm2<-matrix(imm3[,(immstop+1):ncol(imm3)],ncol=(ncol(imm3)-immstop))}
                }
              }      
              if ((indmmm[i,1]>-1) & ((contrast==1) | (contrast==2)))
              {
                imm4<-cbind(imm4,tucker2)
                if ((k1==nrow(indmodva)) & (k1 > 1))
                {
                  imm4<-matrix(imm4[,2:ncol(imm4)],ncol=(ncol(imm4)-1))
                  immstop<-ncol(imm4)
                  condcont<-matrix(-999,(immstop*(immstop-1)/2),6)              
                  for (k8 in (1:(immstop-1)))
                  {
                    for (k9 in ((k8+1):immstop))
                    {                   
                      if (contrast==1){imm4<-cbind(imm4,matrix(imm4[,k9]-imm4[,k8]))}
                      if (contrast==2){imm4<-cbind(imm4,matrix(abs(imm4[,k9])-abs(imm4[,k8])))}
                      condcont[(ncol(imm4)-immstop),1]<-imm4[1,k9]
                      condcont[(ncol(imm4)-immstop),2]<-imm4[1,k8]
                    }
                  }
                  imm4<-matrix(imm4[,(immstop+1):ncol(imm4)],ncol=(ncol(imm4)-immstop))   
                  for (k8 in (1:ncol(imm4)))
                  {
                    condcont[k8,3]<-imm4[1,k8]
                    if (boot > 0)
                    {
                      if (bc==0){condcon3<-process.pboot3(imm4[2:nrow(imm4),k8],cilow,cihigh)}
                      if (bc==1)
                      {
                        bcbout<-process.bcboot3(imm4[2:nrow(imm4),k8],imm4[1,k8],xp2,badend,priorlo,priorhi)
                        condcon3<-matrix(unlist(bcbout[1]))
                        badend<-unlist(bcbout[2]);priorlo<-unlist(bcbout[3]);priorhi<-unlist(bcbout[4])
                      }
                      condcont[k8,4:6]<-t(condcon3)  
                    }
                  }
                  if (boot==0){condcont<-matrix(condcont[,1:3],ncol=3)}
                  indcontr<-1
                }
              }
              if (xmint==1)
              {
                if (k1==(k4+1))
                {cftotfx[,k4]<-cftotfx[,k4]+(tucker2*xscaling)}
              } 
              if (boot > 0)
              {
                tucker2<-tucker2*xscaling
                if (bc==0){bcitmp11<-process.pboot3(tucker2[2:nrow(tucker2),1],cilow,cihigh)}
                if (bc==1)
                {
                  bcbout<-process.bcboot3(tucker2[2:nrow(tucker2),1],tucker2[1,1],xp2,badend,priorlo,priorhi)
                  bcitmp11<-matrix(unlist(bcbout[1]))
                  badend<-unlist(bcbout[2]);priorlo<-unlist(bcbout[3]);priorhi<-unlist(bcbout[4])
                }
                indtemp<-cbind((indtemp*xscaling),t(bcitmp11))  
              }
              if (boot==0)
              {indtemp<-indtemp*xscaling}
              condres[k1,(ncol(indmodva)+1):ncol(condres)]<-indtemp
            }
            # end of looping through indirect effects: k1
            # Here is where the computations end
            
            if (xmint==0)
            {
              outformres<-process.outform3(condres,maxresm,resultm)
              maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
            }
            condresp<-noquote(matrix(sprintf(decimals,condres),nrow=nrow(condres)))
            if (xmint==1)
            {
              if (k4==1)
              {
                natindfx<-matrix(condres[(2+(k4-1)),2:ncol(condres)],nrow=1)
              }
              if (k4 > 1)
              {
                natindfx<-rbind(natindfx,condres[(2+(k4-1)),2:ncol(condres)])
              }
              if (k4==nxvls)
              {
                outformres<-process.outform3(natindfx,maxresm,resultm)
                maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
              }
            }
            if (k4==1)
            {
              condlbs<-cbind(condlbs,"Effect")
              if (boot > 0)
              {condlbs<-cbind(condlbs,"BootSE","BootLLCI","BootULCI")}
              condrlb<-t(matrix(replicate(nrow(condres)," ")))
            }
            
            if (nxvls > 1)
            {condrlb<-matrix(xcatlab[k4,1],nrow(condres),1)}
            colnames(condresp)<-condlbs
            rownames(condresp)<-condrlb
            
            if ((outscreen==1) & (xmint==0))
            {print(condresp,right=T)}
            if ((outscreen==1) & (xmint==1) & (k4==nxvls))
            {
              natindf2<-noquote(matrix(sprintf(decimals,natindfx),nrow=nrow(natindfx)))
              colnames(natindf2)<-condlbs[,2:ncol(condlbs)]
              if (nxvls > 1)
              {rownames(natindf2)<-direffl2}
              if (nxvls==1)
              {rownames(natindf2)<-" "}
              print(natindf2,right=T)
              #here
              cat("\n")
            }
            
            
            if (indmmm[i,1]==0){cat("\n")}
            dichadj<-0;immcat<-0
            if ((indmmm[i,1] > 0) & (xmint==0))
            {
              if ((indmmm[i,1]==1) | (indmmm[i,1]==12) | (indmmm[i,1]==31))
              {
                if ((wdich==1) & (mcw==0))
                {
                  if (indmmm[i,1] != 12){imm2[,1]<-imm2[,1]*(wmax-wmin)}
                  if (indmmm[i,1] != 31){dichadj<-1}
                }           
                if (((mcw==1) | (mcw==2)) & (indmmm[i,1] != 31)){immcat<-1}
              }
              if ((indmmm[i,1]==2) | (indmmm[i,1]==22) | (indmmm[i,1]==31))
              {
                if ((zdich==1) & (mcz==0))
                {
                  if (indmmm[i,1]==31)
                  {
                    imm2[,(nwvls+1):ncol(imm2)]<-matrix(imm2[,(nwvls+1):ncol(imm2)],ncol=(ncol(imm2)-nwvls))*(zmax-zmin)
                  }
                  if (indmmm[i,1]==2){imm2[,1]<-imm2[,1]*(zmax-zmin)}
                  if (indmmm[i,1] != 31){dichadj<-1}
                }
                if (((mcz==1) | (mcz==2)) & (indmmm[i,1] != 31)){immcat<-1}
              }
              immtemp2<-t(matrix(imm2[1,],ncol=ncol(imm2)))
              immtemp<-matrix(immtemp2,ncol=ncol(immtemp2))
              immlbs<-"Index"
              if (boot > 0)
              {
                immtemp<-matrix(0,1,3)
                for (k7 in (1:ncol(imm2)))
                {
                  if (bc==0){immbtci<-process.pboot3(imm2[2:nrow(imm2),k7],cilow,cihigh)} 
                  if (bc==1)
                  {
                    bcbout<-process.bcboot3(imm2[2:nrow(imm2),k7],imm2[1,k7],xp2,badend,priorlo,priorhi)
                    immbtci<-matrix(unlist(bcbout[1]))
                    badend<-unlist(bcbout[2]);priorlo<-unlist(bcbout[3]);priorhi<-unlist(bcbout[4])
                  }
                  immtemp<-rbind(immtemp,t(immbtci))
                } 
                immtemp<-matrix(immtemp[2:nrow(immtemp),],ncol=ncol(immtemp))
                immtemp<-cbind(immtemp2,immtemp)
                immlbs<-c(immlbs,"BootSE","BootLLCI","BootULCI")
              }
              outformres<-process.outform3(immtemp,maxresm,resultm)
              maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
              immtempr<-noquote(matrix(sprintf(decimals,immtemp),nrow=nrow(immtemp)))
              colnames(immtempr)<-immlbs        
              if ((dichadj==0) & (immcat==0) & (indmmmt[i,1] != 5) & (indmmm[i,1] < 100))
              {
                if (indmmm[i,1] < 30)
                {
                  rownames(immtempr)<-immlbs2
                  if (outscreen==1)
                  {cat("\n     Index of moderated mediation:\n")
                    print(immtempr,right=T)}
                  if ((nxvls > 1) & (k4 < nxvls)){cat("\n")}
                }
                if (indmmm[i,1]==31)
                {
                  immlbs2<-rbind(immlbs2,matrix(zcatlab[1:nzvls,1]))
                  rownames(immtempr)<-immlbs2
                  if (outscreen==1)
                  {cat("\n     Indices of partial moderated mediation:\n")
                    print(immtempr,right=T)}
                  if ((nxvls > 1) & (k4 < nxvls)){cat("\n")}
                }
                if ((nzvls==1) & (nwvls==1))
                {
                  if ((indmmm[i,1]==41) | (indmmm[i,1]==51))
                  {
                    for (k7 in (1:nwvls))
                    {
                      immlbs2<-zcatlab[1:nzvls,1]
                      immtemp2<-matrix(immtemp[(((k7-1)*nzvls)+1):(((k7-1)*nzvls)+nzvls),],ncol=ncol(immtemp))
                      #resultm2<-matrix(99999,nrow(immtemp2),maxresm)
                      #resultm2[1:nrow(immtemp2),1:ncol(immtemp2)]<-immtemp2
                      #print(resultm)
                      #print(resultm2)
                      #resultm<-rbind(resultm,resultm2)
                      #print(resultm)     
                      immtem2r<-noquote(matrix(sprintf(decimals,immtemp2),nrow=nrow(immtemp2)))
                      colnames(immtem2r)<-immlbs
                      if (nwvls > 1)
                      {
                        primodv<-cbind("Primary moderator:", wcatlab[k7,1])
                        if (outscreen==1)
                        {write.table(primodv,quote=FALSE,row.names=FALSE,col.names=FALSE)}
                      }
                      if (nzvls==1)
                      {
                        rownames(immtem2r)<-" "
                        if (outscreen==1)
                        {cat("\n     Index of moderated moderated mediation:\n")
                          print(immtem2r,right=T)}
                      } else {
                        rownames(immtem2r)<-immlbs2
                        if (outscreen==1)            
                        {cat("\n     Indices of moderated moderated mediation:\n")
                          print(immtem2r,right=T)}
                      }
                      cmmtemp<-matrix(0,nrow(zprobval),4)        
                      for (k8 in (1:nrow(zprobval)))
                      {
                        bbst<-((nwvls+1)+((k7-1)*nzvls));bben<-((nwvls+1)+((k7-1)*nzvls)+(nzvls-1))
                        condbb3<-matrix(condbb2[,bbst:bben],ncol=(bben-bbst+1))
                        if (ncol(zprobval) > 1)
                        {
                          condbb3<-condbb3*diag(c(zprobval[k8,]))
                        } else {
                          condbb3<-condbb3*zprobval[k8,]
                        }
                        condbb3<-cbind(condbb2[,k7],condbb3)
                        icmm<-matrix(rowSums(condbb3))
                        cmmtemp[k8,1]<-icmm[1,1]
                        if (boot > 0)
                        {
                          if (bc==0){cmmt3<-process.pboot3(icmm[2:nrow(icmm),1],cilow,cihigh)}
                          if (bc==1)
                          {
                            bcbout<-process.bcboot3(icmm[2:nrow(icmm),1],icmm[1,1],xp2,badend,priorlo,priorhi)
                            cmmt3<-matrix(unlist(bcbout[1]))
                            badend<-unlist(bcbout[2]);priorlo<-unlist(bcbout[3]);priorhi<-unlist(bcbout[4])
                          }
                          cmmtemp[k8,2:4]<-t(cmmt3)
                        }
                        cmmlbs<-cbind(znames,t(matrix(immlbs)))
                      }
                      if (boot==0){cmmtemp<-matrix(cmmtemp[,1:1],ncol=1);cmmlbs<-cbind(znames,"Index")}                   
                      cmmtemp<-cbind(zmodvals,cmmtemp)
                      outformres<-process.outform3(cmmtemp,maxresm,resultm)
                      maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
                      cmmtempr<-noquote(matrix(sprintf(decimals,cmmtemp),nrow=nrow(cmmtemp)))
                      #if (boot==0){cmmtempr<-matrix(cmmtemp[,1:2],ncol=2)}                   
                      #cmmlbs<-cbind(znames,t(matrix(immlbs)))
                      rownames(cmmtempr)<-t(matrix(replicate(nrow(cmmtempr)," ")))
                      colnames(cmmtempr)<-cmmlbs
                      if (outscreen==1)
                      {cat("\n     Indices of conditional moderated mediation by W:\n")
                        print(cmmtempr,right=T)}
                    }
                  }
                }
              }
              if (((dichadj==1) | (immcat==1)) & (indmmm[i,1] < 30))
              {
                if (outscreen==1)
                {
                  cat("\n     Index of moderated mediation\n")
                  cat("     (differences beween conditional indirect effects):\n")
                  rownames(immtempr)<-immlbs2
                  print(immtempr,right=T)
                }
              }
            }
            if (indcontr==1)
            {
              outformres<-process.outform3(condcont,maxresm,resultm)
              maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
              condcnt3<-noquote(matrix(sprintf(decimals,condcont),nrow=nrow(condcont))) 
              condctlb<-c("Effect1","Effect2","Contrast","BootSE", "BootLLCI","BootULCI")
              colnames(condcnt3)<-condctlb
              rownames(condcnt3)<-t(matrix(replicate(nrow(condcnt3)," ")))
              if (outscreen==1)
              {
                cat("\n     Pairwise contrasts between conditional indirect effects\n")
                cat("     (Effect1 minus Effect2):\n")
                print(condcnt3,right=T)
              }
            }
            #if (outscreen==1)
            #{cat("\n---\n")}
          }
        }
        #end of moderated */
      }
      
      if (alttotal==1)
      {
        if (outscreen==1){cat("\n----------\n")}
        altcnms<-"Effect" 
        alttotfx<-matrix(cftotfx[1,])+obnatdfx
        if (boot > 0)
        {
          alttotfx<-matrix(0,ncol(cftotfx),4)
          alttotfx[,1]<-matrix(cftotfx[1,])+obnatdfx
          natdirbt[1,]<-t(obnatdfx)
          cftotfx<-cftotfx+natdirbt
          for (cec in (1:ncol(cftotfx)))
          {
            if (bc==0){cftot34<-process.pboot3(cftotfx[2:nrow(cftotfx),cec],cilow,cihigh)}
            if (bc==1)
            {
              bcbout<-process.bcboot3(cftotfx[2:nrow(cftotfx),cec],cftotfx[1,cec],xp2,badend,priorlo,priorhi)
              cftot34<-matrix(unlist(bcbout[1]))
              badend<-unlist(bcbout[2]);priorlo<-unlist(bcbout[3]);priorhi<-unlist(bcbout[4])
            }
            alttotfx[cec,2:4]<-t(cftot34)      
          }
          altcnms<-c(altcnms,"BootSE", "BootLLCI","BootULCI")
        }
        outformres<-process.outform3(alttotfx,maxresm,resultm)
        maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
        alttofx2<-noquote(matrix(sprintf(decimals,alttotfx),nrow=nrow(alttotfx)))
        if (outscreen==1)
        { 
          if (nxvls > 1)
          {
            cat("\nRelative total effects of X on Y (sum of direct and indirect effects:\n")
            rownames(alttofx2)<-direffl2
          }
          if (nxvls==1)
          {
            cat("\nTotal effect of X on Y (sum of direct and indirect effects:\n")
            rownames(alttofx2)<-" "
          }
          colnames(alttofx2)<-altcnms
          print(alttofx2,right=T)
        }
      }
      
      
      
    }
    # This is the end of the moderated loop */
  }
  
  
  if ((criterr==0) & (saveboot==1))
  {
    if (boot > 0)
    {
      if (outscreen==1)
      {
        cat("\n*********************************************************************** \n")
        conseq<-conseq[2:nrow(conseq),]
        #cat("Bootstrap estimates were saved in a global dataframe named process.boots\n")
        colslab<-cbind(savlabs,conseq,vlabs)
        cat("\nMap of column names to model coefficients in bootstrap matrix:\n")
        rownames(colslab)<-t(matrix(replicate(nrow(colslab)," ")))
        colnames(colslab)<-c("name","Conseqnt","Antecdnt")
        print(noquote(colslab),right=T)
      }
    }
  }
  
  #PRINT BOOTSTRAP RESULTS FOR MODEL PARAMETERS
  if ((criterr==0) & (boot > 0) & (modelbt==1))
  {
    labstart<-1
    if (outscreen==1)
    {cat("\n********** BOOTSTRAP RESULTS FOR REGRESSION MODEL PARAMETERS **********\n\n")}
    for (iboot in (1:(nms+nys)))
    {
      vlabsm<-matrix(vlabs[labstart:(labstart+(nump[1,iboot]-1)),1])
      bootcimt<-matrix(bootcim[labstart:(labstart+(nump[1,iboot]-1)),],ncol=5)
      outformres<-process.outform3(bootcimt,maxresm,resultm)
      maxresm<-unlist(outformres[2]);resultm<-matrix(unlist(outformres[1]),ncol=maxresm)
      bootcimt<-noquote(matrix(sprintf(decimals,bootcimt),ncol=5))
      colnames(bootcimt)<-matrix(c("Coeff","BootMean","BootSE","BootLLCI","BootULCI"))
      rownames(bootcimt)<-vlabsm
      if (outscreen==1)
      {
        cat("Outcome variable: ")
        write.table(outnames[iboot,1],quote=FALSE,row.names=FALSE,col.names=FALSE)
        cat("\n")
        print(bootcimt,right=T)
      }
      labstart<-labstart+nump[1,iboot]
      if ((iboot < (nms+nys)) & (outscreen==1)){cat("----------\n")}
    }
  }
  
  #print model matrices
  if ((criterr==0) & (matrices==1) & (outscreen==1))
  {
    cat("\n********************* MODEL DEFINITION MATRICES *********************** \n \n")
    cat("FROM variables are columns, TO variables are rows. \n \n")
    temp2<-matrix("0",nrow(bcmat),ncol(bcmat))
    for (i in c(2:nrow(bcmat)))
    {for (j in c(1:(ncol(bcmat)-1)))
    {if (bcmat[i,j]==1){temp2[i,j]<-"1"}
      if (j >= i){temp2[i,j]<-" "}}
    }
    temp2<-as.matrix(noquote(temp2[2:nrow(bcmat),(1:(ncol(bcmat)-1))]))
    if (nms > 0){cmatlabs<-c(xnames,mnames);rmatlabs<-c(mnames,ynames)}
    if (nms==0){cmatlabs<-xnames;rmatlabs<-ynames}
    colnames(temp2)<-cmatlabs
    rownames(temp2)<-rmatlabs
    cat("BMATRIX: Paths freely estimated (1) and fixed to zero (0): \n") 
    print(temp2)
    z<-0
    if (sum(wcmat) !=0)
    {
      temp2<-matrix("0",nrow(wcmat),ncol(wcmat))
      for (i in c(2:nrow(wcmat)))
      {for (j in c(1:(ncol(wcmat)-1)))
      {if (wcmat[i,j]==1){temp2[i,j]<-"1"}
        if (j >= i){temp2[i,j]<-" "}}
      }
      temp2<-as.matrix(noquote(temp2[2:nrow(wcmat),(1:(ncol(wcmat)-1))]))
      colnames(temp2)<-cmatlabs
      rownames(temp2)<-rmatlabs
      cat("\nWMATRIX: Paths moderated (1) and not moderated (0) by W: \n") 
      print(temp2)
    }
    if (sum(zcmat) !=0)
    {
      temp2<-matrix("0",nrow(zcmat),ncol(zcmat))
      for (i in c(2:nrow(zcmat)))
      {for (j in c(1:(ncol(zcmat)-1)))
      {if (zcmat[i,j]==1){temp2[i,j]<-"1"}
        if (j >= i){temp2[i,j]<-" "}}
      }
      temp2<-as.matrix(noquote(temp2[2:nrow(zcmat),(1:(ncol(zcmat)-1))]))
      colnames(temp2)<-cmatlabs
      rownames(temp2)<-rmatlabs
      cat("\nZMATRIX: Paths moderated (1) and not moderated (0) by Z: \n") 
      print(temp2)
    }
    if (sum(wzcmat) !=0)
    {
      temp2<-matrix("0",nrow(wzcmat),ncol(wzcmat))
      for (i in c(2:nrow(wzcmat)))
      {for (j in c(1:(ncol(wzcmat)-1)))
      {if (wzcmat[i,j]==1){temp2[i,j]<-"1"}
        if (j >= i){temp2[i,j]<-" "}}
      }
      temp2<-as.matrix(noquote(temp2[2:nrow(wzcmat),(1:(ncol(wzcmat)-1))]))
      colnames(temp2)<-cmatlabs
      rownames(temp2)<-rmatlabs
      cat("\nWZMATRIX: W moderated paths moderated (1) and not moderated (0) by Z: \n") 
      print(temp2)
    }
    if (ncs > 0)
    {colnames(ccmat)<-covnames
    rownames(ccmat)<-rmatlabs
    cat("\nCMATRIX: Covariates (columns) in (1) and not in (0) the models of M and Y (rows): \n")
    print(ccmat)
    }  
  }
  #end print model matrices
  
  if (criterr==0)
  {
    resultm<-resultm[2:nrow(resultm),]
    bocaj<-matrix(as.numeric(resultm==99999),nrow=nrow(resultm))
    bocaj<-(colSums(bocaj)==nrow(resultm))
    bocaj<-matrix(1-as.numeric(bocaj))
    j<-1
    for (i in (1:ncol(resultm)))
    {if (bocaj[i,1]==1){j<-j+1}}
    resultm<-resultm[,1:(j-1)]
    resultm[resultm==99999]<-NA
  }
  if ((outscreen==1) & (activate==0))
  {cat("\n******************** ANALYSIS NOTES AND ERRORS ************************ \n")}
  if (activate==1)
  {cat("*********************************************************************** \n")}
  if ((criterr==0) & (outscreen==1))
  {
    cat("\nLevel of confidence for all confidence intervals in output: ")
    write.table(conf,quote=FALSE,row.names=FALSE,col.names=FALSE)
    if (boot>0)
    { 
      if ((goodboot==boot) & (bc==0))
      {
        cat("\nNumber of bootstraps for percentile bootstrap confidence intervals: ")
        write.table(boot,quote=FALSE,row.names=FALSE,col.names=FALSE)  
      }
      if ((goodboot==boot) & (bc==1))
      {
        cat("\nNumber of bootstraps for bias-corrected bootstrap confidence intervals: ")
        write.table(boot,quote=FALSE,row.names=FALSE,col.names=FALSE)  
      }
      if (length(badend) > 1)
      {
        cat("\nWARNING: Bootstrap CI endpoints below are not trustworthy. Decrease confidence\n")
        cat("or increase the number of bootstrap samples.\n")
        badend<-matrix(badend);badend<-t(badend[2:nrow(badend),1])
        badend<-noquote(matrix(sprintf(decimals,badend),nrow=nrow(badend)))
        write.table(badend,quote=FALSE,row.names=FALSE,col.names=FALSE)
      }
    }
    if (mc > 0)
    {
      cat("\nNumber of samples for Monte Carlo confidence intervals: ")
      write.table(mc,quote=FALSE,row.names=FALSE,col.names=FALSE)  
    }
    if ((wnotev > 0) & (printw==1))
    {
      if (wnotev==1)
      {cat("\nW values in conditional tables are the 16th, 50th, and 84th percentiles.\n")}
      if ((wnotev==2) & (minwwarn==0) & (maxwwarn==0))
      {cat("\nW values in conditional tables are the mean and +/- SD from the mean.\n")}  
      if (minwwarn==1)
      {cat("\nW values in conditional tables are the minimum, the mean, and 1 SD above the mean.\n")} 
      if (maxwwarn==1)
      {cat("\nW values in conditional tables are 1 SD below the mean, the mean, and the maximum.\n")}
    }
    if ((znotev > 0) & (printz==1))
    {
      if (znotev==1)
      {cat("\nZ values in conditional tables are the 16th, 50th, and 84th percentiles.\n")}
      if ((znotev==2) & (minzwarn==0) & (maxzwarn==0))
      {cat("\nZ values in conditional tables are the mean and +/- SD from the mean.\n")}  
      if (minzwarn==1)
      {cat("\nZ values in conditional tables are the minimum, the mean, and 1 SD above the mean.\n")} 
      if (maxzwarn==1)
      {cat("\nZ values in conditional tables are 1 SD below the mean, the mean, and the maximum.\n")}
    }
    if (minwwarn > 0)
    {cat("\nNOTE: One SD below the mean is below the minimum observed in the data for W,\n")
      cat("      so the minimum measurement on W is used for conditioning instead.\n")}
    if (maxwwarn > 0)
    {cat("\nNOTE: One SD above the mean is above the maximum observed in the data for W,\n")
      cat("      so the maximum measurement on W is used for conditioning instead.\n")}
    if (minzwarn > 0)
    {cat("\nNOTE: One SD below the mean is below the minimum observed in the data for Z,\n")
      cat("      so the minimum measurement on Z is used for conditioning instead.\n")}
    if (maxzwarn > 0)
    {cat("\nNOTE: One SD above the mean is above the maximum observed in the data for Z,\n")
      cat("      so the maximum measurement on Z is used for conditioning instead.\n")}
    if (pstog==1)
    {cat("\nNOTE: Standardized coefficients for dichotomous or multicategorical X are\n")
      cat("      in partially standardized form.\n")}
    for (i in c(1:100)) 
    {
      if (notecode[i,1]==32)
      {
        cat("\n")
        cat("Direct, indirect, and total effects are counterfactually defined \n")
        if (xcontcf==0)
        {
          cat("assuming X by M interaction.\n")
        }
        if (xcontcf==1)
        {
          cat("assuming X by M interaction and with the following reference (x_ref) \n")
          cat("and counterfactual (x_cf) states for X: \n")
          xrefvals=t(xrefvals)
          xrefvals<-noquote(matrix(sprintf(decimals,xrefvals),nrow=nrow(xrefvals)))
          rownames(xrefvals)<-c("x_ref :","x_cf  :")
          colnames(xrefvals)<-" "
          print(xrefvals,right=T)
        }
      }
      if (notecode[i,1]==1)
      {cat(" \n")
        cat("NOTE: COVMY is ignored when using CMATRIX option. \n")}
      if (notecode[i,1]==2)
      {cat(" \n")
        cat("NOTE: Confidence level restricted to between 50 and 99.9999%. 95% confidence is provided in output. \n")}
      if (notecode[i,1]==3)
      {cat(" \n")
        cat("NOTE: The following variables were mean centered prior to analysis: \n")
        centvar<-c("      ", centvar)
        centvar<-t(noquote(centvar))  
        write.table(centvar,quote=FALSE,row.names=FALSE,col.names=FALSE)
      }
      if ((notecode[i,1]==4) & (ydich != 1))
      {cat(" \n")
        cat("NOTE: A heteroscedasticity consistent standard error and covariance matrix estimator was used. \n")}  
      if (notecode[i,1]==6)
      {cat(" \n")
        cat("NOTE: Due to estimation problems, some bootstrap samples had to be replaced. \n")
        cat("      The number of times this happened was: ")
        write.table(badboot,quote=FALSE,row.names=FALSE,col.names=FALSE)}  
      if (notecode[i,1]==7)
      {cat(" \n")
        cat("NOTE: The bootstrapping was not completed due to problematic bootstrap samples. \n")
        cat("      Bootstrap confidence intervals are therefore suppressed.\n")}
      if (notecode[i,1]==8)
      {cat(" \n")
        cat("NOTE: The number of bootstrap samples was adjusted upward given your desired confidence. \n")}  
      if (notecode[i,1]==9)
      {cat(" \n")
        cat("NOTE: WMODVAL is ignored when W is specified as multicategorical. \n")}  
      if (notecode[i,1]==10)
      {cat(" \n")
        cat("NOTE: ZMODVAL is ignored when Z is specified as multicategorical. \n")}
      if (notecode[i,1]==11)
      {cat(" \n")
        cat("NOTE: Total effect model generated only when all covariates are specified\n")
        cat("      in all models of M and Y.\n")}
      if (notecode[i,1]==12)
      {cat(" \n")
        cat("NOTE: Total effect model generated only when X is freely estimated to\n")
        cat("      affect each M and both X and M are freely estimated to affect Y.\n")}
      if (notecode[i,1]==30)
      {cat(" \n")
        cat("NOTE: Your vector of linear hypothesis weights is of the wrong length for this model. \n")}  
      if (notecode[i,1]==13)
      {cat(" \n")
        cat("NOTE: There are too many pairwise contrasts to conduct with this model. \n")}  
      if (notecode[i,1]==14)
      {cat(" \n")
        cat("NOTE: The number of contrast weights must equal the number of indirect effects. \n")}  
      if (notecode[i,1]==15)
      {cat(" \n")
        cat("NOTE: Monte Carlo confidence intervals not available for this model. \n")
        cat("      Bootstrapping is used instead.\n")}
      if (notecode[i,1]==16)
      {cat(" \n")
        cat("NOTE: The number of Monte Carlo samples was adjusted upward given your desired confidence. \n")}  
      if (notecode[i,1]==19)
      {cat(" \n")
        cat("NOTE: Your contrast matrix is invalid or not applicable to this model. \n")}  
      if (notecode[i,1]==20)
      {cat(" \n")
        cat("NOTE: One of the groups specified by your contrast matrix does not exist in the data. \n")}  
      if (notecode[i,1]==24)
      {cat(" \n")
        cat("NOTE: Total effect model not available with dichotomous Y. \n")}
      if (notecode[i,1]==25)
      {cat(" \n")
        cat("NOTE: STAND/EFFSIZE options not available with dichotomous Y. \n")}
      if (notecode[i,1]==27)
      {cat(" \n")
        cat("NOTE: Standardized coefficients not available for models with moderators. \n")}
      if (notecode[i,1]==28)
      {cat(" \n")
        cat("NOTE: The contrast option is not available with a multicategorical X. \n")}
      if (notecode[i,1]==31)
      {
        medmean2<-noquote(matrix(sprintf(decimals,medmeans),nrow=nrow(medmeans)))
        rownames(medmean2)<-" "
        colnames(medmean2)<-mnames
        if (nms > 1)
        {
          cat(" \n")
          cat("NOTE: Controlled direct effect(s) estimated at the following mediator values: \n")
        }
        if (nms==1)
        {
          cat(" \n")
          cat("NOTE: Controlled direct effect(s) estimated at the following mediator value: \n")
        }
        print(medmean2,right=T)
      }
      if (notecode[i,1]==33)
      {cat(" \n")
        cat("NOTE: Sobel test is not available when using the XMINT option. \n")}
      if (notecode[i,1]==34)
      {cat(" \n")
        cat("NOTE: Standardized effects are not available when using the XMINT option. \n")}
      if (notecode[i,1]==36)
      {cat(" \n")
        cat("NOTE: The XREFVAL option is ignored when X is declared as multicategorical. \n")}
      if (notecode[i,1]==37)
      {cat(" \n")
        cat("NOTE: The CONTRAST option is not available when using the XMINT option. \n")}
      if (notecode[i,1]==38)
      {cat(" \n")
        cat("NOTE: One or more cases were deleted prior to analysis at your request. \n")}
      if (notecode[i,1]==35)
      {cat(" \n")
        cat("NOTE: Counterfactual effects estimated at the following covariate values: \n")
        coval2<-noquote(matrix(sprintf(decimals,coval),nrow=nrow(coval)))
        rownames(coval2)<-" "
        colnames(coval2)<-covnames
        print(coval2,right=T)}
      if ((notecode[i,1]==29) & (listmiss==1))
      {cat(" \n")
        a<-missrow;conum<-ncol(missrow);allgood<-0;smremain<-12;largesti<-1;smallrow<-0;
        if (conum > 12)
        {
          for (ii in c(1:12))
          { 
            check<-(conum/ii);
            if (check==trunc(check))
            {
              check2<-conum/ii;aok<-ii
              if (aok > 2){allgood<-1}
            }
            if (check != trunc(check))
            {
              remain<-conum-(ii*trunc(check))
              if (remain <= smremain)
              {smremain<-remain;largesti<-ii;smallrow<-trunc(conum/largesti)}
            }
          }
          atemp<-a[1,1:(aok*check2)]
          atemp<-matrix(atemp,nrow=check2,byrow=TRUE)
          cat("NOTE: Missing data resulted in the deletion of the following row(s) of: \n")
          cat("      data from the analysis: \n")
          if (ncol(atemp) > 2)
          {prmatrix(atemp, rowlab=rep("    ",nrow(atemp)),collab=rep("    ",ncol(atemp)))}
          if (allgood==0)
          {
            atemp<-a[1,1:(smallrow*largesti)]
            atemp<-matrix(atemp,nrow=smallrow,byrow=TRUE)
            btemp<-matrix(a[1,((largesti*smallrow)+1):conum])
            prmatrix(atemp,rowlab=rep("    ",nrow(atemp)),collab=rep("    ",ncol(atemp)))
            prmatrix(btemp,rowlab=rep("    ",1),collab=rep("    ",ncol(btemp)))
          }
        }
        if (conum <= 12)
        {
          cat("NOTE: Missing data resulted in the deletion of the following row(s) of \n")
          cat("      data from the analysis: \n")
          prmatrix(a, rowlab=rep("    ",nrow(a)), collab=rep("    ",ncol(a)))
        }
        
      }
    }
    if ((nmiss > 0) & (listmiss==0))
    {cat(" \n")
      cat("NOTE: Some cases with missing data were deleted. The number of deleted cases was: ")
      write.table(nmiss,quote=FALSE,row.names=FALSE,col.names=FALSE)}
  }
  
  # print errors
  for (i in c(1:100)) 
  {
    if (errcode[i,1]==1)
    {cat(" \n")
      cat("ERROR: You must specify a Y and an X variable. \n")}  
    if (errcode[i,1]==2)
    {cat(" \n")
      cat("ERROR: X, M, or Y variable used more than once or W and Z are the same variable. \n")}  
    if (errcode[i,1]==3)
    {cat(" \n")
      cat("ERROR: You have specified more than one variable for W, Y, X, or Z. \n")} 
    if (errcode[i,1]==4)
    {cat(" \n")
      cat("ERROR: A variable specified as multicategorical has more than nine categories. \n")} 
    if (errcode[i,1]==5)
    {cat(" \n")
      cat("ERROR: One of the categories contains only a single case. \n")} 
    if (errcode[i,1]==6)
    {cat(" \n")
      cat("ERROR: Invalid model number in this version of PROCESS. \n")}  
    if (errcode[i,1]==7)
    {cat(" \n")
      cat("ERROR: Invalid model number. \n")}  
    if (errcode[i,1]==8)
    {cat(" \n")
      cat("ERROR: You must specify an M variable for this model. \n")} 
    if (errcode[i,1]==9)
    {cat(" \n")
      cat("ERROR: You have specified an M variable in a model that does not use it. \n")}
    if (errcode[i,1]==10)
    {cat(" \n")
      cat("ERROR: You have specified a W variable in a model that does not use it. \n")}
    if (errcode[i,1]==11)
    {cat(" \n")
      cat("ERROR: You have not specified a W variable in a model that requires it. \n")}
    if (errcode[i,1]==12)
    {cat(" \n")
      cat("ERROR: You have specified a Z variable in a model that does not use it. \n")}
    if (errcode[i,1]==13)
    {cat(" \n")
      cat("ERROR: You have not specified a Z variable in a model that requires it. \n")}
    if (errcode[i,1]==15)
    {cat(" \n")
      cat("ERROR: One of your model variables exhibits no variation (it is a constant). \n")}
    if (errcode[i,1]==16)
    {cat(" \n")
      cat("ERROR: BMATRIX is not the correct length or is otherwise invalid. \n")}
    if (errcode[i,1]==17)
    {cat(" \n")
      cat("ERROR: WMATRIX is not the correct length or is otherwise invalid. \n")}
    if (errcode[i,1]==18)
    {cat(" \n")
      cat("ERROR: ZMATRIX is not the correct length or is otherwise invalid. \n")}
    if (errcode[i,1]==19)
    {cat(" \n")
      cat("ERROR: WZMATRIX is not the correct length or is otherwise invalid. \n")}
    if (errcode[i,1]==20)
    {cat(" \n")
      cat("ERROR: A path fixed at zero cannot be moderated. \n")}
    if (errcode[i,1]==60)
    {cat(" \n")
      cat("PROCESS is now ready for use.\n")
      cat("Copyright 2020-2023 by Andrew F. Hayes ALL RIGHTS RESERVED\n")
      cat("Workshop schedule at http://haskayne.ucalgary.ca/CCRAM\n \n")}
    if (errcode[i,1]==21)
    {cat(" \n")
      cat("ERROR: If only one moderator is specified, it must be specified as W. \n")}
    if (errcode[i,1]==22)
    {cat(" \n")
      cat("ERROR: In BMATRIX, X must be specified to affect at least one variable. \n")}
    if (errcode[i,1]==23)
    {cat(" \n")
      cat("ERROR: In BMATRIX, at least one variable must be specified to affect Y. \n")}
    if (errcode[i,1]==24)
    {cat(" \n")
      cat("ERROR: You must specify a model number or a custom BMATRIX specification. \n")}  
    if (errcode[i,1]==25)
    {cat(" \n")
      cat("ERROR: BMATRIX cannot be used in conjunction with a model number. \n")}
    if (errcode[i,1]==26)
    {cat(" \n")
      cat("ERROR: Your model has a dangling mediator (all Ms must affect and be affected). \n")}
    if (errcode[i,1]==29)
    {cat(" \n")
      cat("ERROR: CMATRIX is not the correct length or is otherwise invalid. \n")}  
    if (errcode[i,1]==30)
    {cat(" \n")
      cat("ERROR: In CMATRIX, all covariates must be assigned to an M or a Y. \n")}
    if ((errcode[i,1]==31) & (singlr==0))
    {cat(" \n")
      singlr<-1
      cat("ERROR: A linear or near linear dependence (singularity) exists in the data. \n")}
    if (errcode[i,1]==32)
    {cat(" \n")
      cat("ERROR: Models 80 and 81 require between 3 and 6 mediators. \n")}  
    if (errcode[i,1]==33)
    {cat(" \n")
      cat("ERROR: Model 82 requires 4 mediators. \n")} 
    if (errcode[i,1]==34)
    {cat(" \n")
      cat("ERROR: This model number requires between 2 and 6 mediators. \n")} 
    if (errcode[i,1]==35)
    {cat(" \n")
      cat("ERROR: In a model with only one moderator, that moderator must be W. \n")}
    if (errcode[i,1]==36)
    {cat(" \n")
      cat("ERROR: A serial mediation model cannot have more than 6 mediators. \n")}  
    if (errcode[i,1]==37)
    {cat(" \n")
      cat("ERROR: No more than 10 mediators are allowed in a PROCESS command. \n")} 
    if (errcode[i,1]==38)
    {cat(" \n")
      cat("ERROR: XCATCODE is not provided, not the correct length, or is otherwise invalid. \n")} 
    if (errcode[i,1]==39)
    {cat(" \n")
      cat("ERROR: WCATCODE is not provided, not the correct length, or is otherwise invalid. \n")} 
    if (errcode[i,1]==40)
    {cat(" \n")
      cat("ERROR: ZCATCODE is not provided, not the correct length, or is otherwise invalid. \n")} 
    if (errcode[i,1]==41)
    {cat(" \n")
      cat("ERROR: Models 1, 2, and 3 cannot be customized. \n")}
    if (errcode[i,1]==43)
    {cat(" \n")
      cat("ERROR: PROCESS does not allow dichotomous mediators. \n")}
    if (errcode[i,1]==50)
    {cat(" \n")
      cat("ERROR: A multicategorical moderator cannot be specified as a covariate. \n")} 
    if (errcode[i,1]==51)
    {cat(" \n")
      cat("ERROR: A variable you specified as a covariate is a moderator in all equations. \n")} 
    if (errcode[i,1]==62)
    {cat(" \n")
      cat("ERROR: After listwise deletion of cases with missing data, too few cases remain. \n")} 
    if (errcode[i,1]==63)
    {cat(" \n")
      cat("ERROR: The XMINT option is available only for model 4. \n")}
    if (errcode[i,1]==64)
    {cat(" \n")
      cat("ERROR: Incorrect number of values specified in CDEVAL option. \n")}
    if (errcode[i,1]==65)
    {cat(" \n")
      cat("ERROR: Only indicator or sequential coding of X is allowed with the XMINT option. \n")}
    if (errcode[i,1]==66)
    {cat(" \n")
      cat("ERROR: A reference value of X is required for this model. \n")}
    if (errcode[i,1]==67)
    {cat(" \n")
      cat("ERROR: Too many elements provided in XREFVAL option. \n")}
    if (errcode[i,1]==68)
    {cat(" \n")
      cat("ERROR: Covariate assignment is not allowed with the XMINT option. \n")}
    if (errcode[i,1]==69)
    {cat(" \n")
      cat("ERROR: Incorrect number of values specified in COVAL option. \n")}
    if (errcode[i,1]==70)
    {cat(" \n")
      cat("ERROR: Incorrect value(s) in XREFVAL for this dichotomous X variable. \n")}
    if (errcode[i,1]==71)
    {cat(" \n")
      cat("ERROR: The CENTER option is not available when using the XMINT option. \n")}
    if (errcode[i,1]==72)
    {cat(" \n")
      cat("ERROR: The XMINT option is not available for models with a dichotomous Y. \n")}
    if ((errcode[i,1]==52) & (mcerpt==0))
    {mcerpt<-1
    cat(" \n")
    cat("ERROR: A variable specified as multicategorical must have at least three categories. \n")}
    if (errcode[i,1]==53)
    {cat(" \n")
      cat("ERROR: Variables declared as factors or that are non-numeric are not accepted by PROCESS.\n")}  
  }
  #if (saveboot==1)
  #{resultm<-list(resultm,boots)}
  #invisible(resultm)
  resultms<-NULL
  if ((saveboot==0) & (saveest==1)){resultms<-resultm}
  if ((saveboot==1) & (saveest==0)){resultms<-boots}
  if ((saveboot==1) & (saveest==1)){resultms<-(list(boots,resultm))}
  invisible(resultms)
}  
process(activate=1)
## 
## ********************* PROCESS for R Version 4.3.1 ********************* 
##  
##            Written by Andrew F. Hayes, Ph.D.  www.afhayes.com              
##    Documentation available in Hayes (2022). www.guilford.com/p/hayes3   
##  
## *********************************************************************** 
##  
## PROCESS is now ready for use.
## Copyright 2020-2023 by Andrew F. Hayes ALL RIGHTS RESERVED
## Workshop schedule at http://haskayne.ucalgary.ca/CCRAM
## 
# create dummy variable
data_clean$condition <- ifelse(data_clean$FL_24_DO == "1", "informal", "formal")
data_clean <- data_clean %>%
  mutate(
    condition_dummy = if_else(condition == "informal", 1, 0)
  )

library(sandwich)
model_h1 <- lm(purchase_intention ~ condition_dummy, data = data_clean)
summary(model_h1)
## 
## Call:
## lm(formula = purchase_intention ~ condition_dummy, data = data_clean)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.1631 -0.7738  0.1702  1.0315  2.5595 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)       4.1631     0.1939  21.473   <2e-16 ***
## condition_dummy  -0.3893     0.2629  -1.481    0.142    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.329 on 101 degrees of freedom
## Multiple R-squared:  0.02124,    Adjusted R-squared:  0.01155 
## F-statistic: 2.192 on 1 and 101 DF,  p-value: 0.1418
#regression test
library(lmtest)
## 载入需要的程序包:zoo
## 
## 载入程序包:'zoo'
## The following objects are masked from 'package:data.table':
## 
##     yearmon, yearqtr
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
vcovHC_model_h1 <- vcovHC(model_h1, type = "HC0")
coeftest(model_h1, vcov = vcovHC_model_h1)
## 
## t test of coefficients:
## 
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      4.16312    0.17826  23.354   <2e-16 ***
## condition_dummy -0.38931    0.25748  -1.512   0.1336    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
process(data = data_clean, y = "purchase_intention", x = "condition_dummy", m = "customer_closeness", model = 4, total =1, seed = 123)
## 
## ********************* PROCESS for R Version 4.3.1 ********************* 
##  
##            Written by Andrew F. Hayes, Ph.D.  www.afhayes.com              
##    Documentation available in Hayes (2022). www.guilford.com/p/hayes3   
##  
## *********************************************************************** 
##                           
## Model : 4                 
##     Y : purchase_intention
##     X : condition_dummy   
##     M : customer_closeness
## 
## Sample size: 103
## 
## Custom seed: 123
## 
## 
## *********************************************************************** 
## Outcome Variable: customer_closeness
## 
## Model Summary: 
##           R      R-sq       MSE         F       df1       df2         p
##      0.3495    0.1222    1.9999   14.0571    1.0000  101.0000    0.0003
## 
## Model: 
##                     coeff        se         t         p      LLCI      ULCI
## constant           2.8440    0.2063   13.7870    0.0000    2.4348    3.2532
## condition_dummy    1.0489    0.2798    3.7493    0.0003    0.4939    1.6038
## 
## *********************************************************************** 
## Outcome Variable: purchase_intention
## 
## Model Summary: 
##           R      R-sq       MSE         F       df1       df2         p
##      0.3637    0.1323    1.5819    7.6234    2.0000  100.0000    0.0008
## 
## Model: 
##                        coeff        se         t         p      LLCI      ULCI
## constant              3.2627    0.3115   10.4758    0.0000    2.6448    3.8806
## condition_dummy      -0.7214    0.2656   -2.7165    0.0078   -1.2483   -0.1945
## customer_closeness    0.3166    0.0885    3.5775    0.0005    0.1410    0.4922
## 
## ************************ TOTAL EFFECT MODEL *************************** 
## Outcome Variable: purchase_intention
## 
## Model Summary: 
##           R      R-sq       MSE         F       df1       df2         p
##      0.1458    0.0212    1.7667    2.1922    1.0000  101.0000    0.1418
## 
## Model: 
##                     coeff        se         t         p      LLCI      ULCI
## constant           4.1631    0.1939   21.4725    0.0000    3.7785    4.5477
## condition_dummy   -0.3893    0.2629   -1.4806    0.1418   -0.9109    0.1323
## 
## *********************************************************************** 
## Bootstrapping progress:
##   |                                                                      |                                                              |   0%  |                                                                      |                                                              |   1%  |                                                                      |>                                                             |   1%  |                                                                      |>                                                             |   2%  |                                                                      |>>                                                            |   2%  |                                                                      |>>                                                            |   3%  |                                                                      |>>                                                            |   4%  |                                                                      |>>>                                                           |   4%  |                                                                      |>>>                                                           |   5%  |                                                                      |>>>                                                           |   6%  |                                                                      |>>>>                                                          |   6%  |                                                                      |>>>>                                                          |   7%  |                                                                      |>>>>>                                                         |   7%  |                                                                      |>>>>>                                                         |   8%  |                                                                      |>>>>>                                                         |   9%  |                                                                      |>>>>>>                                                        |   9%  |                                                                      |>>>>>>                                                        |  10%  |                                                                      |>>>>>>>                                                       |  10%  |                                                                      |>>>>>>>                                                       |  11%  |                                                                      |>>>>>>>                                                       |  12%  |                                                                      |>>>>>>>>                                                      |  12%  |                                                                      |>>>>>>>>                                                      |  13%  |                                                                      |>>>>>>>>                                                      |  14%  |                                                                      |>>>>>>>>>                                                     |  14%  |                                                                      |>>>>>>>>>                                                     |  15%  |                                                                      |>>>>>>>>>>                                                    |  15%  |                                                                      |>>>>>>>>>>                                                    |  16%  |                                                                      |>>>>>>>>>>                                                    |  17%  |                                                                      |>>>>>>>>>>>                                                   |  17%  |                                                                      |>>>>>>>>>>>                                                   |  18%  |                                                                      |>>>>>>>>>>>                                                   |  19%  |                                                                      |>>>>>>>>>>>>                                                  |  19%  |                                                                      |>>>>>>>>>>>>                                                  |  20%  |                                                                      |>>>>>>>>>>>>>                                                 |  20%  |                                                                      |>>>>>>>>>>>>>                                                 |  21%  |                                                                      |>>>>>>>>>>>>>                                                 |  22%  |                                                                      |>>>>>>>>>>>>>>                                                |  22%  |                                                                      |>>>>>>>>>>>>>>                                                |  23%  |                                                                      |>>>>>>>>>>>>>>>                                               |  23%  |                                                                      |>>>>>>>>>>>>>>>                                               |  24%  |                                                                      |>>>>>>>>>>>>>>>                                               |  25%  |                                                                      |>>>>>>>>>>>>>>>>                                              |  25%  |                                                                      |>>>>>>>>>>>>>>>>                                              |  26%  |                                                                      |>>>>>>>>>>>>>>>>                                              |  27%  |                                                                      |>>>>>>>>>>>>>>>>>                                             |  27%  |                                                                      |>>>>>>>>>>>>>>>>>                                             |  28%  |                                                                      |>>>>>>>>>>>>>>>>>>                                            |  28%  |                                                                      |>>>>>>>>>>>>>>>>>>                                            |  29%  |                                                                      |>>>>>>>>>>>>>>>>>>                                            |  30%  |                                                                      |>>>>>>>>>>>>>>>>>>>                                           |  30%  |                                                                      |>>>>>>>>>>>>>>>>>>>                                           |  31%  |                                                                      |>>>>>>>>>>>>>>>>>>>>                                          |  31%  |                                                                      |>>>>>>>>>>>>>>>>>>>>                                          |  32%  |                                                                      |>>>>>>>>>>>>>>>>>>>>                                          |  33%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>                                         |  33%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>                                         |  34%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>                                         |  35%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>                                        |  35%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>                                        |  36%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>                                       |  36%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>                                       |  37%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>                                       |  38%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>                                      |  38%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>                                      |  39%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>                                      |  40%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>                                     |  40%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>                                     |  41%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>                                    |  41%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>                                    |  42%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>                                    |  43%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>                                   |  43%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>                                   |  44%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                  |  44%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                  |  45%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                  |  46%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                 |  46%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                 |  47%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                 |  48%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                |  48%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                |  49%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                               |  49%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                               |  50%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                               |  51%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                              |  51%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                              |  52%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                             |  52%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                             |  53%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                             |  54%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                            |  54%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                            |  55%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                            |  56%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                           |  56%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                           |  57%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                          |  57%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                          |  58%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                          |  59%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                         |  59%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                         |  60%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                        |  60%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                        |  61%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                        |  62%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                       |  62%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                       |  63%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                       |  64%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                      |  64%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                      |  65%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                     |  65%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                     |  66%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                     |  67%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                    |  67%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                    |  68%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                    |  69%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                   |  69%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                   |  70%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                  |  70%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                  |  71%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                  |  72%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                 |  72%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                 |  73%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                |  73%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                |  74%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                |  75%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>               |  75%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>               |  76%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>               |  77%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>              |  77%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>              |  78%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>             |  78%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>             |  79%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>             |  80%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>            |  80%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>            |  81%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>           |  81%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>           |  82%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>           |  83%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>          |  83%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>          |  84%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>          |  85%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>         |  85%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>         |  86%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>        |  86%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>        |  87%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>        |  88%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>       |  88%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>       |  89%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>       |  90%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>      |  90%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>      |  91%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>     |  91%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>     |  92%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>     |  93%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>    |  93%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>    |  94%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   |  94%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   |  95%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   |  96%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  |  96%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  |  97%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  |  98%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> |  98%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> |  99%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>|  99%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>| 100%
## 
## ************ TOTAL, DIRECT, AND INDIRECT EFFECTS OF X ON Y ************
## 
## Total effect of X on Y:
##      effect        se         t         p      LLCI      ULCI
##     -0.3893    0.2629   -1.4806    0.1418   -0.9109    0.1323
## 
## Direct effect of X on Y:
##      effect        se         t         p      LLCI      ULCI
##     -0.7214    0.2656   -2.7165    0.0078   -1.2483   -0.1945
## 
## Indirect effect(s) of X on Y:
##                       Effect    BootSE  BootLLCI  BootULCI
## customer_closeness    0.3321    0.1425    0.0985    0.6609
## 
## ******************** ANALYSIS NOTES AND ERRORS ************************ 
## 
## Level of confidence for all confidence intervals in output: 95
## 
## Number of bootstraps for percentile bootstrap confidence intervals: 5000
process(data = data_clean, y = "purchase_intention", x = "condition_dummy", m = "customer_trust", model = 4, total =1, seed = 123)
## 
## ********************* PROCESS for R Version 4.3.1 ********************* 
##  
##            Written by Andrew F. Hayes, Ph.D.  www.afhayes.com              
##    Documentation available in Hayes (2022). www.guilford.com/p/hayes3   
##  
## *********************************************************************** 
##                           
## Model : 4                 
##     Y : purchase_intention
##     X : condition_dummy   
##     M : customer_trust    
## 
## Sample size: 103
## 
## Custom seed: 123
## 
## 
## *********************************************************************** 
## Outcome Variable: customer_trust
## 
## Model Summary: 
##           R      R-sq       MSE         F       df1       df2         p
##      0.1466    0.0215    1.5832    2.2179    1.0000  101.0000    0.1395
## 
## Model: 
##                     coeff        se         t         p      LLCI      ULCI
## constant           4.2695    0.1835   23.2627    0.0000    3.9054    4.6336
## condition_dummy   -0.3707    0.2489   -1.4893    0.1395   -0.8645    0.1231
## 
## *********************************************************************** 
## Outcome Variable: purchase_intention
## 
## Model Summary: 
##           R      R-sq       MSE         F       df1       df2         p
##      0.5890    0.3469    1.1907   26.5539    2.0000  100.0000    0.0000
## 
## Model: 
##                     coeff        se         t         p      LLCI      ULCI
## constant           1.5617    0.4013    3.8911    0.0002    0.7654    2.3579
## condition_dummy   -0.1634    0.2182   -0.7490    0.4556   -0.5964    0.2695
## customer_trust     0.6093    0.0863    7.0608    0.0000    0.4381    0.7805
## 
## ************************ TOTAL EFFECT MODEL *************************** 
## Outcome Variable: purchase_intention
## 
## Model Summary: 
##           R      R-sq       MSE         F       df1       df2         p
##      0.1458    0.0212    1.7667    2.1922    1.0000  101.0000    0.1418
## 
## Model: 
##                     coeff        se         t         p      LLCI      ULCI
## constant           4.1631    0.1939   21.4725    0.0000    3.7785    4.5477
## condition_dummy   -0.3893    0.2629   -1.4806    0.1418   -0.9109    0.1323
## 
## *********************************************************************** 
## Bootstrapping progress:
##   |                                                                      |                                                              |   0%  |                                                                      |                                                              |   1%  |                                                                      |>                                                             |   1%  |                                                                      |>                                                             |   2%  |                                                                      |>>                                                            |   2%  |                                                                      |>>                                                            |   3%  |                                                                      |>>                                                            |   4%  |                                                                      |>>>                                                           |   4%  |                                                                      |>>>                                                           |   5%  |                                                                      |>>>                                                           |   6%  |                                                                      |>>>>                                                          |   6%  |                                                                      |>>>>                                                          |   7%  |                                                                      |>>>>>                                                         |   7%  |                                                                      |>>>>>                                                         |   8%  |                                                                      |>>>>>                                                         |   9%  |                                                                      |>>>>>>                                                        |   9%  |                                                                      |>>>>>>                                                        |  10%  |                                                                      |>>>>>>>                                                       |  10%  |                                                                      |>>>>>>>                                                       |  11%  |                                                                      |>>>>>>>                                                       |  12%  |                                                                      |>>>>>>>>                                                      |  12%  |                                                                      |>>>>>>>>                                                      |  13%  |                                                                      |>>>>>>>>                                                      |  14%  |                                                                      |>>>>>>>>>                                                     |  14%  |                                                                      |>>>>>>>>>                                                     |  15%  |                                                                      |>>>>>>>>>>                                                    |  15%  |                                                                      |>>>>>>>>>>                                                    |  16%  |                                                                      |>>>>>>>>>>                                                    |  17%  |                                                                      |>>>>>>>>>>>                                                   |  17%  |                                                                      |>>>>>>>>>>>                                                   |  18%  |                                                                      |>>>>>>>>>>>                                                   |  19%  |                                                                      |>>>>>>>>>>>>                                                  |  19%  |                                                                      |>>>>>>>>>>>>                                                  |  20%  |                                                                      |>>>>>>>>>>>>>                                                 |  20%  |                                                                      |>>>>>>>>>>>>>                                                 |  21%  |                                                                      |>>>>>>>>>>>>>                                                 |  22%  |                                                                      |>>>>>>>>>>>>>>                                                |  22%  |                                                                      |>>>>>>>>>>>>>>                                                |  23%  |                                                                      |>>>>>>>>>>>>>>>                                               |  23%  |                                                                      |>>>>>>>>>>>>>>>                                               |  24%  |                                                                      |>>>>>>>>>>>>>>>                                               |  25%  |                                                                      |>>>>>>>>>>>>>>>>                                              |  25%  |                                                                      |>>>>>>>>>>>>>>>>                                              |  26%  |                                                                      |>>>>>>>>>>>>>>>>                                              |  27%  |                                                                      |>>>>>>>>>>>>>>>>>                                             |  27%  |                                                                      |>>>>>>>>>>>>>>>>>                                             |  28%  |                                                                      |>>>>>>>>>>>>>>>>>>                                            |  28%  |                                                                      |>>>>>>>>>>>>>>>>>>                                            |  29%  |                                                                      |>>>>>>>>>>>>>>>>>>                                            |  30%  |                                                                      |>>>>>>>>>>>>>>>>>>>                                           |  30%  |                                                                      |>>>>>>>>>>>>>>>>>>>                                           |  31%  |                                                                      |>>>>>>>>>>>>>>>>>>>>                                          |  31%  |                                                                      |>>>>>>>>>>>>>>>>>>>>                                          |  32%  |                                                                      |>>>>>>>>>>>>>>>>>>>>                                          |  33%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>                                         |  33%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>                                         |  34%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>                                         |  35%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>                                        |  35%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>                                        |  36%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>                                       |  36%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>                                       |  37%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>                                       |  38%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>                                      |  38%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>                                      |  39%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>                                      |  40%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>                                     |  40%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>                                     |  41%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>                                    |  41%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>                                    |  42%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>                                    |  43%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>                                   |  43%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>                                   |  44%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                  |  44%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                  |  45%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                  |  46%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                 |  46%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                 |  47%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                 |  48%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                |  48%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                |  49%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                               |  49%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                               |  50%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                               |  51%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                              |  51%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                              |  52%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                             |  52%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                             |  53%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                             |  54%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                            |  54%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                            |  55%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                            |  56%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                           |  56%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                           |  57%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                          |  57%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                          |  58%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                          |  59%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                         |  59%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                         |  60%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                        |  60%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                        |  61%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                        |  62%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                       |  62%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                       |  63%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                       |  64%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                      |  64%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                      |  65%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                     |  65%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                     |  66%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                     |  67%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                    |  67%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                    |  68%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                    |  69%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                   |  69%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                   |  70%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                  |  70%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                  |  71%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                  |  72%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                 |  72%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                 |  73%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                |  73%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                |  74%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                |  75%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>               |  75%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>               |  76%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>               |  77%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>              |  77%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>              |  78%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>             |  78%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>             |  79%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>             |  80%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>            |  80%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>            |  81%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>           |  81%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>           |  82%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>           |  83%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>          |  83%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>          |  84%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>          |  85%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>         |  85%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>         |  86%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>        |  86%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>        |  87%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>        |  88%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>       |  88%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>       |  89%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>       |  90%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>      |  90%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>      |  91%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>     |  91%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>     |  92%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>     |  93%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>    |  93%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>    |  94%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   |  94%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   |  95%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   |  96%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  |  96%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  |  97%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  |  98%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> |  98%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> |  99%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>|  99%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>| 100%
## 
## ************ TOTAL, DIRECT, AND INDIRECT EFFECTS OF X ON Y ************
## 
## Total effect of X on Y:
##      effect        se         t         p      LLCI      ULCI
##     -0.3893    0.2629   -1.4806    0.1418   -0.9109    0.1323
## 
## Direct effect of X on Y:
##      effect        se         t         p      LLCI      ULCI
##     -0.1634    0.2182   -0.7490    0.4556   -0.5964    0.2695
## 
## Indirect effect(s) of X on Y:
##                   Effect    BootSE  BootLLCI  BootULCI
## customer_trust   -0.2259    0.1548   -0.5400    0.0802
## 
## ******************** ANALYSIS NOTES AND ERRORS ************************ 
## 
## Level of confidence for all confidence intervals in output: 95
## 
## Number of bootstraps for percentile bootstrap confidence intervals: 5000
process(data = data_clean, y = "purchase_intention", x = "condition_dummy", m = "customer_trust", w = "self_congruence", model = 7, center = 2, moments = 1, seed = 123)
## 
## ********************* PROCESS for R Version 4.3.1 ********************* 
##  
##            Written by Andrew F. Hayes, Ph.D.  www.afhayes.com              
##    Documentation available in Hayes (2022). www.guilford.com/p/hayes3   
##  
## *********************************************************************** 
##                           
## Model : 7                 
##     Y : purchase_intention
##     X : condition_dummy   
##     M : customer_trust    
##     W : self_congruence   
## 
## Sample size: 103
## 
## Custom seed: 123
## 
## 
## *********************************************************************** 
## Outcome Variable: customer_trust
## 
## Model Summary: 
##           R      R-sq       MSE         F       df1       df2         p
##      0.2698    0.0728    1.5305    2.5900    3.0000   99.0000    0.0571
## 
## Model: 
##                     coeff        se         t         p      LLCI      ULCI
## constant           4.3101    0.1829   23.5622    0.0000    3.9472    4.6731
## condition_dummy   -0.4543    0.2476   -1.8348    0.0695   -0.9456    0.0370
## self_congruence    0.1685    0.1242    1.3564    0.1781   -0.0780    0.4149
## Int_1              0.0436    0.1667    0.2617    0.7941   -0.2872    0.3744
## 
## Product terms key:
## Int_1  :  condition_dummy  x  self_congruence      
## 
## Test(s) of highest order unconditional interaction(s):
##       R2-chng         F       df1       df2         p
## X*W    0.0006    0.0685    1.0000   99.0000    0.7941
## 
## *********************************************************************** 
## Outcome Variable: purchase_intention
## 
## Model Summary: 
##           R      R-sq       MSE         F       df1       df2         p
##      0.5890    0.3469    1.1907   26.5539    2.0000  100.0000    0.0000
## 
## Model: 
##                     coeff        se         t         p      LLCI      ULCI
## constant           1.5617    0.4013    3.8911    0.0002    0.7654    2.3579
## condition_dummy   -0.1634    0.2182   -0.7490    0.4556   -0.5964    0.2695
## customer_trust     0.6093    0.0863    7.0608    0.0000    0.4381    0.7805
## 
## *********************************************************************** 
## Bootstrapping progress:
##   |                                                                      |                                                              |   0%  |                                                                      |                                                              |   1%  |                                                                      |>                                                             |   1%  |                                                                      |>                                                             |   2%  |                                                                      |>>                                                            |   2%  |                                                                      |>>                                                            |   3%  |                                                                      |>>                                                            |   4%  |                                                                      |>>>                                                           |   4%  |                                                                      |>>>                                                           |   5%  |                                                                      |>>>                                                           |   6%  |                                                                      |>>>>                                                          |   6%  |                                                                      |>>>>                                                          |   7%  |                                                                      |>>>>>                                                         |   7%  |                                                                      |>>>>>                                                         |   8%  |                                                                      |>>>>>                                                         |   9%  |                                                                      |>>>>>>                                                        |   9%  |                                                                      |>>>>>>                                                        |  10%  |                                                                      |>>>>>>>                                                       |  10%  |                                                                      |>>>>>>>                                                       |  11%  |                                                                      |>>>>>>>                                                       |  12%  |                                                                      |>>>>>>>>                                                      |  12%  |                                                                      |>>>>>>>>                                                      |  13%  |                                                                      |>>>>>>>>                                                      |  14%  |                                                                      |>>>>>>>>>                                                     |  14%  |                                                                      |>>>>>>>>>                                                     |  15%  |                                                                      |>>>>>>>>>>                                                    |  15%  |                                                                      |>>>>>>>>>>                                                    |  16%  |                                                                      |>>>>>>>>>>                                                    |  17%  |                                                                      |>>>>>>>>>>>                                                   |  17%  |                                                                      |>>>>>>>>>>>                                                   |  18%  |                                                                      |>>>>>>>>>>>                                                   |  19%  |                                                                      |>>>>>>>>>>>>                                                  |  19%  |                                                                      |>>>>>>>>>>>>                                                  |  20%  |                                                                      |>>>>>>>>>>>>>                                                 |  20%  |                                                                      |>>>>>>>>>>>>>                                                 |  21%  |                                                                      |>>>>>>>>>>>>>                                                 |  22%  |                                                                      |>>>>>>>>>>>>>>                                                |  22%  |                                                                      |>>>>>>>>>>>>>>                                                |  23%  |                                                                      |>>>>>>>>>>>>>>>                                               |  23%  |                                                                      |>>>>>>>>>>>>>>>                                               |  24%  |                                                                      |>>>>>>>>>>>>>>>                                               |  25%  |                                                                      |>>>>>>>>>>>>>>>>                                              |  25%  |                                                                      |>>>>>>>>>>>>>>>>                                              |  26%  |                                                                      |>>>>>>>>>>>>>>>>                                              |  27%  |                                                                      |>>>>>>>>>>>>>>>>>                                             |  27%  |                                                                      |>>>>>>>>>>>>>>>>>                                             |  28%  |                                                                      |>>>>>>>>>>>>>>>>>>                                            |  28%  |                                                                      |>>>>>>>>>>>>>>>>>>                                            |  29%  |                                                                      |>>>>>>>>>>>>>>>>>>                                            |  30%  |                                                                      |>>>>>>>>>>>>>>>>>>>                                           |  30%  |                                                                      |>>>>>>>>>>>>>>>>>>>                                           |  31%  |                                                                      |>>>>>>>>>>>>>>>>>>>>                                          |  31%  |                                                                      |>>>>>>>>>>>>>>>>>>>>                                          |  32%  |                                                                      |>>>>>>>>>>>>>>>>>>>>                                          |  33%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>                                         |  33%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>                                         |  34%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>                                         |  35%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>                                        |  35%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>                                        |  36%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>                                       |  36%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>                                       |  37%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>                                       |  38%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>                                      |  38%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>                                      |  39%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>                                      |  40%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>                                     |  40%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>                                     |  41%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>                                    |  41%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>                                    |  42%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>                                    |  43%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>                                   |  43%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>                                   |  44%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                  |  44%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                  |  45%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                  |  46%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                 |  46%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                 |  47%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                 |  48%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                |  48%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                |  49%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                               |  49%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                               |  50%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                               |  51%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                              |  51%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                              |  52%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                             |  52%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                             |  53%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                             |  54%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                            |  54%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                            |  55%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                            |  56%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                           |  56%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                           |  57%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                          |  57%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                          |  58%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                          |  59%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                         |  59%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                         |  60%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                        |  60%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                        |  61%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                        |  62%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                       |  62%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                       |  63%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                       |  64%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                      |  64%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                      |  65%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                     |  65%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                     |  66%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                     |  67%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                    |  67%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                    |  68%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                    |  69%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                   |  69%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                   |  70%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                  |  70%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                  |  71%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                  |  72%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                 |  72%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                 |  73%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                |  73%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                |  74%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                |  75%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>               |  75%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>               |  76%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>               |  77%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>              |  77%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>              |  78%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>             |  78%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>             |  79%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>             |  80%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>            |  80%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>            |  81%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>           |  81%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>           |  82%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>           |  83%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>          |  83%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>          |  84%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>          |  85%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>         |  85%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>         |  86%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>        |  86%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>        |  87%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>        |  88%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>       |  88%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>       |  89%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>       |  90%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>      |  90%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>      |  91%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>     |  91%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>     |  92%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>     |  93%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>    |  93%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>    |  94%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   |  94%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   |  95%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   |  96%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  |  96%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  |  97%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  |  98%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> |  98%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> |  99%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>|  99%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>| 100%
## 
## **************** DIRECT AND INDIRECT EFFECTS OF X ON Y ****************
## 
## Direct effect of X on Y:
##      effect        se         t         p      LLCI      ULCI
##     -0.1634    0.2182   -0.7490    0.4556   -0.5964    0.2695
## 
## Conditional indirect effects of X on Y:
## 
## INDIRECT EFFECT:
## 
## condition_dummy    ->    customer_trust    ->    purchase_intention
## 
##   self_congruence    Effect    BootSE  BootLLCI  BootULCI
##           -1.4950   -0.3165    0.2452   -0.8147    0.1591
##            0.0000   -0.2768    0.1557   -0.6043    0.0212
##            1.4950   -0.2371    0.2086   -0.6761    0.1559
## 
##      Index of moderated mediation:
##                     Index    BootSE  BootLLCI  BootULCI
## self_congruence    0.0266    0.1110   -0.1951    0.2434
## 
## ******************** ANALYSIS NOTES AND ERRORS ************************ 
## 
## Level of confidence for all confidence intervals in output: 95
## 
## Number of bootstraps for percentile bootstrap confidence intervals: 5000
## 
## W values in conditional tables are the mean and +/- SD from the mean.
##  
## NOTE: The following variables were mean centered prior to analysis: 
##          self_congruence
process(data = data_clean, y = "purchase_intention", x = "condition_dummy", m = c("customer_trust", "customer_closeness"), model = 4, total = 1, stand = 1, seed = 123)
## 
## ********************* PROCESS for R Version 4.3.1 ********************* 
##  
##            Written by Andrew F. Hayes, Ph.D.  www.afhayes.com              
##    Documentation available in Hayes (2022). www.guilford.com/p/hayes3   
##  
## *********************************************************************** 
##                           
## Model : 4                 
##     Y : purchase_intention
##     X : condition_dummy   
##    M1 : customer_trust    
##    M2 : customer_closeness
## 
## Sample size: 103
## 
## Custom seed: 123
## 
## 
## *********************************************************************** 
## Outcome Variable: customer_trust
## 
## Model Summary: 
##           R      R-sq       MSE         F       df1       df2         p
##      0.1466    0.0215    1.5832    2.2179    1.0000  101.0000    0.1395
## 
## Model: 
##                     coeff        se         t         p      LLCI      ULCI
## constant           4.2695    0.1835   23.2627    0.0000    3.9054    4.6336
## condition_dummy   -0.3707    0.2489   -1.4893    0.1395   -0.8645    0.1231
## 
## Standardized coefficients:
##                     coeff
## condition_dummy   -0.2929
## 
## *********************************************************************** 
## Outcome Variable: customer_closeness
## 
## Model Summary: 
##           R      R-sq       MSE         F       df1       df2         p
##      0.3495    0.1222    1.9999   14.0571    1.0000  101.0000    0.0003
## 
## Model: 
##                     coeff        se         t         p      LLCI      ULCI
## constant           2.8440    0.2063   13.7870    0.0000    2.4348    3.2532
## condition_dummy    1.0489    0.2798    3.7493    0.0003    0.4939    1.6038
## 
## Standardized coefficients:
##                     coeff
## condition_dummy    0.6983
## 
## *********************************************************************** 
## Outcome Variable: purchase_intention
## 
## Model Summary: 
##           R      R-sq       MSE         F       df1       df2         p
##      0.6061    0.3674    1.1650   19.1622    3.0000   99.0000    0.0000
## 
## Model: 
##                        coeff        se         t         p      LLCI      ULCI
## constant              1.3919    0.4082    3.4103    0.0009    0.5820    2.2018
## condition_dummy      -0.3368    0.2366   -1.4236    0.1577   -0.8061    0.1326
## customer_trust        0.5524    0.0911    6.0650    0.0000    0.3717    0.7331
## customer_closeness    0.1451    0.0810    1.7908    0.0764   -0.0157    0.3059
## 
## Standardized coefficients:
##                        coeff
## condition_dummy      -0.2519
## customer_trust        0.5230
## customer_closeness    0.1630
## 
## ************************ TOTAL EFFECT MODEL *************************** 
## Outcome Variable: purchase_intention
## 
## Model Summary: 
##           R      R-sq       MSE         F       df1       df2         p
##      0.1458    0.0212    1.7667    2.1922    1.0000  101.0000    0.1418
## 
## Model: 
##                     coeff        se         t         p      LLCI      ULCI
## constant           4.1631    0.1939   21.4725    0.0000    3.7785    4.5477
## condition_dummy   -0.3893    0.2629   -1.4806    0.1418   -0.9109    0.1323
## 
## Standardized coefficients:
##                     coeff
## condition_dummy   -0.2912
## 
## *********************************************************************** 
## Bootstrapping progress:
##   |                                                                      |                                                              |   0%  |                                                                      |                                                              |   1%  |                                                                      |>                                                             |   1%  |                                                                      |>                                                             |   2%  |                                                                      |>>                                                            |   2%  |                                                                      |>>                                                            |   3%  |                                                                      |>>                                                            |   4%  |                                                                      |>>>                                                           |   4%  |                                                                      |>>>                                                           |   5%  |                                                                      |>>>                                                           |   6%  |                                                                      |>>>>                                                          |   6%  |                                                                      |>>>>                                                          |   7%  |                                                                      |>>>>>                                                         |   7%  |                                                                      |>>>>>                                                         |   8%  |                                                                      |>>>>>                                                         |   9%  |                                                                      |>>>>>>                                                        |   9%  |                                                                      |>>>>>>                                                        |  10%  |                                                                      |>>>>>>>                                                       |  10%  |                                                                      |>>>>>>>                                                       |  11%  |                                                                      |>>>>>>>                                                       |  12%  |                                                                      |>>>>>>>>                                                      |  12%  |                                                                      |>>>>>>>>                                                      |  13%  |                                                                      |>>>>>>>>                                                      |  14%  |                                                                      |>>>>>>>>>                                                     |  14%  |                                                                      |>>>>>>>>>                                                     |  15%  |                                                                      |>>>>>>>>>>                                                    |  15%  |                                                                      |>>>>>>>>>>                                                    |  16%  |                                                                      |>>>>>>>>>>                                                    |  17%  |                                                                      |>>>>>>>>>>>                                                   |  17%  |                                                                      |>>>>>>>>>>>                                                   |  18%  |                                                                      |>>>>>>>>>>>                                                   |  19%  |                                                                      |>>>>>>>>>>>>                                                  |  19%  |                                                                      |>>>>>>>>>>>>                                                  |  20%  |                                                                      |>>>>>>>>>>>>>                                                 |  20%  |                                                                      |>>>>>>>>>>>>>                                                 |  21%  |                                                                      |>>>>>>>>>>>>>                                                 |  22%  |                                                                      |>>>>>>>>>>>>>>                                                |  22%  |                                                                      |>>>>>>>>>>>>>>                                                |  23%  |                                                                      |>>>>>>>>>>>>>>>                                               |  23%  |                                                                      |>>>>>>>>>>>>>>>                                               |  24%  |                                                                      |>>>>>>>>>>>>>>>                                               |  25%  |                                                                      |>>>>>>>>>>>>>>>>                                              |  25%  |                                                                      |>>>>>>>>>>>>>>>>                                              |  26%  |                                                                      |>>>>>>>>>>>>>>>>                                              |  27%  |                                                                      |>>>>>>>>>>>>>>>>>                                             |  27%  |                                                                      |>>>>>>>>>>>>>>>>>                                             |  28%  |                                                                      |>>>>>>>>>>>>>>>>>>                                            |  28%  |                                                                      |>>>>>>>>>>>>>>>>>>                                            |  29%  |                                                                      |>>>>>>>>>>>>>>>>>>                                            |  30%  |                                                                      |>>>>>>>>>>>>>>>>>>>                                           |  30%  |                                                                      |>>>>>>>>>>>>>>>>>>>                                           |  31%  |                                                                      |>>>>>>>>>>>>>>>>>>>>                                          |  31%  |                                                                      |>>>>>>>>>>>>>>>>>>>>                                          |  32%  |                                                                      |>>>>>>>>>>>>>>>>>>>>                                          |  33%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>                                         |  33%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>                                         |  34%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>                                         |  35%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>                                        |  35%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>                                        |  36%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>                                       |  36%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>                                       |  37%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>                                       |  38%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>                                      |  38%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>                                      |  39%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>                                      |  40%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>                                     |  40%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>                                     |  41%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>                                    |  41%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>                                    |  42%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>                                    |  43%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>                                   |  43%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>                                   |  44%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                  |  44%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                  |  45%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                  |  46%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                 |  46%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                 |  47%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                 |  48%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                |  48%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                                |  49%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                               |  49%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                               |  50%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                               |  51%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                              |  51%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                              |  52%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                             |  52%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                             |  53%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                             |  54%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                            |  54%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                            |  55%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                            |  56%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                           |  56%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                           |  57%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                          |  57%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                          |  58%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                          |  59%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                         |  59%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                         |  60%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                        |  60%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                        |  61%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                        |  62%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                       |  62%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                       |  63%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                       |  64%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                      |  64%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                      |  65%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                     |  65%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                     |  66%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                     |  67%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                    |  67%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                    |  68%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                    |  69%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                   |  69%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                   |  70%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                  |  70%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                  |  71%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                  |  72%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                 |  72%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                 |  73%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                |  73%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                |  74%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                |  75%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>               |  75%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>               |  76%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>               |  77%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>              |  77%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>              |  78%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>             |  78%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>             |  79%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>             |  80%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>            |  80%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>            |  81%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>           |  81%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>           |  82%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>           |  83%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>          |  83%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>          |  84%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>          |  85%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>         |  85%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>         |  86%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>        |  86%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>        |  87%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>        |  88%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>       |  88%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>       |  89%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>       |  90%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>      |  90%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>      |  91%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>     |  91%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>     |  92%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>     |  93%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>    |  93%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>    |  94%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   |  94%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   |  95%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   |  96%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  |  96%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  |  97%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  |  98%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> |  98%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> |  99%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>|  99%  |                                                                      |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>| 100%
## 
## ************ TOTAL, DIRECT, AND INDIRECT EFFECTS OF X ON Y ************
## 
## Total effect of X on Y:
##      effect        se         t         p      LLCI      ULCI      c_ps
##     -0.3893    0.2629   -1.4806    0.1418   -0.9109    0.1323   -0.2912
## 
## Direct effect of X on Y:
##      effect        se         t         p      LLCI      ULCI     c'_ps
##     -0.3368    0.2366   -1.4236    0.1577   -0.8061    0.1326   -0.2519
## 
## Indirect effect(s) of X on Y:
##                       Effect    BootSE  BootLLCI  BootULCI
## TOTAL                -0.0526    0.1938   -0.4279    0.3517
## customer_trust       -0.2048    0.1422   -0.4997    0.0716
## customer_closeness    0.1522    0.1008   -0.0099    0.3890
## 
## Partially standardized indirect effect(s) of X on Y:
##                       Effect    BootSE  BootLLCI  BootULCI
## TOTAL                -0.0393    0.1461   -0.3253    0.2593
## customer_trust       -0.1532    0.1074   -0.3724    0.0530
## customer_closeness    0.1139    0.0750   -0.0076    0.2882
## 
## ******************** ANALYSIS NOTES AND ERRORS ************************ 
## 
## Level of confidence for all confidence intervals in output: 95
## 
## Number of bootstraps for percentile bootstrap confidence intervals: 5000
## 
## NOTE: Standardized coefficients for dichotomous or multicategorical X are
##       in partially standardized form.
names(data_clean)
##  [1] "Q2_1"               "Q3_1"               "Q3_2"              
##  [4] "Q3_3"               "Q4_1"               "Q4_2"              
##  [7] "Q4_3"               "Q5_1"               "Q5_2"              
## [10] "Q6_1"               "Q6_2"               "Q6_3"              
## [13] "Q7"                 "Q8"                 "Q9_1"              
## [16] "FL_24_DO"           "age_numeric"        "condition"         
## [19] "customer_trust"     "customer_closeness" "self_congruence"   
## [22] "purchase_intention" "gender"             "age"               
## [25] "frequency_of_usage" "condition_dummy"