Wednesday, November 11, 2026

Preparing the Data: Cattell's 16 Factor Personality Measure

As I said in my previous post, I'm working on a 2-part series where I show how to conduct psychometric analysis on a personality measure. Those posts are coming very soon, but today, I wanted to start by demonstrating how I prepare the data for psychometric analysis.

So let's start working with the Cattell's 16 Factor Personality Measure, or more specifically, items from the International Personality Item Pool (IPIP) selected to reflect the 16 factors identified by Cattell. I happened upon this measure while exploring the Open-Source Psychometrics Project website, which not only allows you to take a wide variety of personality measures, it also makes the data collected through the website freely available. This would be a great source to use for a class project, someone learning psychometrics or working with larger datasets... or a blog post!

When you download the data, you'll also get the measure's codebook included in the zip file. However, the codebook is really a data dictionary of the items in the dataset (name, definition, and how it's coded), and doesn't tell you which items are reverse-scored. So I also recommended this page, which lists items of each measure in order, showing which are reverse-keyed, as well as the alpha for each scale from the initial research. You may also want to check out this page for additional details about the measure.

When conducting psychometric analysis, you may or may not need to do any data cleaning. It really depends on how the data were collected - was it in a controlled setting, like a testing center? Or less controlled like - in the case of this measure - an online survey? We likely have missing data, since none of the items were required. We could also have straight-line answering (where a person selects the same response for each item), or nonsensical answers to the open-response age question, such as one respondent who entered 2,147,483,647, which would put their birth right in the middle of the Paleoproterozoic era, when the only living beings on the planet were ones who didn't require oxygen.

So let's load our data and get started with cleaning.
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.2.1     ✔ readr     2.2.0
## ✔ forcats   1.0.1     ✔ stringr   1.6.0
## ✔ ggplot2   4.0.3     ✔ tibble    3.3.1
## ✔ lubridate 1.9.5     ✔ tidyr     1.3.2
## ✔ purrr     1.2.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggthemes)

PF16 <- read_tsv("data.csv")
## Rows: 49159 Columns: 169
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: "\t"
## chr   (1): country
## dbl (168): A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, B1, B2, B3, B4, B5, B6, ...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

According to documentation from the website, they removed anyone under the age of 13 from the downloadable set, as well as anyone who didn't want their data included. But there are still children in the set (13 to 17), and also our immortal beings (i.e., 2 billion years old). We definitely want to remove those rows from data, since a random answer to the age question could also mean random answers on the rest of the measure. So let's get some descriptive data on our age measure, and make decisions about who to keep and who to filter out.

PF16 %>%
  filter(age > 99) %>%
  group_by(age) %>%
  summarise(count = n())
## # A tibble: 63 × 2
##      age count
##    <dbl> <int>
##  1   100     5
##  2   101     2
##  3   102     1
##  4   118     1
##  5   141     1
##  6   147     1
##  7   158     1
##  8   181     1
##  9   188     1
## 10   193     1
## # ℹ 53 more rows
I did some Googling, and the oldest person to ever live (recorded) was 122 years, and the oldest person still living is 117. I’m inclined to say anyone over 102 is not being truthful, so we’ll plan on filtering them out. Likely many people were not being truthful about age, but unless we have direct evidence they're lying, we'll have to leave them in. With the remaining respondents, we’ll classify their ages into groups: 13 to 17, 18 to 24, 25 to 34, 35 to 44, 45 to 64, 65+. I’m also going to add IDs to the file. Since each row is a person, I’ll just use row numbers.
PF16 <- PF16 %>%
  filter(age <= 102) %>%
  mutate(ID = row_number(),
         age_group = cut(age,
                         breaks = c(12, 17, 24, 34, 44, 64, Inf),
                         labels = c("13 to 17", "18 to 24", "25 to 34", "35 to 44", "45 to 64", "65+"),
                         right = TRUE))
To create the age grouping variable, I used the cut function, where I define my break points and use right = TRUE to say that the value provided is the end of each break. The first value in the "right = TRUE" notation should be the starting value minus 1.

Let's also replace missing values (currently coded with 0) with NA. Since all of our items are in a row, we can use mutate(across(firstvariable:lastvariable)) in the string we want to recode.
PF16 <- PF16 %>%
  mutate(across(A1:P10, ~na_if(., 0)))
Now we want to start identifying people with response patterns that won't provide meaningful information. This would include people who responded carelessly - like selecting the same option for each item or going between two options (like 4-5-4-5) - or with too much missing data. However, we want to be conservative in who we remove. Presumably, this was a volunteer survey that people did out of interest or curiosity. In those cases, some careless responding may mean the item was confusing, doesn't measure what it's supposed to, etc. But that doesn't mean there might not be some captive audience respondents - people who were required to complete the measure as part of coursework or a group activity - that just wanted to get it over with. Without being able to measure or control the context, we just don't know. This is why I'd like to be conservative in who I remove, because I'd rather retain people who were truly being careless than risk removing people whose "careless" responses are actually due to problematic items or scales.

There are a few ways we can measure careless responses. One is by looking at their longest string of identical responses. The other way is with intra-individual response variability, which is better at detecting people who stick to two consecutive options. The r package, careless, can do all of this for us. Reminder: if you don't have a particular package, you'll need to install it first with install.packages("packagename") before loading it. The longstring function will provide the count of the longest string of repeated answers; adding avg = TRUE will also give us the average length of strings across the entire row. irv computes intra-individual response variability, or the amount of variation in each row's responses. All of this will be easier if we have a dataset containing only item responses, and we generate a new dataset with the data from the careless functions; that way, we won't inadvertently use demographics, IDs, or results from a previous function. I'll also add to my flag dataset the number of missing responses and the longest string divided by total number of items, to measure the percentage of their responses included in that string.
library(careless)

Items <- PF16 %>%
  select(A1:P10)

longstrings <- longstring(Items, avg = TRUE)

Flags <- tibble(
  ID = PF16$ID,
  longstring = longstrings$longstr,
  avgstring = longstrings$avgstr,
  irv = irv(Items, na.rm = TRUE),
  na_count = rowSums(is.na(Items)),
  pct_long = longstring/163
)
Let's start with IRV, which should help us identify the worst offenders in terms of careless responding. Lower IRVs (say, less than 0.50) would identify people who gave the same answer or one of two answers to every item. Let's visualize our irv variable before we make any decisions on what to filter out.
library(ggthemes)
Flags %>% 
  ggplot(aes(irv)) + 
  geom_histogram() +
  theme_economist_white()
## `stat_bin()` using `bins = 30`. Pick better value `binwidth`.
## Warning: Removed 171 rows containing non-finite outside the scale range
## (`stat_bin()`).
We have a number of cases with an IRV of 0. Those are our true straight-liners. There are also cases with IRV of 0.50 or less. Those would be the people who bounce between two options. The overall counts are low, so we won't lose too many cases by filtering out any with an IRV of 0.50 or less.
Flags <- Flags %>%
  filter(irv > 0.50)
This dropped 381 cases. Now let's look at longstrings. Our IRV filter dropped people who showed careless response patterns across the whole measure, but we likely still have careless responders here. We just need to be judicious and data-driven in how we identify them.
range(Flags$pct_long)
## [1] 0.006134969 0.441717791
I also ran a basic histogram much like the one above for IRV (not pictured), and counts above 10% were so low, they weren't even visible. I reran the histogram, this time specifying bin width to figure out an exact cutoff, and limiting the scale to values between 0 and 50% (since we know our longest string is 44%).
Flags %>%
  ggplot(aes(pct_long)) +
  geom_histogram(binwidth = .01) +
  scale_x_continuous(limits = c(0, 0.50)) +
  theme_economist_white()
  

We have a large dropoff around the 9% string percentage. Let’s see how many cases we’d lose with that cutoff, as well as 10%.

Flags %>%
  filter(pct_long >= 0.09)
## # A tibble: 335 × 6
##       ID longstring avgstring   irv na_count pct_long
##    <int>      <dbl>     <dbl> <dbl>    <dbl>    <dbl>
##  1    42         15      1.90 0.553        0   0.0920
##  2    56         17      1.75 0.860        0   0.104 
##  3   176         15      1.96 0.769        1   0.0920
##  4   553         17      2.51 0.650        0   0.104 
##  5   617         17      2.51 0.737       11   0.104 
##  6  2038         17      3.40 0.688        0   0.104 
##  7  3418         18      2.09 1.31         0   0.110 
##  8  3995         15      1.47 1.30         1   0.0920
##  9  4035         15      2.86 0.985        0   0.0920
## 10  4385         16      2.12 0.849        0   0.0982
## # ℹ 325 more rows
Flags %>%
  filter(pct_long >= 0.10)
## # A tibble: 265 × 6
##       ID longstring avgstring   irv na_count pct_long
##    <int>      <dbl>     <dbl> <dbl>    <dbl>    <dbl>
##  1    56         17      1.75 0.860        0    0.104
##  2   553         17      2.51 0.650        0    0.104
##  3   617         17      2.51 0.737       11    0.104
##  4  2038         17      3.40 0.688        0    0.104
##  5  3418         18      2.09 1.31         0    0.110
##  6  6013         19      1.68 0.805        0    0.117
##  7  6909         21      1.92 1.51         1    0.129
##  8  7120         17      2.76 0.574        2    0.104
##  9  7158         18      1.99 0.718        6    0.110
## 10  7686         18      2.04 0.706        0    0.110
## # ℹ 255 more rows
A cutoff of 9% translate to a longest string of 15, and 10% translates to 17. Most of our scales contain 10 items, with the exception being scale B, intellect, at 13 items. Further, each scale contains 3-5 negatively worded items. If those items and scales are functioning as expected, the longest possible string would be 8. But what if those items and scales aren't functioning as expected? What if a negative item, that test developers thought represented the opposite of the trait being measured, is completely unrelated?

At the same time, these groups make up a small proportion of the overall sample. Using a cutoff of 10%, we would only lose about 0.5% of our overall total. So let's use 10%.
Flags <- Flags %>%
  filter(pct_long < 0.1)
NAs <- Flags %>% 
  group_by(na_count) %>% 
  summarise(count = n())

head(NAs)
## # A tibble: 6 × 2
##   na_count count
##      <dbl> <int>
## 1        0 35127
## 2        1  8705
## 3        2  2595
## 4        3   903
## 5        4   423
## 6        5   158
If we kept only complete cases, we’d still have over 35,000 cases to work with. But our psychometric approaches (CTT and Rasch) can handle some (but not a lot of) missing data. Using a cutoff of 2 missing or fewer would let us keep most of our sample, and shouldn't impact our ability to validate these scales.
Flags <- Flags %>%
  filter(na_count <= 2)
Now that we have our sample of people who appear to have put some effort into responding to the items, we can filter our PF16 dataset to just include those individuals.
PF16 <- PF16 %>%
  filter(ID %in% Flags$ID)
And to make it easier on myself, I'll save this dataset, so that I can start with it in my next post, where we'll work on CTT psychometric analysis!
write_csv(PF16, "Cleaned PF16 Data.csv")
See you in my next post!

Monday, August 10, 2026

I'm Baaaaack

 Hey all! Sorry for the long hiatus. I have good news and bad news.

The bad news: after 6 years at ABMS, the company decided to restructure and my position was eliminated. While I'm sad that my time at ABMS is over, I'm grateful for the many opportunities I had to work with ABMS Member Boards, support the value of certification, and learn more about longitudinal assessment as an alternative to point-in-time exams.

The good news is 2 parts: 1) I've got lots of great leads and am confident I'll land a new job soon. And 2) It's time to start blogging again!

It occurred to me that even though I've blogged A TON on statistics and R programming, I haven't covered much (if anything) about the type of statistics I've been doing as part of my jobs for over 10 years: psychometrics.

With that in mind, I have big plans to write some posts on psychometrics, a branch of statistics used with measures and assessments to ensure they are valid, reliable, and unbiased. I'm currently working on a 2-part post analyzing a personality measure, with the first post covering classical test theory analysis and the second using item response theory, specifically the Rasch model.

Also, even though NaNoWriMo, which organized events like A to Z blogging in the month of April, is essentially gone, that doesn't mean I can't do another A to Z. Or that it has to be done in April. (I know, crazy talk, right?) So look for an upcoming month with the A to Z of psychometrics.

As always, I love doing this as a way of helping others discover R and improve their skills. So if you have any requests for posts, please let me know!

Thursday, April 1, 2021

Noise in the Middle: Movie Review

I've been on a horror movie kick for a while (as I've said before particularly here and here, I love a good horror movie, and I also think that after the last year+ of insanity, nothing really scares me anymore, or at least fiction doesn't scare me more than reality). I've been checking out every horror movie I can find on my various streaming services and, well, I've definitely watched some crappy ones. Maybe I'll blog about them sometime.

This evening, I watched Noise in the Middle, the story of a grieving widow and his daughter with severe autism, who seek out an experimental treatment (what appears to be transcranial magnetic stimulation therapy or something like it). What he doesn't realize is that the house he rents is haunted by an occult-loving sadist and the ghosts of the children from his poor house/orphanage that he bound to be trapped in the house after their death. Or something. It's not completely clear but it apparently involved branding the children with an infinity symbol and also the children killing him and themselves with a fire. Or something. 

The concept was promising - although I find the "kid with autism has special powers (in this case, is a conduit and can see spirits)" concept to be problematic, just like I found the "woman with dementia is actually possessed" concept to be problematic in The Taking of Deborah Logan - and the movie started off great. We established the background, got some ominous shots and glowing eyes in dark rooms. We also saw some really interesting symbolic imagery after Emmy's (the daughter) treatments with TMS, very Ring-video type images, which could have been used more fully in connection with the haunted house and the concept but sadly was not. We even had the "person randomly finds occult shop/enthusiast who believes the main character and helps them" trope used for more humorous and uplifting effect. 

In the middle, things began to drag and become more convoluted, which I thought might be used to tie in the symbolic imagery from Emmy's sessions, but sadly was not. The end was just a big old mess. It felt like the writer had a great idea, spent lots of time on the beginning, lost steam in the middle, and then had to just finish the damn thing by the end. The movie toyed with so many horror concepts (haunted house starts to bring out the darkness in/infect the father, like The Shining; seemingly random images have more concrete meaning for the mystery, like Ringu/The Ring; grief manifested as a spirit or entity, like The Babadook) but never really fully committed to any of it.

Overall, I'd say don't bother with this one. The beginning made me have high expectations that this movie would be good/meaningful/even a little scary, but I ended up with "WTF did I just watch and why?". 

Sunday, February 7, 2021

Super Bowl Reactions

 I watched the Super Bowl tonight rooting hard for my Chiefs - I was even wearing a Mahomes jersey (full disclosure: it was supposed to be a Kelce jersey, since he's my favorite player, but due to a royal f-up by the post office, that jersey never arrived, so I was able to get a quick backup Mahomes, my second favorite player, jersey). I was disheartened that my Chiefs lost, but am happy for the Buccs to make an amazing comeback as a franchise (except you, Tom Brady, I still don't like you).

So my reactions:

America the Beautiful by H.E.R., the National Anthem by Eric Church and Jazmine Sullivan, and the poem by Amanda Gorman were wonderful. Honoring our frontline workers and the message from our President and First Lady - beautiful. Plus the first female ref at the Super Bowl - all the feels.

The penalties were a bit ridiculous, and mostly being called on the Chiefs. It's ballsy to call pass interference on an uncatchable pass. I understand that many penalty calls in football are based on what we scientists call the counterfactual - what would have happened if a condition (such as, a defensive player pushing a receiver out of the way) was not present - but when a call equals free yards or another try at a down, they need to be used thoughtfully. The penalty calls felt very one-sided. Yes, the Buccs finally got their own "unsportsmanlike conduct" call as well as a much-needed "roughing the passer" (but it took 3 guys hitting Mahomes in much the same whiplash way that caused a concussion 2 games ago). They say homefield advantage doesn't exist in playoff games. I beg to differ.

I'm surprised at the hate I'm seeing about the Halftime Show by The Weeknd. I went into halftime knowing a couple songs by him, and finished it as a fan. We're used to these blow-out halftime shows with 3 big-name artists plus 10 high schools worth of marching bands and drill teams on the field, but in COVID-land, that's just not possible. Instead, we got an artist who was able to showcase choral and dancing talent while still respecting social distance and safety. The dancers wrapped in face bandages for "I Can't Feel My Face" was super clever - guys, those were face masks! (NOT JOCK STRAPS, as some have joked.) They were able to have dancers in close quarters wearing face masks in a way that made sense with the song. In fact, they looked so little like face masks that... see jock strap comment. I was super impressed!

In the second half, we saw a bit of the old Chiefs, but sadly not enough to score a single point. The Buccs' defensive line was just too good - I mean, they ran a blitz on every f***ing play, and our offensive line couldn't hold them back long enough to give Mahomes as much time in the pocket as he's used to. This is something to work on for next season. Mahomes is an amazing quarterback but he's used to hanging in the pocket long enough to survey the field, pick his receiver, and pass; let's work on decreasing the time he needs in the pocket. And let's work on an offensive line that can predict how the blitz is going to work and knock those guys down. Yeah, a team that blitzes on every defensive play is unusual, but as we saw tonight, IT HAPPENS! Practice defusing a blitz from every angle.

Also, WHY DIDN'T YOU SHOW US AN INSTANT REPLAY ON THE RANDOM FAN ON THE FIELD?! I wanted to see that again/closer up.

Overall, I'm sad the Chiefs lost and annoyed at the one-sided-ness/overeagerness of the penalties. I enjoyed the game, the commercials (ALL the celebs came out for those, including a Wayne's World call-back with Cardi B???!), and the performances. I'm happy for the Buccs and hopeful for the Chief's next season (I mean, winning Super Bowl last year plus being AFC Champs again this year is nothing to sneeze at). And okay, Tom Brady proved that a quarterback can still be good and (pretty much automatically, because we always honor quarterbacks and ignore the other positions - like how about TE Gronkowski?) be Super Bowl MVP at 43. You're on top, dude; how about you retire?

Monday, January 4, 2021

My Dark Vanessa: Book Review

Content Warning: sexual abuse, child abuse, and rape

Earlier today, I finished My Dark Vanessa, a debut novel by Kate Elizabeth Russell. The book is told by Vanessa Wye, a young woman who was abused by her boarding school English teacher starting when she was 15. The book spans 17 years, jumping between Vanessa's youth and adulthood. Before I get into my (slightly spoiler-y) review, I want to say: I loved this book, and I also have no desire to ever read it again.

As you can imagine from the title and brief synopsis, this a difficult book, as we hear everything that happened in the mind of a young woman who was gaslighted into believing she had all the power in situations when she had almost none and at the same time, that she had no power in situations where she could do something to stop the abuse. It's a deep and disturbing dive into the way an older man selects and grooms his victim, changing her thinking and behavior for decades, and convincing her that she's a willing participant, even when she describes very clear dissociation (being outside of herself) during the episodes of abuse - a reaction often seen in victims of child abuse.

The book also digs into two really key issues, that I haven't often seen explored or explored this well: 1. The narrative that women have "feminine gifts" that allow them to have power over a man, and make these men do things they wouldn't otherwise do. And 2. That coming forward is the only responsible thing a victim of such abuse can do.

The first issue (the "power" of femininity to take away men's agency) is such a pervasive part of rape culture. But this book also explores how this narrative has been romanticized to even apply to situations of a very young girl and a much older man, in stories like Lolita, American Beauty, and Pretty Baby. It is this romanticization and narrative that makes Vanessa continue her relationship with her abuser, Jacob Strane, even when it actively hurts her. He convinces her that he has so much more to lose than she does if their "love" becomes public, that he cannot help himself, that she has the power in the situation to consent or decline (even when he ignores her requests for him to stop and/or fails to ask for consent for very extreme sexual acts), and that, most of all, she is special because of this power she has. For a lonely girl, away from home for the first time, it's so easy to see how he selects and grooms her. But perhaps one of the most frustrating things is, even as I was reading and feeling what Vanessa feels, the descriptions and behaviors were so clear, I would shout at her as I read that there's some textbook-level gaslighting going on. It's why this is such a good book - that the author can give us those really clear cues while still telling the book in first-person, and avoid the "unreliable narrator" trope - and also one I hope to never read again.

This narrative of feminine wiles is perhaps ones of biggest issues we need to contend with if we want to do away with rape culture for good. It's a narrative that, on its surface, appears to assign all the power to the woman and none to her rapist or abuser, when at its core, it instead makes the woman powerless to stop (and deserving of) whatever harm is done to her. It's also a narrative that can be so easily spun as a positive thing when it is actually toxic and harmful. 

The second issue is a bit more ambiguous, at least for me, because before I read this book, I would have agreed with this second statement, that victims must come forward so that the abuser can be brought to justice and that others can be protected. I believed this even as a person who did not bring my own rapist to justice, something I was very ashamed of about myself. But this book made me realize just how tricky this issue is. 

At a surface level, it seems like a conflict between the needs of the individual and the needs of many, and from a philosophical standpoint, the needs of the many should outweigh the needs of the individual. But framing it in such a way takes away the individual's autonomy, a major issue considering that the abuse/rape was all about taking away one individual's autonomy. And victims already feel a great deal of guilt and self-blame for the event; they don't need the guilt of believing they failed others, or that they are in some way responsible for the reprehensible actions of another. 

Framing it as needs of the individual vs. needs of the many oversimplifies exactly what the needs of the individuals are (privacy, self-care, fear of reprisals, and so on), while also making that individual an accomplice in how another person's actions affects the many. In the case of adults in positions of power abusing the people they should be protecting, no victim should ever be to blame; this is on the system that put (and often helps to keep) that person in power, and on all of us, for the ways (big and small) that we may contribute to these power dynamics and rape culture.

This book was very triggering for me (even though my personal experiences do not resemble Vanessa), and I'm still working through the emotions it's brought up. I was reminded of a book I read in college, Bastard Out of Carolina, which also details years of sexual abuse of a child. When I finished that book, I threw it against the wall. Fortunately this book didn't elicit that reaction, but I didn't have a super-positive reaction to the ending either. 

I'm still glad I read it, though I probably wouldn't recommend it to anyone who might also be triggered, especially if they haven't been able to work through their own trauma through therapy or treatment. And I'll definitely keep an eye out for future books by Kate Elizabeth Russell.

Saturday, December 19, 2020

Some Music for Your Holidays

Hey everyone,

One thing I've been doing during the pandemic is making music on my own. For our holiday season, I dropped my very first album: Winter Delights. You can read about the album and download tracks here or stream me on Soundcloud. I'm working on more arrangements (and upgraded my audio recording equipment) so I'm hoping to drop a full album early in the New Year!

And to give you a little extra something, here's a selection of performances from my choir's annual cabaret benefit, Apollo After Hours:

Sunday, December 13, 2020

A Follow-Up on Yesterday's Sexist Nonsense

 Unsurprisingly, I'm not the only one who found Joseph Epstein's op-ed enraging. I give you this delicious takedown from Amanda Kohlhofer.

A privileged white man with no post-grad education telling a woman with a doctorate not to use her credentials. How very original of you, kiddo.

To that end, let’s list Dr. Biden’s accomplishments:
  • She earned a Bachelor of Arts in English from the University of Delaware in 1975.
  • She earned a Master of Education, with a specialty in reading, from West Chester State College in 1981.
  • She earned a Master of Arts in Education from Villanova University in 1987.
  • She earned a Doctor of Education (Ed.D) in educational leadership from the University of Delaware in 2007
She accomplished all of this over the span of 32 years, all while becoming a wife, raising children, teaching at many different levels, running a non-profit, and accompanying her husband through multiple political campaigns. (And, who wants to tell him that not only has she earned all of these degrees, but she has also, in fact, delivered a child?)
Just as I did, Kohlhofer suspects this piece would never have been written if Jill Biden were a man. And even though Epstein's blatant sexism is very obviously jealousy over a woman who is more educated, there are definitely people who casually drop the Dr. (or refuse to even recognize that the title could be Dr.) among women more than men.

In 2011, I earned a PhD in Social Psychology. I worked for many years as a health services researcher in the Department of Veterans Affairs, where I regularly worked with PhDs, MDs, and some of those crazy smart people with both. We all called each other by first name. (Except for colleagues who had just earned their doctorate - we called them Dr. at every opportunity until they got sick of it and begged us to go back to first name. Why? Because earning a doctorate is a freaking amazing achievement!) In college and grad school, we all called each other by first name. Academia or medicine is not what Kiddo Joe envisions of a bunch of people calling each other Dr. It was all pretty casual.

BUT there are times when that title should be used, such as when introducing a panel of presenters at a conference. And it was very telling how the moderators would often introduce the men as Dr. So-and-So and the women by their first name. It's telling the number of times people have asked me if my title is Mrs. or Ms. in some of these types of settings. It's telling that when I worked at a hospital, people would immediately say, "Oh, you must be a nurse." Why not a doctor? (And even more interesting is when I was married, people would ask my husband what he did for a living but would often ask me if I work.)

Women, either with or without higher degrees, constantly have to work harder to prove themselves. Gatekeeping is alive and well, not just in gamers and sports fans communities, testing women to see if they're legit, but in pretty much any field. I've interacted with fellow psychometrician and data scientists who I'm sure would prefer to call me "Kiddo" instead of Dr., or who waste valuable meeting time explaining core concepts "for Sara's benefit." I once had a psychometrician describe a concept and then urge me to read the chapter on this topic in the recent edition of the Institute of Credentialing Excellence Handbook. I was second author of that chapter. 

And as Epstein demonstrates, gatekeeping doesn't even have to come from someone with the same background or credentials. It can be some dude with a BA writing in the WSJ.

Guys, women are exhausted with this nonsense. When interacting with a woman in a professional or academic environment, be aware of those little microaggressions, or the things you may be doing that make her have to work that much harder to be believed or respected. Introduce people with their titles. Assume women know about something unless they say otherwise. Stop wasting everyone's time and energy. And stop telling us to hang up our titles.