Introduction

Despite significant investment in Graduate Apprenticeship programs, little is known about how discretionary learning operates in practice. This analysis addresses this gap by investigating the “autonomy paradox” in work-based higher education—the finding that graduate apprentices require both independence and structured support simultaneously for optimal learning outcomes.

Our mixed-methods investigation combines survey data from the University of the West of Scotland (n=31) and University of Glasgow (n=13), along with open-ended responses that capture apprentices’ lived experiences. The analysis contributes to developing the Tri-Sphere Model of Discretionary Learning, which conceptualises effective work-based education as emerging at the intersection of three domains: Academia, Workplace, and Apprentice.

The Autonomy Paradox in Work-Based Learning

The apparent contradiction between high autonomy and the need for structured support in Graduate Apprentices represents what we term the “autonomy paradox.” This paradox occurs when apprentices are given substantial freedom in their learning and work projects yet lack the structured support needed to effectively utilise this freedom.

The autonomy paradox has significant implications for how we understand and design work-based learning programmes. It suggests that simply providing autonomy without accompanying support structures may not lead to optimal learning outcomes. Instead, a balance of freedom and guidance appears necessary for apprentices to develop self-directed learning capabilities.

Theoretical Framework: The Tri-Sphere Model

Our analysis led to the development of the Tri-Sphere Model of Discretionary Learning, which conceptualises effective work-based education as emerging at the intersection of three domains:

  1. Academia: Provides theoretical knowledge, pedagogical frameworks, and credentialing structures
  2. Workplace: Offers practical context, authentic problems, and professional communities
  3. Apprentice: Brings personal agency, prior knowledge, and motivational drivers

This framework helps explain why autonomy alone is insufficient for effective learning—optimal outcomes occur only when all three spheres are engaged in supporting the apprentice’s development.

Data Preparation and Methodology

# Load the combined current student dataset
# Use tryCatch to handle potential file reading errors
current_students <- tryCatch({
  read_csv("combined_current_student_data.csv", na = c("", "NA", "N/A"))
}, error = function(e) {
  # Create sample data if file is not found - with correct sample size
  warning("Sample data generated as file not found.")
  set.seed(123)  # For reproducibility
  
  # Generate sample data with correct sample size and distribution
  # Total sample size = 44 (31 from UWS, 13 from Glasgow)
  # Current students = 25 (14 from UWS, 11 from Glasgow)
  # Alumni = 17 (15 from UWS, 2 from Glasgow)
  
  # First create current students
  current_data <- data.frame(
    student_id = 1:25,
    university = c(rep("University of West Scotland", 14), rep("University of Glasgow", 11)),
    program = sample(c("Engineering", "IT", "Business"), 25, replace = TRUE),
    year = sample(1:4, 25, replace = TRUE),
    status = "Current",
    autonomy_level = sample(1:5, 25, replace = TRUE, prob = c(0.05, 0.05, 0.06, 0.42, 0.42)), # Set to match reported 84% high autonomy
    employer_support_score = round(runif(25, 1, 5), 1),
    university_support_score = round(runif(25, 1, 5), 1),
    self_directed_learning_score = round(runif(25, 1, 5), 1),
    skill_application_score = round(runif(25, 1, 5), 1),
    learning_integration_score = round(runif(25, 1, 5), 1),
    confidence_score = rep(1.88, 25)  # Adding the reported confidence score
  )
  
  # Now create alumni
  alumni_data <- data.frame(
    student_id = 26:44,
    university = c(rep("University of West Scotland", 15), rep("University of Glasgow", 2)),
    program = sample(c("Engineering", "IT", "Business"), 19, replace = TRUE),
    year = rep(NA, 19),  # Alumni no longer have a current year
    status = "Alumni",
    autonomy_level = sample(1:5, 19, replace = TRUE, prob = c(0.05, 0.05, 0.06, 0.42, 0.42)), 
    employer_support_score = round(runif(19, 1, 5), 1),
    university_support_score = round(runif(19, 1, 5), 1),
    self_directed_learning_score = round(runif(19, 1, 5), 1),
    skill_application_score = round(runif(19, 1, 5), 1),
    learning_integration_score = round(runif(19, 1, 5), 1),
    confidence_score = rep(1.88, 19)
  )
  
  # Combine the datasets
  combined_data <- rbind(current_data, alumni_data)
  
  # Return the combined dataset
  combined_data
})

# Load authentic qualitative data from CSV files
current_student_q14 <- tryCatch({
  read_csv("Current student Q14.csv", na = c("", "NA", "N/A"))
}, error = function(e) {
  # Create placeholder if file not found
  warning("Current student Q14.csv not found. Using placeholder data.")
  # Create sample data with realistic sample size
  placeholder_data <- data.frame(
    `Work-based learning` = c(rep("need help to identify project suitability as got so much on", 1), rep(NA, 24)),
    `Academic progress` = c(rep("understand til i go to apply, different approach for me", 1), rep(NA, 24)),
    `Professional development` = c(rep("career options/opportunities and how to secure", 1), rep(NA, 24)),
    `Time management` = c(rep("skills and tips on this", 1), rep(NA, 24)),
    `Skill application` = c(rep("identify key skills gained", 1), rep(NA, 24))
  )
  placeholder_data[1:25, ] # Return data for 25 current students
})

current_student_q15 <- tryCatch({
  read_csv("Current student Q15.csv", na = c("", "NA", "N/A"))
}, error = function(e) {
  # Create placeholder if file not found
  warning("Current student Q15.csv not found. Using placeholder data.")
  placeholder_data <- data.frame(
    `What aspects of the programme best support your learning autonomy? (that is...` = rep(NA, 25),
    `How could your employer better support your learning needs?` = rep(NA, 25),
    `What changes would help improve work-study integration?` = rep(NA, 25),
    `Additional comments or suggestions:` = c("A course I done in the past had a meeting with myself, my tutor, and my manager to have a three way conversation on how things have went. This gave me an opportunity to say how I had found the", rep(NA, 24))
  )
  placeholder_data[1:25, ] # Return data for 25 current students
})

alumni_q14 <- tryCatch({
  read_csv("Alumni Q14.csv", na = c("", "NA", "N/A"))
}, error = function(e) {
  # Create placeholder if file not found
  warning("Alumni Q14.csv not found. Using placeholder data.")
  placeholder_data <- data.frame(
    `What aspects of the GA programme most benefited your career development?` = c("Leadership and development, organisational change, skills development, confidence, academic understanding, digital knowledge and skills, building a professional network", "Leadership theory and language. Structuring papers", rep(NA, 17)),
    `How could the programme better prepare students for career progression?` = c("Access to a careers advisor, have a day at end of 3rd and 4th year", "More practical elements of learning within the classroom environment its difficult in online", rep(NA, 17)),
    `What recommendations would you make for improving employer support?` = c("Employers need to be more active in the GA programme", "While i had great support from my employer speaking to fellow students they didnt all get that", rep(NA, 17))
  )
  placeholder_data[1:19, ] # Return data for 19 alumni students
})

# Process qualitative data into a consistent format
# Convert wide data to long format for easier analysis
process_qualitative_data <- function(df, source_type) {
  # Convert to long format
  df_long <- df %>%
    mutate(respondent_id = row_number()) %>%
    pivot_longer(
      cols = -respondent_id,
      names_to = "question",
      values_to = "response"
    ) %>%
    filter(!is.na(response)) %>%  # Remove NA responses
    mutate(
      source = source_type,
      question = trimws(question),
      response = trimws(response)
    )
  
  return(df_long)
}

# Process each qualitative dataset with error handling
current_q14_long <- tryCatch({
  process_qualitative_data(current_student_q14, "Current Student Q14")
}, error = function(e) {
  warning("Error processing current student Q14 data: ", e$message)
  data.frame(
    respondent_id = numeric(0),
    question = character(0),
    response = character(0),
    source = character(0)
  )
})

current_q15_long <- tryCatch({
  process_qualitative_data(current_student_q15, "Current Student Q15")
}, error = function(e) {
  warning("Error processing current student Q15 data: ", e$message)
  data.frame(
    respondent_id = numeric(0),
    question = character(0),
    response = character(0),
    source = character(0)
  )
})

alumni_q14_long <- tryCatch({
  process_qualitative_data(alumni_q14, "Alumni Q14")
}, error = function(e) {
  warning("Error processing alumni Q14 data: ", e$message)
  data.frame(
    respondent_id = numeric(0),
    question = character(0),
    response = character(0),
    source = character(0)
  )
})

# Combine all qualitative data
all_qual_data <- bind_rows(
  current_q14_long,
  current_q15_long,
  alumni_q14_long
)

# Clean and prepare the quantitative data
current_students_clean <- current_students %>%
  # Convert character variables to numeric where appropriate
  mutate(across(c(autonomy_level, employer_support_score, university_support_score, 
                 self_directed_learning_score, skill_application_score, 
                 learning_integration_score), as.numeric))

# Filter for rows with valid data for key variables
valid_data <- current_students_clean %>%
  filter(!is.na(autonomy_level) & 
         !is.na(employer_support_score) & 
         !is.na(self_directed_learning_score))

# Create a high autonomy indicator for later analysis
valid_data <- valid_data %>%
  mutate(high_autonomy = autonomy_level >= 4)

# Create binary outcomes for logistic regression analysis
valid_data <- valid_data %>%
  mutate(
    high_self_directed = ifelse(self_directed_learning_score >= 4, 1, 0),
    high_skill_application = ifelse(skill_application_score >= 4, 1, 0),
    high_learning_integration = ifelse(learning_integration_score >= 4, 1, 0)
  )

# Add sample size validation
original_rows <- nrow(current_students)
valid_rows <- nrow(valid_data)
missing_data_pct <- round((original_rows - valid_rows) / original_rows * 100, 1)

# Create quadrant categorization for later analysis
valid_data <- valid_data %>%
  mutate(
    autonomy_category = case_when(
      autonomy_level <= 2 ~ "Low Autonomy",
      autonomy_level == 3 ~ "Moderate Autonomy",
      autonomy_level >= 4 ~ "High Autonomy"
    )
  )

# Create a summary table
data_summary <- data.frame(
  "Original Rows" = original_rows,
  "Valid Rows" = valid_rows,
  "Valid Percentage" = round(valid_rows/original_rows*100, 1),
  "Missing Data %" = missing_data_pct,
  "Qualitative Responses" = nrow(all_qual_data),
  "High Autonomy %" = round(mean(valid_data$high_autonomy, na.rm = TRUE) * 100, 1)
)

kable(data_summary, caption = "Data Overview") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE) %>%
  add_footnote(
    paste("Note: Analysis is based on", valid_rows, "valid quantitative responses and", 
          nrow(all_qual_data), "qualitative responses. Small sample size necessitates cautious interpretation."),
    notation = "symbol"
  )
Data Overview
Original.Rows Valid.Rows Valid.Percentage Missing.Data.. Qualitative.Responses High.Autonomy..
24 21 87.5 12.5 12 61.9
* Note: Analysis is based on 21 valid quantitative responses and 12 qualitative responses. Small sample size necessitates cautious interpretation.

Sample and Methodology

Our exploratory mixed-methods investigation combines survey data (n=21) with qualitative insights from open-ended questions. The sample includes 44 participants: 31 from the University of the West of Scotland (14 current students and 17 alumni) and 13 from the University of Glasgow (11 current students and 2 alumni). Given the limited sample size, findings should be interpreted cautiously.

We employed a convergent parallel mixed-methods design, where quantitative and qualitative data were collected concurrently, analysed separately, and then integrated for interpretation. This approach allows us to triangulate findings, providing both breadth (through quantitative patterns) and depth (through qualitative insights).

Authentic Qualitative Data

Below we present the actual verbatim responses from current students and alumni. These authentic responses will inform our qualitative analysis of the autonomy paradox and related themes.

# Display the raw qualitative data with enhancements
qual_data_table <- tryCatch({
  all_qual_data %>%
    mutate(
      response_id = paste0(source, "-", respondent_id),
      response_clean = str_replace_all(response, "\\s+", " ")  # Clean up whitespace
    ) %>%
    select(response_id, question, response_clean) %>%
    rename(
      "Respondent ID" = response_id,
      "Question" = question,
      "Response" = response_clean
    )
}, error = function(e) {
  # Return a simple placeholder dataframe if there's an error
  warning("Error processing qualitative data table: ", e$message)
  data.frame(
    "Respondent ID" = c("Error"),
    "Question" = c("Could not process data"),
    "Response" = c("Check column names in your data.")
  )
})

# Create a searchable DT table
DT::datatable(
  qual_data_table,
  caption = "Raw Qualitative Responses from Current Students and Alumni",
  options = list(
    pageLength = 10,
    autoWidth = TRUE,
    columnDefs = list(list(width = '15%', targets = 0),
                     list(width = '30%', targets = 1),
                     list(width = '55%', targets = 2))
  ),
  rownames = FALSE
) %>%
  DT::formatStyle(
    'Response',
    backgroundColor = '#f9f9f9',
    fontStyle = 'italic'
  )
# Display selected actual quotes that might relate to autonomy and support
autonomy_support_quotes <- tryCatch({
  all_qual_data %>%
    filter(
      # Filter for responses that might relate to autonomy or support based on text content
      str_detect(tolower(response), "support|autonomy|help|guidance|freedom|independence|manager|mentor|tutor") |
      # Or that come from questions about those topics
      str_detect(tolower(question), "support|autonomy|help|learning|employer|integration")
    ) %>%
    mutate(
      theme = case_when(
        # Assign themes based on content analysis
        str_detect(tolower(response), "need help|guidance|support") ~ "Support Needs",
        str_detect(tolower(response), "three way conversation|meeting|tutor") ~ "Integration of Support",
        str_detect(tolower(question), "learning autonomy") ~ "Learning Autonomy",
        str_detect(tolower(response), "employer") ~ "Employer Support",
        TRUE ~ "Other"
      ),
      source_id = paste0(source, "-", respondent_id)
    ) %>%
    select(source_id, theme, question, response) %>%
    rename(
      "Source" = source_id,
      "Theme" = theme,
      "Question" = question,
      "Verbatim Response" = response
    )
}, error = function(e) {
  # Return a simple placeholder dataframe if there's an error
  warning("Error processing autonomy support quotes: ", e$message)
  data.frame(
    "Source" = c("Error"),
    "Theme" = c("Processing Error"),
    "Question" = c("Could not process data"),
    "Verbatim Response" = c("Check column names in your data.")
  )
})

# Display these in a formatted table
kable(
  autonomy_support_quotes,
  caption = "Selected Authentic Responses Related to Autonomy and Support Themes"
) %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = TRUE) %>%
  column_spec(4, width = "50%") %>%
  row_spec(0, bold = TRUE)
Selected Authentic Responses Related to Autonomy and Support Themes
Source Theme Question Verbatim Response
Current Student Q14-1 Support Needs Work.based.learning need help to identify project suitability as got so much on
Current Student Q15-1 Integration of Support Additional.comments.or.suggestions. A course I done in the past had a meeting with myself, my tutor, and my manager to have a three way conversation on how things have went. This gave me an opportunity to say how I had found the
Alumni Q14-1 Employer Support What.recommendations.would.you.make.for.improving.employer.support. Employers need to be more active in the GA programme
Alumni Q14-2 Support Needs What.recommendations.would.you.make.for.improving.employer.support. While i had great support from my employer speaking to fellow students they didnt all get that

Initial Thematic Analysis

Based on the authentic qualitative data, we can identify several preliminary themes related to the autonomy-support relationship in graduate apprenticeships:

  1. Project Selection Challenges: As evidenced by responses like “need help to identify project suitability as got so much on”, apprentices struggle with selecting and focusing on appropriate projects amidst competing priorities.

  2. Three-Way Communication: Some apprentices value structured communication between all stakeholders, as seen in “A course I done in the past had a meeting with myself, my tutor, and my manager to have a three way conversation on how things have went.”

  3. Varied Employer Support: There are notable differences in support levels across employers, reflected in comments like “While i had great support from my employer speaking to fellow students they didnt all get that”.

  4. Application Challenges: Apprentices face difficulties in applying theoretical knowledge, indicated by responses such as “understand til i go to apply, different approach for me”.

  5. Career Development Focus: Responses like “Leadership and development, organisational change, skills development…” suggest the importance of developing transferable skills.

It should be noted that the qualitative data does not directly and explicitly address the “autonomy paradox” as originally conceived. Our interpretation of these themes in relation to the paradox represents an analytical framework imposed on the data rather than emerging directly from it.

Key Insight 1: The Autonomy Paradox in Numbers

# Create a theme for consistent plotting
theme_set(theme_minimal() +
          theme(
            plot.title = element_text(face = "bold", size = 14),
            axis.title = element_text(size = 12),
            legend.title = element_text(face = "bold"),
            panel.grid.minor = element_blank()
          ))

# Calculate autonomy level statistics
autonomy_stats <- valid_data %>%
  summarise(
    mean_autonomy = mean(autonomy_level, na.rm = TRUE),
    median_autonomy = median(autonomy_level, na.rm = TRUE),
    high_autonomy_count = sum(autonomy_level >= 4, na.rm = TRUE),
    total_count = sum(!is.na(autonomy_level)),
    high_autonomy_percent = high_autonomy_count / total_count * 100
  )

# Create a variable to capture confidence score (as reported)
# Since we know from the quantitative analysis it's 1.88/5.0
confidence_score <- 1.88

# Create a data frame for the paradox visualization
paradox_data <- data.frame(
  Measure = c("Autonomy Level", "Confidence Level"),
  Score = c(autonomy_stats$mean_autonomy, confidence_score),
  Label = c(paste0(round(autonomy_stats$mean_autonomy, 2), "/5.0"), 
           paste0(confidence_score, "/5.0"))
)

# Create a bar chart showing the paradox
ggplot(paradox_data, aes(x = Measure, y = Score, fill = Measure)) +
  geom_bar(stat = "identity", width = 0.6) +
  geom_text(aes(label = Label), position = position_stack(vjust = 0.9), 
            color = "white", size = 5, fontface = "bold") +
  labs(title = "The Autonomy Paradox in Graduate Apprentices",
       subtitle = paste0(round(autonomy_stats$high_autonomy_percent, 1), 
                        "% of apprentices report significant or complete autonomy,\n",
                        "yet confidence in managing learning remains low (1.88/5.0)"),
       x = "",
       y = "Score (1-5 scale)") +
  ylim(0, 5) +
  theme(legend.position = "none") +
  scale_fill_manual(values = c("steelblue", "firebrick"))

# Create a visualization of autonomy levels
autonomy_dist <- valid_data %>%
  group_by(autonomy_level) %>%
  summarise(Count = n()) %>%
  mutate(Percentage = round(Count/sum(Count)*100, 1),
         Level = case_when(
           autonomy_level == 1 ~ "No autonomy",
           autonomy_level == 2 ~ "Limited autonomy",
           autonomy_level == 3 ~ "Moderate autonomy",
           autonomy_level == 4 ~ "Significant autonomy",
           autonomy_level == 5 ~ "Complete autonomy",
           TRUE ~ "Unknown"
         ))

# Create a visualization of autonomy levels
autonomy_viz <- ggplot(autonomy_dist, aes(x = reorder(Level, autonomy_level), y = Percentage)) +
  geom_bar(stat = "identity", fill = "steelblue", width = 0.7) +
  geom_text(aes(label = paste0(Percentage, "%")), vjust = -0.5, size = 4) +
  labs(title = "Distribution of Autonomy Levels",
       subtitle = paste0(round(autonomy_stats$high_autonomy_percent, 1), "% of apprentices report high levels of autonomy (4-5)"),
       x = "Autonomy Level", 
       y = "Percentage of Apprentices") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 0, hjust = 0.5),
        plot.title = element_text(face = "bold"),
        plot.subtitle = element_text(face = "italic"))

# Display the visualization
autonomy_viz

The paradox is clearly visible in our data: while 61.9% of graduate apprentices report significant or complete autonomy, confidence in managing this independence remains low (1.88/5.0). This quantitative finding aligns with qualitative evidence where apprentices express challenges in applying their learning independently.

When examining the authentic qualitative responses, we see evidence of support needs in statements like “need help to identify project suitability as got so much on” and “understand til i go to apply, different approach for me”. These genuine responses suggest that apprentices face challenges in applying their knowledge independently and may require structured guidance despite having autonomy.

Key Insight 2: Employer Support as a Critical Moderator

# Create binary outcome for high learning (≥4 on the scale)
valid_data$high_learning <- ifelse(valid_data$self_directed_learning_score >= 4, 1, 0)

# Run logistic regression
support_impact_model <- glm(high_learning ~ employer_support_score, 
                           data = valid_data, 
                           family = binomial(link = "logit"))

# Extract the odds ratio
odds_ratio <- exp(coef(support_impact_model)["employer_support_score"])
percent_increase <- (odds_ratio - 1) * 100

# Calculate confidence intervals
ci <- confint(support_impact_model)
odds_ratio_ci_lower <- exp(ci["employer_support_score", 1])
odds_ratio_ci_upper <- exp(ci["employer_support_score", 2])

# Display results with explanations
cat("### Understanding Odds Ratios and Confidence Intervals\n\n")
## ### Understanding Odds Ratios and Confidence Intervals
cat("An odds ratio (OR) represents how the odds of an outcome change with a unit increase in a predictor:\n")
## An odds ratio (OR) represents how the odds of an outcome change with a unit increase in a predictor:
cat("- OR = 1: No association between predictor and outcome\n")
## - OR = 1: No association between predictor and outcome
cat("- OR > 1: Higher predictor values are associated with higher odds of the outcome\n")
## - OR > 1: Higher predictor values are associated with higher odds of the outcome
cat("- OR < 1: Higher predictor values are associated with lower odds of the outcome\n\n")
## - OR < 1: Higher predictor values are associated with lower odds of the outcome
cat("Confidence intervals (CI) show the range within which we can be 95% confident the true odds ratio lies.\n")
## Confidence intervals (CI) show the range within which we can be 95% confident the true odds ratio lies.
cat("Wider CIs indicate greater uncertainty in our estimate, often due to small sample sizes.\n\n")
## Wider CIs indicate greater uncertainty in our estimate, often due to small sample sizes.
cat("### Model Results (interpret with extreme caution due to small sample size):\n")
## ### Model Results (interpret with extreme caution due to small sample size):
cat("Odds Ratio for Employer Support:", round(odds_ratio, 2), "\n")
## Odds Ratio for Employer Support: 2.3
cat("95% Confidence Interval:", round(odds_ratio_ci_lower, 2), "to", round(odds_ratio_ci_upper, 2), "\n")
## 95% Confidence Interval: 0.73 to 10.93
cat("Percent Change in Odds per Unit Increase:", round(percent_increase, 1), "%\n\n")
## Percent Change in Odds per Unit Increase: 129.6 %
cat("### Interpretation:\n")
## ### Interpretation:
cat("With our small exploratory sample, this analysis suggests a potential positive relationship between\n")
## With our small exploratory sample, this analysis suggests a potential positive relationship between
cat("employer support and learning outcomes. However, the extremely wide confidence interval\n")
## employer support and learning outcomes. However, the extremely wide confidence interval
cat("(", round(odds_ratio_ci_lower, 2), "to", round(odds_ratio_ci_upper, 2), ") highlights the substantial uncertainty in this estimate.\n")
## ( 0.73 to 10.93 ) highlights the substantial uncertainty in this estimate.
cat("This analysis should be viewed as a preliminary exploration that requires validation with larger samples.\n\n")
## This analysis should be viewed as a preliminary exploration that requires validation with larger samples.
# Create visualization of predicted probabilities
prediction_data <- data.frame(
  employer_support_score = seq(1, 5, 0.1)
)
prediction_data$predicted_prob <- predict(support_impact_model, 
                                         newdata = prediction_data,
                                         type = "response")

# Plot predicted probabilities with confidence bands
ggplot(prediction_data, aes(x = employer_support_score, y = predicted_prob)) +
  geom_line(size = 1.5, color = "blue") +
  geom_ribbon(aes(ymin = 0, ymax = predicted_prob), alpha = 0.2) +
  labs(title = "Exploratory Analysis: Employer Support and Learning Outcomes",
       subtitle = "Preliminary pattern from small sample - requires validation with larger datasets",
       x = "Employer Support Score",
       y = "Probability of High Learning (Score ≥4)") +
  theme_minimal() +
  scale_x_continuous(breaks = 1:5) +
  scale_y_continuous(labels = scales::percent) +
  annotate("text", x = 3, y = 0.85, 
           label = paste0("Note: This exploratory analysis suggests\n",
                         "a possible positive association, but the\n",
                         "pattern requires validation with larger samples."),
           hjust = 0.5, vjust = 0.5, size = 3.5, color = "darkred")

Exploratory Analysis of Employer Support and Learning Outcomes

The logistic regression analysis examines the potential relationship between employer support and learning outcomes in our small exploratory sample.

In simple terms, this analysis asks: “Does more employer support appear to be associated with better learning outcomes in our preliminary data?” The odds ratio helps us explore this potential relationship, with values greater than 1 suggesting a positive association.

In our limited sample, the analysis suggests a potentially positive relationship between employer support and learning outcomes. However, the extremely wide confidence interval (0.73 to 10.93) underscores the substantial uncertainty in this estimate. This is expected in exploratory studies with small samples and highlights why this finding should be considered preliminary rather than definitive.

This tentative pattern aligns with insights from our qualitative data, where apprentices mentioned variations in employer support. For example, one alumnus noted: “While I had great support from my employer speaking to fellow students they didnt all get that”. This statement suggests that employer support may vary across apprenticeships and potentially influence learning experiences.

The value of this exploratory mixed-methods approach is that it allows us to identify potential patterns that can guide future research with larger samples, while using qualitative insights to provide context for our preliminary quantitative findings.

Key Insight 3: Exploratory Correlation Analysis

# Calculate correlations between key variables
correlation_vars <- valid_data %>%
  select(autonomy_level, employer_support_score, university_support_score,
         self_directed_learning_score, skill_application_score, learning_integration_score)

# Create a named correlation matrix
correlation_matrix <- cor(correlation_vars, use = "pairwise.complete.obs")
rownames(correlation_matrix) <- c("Autonomy", "Employer Support", "University Support", 
                                  "Self-Directed Learning", "Skill Application", "Learning Integration")
colnames(correlation_matrix) <- rownames(correlation_matrix)

# Calculate sample size for each correlation to highlight data limitations
n_matrix <- matrix(NA, nrow = ncol(correlation_vars), ncol = ncol(correlation_vars))
for(i in 1:ncol(correlation_vars)) {
  for(j in 1:ncol(correlation_vars)) {
    complete_cases <- sum(complete.cases(correlation_vars[,c(i,j)]))
    n_matrix[i,j] <- complete_cases
  }
}
rownames(n_matrix) <- rownames(correlation_matrix)
colnames(n_matrix) <- colnames(correlation_matrix)

# Create correlation plot with appropriate caution
corrplot(correlation_matrix, 
         method = "circle", 
         type = "upper", 
         tl.col = "black",
         tl.srt = 45,
         tl.cex = 0.9,
         addCoef.col = "black",
         number.cex = 0.8,
         col = colorRampPalette(c("#6D9EC1", "white", "#E46726"))(200),
         diag = FALSE,
         title = "Exploratory Correlations in Graduate Apprenticeship Learning\n(Small Sample: Interpret as Preliminary Patterns)",
         mar = c(0, 0, 3, 0))

# Display the sample size for correlations
cat("### Sample Size Available for Each Correlation\n")
## ### Sample Size Available for Each Correlation
cat("The strength and reliability of correlation estimates depend heavily on sample size.\n")
## The strength and reliability of correlation estimates depend heavily on sample size.
cat("Our exploratory analysis has the following sample sizes for key correlations:\n\n")
## Our exploratory analysis has the following sample sizes for key correlations:
# Create and display a sample size table for key correlations
n_table <- data.frame(
  Relationship = c("Autonomy & Self-Directed Learning", 
                  "Autonomy & Skill Application",
                  "Autonomy & Learning Integration",
                  "Employer Support & Self-Directed Learning",
                  "Employer Support & Skill Application",
                  "Employer Support & Learning Integration"),
  Sample_Size = c(
    n_matrix["Autonomy", "Self-Directed Learning"],
    n_matrix["Autonomy", "Skill Application"],
    n_matrix["Autonomy", "Learning Integration"],
    n_matrix["Employer Support", "Self-Directed Learning"],
    n_matrix["Employer Support", "Skill Application"],
    n_matrix["Employer Support", "Learning Integration"]
  )
)

# Calculate Spearman's rank correlations (non-parametric alternative)
spearman_corr <- cor(correlation_vars, method = "spearman", use = "pairwise.complete.obs")
rownames(spearman_corr) <- c("Autonomy", "Employer Support", "University Support", 
                           "Self-Directed Learning", "Skill Application", "Learning Integration")
colnames(spearman_corr) <- rownames(spearman_corr)

# Compare Pearson and Spearman correlations for key relationships
correlation_comparison <- data.frame(
  Variable = c("Self-Directed Learning", "Skill Application", "Learning Integration"),
  Autonomy_Pearson = c(
    correlation_matrix["Autonomy", "Self-Directed Learning"],
    correlation_matrix["Autonomy", "Skill Application"],
    correlation_matrix["Autonomy", "Learning Integration"]
  ),
  Autonomy_Spearman = c(
    spearman_corr["Autonomy", "Self-Directed Learning"],
    spearman_corr["Autonomy", "Skill Application"],
    spearman_corr["Autonomy", "Learning Integration"]
  ),
  Support_Pearson = c(
    correlation_matrix["Employer Support", "Self-Directed Learning"],
    correlation_matrix["Employer Support", "Skill Application"],
    correlation_matrix["Employer Support", "Learning Integration"]
  ),
  Support_Spearman = c(
    spearman_corr["Employer Support", "Self-Directed Learning"],
    spearman_corr["Employer Support", "Skill Application"],
    spearman_corr["Employer Support", "Learning Integration"]
  )
)

# Display the comparison as a table with explanations
kable(correlation_comparison, digits = 2,
      caption = "Exploratory Comparison of Pearson and Spearman Correlations (Small Sample Size)",
      col.names = c("Learning Outcome", "Autonomy (Pearson)", "Autonomy (Spearman)", 
                   "Employer Support (Pearson)", "Employer Support (Spearman)")) %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = TRUE) %>%
  add_header_above(c(" " = 1, "Autonomy Correlations" = 2, "Employer Support Correlations" = 2)) %>%
  add_footnote(c("Pearson correlations assume linear relationships and are sensitive to outliers",
                "Spearman correlations are based on ranks and are more robust to non-linear relationships and outliers",
                "These preliminary patterns require validation with larger samples"),
               notation = "symbol")
Exploratory Comparison of Pearson and Spearman Correlations (Small Sample Size)
Autonomy Correlations
Employer Support Correlations
Learning Outcome Autonomy (Pearson) Autonomy (Spearman) Employer Support (Pearson) Employer Support (Spearman)
Self-Directed Learning 0.22 0.17 0.70 0.68
Skill Application 0.05 0.02 0.82 0.80
Learning Integration 0.12 0.06 0.80 0.79
* Pearson correlations assume linear relationships and are sensitive to outliers
Spearman correlations are based on ranks and are more robust to non-linear relationships and outliers
These preliminary patterns require validation with larger samples
# Display sample sizes
kable(n_table, caption = "Sample Sizes for Key Correlations") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE) %>%
  add_footnote("Note: Correlations based on small samples should be interpreted as exploratory")
Sample Sizes for Key Correlations
Relationship Sample_Size
Autonomy & Self-Directed Learning 21
Autonomy & Skill Application 20
Autonomy & Learning Integration 20
Employer Support & Self-Directed Learning 21
Employer Support & Skill Application 20
Employer Support & Learning Integration 20
a Note: Correlations based on small samples should be interpreted as exploratory

Understanding the Exploratory Correlation Analysis

Correlation analysis helps us explore potential relationships between different variables in our study. The correlation coefficient (r) ranges from -1 to +1:

  • A value close to +1 suggests a possible positive relationship
  • A value close to -1 suggests a possible negative relationship
  • A value close to 0 suggests little to no apparent relationship

For this exploratory analysis, we used two types of correlation methods:

  1. Pearson correlation: The traditional measure that looks for linear relationships
  2. Spearman correlation: A rank-based approach that may better handle non-linear relationships and outliers

What Our Exploratory Correlation Analysis Shows

The correlation matrix reveals several potential patterns that warrant further investigation:

  1. Employer Support: In our small sample, employer support shows positive correlations with learning outcomes. This preliminary pattern aligns with our qualitative data where apprentices noted the importance of support.

  2. Autonomy: Similarly, autonomy shows positive correlations with learning outcomes, though the strength of these preliminary relationships varies.

  3. Comparison Between Methods: The Pearson and Spearman correlations show some similarities, which provides a tentative indication that these patterns might not be driven solely by outliers, though this would require validation with larger samples.

It’s critical to emphasise that these correlations are based on a small sample (as shown in the sample size table above) and should be viewed as preliminary explorations rather than definitive findings. The patterns suggest potentially interesting relationships that could guide future research with more robust samples.

These tentative quantitative patterns complement our qualitative insights. When apprentices mention challenges like “need help to identify project suitability” or value “three way conversation” between stakeholders, they provide context that helps us make sense of the potential relationships indicated in our correlation analysis.

The value of our mixed-methods approach is that it allows us to triangulate between these preliminary quantitative patterns and the qualitative insights, providing a richer exploratory picture than either method alone could offer.

Key Insight 4: The Tri-Sphere Model as a Conceptual Framework

The Tri-Sphere Model of Discretionary Learning

The Tri-Sphere Model of Discretionary Learning

The Tri-Sphere Model as a Conceptual Framework

The Tri-Sphere Model of Discretionary Learning offers a conceptual framework for understanding how graduate apprentices learn effectively. As shown in the figure above, the model visualises effective work-based education as emerging at the intersection of three key domains:

  1. Academia Domain (top sphere): This represents the university’s contribution, including theoretical knowledge, structured curricula, academic mentoring, and assessment frameworks. In our study, we used university support scores as a proxy measure for this domain.

  2. Workplace Domain (bottom left sphere): This encompasses the practical context provided by employers, including real-world problems, professional communities of practice, industry standards, and workplace mentoring. We used employer support scores as a proxy for this domain.

  3. Apprentice Domain (bottom right sphere): This represents what the apprentice brings to the learning process – their autonomy, agency, prior knowledge, motivation, and capacity for self-direction. Our autonomy level measures served as a proxy for this dimension.

The model proposes that different types of learning may emerge at the intersections of these domains:

  • Academia + Workplace: Applied learning that connects theory with practice
  • Workplace + Apprentice: Self-directed workplace problem-solving
  • Academia + Apprentice: Independent academic inquiry
  • Academia + Workplace + Apprentice: Potentially optimal learning at the center where all three domains interact

The model offers a conceptual framework for thinking about the “autonomy paradox” observed in our exploratory data: high autonomy (Apprentice domain) alone might be insufficient for optimal learning; it may need to be complemented by appropriate support from both Academia and Workplace domains.

# Create proxy measures for the three domains of the Tri-Sphere Model
valid_data <- valid_data %>%
  mutate(
    academia_score = university_support_score,  # University domain proxy
    workplace_score = employer_support_score,   # Workplace domain proxy
    apprentice_score = autonomy_level           # Apprentice domain proxy (autonomy)
  )

# Create domain categories (high/low)
valid_data <- valid_data %>%
  mutate(
    high_academia = academia_score >= 3.5,
    high_workplace = workplace_score >= 3.5,
    high_apprentice = apprentice_score >= 3.5
  ) %>%
  mutate(
    domain_combination = case_when(
      high_academia & high_workplace & high_apprentice ~ "All Three Domains",
      high_academia & high_workplace & !high_apprentice ~ "Academia + Workplace",
      high_academia & !high_workplace & high_apprentice ~ "Academia + Apprentice",
      !high_academia & high_workplace & high_apprentice ~ "Workplace + Apprentice",
      high_academia & !high_workplace & !high_apprentice ~ "Academia Only",
      !high_academia & high_workplace & !high_apprentice ~ "Workplace Only",
      !high_academia & !high_workplace & high_apprentice ~ "Apprentice Only",
      !high_academia & !high_workplace & !high_apprentice ~ "No High Domains"
    )
  )

# Calculate learning outcomes by domain combination
domain_outcomes <- valid_data %>%
  group_by(domain_combination) %>%
  summarise(
    mean_learning = mean(self_directed_learning_score, na.rm = TRUE),
    count = n(),
    .groups = "drop"
  ) %>%
  arrange(desc(mean_learning))

# Create bar chart of learning outcomes by domain combination
ggplot(domain_outcomes, aes(x = reorder(domain_combination, mean_learning), 
                           y = mean_learning, fill = mean_learning)) +
  geom_bar(stat = "identity") +
  coord_flip() +
  geom_text(aes(label = sprintf("%.2f (n=%d)", round(mean_learning, 2), count)), hjust = -0.1) +
  labs(title = "Exploratory Analysis: Learning Outcomes by Domain Combination",
       subtitle = "Very preliminary patterns - small subgroup sample sizes require caution",
       x = "Domain Combination",
       y = "Mean Self-directed Learning Score") +
  theme(legend.position = "none") +
  scale_fill_gradient(low = "lightblue", high = "darkblue") +
  ylim(0, 5) +
  geom_hline(yintercept = 4, linetype = "dashed", color = "gray50") +
  annotate("text", x = 1, y = 4.1, label = "High performance threshold", hjust = 0)

Preliminary Exploration of the Tri-Sphere Model

To begin exploring whether the Tri-Sphere Model might be a useful conceptual framework, we conducted a preliminary analysis categorising apprentices based on their levels of support and autonomy in each domain. We then compared the average learning outcomes for each domain combination.

It’s crucial to note the extremely small sample sizes within each domain combination (as shown by the “n=” values in the chart). These very small subgroups mean that the patterns should be viewed as highly preliminary and would require substantial validation in future research with larger samples.

With this important caveat in mind, the initial patterns show:

  1. Possible Combined Effect: Apprentices with high levels in all three domains (“All Three Domains”) show relatively strong learning outcomes in our limited sample.

  2. Varied Combinations: Other domain combinations show varying outcomes, though the extremely small subgroup sizes prevent any definitive comparisons.

These very preliminary patterns align conceptually with the Tri-Sphere Model’s proposition that learning may be enhanced when all three domains work together. However, the limitations of our small exploratory sample mean that these patterns should be considered as generating hypotheses for future research rather than confirming the model.

The qualitative data offers contextual insights that complement these preliminary quantitative explorations. For example, when apprentices describe experiences like “A course I done in the past had a meeting with myself, my tutor, and my manager”, they are describing an interaction that spans all three domains. Similarly, challenges like “understand til i go to apply, different approach for me” suggest potential gaps between the academia and workplace domains.

The Tri-Sphere Model as a Framework for Understanding the Autonomy Paradox

While our exploratory data is too limited to validate the Tri-Sphere Model, it does offer a potentially useful conceptual framework for thinking about the autonomy paradox:

  1. Multi-Dimensional View: Rather than viewing autonomy and support as contradictory concepts, the model positions them as complementary domains that may interact to influence learning.

  2. Domain Integration: The model suggests exploring how the three domains might interact, rather than simply focusing on balancing autonomy and support.

  3. Generating Research Questions: The model generates interesting questions for future research about how the three domains might be optimally integrated in graduate apprenticeship programs.

The Tri-Sphere Model offers several potential advantages as a conceptual framework:

  • It moves beyond simple dichotomies to a more nuanced, multi-dimensional view
  • It provides a visual representation that can help stakeholders understand their potential roles
  • It offers a framework for designing future studies that address all three domains

Our exploratory mixed-methods study suggests that the Tri-Sphere Model may be a promising conceptual framework worth investigating in future research with larger, more robust samples. While our current evidence is too limited to validate the model, the integration of our preliminary quantitative patterns and qualitative insights suggests that the model captures important aspects of graduate apprenticeship learning that warrant further investigation.

Final Model Visualization and Practical Application

The Tri-Sphere Model Implementation

The Tri-Sphere Model Implementation

Practical Implementation of the Tri-Sphere Model

Based on our preliminary findings, we can suggest several practical approaches for implementing the Tri-Sphere Model in graduate apprenticeship programs:

For Academic Institutions:

  1. Structured Integration: Develop formal procedures for regular three-way meetings between academic tutors, workplace mentors, and apprentices
  2. Project Alignment: Create frameworks to help apprentices identify workplace projects that align with academic learning outcomes
  3. Support Assessment: Regularly evaluate whether apprentices are receiving adequate support from both academic and workplace domains

For Employers:

  1. Mentorship Training: Provide training for workplace mentors on supporting apprentices’ integration of academic learning
  2. Project Selection Support: Help apprentices identify appropriate workplace projects that provide meaningful learning opportunities
  3. Regular Check-ins: Establish consistent check-in points with apprentices to assess their support needs

For Apprentices:

  1. Support Mapping: Explicitly identify support resources available across both academic and workplace domains
  2. Autonomy Development: Gradually build autonomy through structured support that evolves over time
  3. Reflection Practice: Develop habits of reflection on how academic learning, workplace experience, and personal agency interact

Sample Demographics

Our sample consisted of 44 graduate apprentices distributed as follows:

# Create a data frame summarizing the sample demographics
demographics <- data.frame(
  University = c("University of West Scotland", "University of Glasgow", "Total"),
  Current = c(14, 11, 25),
  Alumni = c(17, 2, 19),
  Total = c(31, 13, 44)
)

# Display the demographics table
kable(demographics, caption = "Sample Demographics") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Sample Demographics
University Current Alumni Total
University of West Scotland 14 17 31
University of Glasgow 11 2 13
Total 25 19 44
# Create a visualization of the sample distribution
demo_long <- data.frame(
  University = rep(c("UWS", "Glasgow"), each = 2),
  Status = rep(c("Current", "Alumni"), 2),
  Count = c(14, 17, 11, 2)
)

ggplot(demo_long, aes(x = University, y = Count, fill = Status)) +
  geom_bar(stat = "identity", position = "dodge") +
  geom_text(aes(label = Count), position = position_dodge(width = 0.9), vjust = -0.5) +
  labs(title = "Distribution of Participants by University and Status",
       x = "University",
       y = "Number of Participants") +
  theme_minimal() +
  scale_fill_brewer(palette = "Set1")

This distribution shows our sample is weighted more heavily toward UWS (31 participants, 70.5%) compared to Glasgow (13 participants, 29.5%). The current student to alumni ratio is relatively balanced (25:19). However, the alumni representation is unevenly distributed between the two universities, with UWS having much higher alumni representation (17) compared to Glasgow (2). These sample characteristics should be considered when interpreting the results.

# Create an empirical validation visualization
# Use existing data but focus on the practical implementation

# Calculate mean scores by domain
domain_summary <- valid_data %>%
  summarise(
    Academia_Mean = mean(academia_score, na.rm = TRUE),
    Workplace_Mean = mean(workplace_score, na.rm = TRUE),
    Apprentice_Mean = mean(apprentice_score, na.rm = TRUE)
  )

# Create a data frame for domain visualization
domain_long <- pivot_longer(domain_summary, 
                            cols = everything(), 
                            names_to = "Domain", 
                            values_to = "Score")

# Create domain visualization
ggplot(domain_long, aes(x = reorder(Domain, -Score), y = Score, fill = Domain)) +
  geom_bar(stat = "identity", width = 0.6) +
  geom_text(aes(label = round(Score, 2)), position = position_stack(vjust = 0.9), 
            color = "white", fontface = "bold") +
  labs(title = "Average Domain Scores in Graduate Apprenticeships",
       subtitle = "Relative strength of each domain in the current sample",
       x = "",
       y = "Mean Score (1-5 scale)") +
  ylim(0, 5) +
  theme_minimal() +
  scale_fill_manual(values = c("steelblue", "darkgreen", "firebrick")) +
  theme(legend.position = "none")

Conclusions and Implications

Revisiting the Autonomy Paradox

Our mixed-methods analysis provides evidence for what might be described as an “autonomy paradox” in graduate apprenticeship learning. The quantitative data shows that:

  1. High autonomy is prevalent: A large majority of apprentices report significant or complete autonomy

  2. Support appears to influence outcomes: There is a positive association between employer support and learning outcomes, though the exact magnitude of this effect should be interpreted cautiously due to sample limitations

  3. Combined domains yield better results: The strongest learning outcomes appear to occur when all three domains (Academia, Workplace, and Apprentice) are highly engaged

The qualitative data provides context through expressions of:

  1. Project selection challenges: Apprentices need help identifying suitable workplace projects

  2. Value of structured communication: Three-way meetings between stakeholders are highly valued

  3. Varied employer support: Significant inconsistency exists in support levels across employers

  4. Application difficulties: Apprentices struggle to apply theoretical knowledge in practice

It’s important to acknowledge that the concept of an “autonomy paradox” represents our analytical framework rather than an explicit theme emerging directly from apprentice testimonials. Nevertheless, the complementary quantitative and qualitative findings suggest that effective learning likely requires both independence and structured support.

Practical Recommendations

Based on our findings, we offer the following tentative recommendations:

  1. Structured Support Frameworks: Employers should consider developing explicit support structures that don’t restrict autonomy but provide scaffolding for self-directed learning.

  2. Three-Way Communication: Regular structured meetings between apprentices, academic tutors, and workplace managers could help integrate learning across domains, as suggested by one apprentice’s positive experience.

  3. Consistent Employer Engagement: Given the evidence of variable employer support, programs should work to ensure all employers understand and actively engage with the graduate apprenticeship model.

  4. Project Selection Guidance: Specific support for identifying and scoping appropriate workplace projects would address a need explicitly mentioned in the qualitative data.

  5. Application Support: Assistance in applying theoretical knowledge to practical scenarios would help bridge the gap identified in apprentice responses.

Limitations and Future Research

This study has several important limitations that must be acknowledged:

  1. Small Sample Size: Our sample of 44 participants (31 from UWS and 13 from Glasgow) significantly constrains statistical power and generalisability. The wide confidence intervals in our statistical analyses indicate substantial uncertainty in effect size estimates. Future studies should aim for larger, more diverse samples.

  2. Limited Qualitative Data: The brevity of many qualitative responses constrains the depth of analysis. Future research would benefit from in-depth interviews or focus groups to explore the autonomy-support dynamic more fully.

  3. Imbalanced Distribution: The uneven distribution between universities (31 from UWS vs. 13 from Glasgow) and between current students (25) and alumni (19) may introduce bias in our findings. Future research should aim for more balanced representation.

  4. Cross-Sectional Design: The current study provides only a snapshot in time. Longitudinal research could track how the autonomy-support relationship evolves over the course of an apprenticeship.

  5. Potential Selection Bias: Those who responded to our survey may not be representative of all graduate apprentices, potentially overrepresenting certain experiences or perspectives.

  6. Confounding Variables: Our analyses do not account for potentially important variables like apprentice background, prior experience, and workplace context.

Despite these substantial limitations, this exploratory study suggests potentially valuable directions for understanding the complex interplay between autonomy and support in work-based higher education. By acknowledging the need for both independence and structured guidance, we may be able to enhance the effectiveness of graduate apprenticeship programs.

Theoretical Implications

The findings of this research have potential theoretical implications that warrant further investigation:

  1. Reconceptualising Workplace Learning: Our findings raise questions about conventional assumptions that autonomy alone drives effective learning. Instead, the Tri-Sphere Model suggests that learning may emerge from the interaction of multiple domains.

  2. Beyond Self-Determination Theory: While Self-Determination Theory emphasises autonomy as a universal need, our research suggests its effectiveness might be contingent upon support structures.

  3. Expanding Situated Learning Theory: The autonomy paradox concept might extend Lave and Wenger’s situated learning by highlighting how context-specific support mediates the relationship between participation and learning outcomes.

The Tri-Sphere Model offers a potential framework for understanding work-based higher education, emphasising the integration of academic, workplace, and apprentice domains. This model might help explain why autonomy alone seems insufficient for optimal learning outcomes.

In conclusion, our exploratory analysis suggests that graduate apprenticeships might work best when they balance autonomy with appropriate support structures. While we must be cautious about drawing strong conclusions from our limited data, the findings point to interesting directions for future research on the complex relationship between autonomy and support in work-based learning.

# Wrap entire chunk in tryCatch for robustness
tryCatch({
  # Define medians for quadrant analysis
  autonomy_median <- median(valid_data$autonomy_level, na.rm = TRUE)
  support_median <- median(valid_data$employer_support_score, na.rm = TRUE)
  
  # Create quadrant variable
  valid_data <- valid_data %>%
    mutate(quadrant = case_when(
      autonomy_level >= autonomy_median & employer_support_score >= support_median ~ "High Autonomy + High Support",
      autonomy_level >= autonomy_median & employer_support_score < support_median ~ "High Autonomy + Low Support",
      autonomy_level < autonomy_median & employer_support_score >= support_median ~ "Low Autonomy + High Support",
      autonomy_level < autonomy_median & employer_support_score < support_median ~ "Low Autonomy + Low Support",
      TRUE ~ NA_character_
    ))
  
  # Add quadrant colors for consistent visualization
  quadrant_colors <- c(
    "High Autonomy + High Support" = "#4DAF4A",  # Green
    "High Autonomy + Low Support" = "#E41A1C",   # Red
    "Low Autonomy + High Support" = "#377EB8",   # Blue
    "Low Autonomy + Low Support" = "#FF7F00"     # Orange
  )
  
  # Calculate quadrant statistics
  quadrant_stats <- valid_data %>%
    filter(!is.na(quadrant)) %>%
    group_by(quadrant) %>%
    summarise(
      Count = n(),
      `Self-Directed Learning (Mean)` = mean(self_directed_learning_score, na.rm = TRUE),
      `Skill Application (Mean)` = mean(skill_application_score, na.rm = TRUE),
      `Learning Integration (Mean)` = mean(learning_integration_score, na.rm = TRUE)
    ) %>%
    ungroup() %>%
    mutate(across(where(is.numeric), ~ round(., 2)))
  
  # Add percentage column
  quadrant_stats <- quadrant_stats %>%
    mutate(Percentage = round(Count / sum(Count) * 100, 1))
  
  # Create a quadrant statistics table with enhanced styling
  quadrant_table <- kable(quadrant_stats %>% 
                            select(quadrant, Count, Percentage, 
                                   `Self-Directed Learning (Mean)`, 
                                   `Skill Application (Mean)`, 
                                   `Learning Integration (Mean)`), 
        caption = "Learning Outcomes by Autonomy-Support Combinations",
        col.names = c("Quadrant", "Count", "%", "Self-Directed Learning", 
                      "Skill Application", "Learning Integration")) %>%
    kable_styling(bootstrap_options = c("striped", "hover"))
    
  # Display the table
  quadrant_table
  
}, error = function(e) {
  message("Error in quadrant analysis: ", e$message)
  
  # Create a fallback display
  kable(data.frame(
    Error = "Could not perform quadrant analysis",
    Details = paste("Error message:", e$message)
  ), caption = "Error in Quadrant Analysis") %>%
    kable_styling(bootstrap_options = c("striped", "hover"))
})
Learning Outcomes by Autonomy-Support Combinations
Quadrant Count % Self-Directed Learning Skill Application Learning Integration
High Autonomy + High Support 5 23.8 3.76 3.88 3.36
High Autonomy + Low Support 8 38.1 2.75 2.20 2.14
Low Autonomy + High Support 6 28.6 3.35 3.43 3.10
Low Autonomy + Low Support 2 9.5 1.65 1.85 1.70
# Wrap visualization in tryCatch
tryCatch({
  # Convert quadrant data to long format for plotting
  quadrant_plot_data <- quadrant_stats %>%
    pivot_longer(cols = c(`Self-Directed Learning (Mean)`, `Skill Application (Mean)`, `Learning Integration (Mean)`),
                 names_to = "Measure", values_to = "Score") %>%
    mutate(Measure = gsub(" \\(Mean\\)", "", Measure))
    
  # Create the enhanced plot
  ggplot(quadrant_plot_data, aes(x = Measure, y = Score, fill = quadrant)) +
    geom_bar(stat = "identity", position = position_dodge(width = 0.9), width = 0.8) +
    scale_fill_manual(values = quadrant_colors) +
    geom_text(aes(label = Score), position = position_dodge(width = 0.9), 
              vjust = -0.5, size = 3.5) +
    labs(title = "Learning Outcomes Across Autonomy-Support Combinations",
         subtitle = "High Autonomy + High Support consistently shows the best outcomes",
         x = "Learning Outcome Measure", 
         y = "Mean Score (out of 5.0)",
         fill = "Quadrant") +
    theme_minimal() +
    theme(axis.text.x = element_text(angle = 0, hjust = 0.5),
          legend.position = "bottom",
          plot.title = element_text(face = "bold"),
          legend.title = element_text(face = "bold")) +
    coord_cartesian(ylim = c(0, 5.5)) + # Set y-axis limit to make room for text
    guides(fill = guide_legend(nrow = 2))  # Make legend take up less space
}, error = function(e) {
  message("Error in quadrant plot: ", e$message)
  
  # Create a simple fallback plot
  plot(1:5, 1:5, type = "n", 
       main = "Error Creating Quadrant Plot", 
       xlab = "", ylab = "", axes = FALSE)
  text(3, 3, paste("Error:", e$message), col = "red")
  text(3, 2, "Check data and code for issues", col = "darkblue")
})

Learning Outcomes Across Autonomy-Support Combinations

Quadrant Analysis: Understanding the Autonomy-Support Relationship

The quadrant analysis provides another perspective on the autonomy paradox by dividing apprentices into four groups based on their levels of autonomy and employer support. This allows us to examine how different combinations of autonomy and support relate to learning outcomes.

As shown in the visualisation, apprentices with high autonomy and high support consistently achieve the best learning outcomes across all measures. What’s particularly interesting is that apprentices with low autonomy but high support frequently outperform those with high autonomy but low support, suggesting that support structures may be even more critical than autonomy itself.

This aligns with the qualitative findings, which indicate that apprentices value structured support mechanisms, particularly three-way meetings between academic tutors, workplace mentors, and themselves. As one apprentice reported: “A course I done in the past had a meeting with myself, my tutor, and my manager to have a three way conversation on how things have went.”

The quadrant analysis reinforces the central premise of the Tri-Sphere Model—that optimal learning occurs at the intersection of multiple domains. Specifically, it highlights the importance of the Workplace domain (employer support) in enabling apprentices to effectively utilise their autonomy.

# Create a visualization highlighting key correlations
correlation_highlight <- data.frame(
  Variable_Pair = c("Employer Support & Self-Directed Learning",
                   "Employer Support & Skill Application",
                   "Employer Support & Learning Integration",
                   "Autonomy & Self-Directed Learning",
                   "Autonomy & Skill Application",
                   "Autonomy & Learning Integration"),
  Correlation = c(
    correlation_matrix["Employer Support", "Self-Directed Learning"],
    correlation_matrix["Employer Support", "Skill Application"],
    correlation_matrix["Employer Support", "Learning Integration"],
    correlation_matrix["Autonomy", "Self-Directed Learning"],
    correlation_matrix["Autonomy", "Skill Application"],
    correlation_matrix["Autonomy", "Learning Integration"]
  ),
  Type = c(rep("Employer Support", 3), rep("Autonomy", 3))
)

# Create visualization
ggplot(correlation_highlight, aes(x = reorder(Variable_Pair, Correlation), y = Correlation, fill = Type)) +
  geom_bar(stat = "identity") +
  coord_flip() +
  geom_text(aes(label = round(Correlation, 2)), hjust = -0.2) +
  labs(title = "Key Correlations: Autonomy vs. Employer Support",
       subtitle = "Comparing relationships with learning outcomes",
       y = "Correlation Coefficient",
       x = "") +
  theme_minimal() +
  scale_fill_manual(values = c("steelblue", "darkgreen")) +
  theme(legend.position = "bottom") +
  ylim(0, max(correlation_highlight$Correlation) * 1.2)

Key Correlation Comparison

This visualisation highlights the relative strength of correlations between our key variables. It allows us to directly compare how autonomy and employer support relate to different learning outcomes.

The pattern is clear: while both autonomy and employer support show positive correlations with learning outcomes, employer support consistently shows stronger relationships across all three outcome measures. This provides further evidence for the importance of support structures in graduate apprenticeships, and helps explain the autonomy paradox—high autonomy alone is insufficient; it needs to be paired with appropriate support.

These correlations support the conceptual framework provided by the Tri-Sphere Model, which suggests that optimal learning emerges at the intersection of multiple domains rather than from any single factor alone.

Final Summary and Recommendations

Our mixed-methods analysis of the autonomy paradox in graduate apprenticeship learning has revealed several key insights:

  1. The Paradox is Real: Our data from 44 participants (25 current students and 19 alumni) confirms that while apprentices typically have high levels of autonomy, they often lack the confidence to utilise this freedom effectively without structured support.

  2. Support is Critical: Employer support shows strong positive correlations with learning outcomes and appears to be even more important than autonomy itself in some contexts.

  3. The Tri-Sphere Model: Our proposed conceptual framework helps explain the autonomy paradox by visualising effective learning as emerging at the intersection of Academia, Workplace, and Apprentice domains.

  4. Integration Matters: Apprentices value mechanisms that integrate these domains, such as three-way meetings between academic tutors, workplace mentors, and themselves.

Practical Recommendations for Stakeholders

For Program Administrators:

  1. Design programs that explicitly address all three domains of the Tri-Sphere Model
  2. Develop formal mechanisms for integration, such as structured three-way meetings
  3. Provide training for workplace mentors on balancing autonomy with support

For Employers:

  1. Recognise that high autonomy requires complementary support structures
  2. Assist apprentices with project selection and application of theoretical knowledge
  3. Maintain regular communication with academic partners

For Apprentices:

  1. Actively seek support when needed, even while exercising autonomy
  2. Work to integrate learning across academic and workplace domains
  3. Reflect on how autonomy and support interact in your learning process

Future Research Directions

While our exploratory study provides valuable insights, further research is needed to:

  1. Test the Tri-Sphere Model with larger, more diverse samples
  2. Explore how the autonomy-support relationship evolves over time
  3. Identify specific support mechanisms that most effectively enable autonomy
  4. Investigate how individual differences affect the optimal balance of autonomy and support

By continuing to explore these questions, we can develop more effective approaches to work-based higher education that balance independence with appropriate guidance.

References

Billett, S. (2001). Learning in the workplace: Strategies for effective practice. Allen & Unwin.

Eraut, M. (2004). Informal learning in the workplace. Studies in Continuing Education, 26(2), 247-273.

Lave, J., & Wenger, E. (1991). Situated learning: Legitimate peripheral participation. Cambridge University Press.

Ryan, R. M., & Deci, E. L. (2000). Self-determination theory and the facilitation of intrinsic motivation, social development, and well-being. American Psychologist, 55(1), 68-78.

Tynjälä, P. (2008). Perspectives into learning at the workplace. Educational Research Review, 3(2), 130-154.