Feedback on IfA Equality, Diversity, and Inclusion Team

In January 2021, the Equality, Diversity, and Inclusion (EDI) team committee designed and administered a survey to obtain feedback on the efficacy of the EDI team and EDI initiatives more generally.

This notebook analyzes the results. If you would like to perform your own analysis, please email Michael Petersen (michael.petersen@roe.ac.uk) for assistance.

We have omitted the demographic responses. We are confident that the reponses constitute a representative sample of IfA members. Additionally, no cross-tabs are reported in this analysis (i.e. no separation along demographic lines). An internal analysis did not indicate any significant results as a function of different demographic elements.

In [1]:
from IPython.display import HTML

HTML('''<script>
code_show=true; 
function code_toggle() {
 if (code_show){
 $('div.input').hide();
 } else {
 $('div.input').show();
 }
 code_show = !code_show
} 
$( document ).ready(code_toggle);
</script>
<form action="javascript:code_toggle()"><input type="submit" value="Click here to toggle on/off the raw code."></form>''')
Out[1]:
In [2]:
# standard python modules
import numpy as np

# enable markdown printing
from IPython.display import Markdown, display
def printmd(string):
    """wrap markdown printing"""
    display(Markdown(string))

# how-to
#printmd('**bold**')
#printmd('_italics_')


# plotting utilities
import matplotlib.pyplot as plt
import matplotlib as mpl
%matplotlib inline

# adjust rcparams to MSP style
mpl.rcParams['xtick.labelsize'] = 10
mpl.rcParams['ytick.labelsize'] = 10
mpl.rcParams['font.weight'] = 'medium'
mpl.rcParams['axes.linewidth'] = 1.5
mpl.rcParams['xtick.major.width'] = 1.5
mpl.rcParams['xtick.minor.width'] = 0.75
mpl.rcParams['xtick.minor.visible'] = True
mpl.rcParams['ytick.major.width'] = 1.5
mpl.rcParams['ytick.minor.width'] = 0.75
mpl.rcParams['ytick.minor.visible'] = True
In [3]:
# definition to read questions from the google forms format

def summarize_answer(question,\
                     multiple=True,\
                     delimiter=b'., ',\
                     criteria=0,\
                     significance=5):
    """summarize an answer to a question
    
    inputs
    ----------
    question     : (list)    Responses to a question in list format.
    multiple     : (boolean) True if the question allowed multiple responses
    delimiter    : (string)  Safeguard to delimit the google forms format
    criteria     : (boolean evaluation) Allow for cross-tab analysis
    significance : (integer) How many responses must be recorded for reporting
    
    
    returns
    ----------
    none -- printed results only.
    
    """
    
    if criteria!=0:
        question = question[criteria]
    
    
    if multiple:
        #answerlist = np.array([np.array(q.split(b',')) for q in question)
        flatanswers = np.array([])
        for x in np.array([np.array(q.split(delimiter)) for q in question]):
            flatanswers = np.concatenate([flatanswers,x])
    else:
        flatanswers = question
        
    flatanswers = np.array([q.strip(b'.').strip(b'') for q in flatanswers])
        
    answers = np.unique(flatanswers[flatanswers!=b''])
    nanswers = np.zeros(answers.size)
    
    for ans in flatanswers:
        nanswers[ans==answers] += 1
            
    for ans in (-1.*nanswers).argsort():
        if nanswers[ans] < significance:
            printmd('******* - {0}'.format(\
                                  answers[ans].decode().lstrip()\
                                 ))
            continue
        try:
            printmd('**'+str(int(nanswers[ans]))+'** - {0}'.format(\
                                  answers[ans].decode().lstrip()\
                                 ))
        except:
            printmd('**'+str(int(nanswers[ans]))+'** - {0}'.format(\
                                  answers[ans]\
                                 ))
    

Read the file format from Google Forms, and organize into a keyed dictionary.

In [4]:
keys = ["timestamp",\
        "ifa",\
        "history",\
        "position",\
        "gender",\
        "inclusivity",\
        "importance",\
        "opinion",\
        "non_attendence",\
        "old_initiatives",\
        "new_initiatives",\
        "changes",\
        "comments",\
        "emails"]
fmts = ['S200','S200','S200','S200','S200',\
       'i4','i4','i4',\
        'S500','S500','S500','S5000','S5000','S500']


# read in the survey responses
Stats = np.genfromtxt('ROE_EDI_Responses',\
dtype={'names': list(keys),\
        'formats': fmts},
                   delimiter='\t',skip_header=1)


# Read in the question prompts specifically
f= open('ROE_EDI_Responses'); a = f.readline()


# reorganize into a dictionary
QDict = {}
for ikey,key in enumerate(keys):
    QDict[key] = a.split('\t')[ikey]

Overall Temperature

In [5]:
def make_numerical_figure(key):
    fig = plt.figure(figsize=(6,4))

    ax1 = fig.add_axes([0.15,0.45,0.8,0.48])

    temprange = np.arange(1,7,1)
    tempval = np.zeros(temprange.size)

    for x in Stats[key]:
        if x > 0:
            tempval[x-1] += 1

    ax1.plot(temprange,tempval,color='black',drawstyle='steps-mid')

    ax1.set_ylabel('# of responses',size=12)
    ax1.set_xlabel('score',size=12)
    ax1.set_title(QDict[key],size=12)

    ax1.tick_params(axis="y",which='both',direction="in"); ax1.tick_params(axis="x",which='both',direction="in",pad=5); ax1.yaxis.set_ticks_position('both'); ax1.xaxis.set_ticks_position('both')
    _ = ax1.set_xticks(temprange[0:-1])


make_numerical_figure('inclusivity')
make_numerical_figure('importance')
make_numerical_figure('opinion')

Initiatives

Responses to questions regarding ongoing initiatives.

In [6]:
# which questions?
initiatives = ["non_attendence","old_initiatives","new_initiatives"]

for qq in initiatives:
    printmd('_'+QDict[qq]+'_')
    summarize_answer(Stats[qq],delimiter=b', ',significance=1)
    print('')
        

Please select any reasons you have for not attending IfA EDI events.

18 - My schedule is generally too busy

11 - I don't feel that I would have an impact in attending

7 - The particular timing (Monday from 2-3 pm) is not good for me

4 - I regularly attend; none of the below apply to me

2 - I don't like how the team is managed

1 - I am not interested in the IfA EDI initiatives

1 - I feel any dissenting opinions are likely to be met with hostility

1 - I forget it's going to happen and then panic about it throwing off my schedule. Entirely my fault.

1 - I really want to attend but my schedule has been very busy lately -- will try to find the time!

1 - I try to regularly attend but lately on Mondays I've had a clash of meetings.

1 - Need a calendar to subscribe to so I can keep track of schedule

1 - Part of broader ROE not IfA

1 - hadn't considered it until now

1 - laziness


Please tick all EDI initiatives you were aware of before this morning's talk.

27 - Biweekly IfA EDI Newsletter

25 - IfA EDI team's monthly meetings

25 - School of Physics and Astronomy EDI team

22 - Open Days Public Outreach Talks

18 - IfA EDI monthly coffee open discussions

10 - Lobbying to join BBSTEM

8 - Offering guidance on job advert writing


Please tick all EDI initiatives you think the team should focus on in Spring 2021.

22 - Best practices for development of a 'supervising model'

22 - Microaggression addressing: how to identify/report/avoid

17 - Workload model for postdocs

1 - How to make astronomy more accessible for minorities and low-income classes

1 - Improving equity in recruitment at faculty and post-doc level

1 - Liaising with the SoPA EDI team to make sure that your excellent work is taken up and spread more widely

1 - PhD student workload model


Open response questions

In [7]:
# open response questions

# which questions?
programkeys = ["changes","comments"]
    
for qq in programkeys:
    printmd('_'+QDict[qq]+'_')
    summarize_answer(Stats[qq],significance=1)
    print('')
        

What would you change regarding inclusion at the IfA?

1 - ???

1 - Emphasis on outreach encouraging diversity at the primary/high school level

1 - Emphasising unacceptable and disrespectful behaviour in the workplace and University rules of conduct

1 - For some reason there's a tendency to group with alikes: students keep it to students, postdocs with postdocs, faculty is ver absent, etc

1 - Have a well-established system to report microaggressions or breaches of workplace EDI standards

1 - I'm sure there are things that should change, but I'm probably not in a good position to have a good sense of what they are

1 - Not sure yet!

1 - Please ask again when we can go back to the office

1 - There is little oversight of the PhD student-supervisor relationship, and those procedures that do exist to identify and address any issues are often toothless. More regular and more detailed meetings with the annual review team would be one idea to begin addressing this, as would a postdoc-PhD student mentoring scheme. Fundamentally, I believe the main issue is that staff (understandably) value their relationships with each other too highly to intervene on behalf of a PhD student who is receiving inadequate supervision

1 - Try advertise what the average person at the IfA can do to have a positive influence on the work environment


Do you have any additional comments regarding EDI initiatives?

1 - "I feel any EDI initiatives should be run though official groups organised by the department. The current group appears to have been self-appointed, as a specific response to the BLM movement, representing a minority with quite strong and specific opinions. EDI initiatives should be driven by popular support, representing the spectrum of opinion within the department to address a range of issues, rather than being a tool for a certain group to further their own particular beliefs on a specific topic. On the specific issue of race, the history of race relations in the UK is very different to the USA, as are the demographics of the UK in general, and Scotland in particular (2011 census: 96 per cent white, 2.7 per cent asian, etc). The lively debate about race relations that is prevalent in US institutions should not be imported wholesale (as is very easy, given the much larger US astronomy community), without regard for the specifics of the situation that exists in Scotland, and the UK as a whole."

1 - I am really impressed by the reading group - the articles highlighted and the comment/summaries - and the whole ethos of helping us all be better informed

1 - I like the initiatives, I think that getting more people involved/ connections down the hill might be good

1 - No

1 - Nowhere in this survey or in your email do you say what the acronym 'EDI' stands for. If you want to reach out to people who are not already involved in EDI, you first need to explain what EDI is

1 - Thanks for the great work you do! I especially liked the Stobie talk during Black History Month, as well as the ensuing discussion


Demographics

Demographic answers have been omitted. Please contact the organisers if you have any specific questions.

In [8]:
# which questions?
#demographics = ["ifa","history","position","gender"]


#for qq in demographics:
#    printmd('_'+QDict[qq]+'_')
#    summarize_answer(Stats[qq],delimiter=b', ',significance=5)
#    print('')
        
In [ ]: