How do the degree and transparency of AI use in performance evaluations affect employees’ perceptions of organisational trust and procedural fairness?

Data Analysis Process

Setting Up The Workspace

#install.packages("tidyverse")  
#install.packages("labelled")

library(tidyverse)  
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.2     ✔ tibble    3.3.0
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.0.4     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(readxl)  
library(labelled)

Loading, Inspecting and Storing the Header Descriptions

AIPerf <- read_excel("/Users/christina/Desktop/Dissertation/Dissertation Survey Documents/AIPerf.xlsx", sheet = "RawData")
#glimpse(AIPerf)
#head(AIPerf)

# 1. Extract descriptions (row 1) and remove them
AIPerf_descriptions <- as.character(AIPerf[1, ])  
AIPerf <- AIPerf[-1, ]

# 2. Label assignment 
AIPerf <- set_variable_labels(AIPerf, .labels = AIPerf_descriptions)

# 3. See all labels
#var_label(AIPerf)  

AIPerf <- AIPerf %>% 
  
  mutate(across(where(is.character), ~ type.convert(.x, as.is = FALSE)))

#head(AIPerf) 

Adding Exclusion Columns

AIPerf_Ex <- AIPerf %>%
  mutate(
    excluded_complete = (Progress < 80),
    excluded_consent = (`Consent Choices` != "1,2,3"),
    excluded_aiKnowledge = (AI_Knowledge != 3),
    excluded_attention = (Attention != 2),
    excluded_age = if_else(is.na(Age), FALSE, Age == 1),
    exclude = excluded_complete | 
              excluded_consent | 
              excluded_aiKnowledge | 
              excluded_attention | 
              excluded_age
  )
#checking how many rows have been excluded
count_exclude <- sum(AIPerf_Ex$exclude==TRUE, na.rm=TRUE)
print(paste("The number of participants that have been excluded for analysis:", count_exclude))
## [1] "The number of participants that have been excluded for analysis: 72"
print(paste("The number of participants remaining:", (256-count_exclude)))
## [1] "The number of participants remaining: 184"

Transforming The Cleaned Data: Renaming, Recoding

#renaming GAAIP Columns for readability
AIPerf_T <- AIPerf_Ex %>%
  filter(exclude != TRUE) %>%
  select(-contains("exclude")) %>%
  rename(
    AIP_N1 = AI_Psych_1,
    AIP_P1 = AI_Psych_2,
    AIP_N2 = AI_Psych_3,
    AIP_P2 = AI_Psych_4,
    AIP_N3 = AI_Psych_5,
    AIP_P3 = AI_Psych_6,
    AIP_N4 = AI_Psych_7,
    AIP_N5 = AI_Socio_1,
    AIP_P4 = AI_Socio_2,
    AIP_N6 = AI_Socio_3,
    AIP_P5 = AI_Socio_4,
    AIP_N7 = AI_Socio_5,
    AIP_P6 = AI_Cap_1,
    AIP_P7 = AI_Cap_2,
    AIP_N8 = AI_Cap_3,
    AIP_P8 = AI_Cap_4,
    AIP_P9 = AI_Cap_5,
    scenarios = FL_11_DO
  ) %>%
  
  #Transforms AIP Scales to 1-5 instead of 8-12
  mutate(
    AIP_N1 = AIP_N1-7, 
    AIP_P1 = AIP_P1-7,
    AIP_N2 = AIP_N2-7,
    AIP_P2 = AIP_P2-7,
    AIP_N3 = AIP_N3-7,
    AIP_P3 = AIP_P3-7,
    AIP_N4 = AIP_N4-7,
    AIP_N5 = AIP_N5-7,
    AIP_P4 = AIP_P4-7,
    AIP_N6 = AIP_N6-7,
    AIP_P5 = AIP_P5-7,
    AIP_N7 = AIP_N7-7,
    AIP_P6 = AIP_P6-7,
    AIP_P7 = AIP_P7-7,
    AIP_N8 = AIP_N8-7,
    AIP_P8 = AIP_P8-7,
    AIP_P9 = AIP_P9-7,
    
    # Scenario transformations
    scenarios = case_when(
      scenarios == "AI_Assist(M)" ~ "AI_Assist(A)",
      scenarios == "AI_Decides(M)" ~ "AI_Decides(A)",
      TRUE ~ scenarios
    ),
    
    Sector = case_when(
      Sector == 4 ~ 2,
      Sector == 5 ~ 3,
      Sector == 6 ~ 4,
      Sector == 7 ~ 5,
      Sector == 8 ~ 6,
      Sector == 9 ~ 7,
      Sector == 10 ~ 8,
      Sector == 11~ 9,
      Sector == 12 ~ 10,
      Sector == 13 ~ 11,
      Sector == 14 ~ 12,
      Sector == 15 ~ 13,
      Sector == 16 ~ 14,
      Sector == 17 ~ 15,
      Sector == 18 ~ 16
      ))

#Replaced missing data for respondents that marked 'None of the Above' in the `Review Check`
AIPerf_T$`Review Check` <- replace(AIPerf_T$`Review Check`, is.na(AIPerf_T$`Review Check`), 5)

AIPerf_T
## # A tibble: 184 × 63
##    StartDate EndDate Status IPAddress   Progress Duration (in seconds…¹ Finished
##        <dbl>   <dbl>  <int> <fct>          <int>                  <int>    <int>
##  1    45768.  45768.      0 31.94.56.39      100                    277        1
##  2    45768.  45768.      0 104.28.40.…      100                    318        1
##  3    45768.  45768.      0 109.175.16…      100                    249        1
##  4    45768.  45768.      0 104.28.86.…      100                    547        1
##  5    45768.  45768.      0 45.148.12.…      100                    344        1
##  6    45769.  45769.      0 172.225.23…      100                    366        1
##  7    45769.  45769.      0 104.28.32.…      100                    841        1
##  8    45769.  45769.      0 187.136.16…      100                    584        1
##  9    45769.  45769.      0 94.119.182…      100                    310        1
## 10    45769.  45769.      0 109.175.19…      100                    494        1
## # ℹ 174 more rows
## # ℹ abbreviated name: ¹​`Duration (in seconds)`
## # ℹ 56 more variables: RecordedDate <dbl>, ResponseId <fct>,
## #   RecipientLastName <lgl>, RecipientFirstName <lgl>, RecipientEmail <lgl>,
## #   ExternalReference <lgl>, LocationLatitude <dbl>, LocationLongitude <dbl>,
## #   DistributionChannel <fct>, UserLanguage <fct>, Q_RecaptchaScore <dbl>,
## #   `Consent Choices` <fct>, AI_Knowledge <int>, AI_Personal <int>, …

Transforming The Cleaned Data: Updating Name and Classification Scenario Columns

#Turning relevant variables into factors to be used in analysis

AIPerf_T$AI_Personal <- factor(AIPerf_T$AI_Personal,
                           levels = 1:5,
                           labels = c("I have no practical experience using AI in my personal life.","I have come into contact with AI once in my personal life.","I have already dealt with AI several times in my personal life.","I regularly come into contact with AI in my personal life.","I deal with AI almost daily in my personal life."))

AIPerf_T$AI_Work <- factor(AIPerf_T$AI_Work,
                           levels = 1:5,
                           labels = c("I have no practical experience using AI at work.","I have come into contact with AI once at work.","I have already dealt with AI several times at work.","I regularly come into contact with AI at work.","I deal with AI almost daily at work." ))
                       

AIPerf_T$Age <- factor(AIPerf_T$Age,
                           levels = 1:8,
                           labels = c("Under 18", "18-24", "25-34","35-44", "45-54", "55-64", "65+", "Unknown"))

AIPerf_T$Gender <- factor(AIPerf_T$Gender,
                           levels = 1:3,
                           labels = c("Male", "Female", "Non-binary"))

AIPerf_T$Work_Exp <- factor(AIPerf_T$Work_Exp,
                           levels = 1:5,
                           labels = c("None at all", "Less than 6 months", "1-4 years", "5-9 years", "More than 10 years"))

AIPerf_T$`AI Check` <- factor(AIPerf_T$`AI Check`,
                           levels = 1:3,
                           labels = c("Yes", "I'm not sure", "No"))

AIPerf_T$`Review Check` <- factor(AIPerf_T$`Review Check`,
                           levels = 1:5,
                           labels = c("The policy itself","The use of Artificial Intelligence in the 360 feedback process","Both of the above","I don't remember","None of the above"))

AIPerf_T$Sector <- factor(AIPerf_T$Sector,
                           levels = 1:16,
                           labels = c("Accommodation activities", "Arts, entertainment and recreation", "Construction and real estate activities", "Disaster risk management", "Education", "Energy", "Environmental protection and restoration activities", "Financial and insurance activities", "Forestry", "Human health and social work activities", "Information and communication", "Manufacturing", "Professional, scientific and technical activities", "Services", "Transport", "Water supply, sewerage, waste management and remediation"))

AIPerf_T$Location <- factor(AIPerf_T$Location,
                           levels = 1:6,
                           labels = c("United States of America","United Kingdom of Great Britain and Northern Ireland", "Other - Europe, Middle East, and Africa", "Other - Asia-Pacific", "Other - North America", "Other - Latin America"))

AIPerf_T$scenarios <- factor(AIPerf_T$scenarios,
                           levels = c("Control", "AI_Assist(A)", "AI_Decides(A)", "AI_Assist", "AI_Decides"),
                           labels = c("Control", "AI_Assist(A)", "AI_Decides(A)", "AI_Assist", "AI_Decides"))
  
head(AIPerf_T)
## # A tibble: 6 × 63
##   StartDate EndDate Status IPAddress    Progress Duration (in seconds…¹ Finished
##       <dbl>   <dbl>  <int> <fct>           <int>                  <int>    <int>
## 1    45768.  45768.      0 31.94.56.39       100                    277        1
## 2    45768.  45768.      0 104.28.40.1…      100                    318        1
## 3    45768.  45768.      0 109.175.167…      100                    249        1
## 4    45768.  45768.      0 104.28.86.95      100                    547        1
## 5    45768.  45768.      0 45.148.12.2…      100                    344        1
## 6    45769.  45769.      0 172.225.236…      100                    366        1
## # ℹ abbreviated name: ¹​`Duration (in seconds)`
## # ℹ 56 more variables: RecordedDate <dbl>, ResponseId <fct>,
## #   RecipientLastName <lgl>, RecipientFirstName <lgl>, RecipientEmail <lgl>,
## #   ExternalReference <lgl>, LocationLatitude <dbl>, LocationLongitude <dbl>,
## #   DistributionChannel <fct>, UserLanguage <fct>, Q_RecaptchaScore <dbl>,
## #   `Consent Choices` <fct>, AI_Knowledge <int>, AI_Personal <fct>,
## #   AI_Work <fct>, AI_Gen <fct>, AIP_N1 <dbl>, AIP_P1 <dbl>, AIP_N2 <dbl>, …

Descriptive Statistics

#install.packages("gtsummary")
library(gtsummary)

# Descriptive Stats: Categorical Variables
Cat_Table <- AIPerf_T %>%
  select(scenarios, AI_Personal, AI_Work, Gender, Age, Work_Exp, Sector, Location) %>%
  tbl_summary(
    statistic = list(
      all_categorical() ~ "{n} ({p}%)"
    ))

Cat_Table
Characteristic N = 1841
scenarios
    Control 42 (23%)
    AI_Assist(A) 35 (19%)
    AI_Decides(A) 34 (18%)
    AI_Assist 38 (21%)
    AI_Decides 35 (19%)
AI_Personal
    I have no practical experience using AI in my personal life. 4 (2.2%)
    I have come into contact with AI once in my personal life. 7 (3.8%)
    I have already dealt with AI several times in my personal life. 45 (24%)
    I regularly come into contact with AI in my personal life. 69 (38%)
    I deal with AI almost daily in my personal life. 59 (32%)
AI_Work
    I have no practical experience using AI at work. 35 (19%)
    I have come into contact with AI once at work. 10 (5.4%)
    I have already dealt with AI several times at work. 52 (28%)
    I regularly come into contact with AI at work. 54 (29%)
    I deal with AI almost daily at work. 33 (18%)
Gender
    Male 70 (38%)
    Female 109 (60%)
    Non-binary 3 (1.6%)
    Unknown 2
Age
    Under 18 0 (0%)
    18-24 59 (32%)
    25-34 79 (43%)
    35-44 30 (16%)
    45-54 10 (5.5%)
    55-64 4 (2.2%)
    65+ 1 (0.5%)
    Unknown 0 (0%)
    Unknown 1
Work_Exp
    None at all 14 (7.7%)
    Less than 6 months 22 (12%)
    1-4 years 67 (37%)
    5-9 years 30 (16%)
    More than 10 years 50 (27%)
    Unknown 1
Sector
    Accommodation activities 0 (0%)
    Arts, entertainment and recreation 13 (7.1%)
    Construction and real estate activities 7 (3.8%)
    Disaster risk management 1 (0.5%)
    Education 49 (27%)
    Energy 3 (1.6%)
    Environmental protection and restoration activities 1 (0.5%)
    Financial and insurance activities 14 (7.7%)
    Forestry 0 (0%)
    Human health and social work activities 27 (15%)
    Information and communication 22 (12%)
    Manufacturing 5 (2.7%)
    Professional, scientific and technical activities 15 (8.2%)
    Services 22 (12%)
    Transport 2 (1.1%)
    Water supply, sewerage, waste management and remediation 1 (0.5%)
    Unknown 2
Location
    United States of America 36 (20%)
    United Kingdom of Great Britain and Northern Ireland 71 (39%)
    Other - Europe, Middle East, and Africa 41 (22%)
    Other - Asia-Pacific 31 (17%)
    Other - North America 3 (1.6%)
    Other - Latin America 1 (0.5%)
    Unknown 1
1 n (%)
Cat_Table_Scenario <- AIPerf_T %>%
  select(scenarios, AI_Personal, AI_Work, Gender, Age, Work_Exp, Sector, Location) %>%
  tbl_summary(
    by=scenarios,
    statistic = list(
      all_categorical() ~ "{n} ({p}%)"
    ))

Cat_Table_Scenario
Characteristic Control
N = 42
1
AI_Assist(A)
N = 35
1
AI_Decides(A)
N = 34
1
AI_Assist
N = 38
1
AI_Decides
N = 35
1
AI_Personal




    I have no practical experience using AI in my personal life. 1 (2.4%) 0 (0%) 3 (8.8%) 0 (0%) 0 (0%)
    I have come into contact with AI once in my personal life. 2 (4.8%) 2 (5.7%) 1 (2.9%) 0 (0%) 2 (5.7%)
    I have already dealt with AI several times in my personal life. 8 (19%) 6 (17%) 12 (35%) 11 (29%) 8 (23%)
    I regularly come into contact with AI in my personal life. 17 (40%) 19 (54%) 10 (29%) 12 (32%) 11 (31%)
    I deal with AI almost daily in my personal life. 14 (33%) 8 (23%) 8 (24%) 15 (39%) 14 (40%)
AI_Work




    I have no practical experience using AI at work. 6 (14%) 7 (20%) 7 (21%) 6 (16%) 9 (26%)
    I have come into contact with AI once at work. 2 (4.8%) 4 (11%) 4 (12%) 0 (0%) 0 (0%)
    I have already dealt with AI several times at work. 11 (26%) 8 (23%) 10 (29%) 10 (26%) 13 (37%)
    I regularly come into contact with AI at work. 15 (36%) 12 (34%) 8 (24%) 13 (34%) 6 (17%)
    I deal with AI almost daily at work. 8 (19%) 4 (11%) 5 (15%) 9 (24%) 7 (20%)
Gender




    Male 23 (56%) 11 (32%) 13 (38%) 10 (26%) 13 (37%)
    Female 18 (44%) 23 (68%) 19 (56%) 28 (74%) 21 (60%)
    Non-binary 0 (0%) 0 (0%) 2 (5.9%) 0 (0%) 1 (2.9%)
    Unknown 1 1 0 0 0
Age




    Under 18 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    18-24 12 (29%) 14 (41%) 8 (24%) 12 (32%) 13 (37%)
    25-34 18 (43%) 11 (32%) 18 (53%) 17 (45%) 15 (43%)
    35-44 7 (17%) 9 (26%) 6 (18%) 3 (7.9%) 5 (14%)
    45-54 3 (7.1%) 0 (0%) 1 (2.9%) 4 (11%) 2 (5.7%)
    55-64 2 (4.8%) 0 (0%) 0 (0%) 2 (5.3%) 0 (0%)
    65+ 0 (0%) 0 (0%) 1 (2.9%) 0 (0%) 0 (0%)
    Unknown 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    Unknown 0 1 0 0 0
Work_Exp




    None at all 7 (17%) 2 (5.9%) 0 (0%) 1 (2.6%) 4 (11%)
    Less than 6 months 2 (4.8%) 5 (15%) 4 (12%) 6 (16%) 5 (14%)
    1-4 years 14 (33%) 14 (41%) 14 (41%) 14 (37%) 11 (31%)
    5-9 years 7 (17%) 3 (8.8%) 5 (15%) 5 (13%) 10 (29%)
    More than 10 years 12 (29%) 10 (29%) 11 (32%) 12 (32%) 5 (14%)
    Unknown 0 1 0 0 0
Sector




    Accommodation activities 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    Arts, entertainment and recreation 4 (9.5%) 2 (5.9%) 2 (6.1%) 1 (2.6%) 4 (11%)
    Construction and real estate activities 0 (0%) 3 (8.8%) 2 (6.1%) 1 (2.6%) 1 (2.9%)
    Disaster risk management 0 (0%) 0 (0%) 1 (3.0%) 0 (0%) 0 (0%)
    Education 13 (31%) 9 (26%) 8 (24%) 10 (26%) 9 (26%)
    Energy 0 (0%) 0 (0%) 1 (3.0%) 1 (2.6%) 1 (2.9%)
    Environmental protection and restoration activities 0 (0%) 0 (0%) 0 (0%) 1 (2.6%) 0 (0%)
    Financial and insurance activities 3 (7.1%) 4 (12%) 1 (3.0%) 2 (5.3%) 4 (11%)
    Forestry 0 (0%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    Human health and social work activities 4 (9.5%) 6 (18%) 8 (24%) 4 (11%) 5 (14%)
    Information and communication 6 (14%) 0 (0%) 4 (12%) 8 (21%) 4 (11%)
    Manufacturing 1 (2.4%) 2 (5.9%) 1 (3.0%) 1 (2.6%) 0 (0%)
    Professional, scientific and technical activities 6 (14%) 1 (2.9%) 3 (9.1%) 5 (13%) 0 (0%)
    Services 4 (9.5%) 7 (21%) 2 (6.1%) 2 (5.3%) 7 (20%)
    Transport 0 (0%) 0 (0%) 0 (0%) 2 (5.3%) 0 (0%)
    Water supply, sewerage, waste management and remediation 1 (2.4%) 0 (0%) 0 (0%) 0 (0%) 0 (0%)
    Unknown 0 1 1 0 0
Location




    United States of America 4 (9.5%) 4 (12%) 7 (21%) 14 (37%) 7 (20%)
    United Kingdom of Great Britain and Northern Ireland 20 (48%) 16 (47%) 14 (41%) 10 (26%) 11 (31%)
    Other - Europe, Middle East, and Africa 10 (24%) 7 (21%) 6 (18%) 11 (29%) 7 (20%)
    Other - Asia-Pacific 8 (19%) 5 (15%) 7 (21%) 2 (5.3%) 9 (26%)
    Other - North America 0 (0%) 2 (5.9%) 0 (0%) 1 (2.6%) 0 (0%)
    Other - Latin America 0 (0%) 0 (0%) 0 (0%) 0 (0%) 1 (2.9%)
    Unknown 0 1 0 0 0
1 n (%)
library(psych)
## 
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
# Descriptive Stats: Continuous Variables
AIPerf_T <- AIPerf_T %>%
  mutate(AIP_P_Avg = rowMeans(.[grep("AIP_P[1-9]$", names(.))]),
         AIP_N_Avg = rowMeans(.[grep("AIP_N[1-8]$", names(.))]),
         PF_Avg = rowMeans(.[grep("PF_[1-6]$", names(.))]),
         OT_Avg = rowMeans(.[grep("OT_[1-5]$", names(.))]))



Cont_Table <-AIPerf_T %>%
select("AIP_P_Avg", "AIP_N_Avg", "PF_Avg", "OT_Avg", "Immersion") %>%
describe()

Cont_vars <- AIPerf_T %>%
  select(scenarios, AIP_P_Avg,AIP_N_Avg, PF_Avg, OT_Avg)

Cont_Table_Scenario <- describeBy(
  Cont_vars[, -1],  
  group = Cont_vars$scenarios, 
  mat = TRUE,
  digits = 2
)

Cont_Table_Scenario
##            item        group1 vars  n mean   sd median trimmed  mad  min  max
## AIP_P_Avg1    1       Control    1 42 3.49 0.72   3.61    3.54 0.58 1.00 5.00
## AIP_P_Avg2    2  AI_Assist(A)    1 35 3.53 0.76   3.67    3.57 0.49 1.44 5.00
## AIP_P_Avg3    3 AI_Decides(A)    1 34 3.32 0.74   3.28    3.33 0.74 1.56 5.00
## AIP_P_Avg4    4     AI_Assist    1 38 3.40 0.82   3.67    3.51 0.49 1.00 4.44
## AIP_P_Avg5    5    AI_Decides    1 35 3.53 0.80   3.56    3.59 0.99 1.22 4.56
## AIP_N_Avg1    6       Control    2 42 3.15 0.69   3.00    3.16 0.65 1.62 4.50
## AIP_N_Avg2    7  AI_Assist(A)    2 35 3.01 0.77   3.00    3.01 0.74 1.38 4.38
## AIP_N_Avg3    8 AI_Decides(A)    2 34 3.25 0.74   3.38    3.27 0.83 1.88 4.50
## AIP_N_Avg4    9     AI_Assist    2 38 3.29 0.65   3.19    3.28 0.65 1.88 4.62
## AIP_N_Avg5   10    AI_Decides    2 35 3.13 0.89   3.25    3.16 0.93 1.25 4.88
## PF_Avg1      11       Control    3 42 3.26 0.73   3.25    3.29 0.86 1.17 4.67
## PF_Avg2      12  AI_Assist(A)    3 35 3.32 0.55   3.33    3.33 0.74 2.33 4.17
## PF_Avg3      13 AI_Decides(A)    3 34 3.04 0.67   3.08    3.06 0.49 1.33 4.67
## PF_Avg4      14     AI_Assist    3 38 3.06 0.66   3.25    3.08 0.37 1.50 4.17
## PF_Avg5      15    AI_Decides    3 35 3.02 0.55   3.00    3.02 0.49 1.50 4.17
## OT_Avg1      16       Control    4 42 3.33 0.71   3.30    3.34 0.44 1.00 5.00
## OT_Avg2      17  AI_Assist(A)    4 35 3.51 0.63   3.60    3.50 0.59 2.20 5.00
## OT_Avg3      18 AI_Decides(A)    4 34 3.20 0.79   3.40    3.28 0.59 1.00 4.60
## OT_Avg4      19     AI_Assist    4 38 3.17 0.71   3.20    3.24 0.59 1.40 4.20
## OT_Avg5      20    AI_Decides    4 35 3.17 0.66   3.00    3.14 0.59 1.20 5.00
##            range  skew kurtosis   se
## AIP_P_Avg1  4.00 -0.90     1.84 0.11
## AIP_P_Avg2  3.56 -0.58     0.55 0.13
## AIP_P_Avg3  3.44 -0.08    -0.14 0.13
## AIP_P_Avg4  3.44 -1.37     1.20 0.13
## AIP_P_Avg5  3.33 -0.66    -0.04 0.14
## AIP_N_Avg1  2.88  0.02    -0.78 0.11
## AIP_N_Avg2  3.00 -0.06    -0.74 0.13
## AIP_N_Avg3  2.62 -0.24    -1.22 0.13
## AIP_N_Avg4  2.75  0.18    -0.73 0.10
## AIP_N_Avg5  3.62 -0.34    -0.76 0.15
## PF_Avg1     3.50 -0.45    -0.08 0.11
## PF_Avg2     1.83 -0.07    -1.32 0.09
## PF_Avg3     3.33 -0.29     0.34 0.11
## PF_Avg4     2.67 -0.54    -0.52 0.11
## PF_Avg5     2.67 -0.18     0.21 0.09
## OT_Avg1     4.00 -0.42     1.54 0.11
## OT_Avg2     2.80  0.16    -0.17 0.11
## OT_Avg3     3.60 -0.81     0.41 0.14
## OT_Avg4     2.80 -0.82     0.14 0.12
## OT_Avg5     3.80  0.18     1.88 0.11

Pre-Hypothesis Testing Preparations

Calculating Crohnback’s Alpha

alphas <- list(
  AIP_P = alpha(AIPerf_T[grep("AIP_P[1-9]$", names(AIPerf_T))]),
  AIP_N = alpha(AIPerf_T[grep("AIP_N[1-8]$", names(AIPerf_T))]),
  PF    = alpha(AIPerf_T[grep("PF_[1-6]$", names(AIPerf_T))]),
  OT    = alpha(AIPerf_T[grep("OT_[1-5]$", names(AIPerf_T))])
)  

sapply(alphas, function(x) round(x$total$raw_alpha, 2))
## AIP_P AIP_N    PF    OT 
##  0.85  0.78  0.72  0.87

Correlations

#install.packages("Hmisc")
library(Hmisc)
## 
## Attaching package: 'Hmisc'
## The following object is masked from 'package:psych':
## 
##     describe
## The following objects are masked from 'package:dplyr':
## 
##     src, summarize
## The following objects are masked from 'package:base':
## 
##     format.pval, units
#install.packages("ggcorrplot")
library(ggcorrplot)

AIPerf_Corrs <-rcorr(as.matrix(AIPerf_T[,c("AIP_P_Avg", "AIP_N_Avg", "PF_Avg", "OT_Avg")]))

print("Correlation matrix:")
## [1] "Correlation matrix:"
print(AIPerf_Corrs$r)
##            AIP_P_Avg  AIP_N_Avg     PF_Avg     OT_Avg
## AIP_P_Avg  1.0000000 -0.3769751  0.3127056  0.3932754
## AIP_N_Avg -0.3769751  1.0000000 -0.1668324 -0.3210728
## PF_Avg     0.3127056 -0.1668324  1.0000000  0.5934860
## OT_Avg     0.3932754 -0.3210728  0.5934860  1.0000000
print("P-values:")
## [1] "P-values:"
print(AIPerf_Corrs$P)
##                  AIP_P_Avg       AIP_N_Avg        PF_Avg           OT_Avg
## AIP_P_Avg               NA 0.0000001330508 0.00001548183 0.00000003343059
## AIP_N_Avg 0.00000013305075              NA 0.02360551404 0.00000883880295
## PF_Avg    0.00001548182528 0.0236055140369            NA 0.00000000000000
## OT_Avg    0.00000003343059 0.0000088388029 0.00000000000               NA
#install.packages("apaTables")
library(apaTables)

apa.cor.table(AIPerf_T[, c("AIP_P_Avg", "AIP_N_Avg", "PF_Avg", "OT_Avg")],
              filename = "Correlation_Table.doc")
## 
## 
## Means, standard deviations, and correlations with confidence intervals
##  
## 
##   Variable     M    SD   1            2            3         
##   1. AIP_P_Avg 3.46 0.76                                     
##                                                              
##   2. AIP_N_Avg 3.17 0.75 -.38**                              
##                          [-.49, -.25]                        
##                                                              
##   3. PF_Avg    3.14 0.65 .31**        -.17*                  
##                          [.18, .44]   [-.30, -.02]           
##                                                              
##   4. OT_Avg    3.27 0.70 .39**        -.32**       .59**     
##                          [.26, .51]   [-.45, -.19] [.49, .68]
##                                                              
## 
## Note. M and SD are used to represent mean and standard deviation, respectively.
## Values in square brackets indicate the 95% confidence interval.
## The confidence interval is a plausible range of population correlations 
## that could have caused the sample correlation (Cumming, 2014).
##  * indicates p < .05. ** indicates p < .01.
## 
ggcorrplot(AIPerf_Corrs$r, method = "circle", hc.order = TRUE, type= "lower", p.mat = AIPerf_Corrs$P, lab = TRUE,
           outline.col = "white",
           ggtheme = ggplot2::theme_gray,
           colors = c("#6D9EC1", "white", "#E46726"))

Manipulation Checks

AIPerf_T$scenarios_Manipulation <-  ifelse(
  # Control: No AI
  AIPerf_T$scenarios == "Control" & 
   AIPerf_T$`AI Check`== "No" & 
   AIPerf_T$`Review Check`!= "The policy itself" , "Partially Passed", 
  
  ifelse(
  # Control: No AI + Policy only
   AIPerf_T$scenarios == "Control" & 
    AIPerf_T$`AI Check`== "No" & 
    AIPerf_T$`Review Check`== "The policy itself" , "Passed", 
  
   
   
  ifelse(
      # AI_Decides: Yes AI 
    AIPerf_T$scenarios == "AI_Decides" & 
      AIPerf_T$`AI Check`== "Yes" & 
      AIPerf_T$`Review Check`!= "The policy itself" , "Partially Passed",
    
  ifelse(
      # AI_Decides: Yes AI + Policy only
     AIPerf_T$scenarios == "AI_Decides" & 
      AIPerf_T$`AI Check`== "Yes" & 
      AIPerf_T$`Review Check`== "The policy itself" , "Passed",
                        
 
     
  ifelse(
      # AI_Decides (A): Yes AI 
    AIPerf_T$scenarios == "AI_Decides(A)" & 
      AIPerf_T$`AI Check`== "Yes" & 
      AIPerf_T$`Review Check`!= "The policy itself" & AIPerf_T$`Review Check`!= "The use of Artificial Intelligence in the 360 feedback process" & AIPerf_T$`Review Check`!= "Both of the above", "Partially Passed",
    
  ifelse(
    # AI_Decides(A): Yes AI + Policy OR Both (since policy could include AI use)

    AIPerf_T$scenarios == "AI_Decides(A)" & 
      AIPerf_T$`AI Check`== "Yes" & 
      (AIPerf_T$`Review Check`== "The policy itself" | AIPerf_T$`Review Check`== "The use of Artificial Intelligence in the 360 feedback process" | AIPerf_T$`Review Check`== "Both of the above") , "Passed", 
    
  
      
  ifelse(
      # AI_Assist: Yes AI 
    AIPerf_T$scenarios == "AI_Assist" & 
      AIPerf_T$`AI Check`== "Yes" & 
      AIPerf_T$`Review Check`!= "The policy itself" , "Partially Passed", 
    
 ifelse(
    # AI_Assist: Yes AI + Policy only
    AIPerf_T$scenarios == "AI_Assist" &
      AIPerf_T$`AI Check`== "Yes" & 
      AIPerf_T$`Review Check` == "The policy itself", "Passed",
    
    
    
   ifelse(
      # AI_Decides (A): Yes AI 
    AIPerf_T$scenarios == "AI_Assist(A)" & 
      AIPerf_T$`AI Check`== "Yes" & 
      AIPerf_T$`Review Check`!= "The policy itself" & AIPerf_T$`Review Check`!= "The use of Artificial Intelligence in the 360 feedback process" & AIPerf_T$`Review Check`!= "Both of the above", "Partially Passed",
    
                                         
  ifelse(
     # AI_Assist(A): Yes AI + Policy OR Both (since policy could include AI use)
    
    AIPerf_T$scenarios == "AI_Assist(A)" & 
      AIPerf_T$`AI Check`== "Yes" & 
      (AIPerf_T$`Review Check`== "The policy itself" | AIPerf_T$`Review Check`== "The use of Artificial Intelligence in the 360 feedback process" | AIPerf_T$`Review Check`== "Both of the above") , "Passed", 
      
    "Failed"))))))))))

#View(AIPerf_T)

addmargins(table(AIPerf_T$scenarios_Manipulation, AIPerf_T$scenarios))
##                   
##                    Control AI_Assist(A) AI_Decides(A) AI_Assist AI_Decides Sum
##   Failed                36           10             9         6          5  66
##   Partially Passed       2            4             7        23         15  51
##   Passed                 4           21            18         9         15  67
##   Sum                   42           35            34        38         35 184

Power Analysis

#install.packages("pwr")
library(pwr)

AIPerf_Pwr10 <- pwr.anova.test(k = 5, n = 36.8, f = 0.10, sig.level = 0.05)
print(paste("Power for small effect sizes (.10):", round(AIPerf_Pwr10$power, digits = 3)))
## [1] "Power for small effect sizes (.10): 0.157"
AIPerf_Pwr25 <- pwr.anova.test(k = 5, n = 36.8, f = 0.25, sig.level = 0.05)
print(paste("Power for moderate effect sizes (.25):", round(AIPerf_Pwr25$power, digits = 3)))
## [1] "Power for moderate effect sizes (.25): 0.771"
AIPerf_Pwr40 <- pwr.anova.test(k = 5, n = 36.8, f = 0.40, sig.level = 0.05)
print(paste("Power for moderate effect sizes (.40):", round(AIPerf_Pwr40$power, digits = 3)))
## [1] "Power for moderate effect sizes (.40): 0.996"

Normality Assumption

#ANOVA for Procedural Fairness
model_pf <- aov(PF_Avg ~ scenarios, data = AIPerf_T)

residuals_pf <- residuals(model_pf)

model_pf
## Call:
##    aov(formula = PF_Avg ~ scenarios, data = AIPerf_T)
## 
## Terms:
##                 scenarios Residuals
## Sum of Squares    2.78847  73.51346
## Deg. of Freedom         4       179
## 
## Residual standard error: 0.6408508
## Estimated effects may be unbalanced
# Q-Q plot for Procedural Fairness
qqnorm(residuals_pf)
qqline(residuals_pf)

# Histogram for Procedural Fairness
hist(residuals_pf, breaks = 20, main = "Distribution of Residuals - PF")

shapiro.test(residuals_pf)
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals_pf
## W = 0.98838, p-value = 0.137
#ANOVA for Organisational Trust
model_ot <- aov(OT_Avg ~ scenarios, data = AIPerf_T)

residuals_ot <- residuals(model_ot)

model_ot
## Call:
##    aov(formula = OT_Avg ~ scenarios, data = AIPerf_T)
## 
## Terms:
##                 scenarios Residuals
## Sum of Squares    3.07089  87.85411
## Deg. of Freedom         4       179
## 
## Residual standard error: 0.7005748
## Estimated effects may be unbalanced
# Q-Q plot for Organisational Trust
qqnorm(residuals_ot)
qqline(residuals_ot)

# Histogram for Organisational Trust
hist(residuals_ot, breaks = 20, main = "Distribution of Residuals - OT")

shapiro.test(residuals_ot)
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals_ot
## W = 0.97362, p-value = 0.001473
#Homogeneity of Variances
#install.packages("car")
library(car)
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:psych':
## 
##     logit
## The following object is masked from 'package:dplyr':
## 
##     recode
## The following object is masked from 'package:purrr':
## 
##     some
leveneTest(PF_Avg ~ scenarios, data = AIPerf_T)
## Levene's Test for Homogeneity of Variance (center = median)
##        Df F value Pr(>F)
## group   4  1.2804 0.2794
##       179
leveneTest(OT_Avg ~ scenarios, data = AIPerf_T)
## Levene's Test for Homogeneity of Variance (center = median)
##        Df F value Pr(>F)
## group   4  0.4741 0.7547
##       179

Testing Main Effects H1-H4

ANOVA and T-Test to determine if there are any significant differences between groups

#ANOVA to determine differences in Immersion

Immersion_AVG <- mean(AIPerf_T$Immersion)
Immersion_Agreg <- aggregate(Immersion ~ scenarios, data = AIPerf_T, mean)
print(Immersion_Agreg)
##       scenarios Immersion
## 1       Control  3.214286
## 2  AI_Assist(A)  3.085714
## 3 AI_Decides(A)  2.852941
## 4     AI_Assist  3.026316
## 5    AI_Decides  3.057143
Immersion_AVG
## [1] 3.054348
print(Immersion_Agreg)
##       scenarios Immersion
## 1       Control  3.214286
## 2  AI_Assist(A)  3.085714
## 3 AI_Decides(A)  2.852941
## 4     AI_Assist  3.026316
## 5    AI_Decides  3.057143
model_immersion <-aov(Immersion ~ scenarios, data = AIPerf_T)

summary(model_immersion)
##              Df Sum Sq Mean Sq F value Pr(>F)
## scenarios     4   2.52  0.6295   0.823  0.512
## Residuals   179 136.94  0.7650
#ANOVA to determine differences between all groups
model_pf_all <-aov(PF_Avg ~ scenarios, data = AIPerf_T)

summary(model_pf_all)
##              Df Sum Sq Mean Sq F value Pr(>F)
## scenarios     4   2.79  0.6971   1.697  0.153
## Residuals   179  73.51  0.4107
model_ot_all <-aov(OT_Avg ~ scenarios, data = AIPerf_T)

summary(model_ot_all)
##              Df Sum Sq Mean Sq F value Pr(>F)
## scenarios     4   3.07  0.7677   1.564  0.186
## Residuals   179  87.85  0.4908
#T.Test to determine differences Control and Manipulation

AIPerf_T$scenarios_c0 <- ifelse(AIPerf_T$scenarios == "AI_Decides", "AI(ALL)",
                         ifelse(AIPerf_T$scenarios == "AI_Decides(A)", "AI(ALL)", 
                         ifelse(AIPerf_T$scenarios == "AI_Assist", "AI(ALL)",
                         ifelse(AIPerf_T$scenarios == "AI_Assist(A)", "AI(ALL)", 
                         ifelse(AIPerf_T$scenarios == "Control", "Control", "Other")))))

model_pf_all_0 <-t.test(PF_Avg ~ scenarios_c0, data = AIPerf_T)

model_pf_all_0
## 
##  Welch Two Sample t-test
## 
## data:  PF_Avg by scenarios_c0
## t = -1.2287, df = 59.755, p-value = 0.224
## alternative hypothesis: true difference in means between group AI(ALL) and group Control is not equal to 0
## 95 percent confidence interval:
##  -0.39836494  0.09521269
## sample estimates:
## mean in group AI(ALL) mean in group Control 
##              3.110329              3.261905
model_ot_all_0 <-t.test(OT_Avg ~ scenarios_c0, data = AIPerf_T)

model_ot_all_0
## 
##  Welch Two Sample t-test
## 
## data:  OT_Avg by scenarios_c0
## t = -0.55944, df = 67.102, p-value = 0.5777
## alternative hypothesis: true difference in means between group AI(ALL) and group Control is not equal to 0
## 95 percent confidence interval:
##  -0.3170767  0.1782437
## sample estimates:
## mean in group AI(ALL) mean in group Control 
##              3.259155              3.328571

Hypothesis 1 and 3: Procedural Fairness/ Organisational Trust and AI Autonomy

#H1: Individuals will indicate the lowest level of procedural fairness in the scenario wherein Ratiem employs AI as a decider in their 360-degree performance review process.
#H3: Individuals will indicate the lowest level of organisational trust in the scenario wherein Ratiem employs artificial intelligence as a decider in their 360-degree performance review process.


#Combine AI_Decides + AI_Decides(A) and AI_Assist + AI_Assist(A) - C1

AIPerf_T$scenarios_c1 <- ifelse(AIPerf_T$scenarios == "AI_Decides", "AI_Decides(All)",
                         ifelse(AIPerf_T$scenarios == "AI_Decides(A)", "AI_Decides(All)", 
                         ifelse(AIPerf_T$scenarios == "AI_Assist", "AI_Assist(All)",
                         ifelse(AIPerf_T$scenarios == "AI_Assist(A)", "AI_Assist(All)", 
                         ifelse(AIPerf_T$scenarios == "Control", "Control", "Other")))))

model_pf_H1_1 <-aov(PF_Avg ~ scenarios_c1, data = AIPerf_T)

summary(model_pf_H1_1)
##               Df Sum Sq Mean Sq F value Pr(>F)
## scenarios_c1   2   1.53  0.7652   1.852   0.16
## Residuals    181  74.77  0.4131
model_ot_H3_1 <-aov(OT_Avg ~ scenarios_c1, data = AIPerf_T)

summary(model_ot_H3_1)
##               Df Sum Sq Mean Sq F value Pr(>F)
## scenarios_c1   2   0.94  0.4713   0.948  0.389
## Residuals    181  89.98  0.4971
#Combine AI_Decides + AI_Decides(A) and all other scenarios - C2

AIPerf_T$scenarios_c2 <- ifelse(AIPerf_T$scenarios == "AI_Decides", "AI_Decides(All)",
                         ifelse(AIPerf_T$scenarios == "AI_Decides(A)", "AI_Decides(All)", 
                         ifelse(AIPerf_T$scenarios == "AI_Assist", "AI_No_Decide",
                         ifelse(AIPerf_T$scenarios == "AI_Assist(A)", "AI_No_Decide", 
                         ifelse(AIPerf_T$scenarios == "Control", "AI_No_Decide", "Other")))))

model_pf_H1_2 <-t.test(PF_Avg ~ scenarios_c2, data = AIPerf_T)

model_pf_H1_2
## 
##  Welch Two Sample t-test
## 
## data:  PF_Avg by scenarios_c2
## t = -1.8563, df = 152.4, p-value = 0.06535
## alternative hypothesis: true difference in means between group AI_Decides(All) and group AI_No_Decide is not equal to 0
## 95 percent confidence interval:
##  -0.36698981  0.01143425
## sample estimates:
## mean in group AI_Decides(All)    mean in group AI_No_Decide 
##                      3.033816                      3.211594
model_pf_H3_2 <-t.test(OT_Avg ~ scenarios_c2, data = AIPerf_T)

model_pf_H3_2
## 
##  Welch Two Sample t-test
## 
## data:  OT_Avg by scenarios_c2
## t = -1.366, df = 138.53, p-value = 0.1741
## alternative hypothesis: true difference in means between group AI_Decides(All) and group AI_No_Decide is not equal to 0
## 95 percent confidence interval:
##  -0.36179564  0.06614346
## sample estimates:
## mean in group AI_Decides(All)    mean in group AI_No_Decide 
##                      3.182609                      3.330435
#scenario_counts <- AIPerf_T %>% 
  #dplyr::count(scenarios_c1)

#print(scenario_counts)

Hypothesis 2 and 4: Procedural Fairness/ Organisational Trust and Transparency

#H2:Individuals will indicate the highest level of procedural fairness in the scenario wherein Ratiem assesses the uses of AI in their 360-degree performance review process and address related employee concerns.
#H4: Individuals will indicate the highest level of organisational trust in the scenario wherein Ratiem reviews the use of artificial intelligence in their 360-degree performance review process.

#Combine AI_Assist + AI_Decides and AI_Assist(A) + AI_Decides(A) - C3

AIPerf_T$scenarios_c3 <- ifelse(AIPerf_T$scenarios == "AI_Decides", "No_Assess",
                         ifelse(AIPerf_T$scenarios == "AI_Decides(A)", "AI_Assess", 
                         ifelse(AIPerf_T$scenarios == "AI_Assist", "No_Assess",
                         ifelse(AIPerf_T$scenarios == "AI_Assist(A)", "AI_Assess", 
                         ifelse(AIPerf_T$scenarios == "Control", "Control", "Other")))))

model_pf_H2_1 <-aov(PF_Avg ~ scenarios_c3, data = AIPerf_T)

summary(model_pf_H2_1)
##               Df Sum Sq Mean Sq F value Pr(>F)
## scenarios_c3   2   1.46  0.7324   1.771  0.173
## Residuals    181  74.84  0.4135
model_ot_H4_1 <-aov(OT_Avg ~ scenarios_c3, data = AIPerf_T)

summary(model_ot_H4_1)
##               Df Sum Sq Mean Sq F value Pr(>F)
## scenarios_c3   2   1.43  0.7143   1.445  0.239
## Residuals    181  89.50  0.4945
#Combine AI_Decides + AI_Decides(A) and all other scenarios - C2

AIPerf_T$scenarios_c4 <- ifelse(AIPerf_T$scenarios == "AI_Decides", "No_Assess",
                         ifelse(AIPerf_T$scenarios == "AI_Decides(A)", "Assess", 
                         ifelse(AIPerf_T$scenarios == "AI_Assist", "No_Assess",
                         ifelse(AIPerf_T$scenarios == "AI_Assist(A)", "Assess", 
                         ifelse(AIPerf_T$scenarios == "Control", "No_Assess", "Other")))))

model_pf_H2_2 <-t.test(PF_Avg ~ scenarios_c4, data = AIPerf_T)

model_pf_H2_2
## 
##  Welch Two Sample t-test
## 
## data:  PF_Avg by scenarios_c4
## t = 0.63685, df = 149.78, p-value = 0.5252
## alternative hypothesis: true difference in means between group Assess and group No_Assess is not equal to 0
## 95 percent confidence interval:
##  -0.1300188  0.2536903
## sample estimates:
##    mean in group Assess mean in group No_Assess 
##                3.183575                3.121739
model_pf_H4_2 <-t.test(OT_Avg ~ scenarios_c4, data = AIPerf_T)

model_pf_H4_2
## 
##  Welch Two Sample t-test
## 
## data:  OT_Avg by scenarios_c4
## t = 1.2039, df = 138.51, p-value = 0.2307
## alternative hypothesis: true difference in means between group Assess and group No_Assess is not equal to 0
## 95 percent confidence interval:
##  -0.0837934  0.3446630
## sample estimates:
##    mean in group Assess mean in group No_Assess 
##                3.356522                3.226087
# scenario_counts <- AIPerf_T %>% 
# dplyr::count(scenarios_c4)
# 
# print(scenario_counts)

Hypothesis 5 AI Attitudes and Procedural Fairness

AIP_P_centred <- scale(AIPerf_T$AIP_P_Avg, center= TRUE, scale = FALSE)
AIP_N_centred <- scale(AIPerf_T$AIP_N_Avg, center= TRUE, scale = FALSE)


#H5: AI attitudes will moderate the relationship between AI use in Ratiem’s 360 performance review process and procedural fairness.

#Moderator: AIP_P_Avg

model_pf_H5_P <- lm(PF_Avg ~ scenarios, data=AIPerf_T) 
model_pf_H5_P1 <- lm(PF_Avg ~ scenarios + AIP_P_centred, data=AIPerf_T) 
model_pf_H5_P2 <- lm(PF_Avg ~ scenarios + AIP_P_centred + scenarios:AIP_P_centred, data=AIPerf_T) 

summary(model_pf_H5_P1)
## 
## Call:
## lm(formula = PF_Avg ~ scenarios + AIP_P_centred, data = AIPerf_T)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.97154 -0.44079  0.04729  0.39597  1.50525 
## 
## Coefficients:
##                        Estimate Std. Error t value             Pr(>|t|)    
## (Intercept)             3.25220    0.09433  34.478 < 0.0000000000000002 ***
## scenariosAI_Assist(A)   0.04799    0.13989   0.343               0.7320    
## scenariosAI_Decides(A) -0.17358    0.14136  -1.228               0.2211    
## scenariosAI_Assist     -0.18134    0.13693  -1.324               0.1871    
## scenariosAI_Decides    -0.24643    0.13988  -1.762               0.0798 .  
## AIP_P_centred           0.25823    0.05952   4.339             0.000024 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.6111 on 178 degrees of freedom
## Multiple R-squared:  0.1287, Adjusted R-squared:  0.1042 
## F-statistic: 5.258 on 5 and 178 DF,  p-value: 0.0001574
anova(model_pf_H5_P,model_pf_H5_P1, model_pf_H5_P2)
## Analysis of Variance Table
## 
## Model 1: PF_Avg ~ scenarios
## Model 2: PF_Avg ~ scenarios + AIP_P_centred
## Model 3: PF_Avg ~ scenarios + AIP_P_centred + scenarios:AIP_P_centred
##   Res.Df    RSS Df Sum of Sq       F     Pr(>F)    
## 1    179 73.513                                    
## 2    178 66.482  1    7.0311 18.7615 0.00002497 ***
## 3    174 65.209  4    1.2736  0.8496     0.4956    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(lm(PF_Avg ~ scenarios + AIP_P_centred + scenarios:AIP_P_centred, data = AIPerf_T))
## 
## Call:
## lm(formula = PF_Avg ~ scenarios + AIP_P_centred + scenarios:AIP_P_centred, 
##     data = AIPerf_T)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.90605 -0.42413  0.03788  0.40798  1.53471 
## 
## Coefficients:
##                                      Estimate Std. Error t value
## (Intercept)                           3.25583    0.09459  34.419
## scenariosAI_Assist(A)                 0.04790    0.14056   0.341
## scenariosAI_Decides(A)               -0.18588    0.14263  -1.303
## scenariosAI_Assist                   -0.17462    0.13731  -1.272
## scenariosAI_Decides                  -0.24789    0.14050  -1.764
## AIP_P_centred                         0.16161    0.13291   1.216
## scenariosAI_Assist(A):AIP_P_centred   0.04806    0.19216   0.250
## scenariosAI_Decides(A):AIP_P_centred  0.03176    0.19622   0.162
## scenariosAI_Assist:AIP_P_centred      0.28952    0.18059   1.603
## scenariosAI_Decides:AIP_P_centred     0.06551    0.18688   0.351
##                                                 Pr(>|t|)    
## (Intercept)                          <0.0000000000000002 ***
## scenariosAI_Assist(A)                             0.7337    
## scenariosAI_Decides(A)                            0.1942    
## scenariosAI_Assist                                0.2051    
## scenariosAI_Decides                               0.0794 .  
## AIP_P_centred                                     0.2257    
## scenariosAI_Assist(A):AIP_P_centred               0.8028    
## scenariosAI_Decides(A):AIP_P_centred              0.8716    
## scenariosAI_Assist:AIP_P_centred                  0.1107    
## scenariosAI_Decides:AIP_P_centred                 0.7264    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.6122 on 174 degrees of freedom
## Multiple R-squared:  0.1454, Adjusted R-squared:  0.1012 
## F-statistic: 3.289 on 9 and 174 DF,  p-value: 0.001
#Moderator: AIP_N_Avg

model_pf_H5_N <- lm(PF_Avg ~ scenarios, data=AIPerf_T) 
model_pf_H5_N1 <- lm(PF_Avg ~ scenarios + AIP_N_centred, data=AIPerf_T) 
model_pf_H5_N2 <- lm(PF_Avg ~ scenarios + AIP_N_centred + scenarios:AIP_N_centred, data=AIPerf_T) 

summary(model_pf_H5_N1)
## 
## Call:
## lm(formula = PF_Avg ~ scenarios + AIP_N_centred, data = AIPerf_T)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.13192 -0.41106  0.03778  0.42402  1.67124 
## 
## Coefficients:
##                        Estimate Std. Error t value            Pr(>|t|)    
## (Intercept)             3.26020    0.09800  33.268 <0.0000000000000002 ***
## scenariosAI_Assist(A)   0.03778    0.14565   0.259              0.7956    
## scenariosAI_Decides(A) -0.20482    0.14665  -1.397              0.1643    
## scenariosAI_Assist     -0.18765    0.14243  -1.318              0.1894    
## scenariosAI_Decides    -0.24106    0.14536  -1.658              0.0990 .  
## AIP_N_centred          -0.13113    0.06349  -2.066              0.0403 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.6351 on 178 degrees of freedom
## Multiple R-squared:  0.0591, Adjusted R-squared:  0.03267 
## F-statistic: 2.236 on 5 and 178 DF,  p-value: 0.05271
anova(model_pf_H5_N,model_pf_H5_N1, model_pf_H5_N2)
## Analysis of Variance Table
## 
## Model 1: PF_Avg ~ scenarios
## Model 2: PF_Avg ~ scenarios + AIP_N_centred
## Model 3: PF_Avg ~ scenarios + AIP_N_centred + scenarios:AIP_N_centred
##   Res.Df    RSS Df Sum of Sq      F  Pr(>F)  
## 1    179 73.513                              
## 2    178 71.793  1    1.7208 4.2569 0.04058 *
## 3    174 70.335  4    1.4576 0.9015 0.46440  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(lm(PF_Avg ~ scenarios + AIP_N_centred + scenarios:AIP_P_centred, data = AIPerf_T))
## 
## Call:
## lm(formula = PF_Avg ~ scenarios + AIP_N_centred + scenarios:AIP_P_centred, 
##     data = AIPerf_T)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.89102 -0.41918  0.04613  0.39414  1.54689 
## 
## Coefficients:
##                                      Estimate Std. Error t value
## (Intercept)                           3.25558    0.09483  34.332
## scenariosAI_Assist(A)                 0.04506    0.14109   0.319
## scenariosAI_Decides(A)               -0.18403    0.14305  -1.286
## scenariosAI_Assist                   -0.17192    0.13781  -1.247
## scenariosAI_Decides                  -0.24782    0.14084  -1.760
## AIP_N_centred                        -0.02654    0.06747  -0.393
## scenariosControl:AIP_P_centred        0.15915    0.13338   1.193
## scenariosAI_Assist(A):AIP_P_centred   0.19376    0.14487   1.337
## scenariosAI_Decides(A):AIP_P_centred  0.18825    0.14529   1.296
## scenariosAI_Assist:AIP_P_centred      0.43829    0.12684   3.456
## scenariosAI_Decides:AIP_P_centred     0.21626    0.13456   1.607
##                                                  Pr(>|t|)    
## (Intercept)                          < 0.0000000000000002 ***
## scenariosAI_Assist(A)                            0.749859    
## scenariosAI_Decides(A)                           0.199998    
## scenariosAI_Assist                               0.213909    
## scenariosAI_Decides                              0.080244 .  
## AIP_N_centred                                    0.694568    
## scenariosControl:AIP_P_centred                   0.234416    
## scenariosAI_Assist(A):AIP_P_centred              0.182821    
## scenariosAI_Decides(A):AIP_P_centred             0.196815    
## scenariosAI_Assist:AIP_P_centred                 0.000691 ***
## scenariosAI_Decides:AIP_P_centred                0.109842    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.6137 on 173 degrees of freedom
## Multiple R-squared:  0.1461, Adjusted R-squared:  0.09679 
## F-statistic: 2.961 on 10 and 173 DF,  p-value: 0.001836

Hypothesis 6 AI Attitudes and Organisational Trust

# H6: AI Attitudes and Organisational TrustAI attitudes will moderate the relationship between AI use in Ratiem’s 360 performance review process and organisational trust.

#Moderator: AIP_P_Avg
model_ot_H5_P <- lm(OT_Avg ~ scenarios, data=AIPerf_T) 
model_ot_H5_P1 <- lm(OT_Avg ~ scenarios + AIP_P_centred, data=AIPerf_T) 
model_ot_H5_P2 <- lm(OT_Avg ~ scenarios + AIP_P_centred + scenarios:AIP_P_centred, data=AIPerf_T) 

summary(model_ot_H5_P1)
## 
## Call:
## lm(formula = OT_Avg ~ scenarios + AIP_P_centred, data = AIPerf_T)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.33388 -0.35858  0.03397  0.38748  1.96781 
## 
## Coefficients:
##                        Estimate Std. Error t value             Pr(>|t|)    
## (Intercept)             3.31512    0.09975  33.234 < 0.0000000000000002 ***
## scenariosAI_Assist(A)   0.16731    0.14793   1.131                0.260    
## scenariosAI_Decides(A) -0.06730    0.14948  -0.450                0.653    
## scenariosAI_Assist     -0.12751    0.14481  -0.881                0.380    
## scenariosAI_Decides    -0.17441    0.14793  -1.179                0.240    
## AIP_P_centred           0.35794    0.06294   5.687         0.0000000521 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.6463 on 178 degrees of freedom
## Multiple R-squared:  0.1823, Adjusted R-squared:  0.1594 
## F-statistic: 7.939 on 5 and 178 DF,  p-value: 0.0000008943
anova(model_ot_H5_P,model_ot_H5_P1, model_ot_H5_P2)
## Analysis of Variance Table
## 
## Model 1: OT_Avg ~ scenarios
## Model 2: OT_Avg ~ scenarios + AIP_P_centred
## Model 3: OT_Avg ~ scenarios + AIP_P_centred + scenarios:AIP_P_centred
##   Res.Df    RSS Df Sum of Sq       F        Pr(>F)    
## 1    179 87.854                                       
## 2    178 74.345  1   13.5091 32.0562 0.00000006076 ***
## 3    174 73.327  4    1.0179  0.6039        0.6603    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Moderator: AIP_N_Avg
model_ot_H5_N <- lm(OT_Avg ~ scenarios, data=AIPerf_T) 
model_ot_H5_N1 <- lm(OT_Avg ~ scenarios + AIP_N_centred, data=AIPerf_T) 
model_ot_H5_N2 <- lm(OT_Avg ~ scenarios + AIP_N_centred + scenarios:AIP_N_centred, data=AIPerf_T) 

summary(model_ot_H5_N1)
## 
## Call:
## lm(formula = OT_Avg ~ scenarios + AIP_N_centred, data = AIPerf_T)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.40961 -0.40961 -0.00373  0.46852  1.44385 
## 
## Coefficients:
##                        Estimate Std. Error t value             Pr(>|t|)    
## (Intercept)             3.32480    0.10310  32.249 < 0.0000000000000002 ***
## scenariosAI_Assist(A)   0.13724    0.15323   0.896                0.372    
## scenariosAI_Decides(A) -0.09992    0.15428  -0.648                0.518    
## scenariosAI_Assist     -0.12208    0.14984  -0.815                0.416    
## scenariosAI_Decides    -0.16941    0.15292  -1.108                0.269    
## AIP_N_centred          -0.28967    0.06679  -4.337            0.0000241 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.6681 on 178 degrees of freedom
## Multiple R-squared:  0.1261, Adjusted R-squared:  0.1016 
## F-statistic: 5.138 on 5 and 178 DF,  p-value: 0.0001991
anova(model_ot_H5_N,model_ot_H5_N1, model_ot_H5_N2)
## Analysis of Variance Table
## 
## Model 1: OT_Avg ~ scenarios
## Model 2: OT_Avg ~ scenarios + AIP_N_centred
## Model 3: OT_Avg ~ scenarios + AIP_N_centred + scenarios:AIP_N_centred
##   Res.Df    RSS Df Sum of Sq       F     Pr(>F)    
## 1    179 87.854                                    
## 2    178 79.458  1    8.3963 18.8416 0.00002404 ***
## 3    174 77.539  4    1.9189  1.0765     0.3697    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
ggplot(AIPerf_T, aes(x = AIP_P_centred, y = PF_Avg)) +
  geom_point(alpha = 0.5) +
  geom_smooth(method = "lm", color = "black") +
  labs(x = "Positive AI Attitudes (centered)",
       y = "Procedural Fairness",
       title = "Positive AI Attitudes Predict Procedural Fairness") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

ggplot(AIPerf_T, aes(x = AIP_N_centred, y = PF_Avg)) +
  geom_point(alpha = 0.5) +
  geom_smooth(method = "lm", color = "black") +
  labs(x = "Negative AI Attitudes (centered)",
       y = "Procedural Fairness",
       title = "Negative AI Attitudes Predict Procedural Fairness") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

ggplot(AIPerf_T, aes(x = AIP_P_centred, y = OT_Avg)) +
  geom_point(alpha = 0.5) +
  geom_smooth(method = "lm", color = "black") +
  labs(x = "Positive AI Attitudes (centered)",
       y = "Procedural Fairness",
       title = "Positive AI Attitudes Predict Procedural Fairness") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

ggplot(AIPerf_T, aes(x = AIP_N_centred, y = OT_Avg)) +
  geom_point(alpha = 0.5) +
  geom_smooth(method = "lm", color = "black") +
  labs(x = "Negative AI Attitudes (centered)",
       y = "Procedural Fairness",
       title = "Negative AI Attitudes Predict Procedural Fairness") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'