Я думаю, что есть несколько способов ответить на поставленный вопрос, поскольку существует компромисс между «самым популярным» и «самым унисексом».
Вот способ подготовить данные для сбора статистики для каждого имени.
library(babynames)
library(tidyverse)
babynames_share <-
babynames %>%
filter(year >= 1930, year <= 2012) %>%
count(name, sex, wt = n) %>%
spread(sex, n, fill = 0) %>%
mutate(Total = F + M,
F_share = F / Total,
MS_50 = ((F_share-0.5)^2 +
(0.5-F_share)^2) / 2)
Похоже, что около 100 имен имеют идеальный гендерный паритет, но все они довольно необычны:
babynames_share %>%
filter(F == M) %>%
arrange(-Total)
# A tibble: 100 x 6
name F M Total F_share RMS_50
<chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Tyjae 157 157 314 0.5 0
2 Callaway 128 128 256 0.5 0
3 Avyn 100 100 200 0.5 0
4 Zarin 92 92 184 0.5 0
5 Tkai 72 72 144 0.5 0
6 Rayen 57 57 114 0.5 0
7 Meco 43 43 86 0.5 0
8 Pele 40 40 80 0.5 0
9 Nijay 35 35 70 0.5 0
10 Mako 27 27 54 0.5 0
# … with 90 more rows
Или мы можем выбрать какой-то произвольный порог для того, что считается унисексом. В приведенном выше примере я рассчитал среднеквадратичную ошибку для женских и мужских процентных долей. Мы можем построить это, чтобы увидеть очень гендерные имена сверху (MS_50 достигает 0,25 по этому показателю) и унисексные имена внизу. Но мне не очевидно, как далеко мы должны идти, чтобы считать имя унисексом. Является ли Кейси мужчиной 58,9% с 8,9% ^ 2 = 0,79% в квадрате ошибки унисекс? Или нам нужно дальше к Джесси, которая на 50,8% мужского пола?
babynames_share %>%
ggplot(data = .,
aes(Total, MS_50, label = name)) +
geom_point(size = 0.2, alpha = 0.1, color = "gray30") +
geom_text(data = . %>% filter(Total > 10000),
check_overlap = TRUE, size = 3) +
scale_x_log10(breaks = c(10^(1:7)),
labels = scales::comma)

На уровне гендерного паритета "Кейси", вот лучшие 35:
unisex_names <- babynames_share %>%
filter(MS_50 <= 0.00796) %>%
arrange(-Total) %>%
top_n(35, wt = Total)
Интересно также увидеть весь спектр имен: большинство мужчин внизу, женщины сверху и унисекс в середине:
babynames_share %>%
ggplot(data = .,
aes(Total, F_share, label = name)) +
geom_point(size = 0.2, alpha = 0.1, color = "gray30") +
geom_text(data = . %>% filter(Total > 10000),
check_overlap = TRUE, size = 2) +
scale_x_log10(breaks = c(10^(1:7)),
labels = scales::comma)
