## ----include = FALSE---------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----eval=FALSE--------------------------------------------------------------- # devtools::install_github("microsoft/vivaglint") # library(vivaglint) ## ----eval=FALSE--------------------------------------------------------------- # survey_path <- system.file("extdata", "survey_export.csv", package = "vivaglint") # survey <- read_glint_survey(survey_path, emp_id_col = "EMP ID") ## ----eval=FALSE--------------------------------------------------------------- # glint_setup( # tenant_id = "your-tenant-id", # client_id = "your-client-id", # client_secret = "your-client-secret", # experience_name = "your-experience-name" # ) # survey <- read_glint_survey_api( # survey_uuid = "your-survey-uuid", # cycle_id = "your-cycle-id", # emp_id_col = "EMP ID" # ) ## ----eval=FALSE--------------------------------------------------------------- # summary <- summarize_survey(survey, scale_points = 5) ## ----eval=FALSE--------------------------------------------------------------- # # Engagement-specific questions # engagement_qs <- c( # "I would recommend my team as a great place to work", # "My work is meaningful" # ) # engagement_summary <- summarize_survey(survey, # scale_points = 5, # questions = engagement_qs) ## ----eval=FALSE--------------------------------------------------------------- # distributions <- get_response_dist(survey, scale_points = 5) ## ----eval=FALSE--------------------------------------------------------------- # survey_path <- system.file("extdata", "survey_export.csv", package = "vivaglint") # survey_q1 <- read_glint_survey(survey_path, emp_id_col = "EMP ID") # survey_q2 <- read_glint_survey(survey_path, emp_id_col = "EMP ID") # survey_q3 <- read_glint_survey(survey_path, emp_id_col = "EMP ID") # # trends <- compare_cycles( # survey_q1, survey_q2, survey_q3, # scale_points = 5, # cycle_names = c("Q1 FY25", "Q2 FY25", "Q3 FY25") # ) ## ----eval=FALSE--------------------------------------------------------------- # # Direct reports only # manager_summary <- aggregate_by_manager(survey, scale_points = 5) # # # Full org tree (includes indirect reports) # manager_full <- aggregate_by_manager(survey, scale_points = 5, full_tree = TRUE) ## ----eval=FALSE--------------------------------------------------------------- # library(dplyr) # # # Managers where fewer than 50% of their team is favorable on a key item # low_engagement_managers <- manager_summary %>% # filter(question == "I would recommend my team as a great place to work", # pct_favorable < 50) %>% # arrange(pct_favorable) ## ----eval=FALSE--------------------------------------------------------------- # attr_path <- system.file("extdata", "employee_attributes.csv", package = "vivaglint") # demo_results <- analyze_by_attributes( # survey, # attribute_file = attr_path, # scale_points = 5, # attribute_cols = c("Department", "Gender", "Tenure Group"), # min_group_size = 10 # Suppress groups below this size for privacy # ) ## ----eval=FALSE--------------------------------------------------------------- # # Join once # attr_path <- system.file("extdata", "employee_attributes.csv", package = "vivaglint") # survey_enriched <- join_attributes(survey, attr_path) # # # Reuse for multiple analyses — no need to re-read the file # dept_results <- analyze_by_attributes( # survey_enriched, # scale_points = 5, # attribute_cols = "Department" # ) # # gender_results <- analyze_by_attributes( # survey_enriched, # scale_points = 5, # attribute_cols = "Gender" # ) # # # Filter to a subpopulation before analyzing # na_only <- survey_enriched # na_only$data <- filter(survey_enriched$data, Region == "North America") # na_results <- analyze_by_attributes(na_only, scale_points = 5, # attribute_cols = "Department") ## ----eval=FALSE--------------------------------------------------------------- # # Basic attrition analysis (90, 180, and 365 days post-survey) # attrition_path <- system.file("extdata", "attrition.csv", package = "vivaglint") # attrition <- analyze_attrition( # survey, # attrition_file = attrition_path, # emp_id_col = "EMP ID", # term_date_col = "Termination Date", # scale_points = 5 # ) ## ----eval=FALSE--------------------------------------------------------------- # attr_path <- system.file("extdata", "employee_attributes.csv", package = "vivaglint") # attrition_path <- system.file("extdata", "attrition.csv", package = "vivaglint") # survey_enriched <- join_attributes(survey, attr_path) # # attrition_by_dept <- analyze_attrition( # survey_enriched, # attrition_file = attrition_path, # emp_id_col = "EMP ID", # term_date_col = "Termination Date", # scale_points = 5, # attribute_cols = c("Department", "Job Level"), # min_group_size = 10 # ) ## ----eval=FALSE--------------------------------------------------------------- # # Pearson correlations in long format (default) # correlations <- get_correlations(survey) # # # Spearman correlations (more robust for ordinal scale data) # correlations_spearman <- get_correlations(survey, method = "spearman") # # # Correlation matrix # cor_matrix <- get_correlations(survey, format = "matrix") ## ----eval=FALSE--------------------------------------------------------------- # # Requires the psych package # factors <- extract_survey_factors(survey, n_factors = 3, rotation = "oblimin") # # # Consolidated summary: item, factor assignment, loading, label, communality # print(factors$factor_summary) # # # Filter to items with strong factor loadings only # strong_loaders <- dplyr::filter(factors$factor_summary, loading_label == "Strong") # # # Access the raw psych object for advanced use # factors$fa_object ## ----eval=FALSE--------------------------------------------------------------- # # Fuzzy search (default) — tolerates minor spelling differences # flexibility_comments <- search_comments(survey, "flexibility") # # # Exact, case-sensitive match # exact_results <- search_comments(survey, "work from home", exact = TRUE) # # # Broaden fuzzy tolerance to catch more spelling variation # results <- search_comments(survey, "colaboration", max_distance = 0.3) ## ----eval=FALSE--------------------------------------------------------------- # # All responses in long format # long_all <- pivot_long(survey, data_type = "all") # # # Comments only # long_comments <- pivot_long(survey, data_type = "comments") # # # Both as separate tibbles # both <- pivot_long(survey, data_type = "both") # comments_df <- both$comments ## ----eval=FALSE--------------------------------------------------------------- # parts <- split_survey_data(survey) # # # Numeric scores only — standard respondent columns + one score column per question # quantitative <- parts$quantitative # # # Comments only — EMP ID + all _COMMENT, _COMMENT_TOPICS, _SENSITIVE_COMMENT_FLAG columns # qualitative <- parts$qualitative # # # Pass numeric data directly to vivaglint functions # summary <- summarize_survey(parts$quantitative, scale_points = 5, # emp_id_col = "EMP ID") # # # Rejoin at any time using EMP ID # full_data <- dplyr::left_join(parts$quantitative, parts$qualitative, by = "EMP ID") ## ----eval=FALSE--------------------------------------------------------------- # # Default is 5; consider 10 or higher for sensitive analyses # attr_path <- system.file("extdata", "employee_attributes.csv", package = "vivaglint") # demo_results <- analyze_by_attributes( # survey, # attribute_file = attr_path, # scale_points = 5, # attribute_cols = c("Department", "Gender"), # min_group_size = 10 # )