如何使用mse函数 - babynames示例

问题描述 投票:1回答:1

所以我在rstudio中使用'babynames'包,并试图获得35个最常见的男女皆宜的名字。我试图根据50-50线的均方误差对名称进行排名(但是,我不知道该怎么做)。任何帮助将不胜感激! (同样在我的代码下面,我将把我们给出的“参考代码”包括前35个男女皆宜的名字)

参考代码:

actual_names <- c("Jessie", "Marion", "Jackie", "Alva", "Ollie",
                  "Jody", "Cleo", "Kerry", "Frankie", "Guadalupe", 
                  "Carey", "Tommie", "Angel", "Hollis", "Sammie",
                  "Jamie", "Kris", "Robbie", "Tracy", "Merrill", 
                  "Noel", "Rene", "Johnnie", "Ariel", "Jan", 
                  "Devon", "Cruz", "Michel", "Gale", "Robin", 
                  "Dorian", "Casey", "Dana", "Kim", "Shannon")
r
1个回答
0
投票

我认为有几种方法可以回答所提出的问题,因为在“最受欢迎”和“最男女皆宜”之间存在权衡。

这是一种准备数据以收集每个名称的一些统计数据的方法。

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),男女皆宜的名字在底部。但是,对于我来说,将名字视为男女皆宜,我们应该走多远。是Casey,男性为58.9%,因此有8.9%^ 2 = 0.79%的平方误差,男女皆宜?或者我们是否需要进一步向Jessie,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) 

enter image description here

在性别平等的“凯西”级别,这里是前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) 

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.