Not Just a Pay Gap T. Smith-Carrier, M. Penner, A. L. Cecala & C. Agócs Appendix MATLAB Code for Salary and Pension Calculations %% Salary and Pension calculations for Man vs. Woman faculty at King's University College % Last Updated: May 9, 2021 by Aaron Cecala % Manuscript Name: "It's Not Just a Pay Gap: Modelling the Gender Wage and % Pension Gap at a Post-Secondary Institution in Canada" % Manuscript Authors: Tracy Smith-Carrier, Marcie Penner, Aaron Cecala, % Carol Agocs % Journal Name: Canadian Journal of Higher Education %% Closes all figures, variables and previous text in Command Window close all clearvars; clc; %% Initial Salary Numbers based on most recent King's Salary Tables BaseSalary_F = 89430; % Base Salary for Female Faculty (Note: should be the same as male) BaseSalary_F_refresh = BaseSalary_F; BaseSalary_M = 89430; % Base Salary for Male Faculty (Note: should be the same as female) BaseSalary_M_refresh = BaseSalary_M; Initial_Salary_Diff = BaseSalary_M - BaseSalary_F; % Difference between Male and Female Base Salaries Percent_Female2Male_Base = 100*(BaseSalary_F/BaseSalary_M); % Female base salary as a percentage of male base salary PTR_Assistant = 2506; % Amount given for each year of prior experience for Assistant Prof Rank PTR_Assistant_refresh = PTR_Assistant; PTR_Associate = 2637; % Amount given for each year of prior experience for Associate Prof Rank PTR_Associate_refresh = PTR_Associate; PTR_Full = 2770; % Amount given for each year of prior experience for Full Prof Rank PTR_Full_refresh = PTR_Full; %% Rates of Salary Increase and Retirement Savings r = .01; % Multiplyer of Base Salary which equals % raise/year on Base Salary and PTR_Associate RS_Rate_University = .13; % Percentage of base salary that university contributes to Retirement account RS_Rate_Individual = .09; % Percentage of base salary that individual contributes to Retirement account Avg_Lifespan_M = 21.1; % Based on average lifespan of Males and Females in Ontario, Canada (STATSCAN 2020) Avg_Lifespan_F = 21.1; % Based on average lifespan of Males and Females in Ontario, Canada (STATSCAN 2020) %% Years of Service Information Total_Years = 29; years total) % Assumed Total Years of Service beyond starting year (e.g. 29 +starting year = 30 Canadian Journal of Higher Education | Revue canadienne d’enseignement supérieur 51:2 (2021) Not Just a Pay Gap T. Smith-Carrier, M. Penner, A. L. Cecala & C. Agócs Years_Exp_Given_M = [3.5]; % Years given to Male Faculty member at the beginning of their career Years_Exp_Given_F = 0; % Years given to Female Faculty member at the beginning of their career Associate_Professor_Year = 7; % Year at which both sexes are in their first year as a tenured professor Full_Professor_Year_M = [31 18 18]; % Year at which Male Faculty member becomes a full professor Full_Professor_Year_F = [31 18 31]; % Year at which Female Faculty member becomes a full professor % Displays Initial Conditions in MATLAB Command Window disp('INITIAL CONDITIONS') disp(' ') disp('Salary Information: Constants') disp(['Starting Salary Female: $',num2str(BaseSalary_F)]) disp(['Starting Salary Male: $',num2str(BaseSalary_M)]) disp(['PTR Assistant equals: ', num2str(PTR_Assistant)]) disp(['PTR Associate equals: ', num2str(PTR_Associate)]) disp(['PTR Full equals: ', num2str(PTR_Full)]) disp(['Total Years of Career for both sexes: ',num2str(Total_Years)]) disp([num2str(r*100),'% raise is given to base salary each year']) disp(' ') disp('Salary Information: Assumptions') disp(['Number of years experience given to Male at start: ', num2str(Years_Exp_Given_M)]) disp(['Number of years experience given to Female at start: ', num2str(Years_Exp_Given_F)]) disp(['Year both sexes make tenure/promote to Associate PTR: ', num2str(Associate_Professor_Year)]) disp(['Year that Female makes it to full professor: ', num2str(Full_Professor_Year_F)]) disp(['Year that Male makes it to full professor: ', num2str(Full_Professor_Year_M)]) disp(' ') disp('Pension Information: Assumptions') disp(['Total number of years of retirement Male: ', num2str(Avg_Lifespan_M)]) disp(['Total number of years of retirement Female: ', num2str(Avg_Lifespan_F)]) %% Calculation Loop % Initialize Values BaseSalary_F_PlotArray =[]; % female base salary BaseSalary_M_PlotArray =[]; % male base salary Salary_F_PlotArray =[]; % female salary Salary_M_PlotArray =[]; % male salary Female_Yearly_Loss_PlotArray =[]; % female losses as a function of year Retirement_Savings_F_PlotArray =[]; % female Retirement savings as a function of year Retirement_Savings_M_PlotArray =[]; % male Retirement savings as a function of year Percent_Female2Male_Salary_PlotArray = []; % female to male ratios if length(Full_Professor_Year_M) == length(Full_Professor_Year_M) for Years_Male_Given_To_Base = 1:length(Years_Exp_Given_M) for scenarios = 1:length(Full_Professor_Year_M) % initializes variables for this loop Retirement_Savings_F = 0; Retirement_Savings_M = 0; Female_Yearly_Loss =[]; Canadian Journal of Higher Education | Revue canadienne d’enseignement supérieur 51:2 (2021) Not Just a Pay Gap T. Smith-Carrier, M. Penner, A. L. Cecala & C. Agócs Female_Yearly_Salary =[]; Male_Yearly_Salary = []; Percent_Female2Male_Salary =[]; for i = 1:Total_Years % Generates salary for male and female as long as under % first year of tenure ("Associate_Professor_Year") if i < Associate_Professor_Year Salary_M = BaseSalary_M + ((i+Years_Exp_Given_M(Years_Male_Given_To_Base)) * PTR_Assistant); Salary_F = BaseSalary_F + ((i+Years_Exp_Given_F) * PTR_Assistant); Salary_F_PlotArray(scenarios,i) = Salary_F; % female base salary Salary_M_PlotArray(scenarios,i) = Salary_M; % male base salary end % Generates salary for male as long as equal to or over % first year of tenure ("Associate_Professor_Year") and less than first % year of full professor if i >= Associate_Professor_Year && i < Full_Professor_Year_M(scenarios) Salary_M = BaseSalary_M + ((i+Years_Exp_Given_M(Years_Male_Given_To_Base)) * PTR_Associate); Salary_M_PlotArray(scenarios,i) = Salary_M; % male base salary end % Generates salary for female as long as equal to or over % first year of tenure ("Associate_Professor_Year") and less than first % year of full professor if i >= Associate_Professor_Year && i < Full_Professor_Year_F(scenarios) Salary_F = BaseSalary_F + ((i+Years_Exp_Given_F) * PTR_Associate); Salary_F_PlotArray(scenarios,i) = Salary_F; % female base salary end % Generates salary for male as long as equal to or over % first year of full professor if i >= Full_Professor_Year_M(scenarios) Salary_M = BaseSalary_M + ((i+Years_Exp_Given_M(Years_Male_Given_To_Base)+1) * PTR_Full); % Note the "+1" is the incentive given to all who make FP Salary_M_PlotArray(scenarios,i) = Salary_M; % female base salary end % Generates salary for female as long as equal to or over % first year of full professor if i >= Full_Professor_Year_F(scenarios) Salary_F = BaseSalary_F + ((i+Years_Exp_Given_F+1) * PTR_Full); % Note the "+1" is the incentive given to all who make FP Salary_F_PlotArray(scenarios,i) = Salary_F; % female base salary end % Stores data in an array for later calculations Canadian Journal of Higher Education | Revue canadienne d’enseignement supérieur 51:2 (2021) Not Just a Pay Gap T. Smith-Carrier, M. Penner, A. L. Cecala & C. Agócs year Male_Yearly_Salary(i) = round(Salary_M); Female_Yearly_Salary(i) = round(Salary_F); Female_Yearly_Loss(i) = Salary_M -Salary_F; Female_Yearly_Loss_PlotArray(scenarios,i) = Female_Yearly_Loss(i); % Plots female losses as a function of Percent_Female2Male_Salary(i) = 100*(Salary_F/Salary_M); Percent_Female2Male_Salary_PlotArray(scenarios,i) = Percent_Female2Male_Salary(i); % Retirement contributions for male and female. DATA NOT USED BELOW Retirement_Savings_F = Retirement_Savings_F+(Salary_F*RS_Rate_Individual)+(Salary_F*RS_Rate_University); Retirement_Savings_M = Retirement_Savings_M+(Salary_M*RS_Rate_Individual)+(Salary_M*RS_Rate_University); Retirement_Savings_F_PlotArray(scenarios,i) = Retirement_Savings_F; % Plots female Retirement savings as a function of year Retirement_Savings_M_PlotArray(scenarios,i) = Retirement_Savings_M; % Plots male Retirement savings as a function of year % Incremental Raise to BaseSalaries and PTRs at the END of each year BaseSalary_F = BaseSalary_F*(1+r); % Increments Female Base Salary by r% each iteration of the loop (i.e. each year) BaseSalary_M = BaseSalary_M*(1+r); % Increments Male Base Salary by r% each iteration of the loop (i.e. each year) PTR_Associate = PTR_Associate*(1+r); % Increments PTR_Associate by r% each iteration of the loop (i.e. each year) PTR_Assistant = PTR_Associate*0.95; % 95% of PTR_Associate PTR_Full = PTR_Associate*1.05; % 105% of PTR_Full BaseSalary_F_PlotArray(scenarios,i) =BaseSalary_F; % female base salary BaseSalary_M_PlotArray(scenarios,i) =BaseSalary_M; % male base salary end %% Numerical Calculations Using a Number of the items generated from the if/end loop above. Male_Total_Salary_Earned_LifeTime = sum(Male_Yearly_Salary); Female_Total_Salary_Earned_LifeTime = sum(Female_Yearly_Salary); FemaleTotal_Retirement_PercentMale_temp = round(Retirement_Savings_F); MaleTotal_Retirement_PercentMale_temp = round(Retirement_Savings_M); RetirementDiff_Career_PercentMale_temp = round(Retirement_Savings_M - Retirement_Savings_F); SalaryDiff_Career_PercentMale_temp = round(Salary_M - Salary_F); FemaleTotal_Yearly_Salarly_Losses_PercentMale_temp = round(sum(Female_Yearly_Loss(1,:))); Total_Female_Dollar_Loss_Over_Career_PercentMale_temp = round(RetirementDiff_Career_PercentMale_ temp+sum(Female_Yearly_Loss(1,:))); Last_3_Avg_Salary_M_temp = round(mean([Male_Yearly_Salary(Total_Years-2) Male_Yearly_Salary(Total_ Years-1) Male_Yearly_Salary(Total_Years)])); Last_3_Avg_Salary_F_temp = round(mean([Female_Yearly_Salary(Total_Years-2) Female_Yearly_Salary(Total_Years-1) Female_Yearly_Salary(Total_Years)])); Canadian Journal of Higher Education | Revue canadienne d’enseignement supérieur 51:2 (2021) Not Just a Pay Gap T. Smith-Carrier, M. Penner, A. L. Cecala & C. Agócs Difference_Last_3_Avg_Salary_temp = Last_3_Avg_Salary_M_temp - Last_3_Avg_Salary_F_temp; Male_Pension_Per_Year_temp = round((0.02*Last_3_Avg_Salary_M_temp)*Total_Years); Male_Stuff =(0.02*Last_3_Avg_Salary_M_temp); % this is the first part of the annuity calc which is to find the "maximum". %Given that we do not know what the CRA max will be in 30 years we cannot use this. Female_Pension_Per_Year_temp = round((0.02*Last_3_Avg_Salary_F_temp)*Total_Years); Female_Stuff = (0.02*Last_3_Avg_Salary_F_temp);% this is the first part of the annuity calc which is to find the "maximum". %Given that we do not know what the CRA max will be in 30 years we cannot use this. Total_Male_Pension_temp = round(Male_Pension_Per_Year_temp*Avg_Lifespan_M); Total_Female_Pension_temp = round(Female_Pension_Per_Year_temp*Avg_Lifespan_F); Difference_Total_Pension_temp = Total_Male_Pension_temp -Total_Female_Pension_temp; Total_Losses_Combined_temp = Difference_Total_Pension_temp+FemaleTotal_Yearly_Salarly_Losses_PercentMale_temp; % Converts Numerical Calculations to Strings for text year display FemaleTotal_Retirement_PercentMale = num2str(FemaleTotal_Retirement_PercentMale_temp); MaleTotal_Retirement_PercentMale = num2str(MaleTotal_Retirement_PercentMale_temp); RetirementDiff_Career_PercentMale = num2str(RetirementDiff_Career_PercentMale_temp); SalaryDiff_Career_PercentMale = num2str(SalaryDiff_Career_PercentMale_temp); FemaleTotal_Yearly_Salarly_Losses_PercentMale = num2str(FemaleTotal_Yearly_Salarly_Losses_PercentMale_ temp); Total_Female_Dollar_Loss_Over_Career_PercentMale = num2str(Total_Female_Dollar_Loss_Over_Career_PercentMale_temp); Last_3_Avg_Salary_F = num2str(Last_3_Avg_Salary_F_temp); Last_3_Avg_Salary_M = num2str(Last_3_Avg_Salary_M_temp); Difference_Last_3_Avg_Salary = num2str(Difference_Last_3_Avg_Salary_temp); Male_Pension_Per_Year = num2str(Male_Pension_Per_Year_temp); Female_Pension_Per_Year = num2str(Female_Pension_Per_Year_temp); Total_Male_Pension = num2str(Total_Male_Pension_temp); Total_Female_Pension = num2str(Total_Female_Pension_temp); Total_Pension_Difference = num2str(Difference_Total_Pension_temp); Total_Losses_Combined = num2str(Total_Losses_Combined_temp); FemaletoMale_Percent_Salary_Year_1 = num2str(Percent_Female2Male_Salary(1)); FemaletoMale_Percent_Salary_Year_Last = num2str(Percent_Female2Male_Salary(end)); Male_Total_Salary_Earned_LifeTime_str= num2str(Male_Total_Salary_Earned_LifeTime); Female_Total_Salary_Earned_LifeTime_str = num2str(Female_Total_Salary_Earned_LifeTime); %% Displays Initial Conditions in the MATLAB Command Window disp(' ') disp(' ') if scenarios == 1 disp('SCENARIO A: MAN AND WOMAN ARE PROMOTED FROM ASSISTANT TO ASSOCIATE PROFESSOR AT THE SAME TIME AND STAY AT ASSOCIATE PROFESSOR RANK') Canadian Journal of Higher Education | Revue canadienne d’enseignement supérieur 51:2 (2021) Not Just a Pay Gap T. Smith-Carrier, M. Penner, A. L. Cecala & C. Agócs elseif scenarios == 2 disp('SCENARIO B: MAN AND WOMAN ARE PROMOTED FROM ASSISTANT TO ASSOCIATE PROFESSOR AND FULL PROFESSOR AT THE SAME TIME') elseif scenarios == 3 disp('SCENARIO C: MAN AND WOMAN ARE PROMOTED FROM ASSISTANT TO ASSOCIATE PROFESSOR AT THE SAME TIME, BUT ONLY MAN PROMOTED TO PROFESSOR RANK') else disp('NEW SCENARIO, MUST GIVE DESCRIPTION') end %% Displays Calculated Data in MATLAB Command Window disp(' ') disp('CALCULATED DATA') disp(' ') disp('Salary') disp(['Final Salary Woman: $',num2str(round(Salary_F))]) disp(['Final Salary Man: $',num2str(round(Salary_M))]) disp(['Woman Salary to Man Salary as a Percentage in First Working year:',FemaletoMale_Percent_Salary_Year_1,'%']) disp(['Woman Salary to Man Salary as a Percentage in Final Working year:',FemaletoMale_Percent_Salary_Year_Last,'%']) disp(['Difference in 30th year salary equals $',SalaryDiff_Career_PercentMale]) disp(['Salary Average of the last 3 years for Woman: $',Last_3_Avg_Salary_F]) disp(['Salary Average of the last 3 years for Man: $', Last_3_Avg_Salary_M]) disp(['Difference in last 3 year salary averages equals $',Difference_Last_3_Avg_Salary]) disp(['Man Total Salary Earned Over Lifetime $',Male_Total_Salary_Earned_LifeTime_str]) disp(['Woman Total Salary Earned Over Lifetime $',Female_Total_Salary_Earned_LifeTime_str]) disp(['Total Woman Yearly Salary Losses equals $',FemaleTotal_Yearly_Salarly_Losses_PercentMale]) disp(' ') disp('Pension Benefits') disp(['Man Pension yearly salary: $',Male_Pension_Per_Year]) disp(['Woman Pension yearly salary: $',Female_Pension_Per_Year]) disp(['Man Pension earned until death: $',Total_Male_Pension]) disp(['Woman Pension earned until death: $',Total_Female_Pension]) disp(['Difference Total Pension at death: $',Total_Pension_Difference]) disp(' ') disp(['Grand Woman Losses (Combined Salary and Pension Losses): $',Total_Losses_Combined]) BaseSalary_M = BaseSalary_M_refresh; BaseSalary_F = BaseSalary_F_refresh; Salary_M = []; Salary_F = []; PTR_Assistant = PTR_Assistant_refresh; PTR_Associate = PTR_Associate_refresh; PTR_Full = PTR_Full_refresh; end end Canadian Journal of Higher Education | Revue canadienne d’enseignement supérieur 51:2 (2021) Not Just a Pay Gap T. Smith-Carrier, M. Penner, A. L. Cecala & C. Agócs else disp('length(Full_Professor_Year_M) is not equal to length(Full_Professor_Year_M)') end Canadian Journal of Higher Education | Revue canadienne d’enseignement supérieur 51:2 (2021)
Author
Postdoctoral Fellow
Author
King's University College at Western University
Author
Professor Emerita
Author
Associate Professor