Penis size vs reporting method

Published

November 28, 2023

library(readr)
library(ggplot2)
library(dplyr)

Attaching package: 'dplyr'
The following objects are masked from 'package:stats':

    filter, lag
The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union
library(forcats)
library(here)
here() starts at /home/runner/work/dynamic/dynamic

Penis measurements (and self-reported data) from various sources across many countries and regions by Lukas Burk. Importing data.

path <- "data/penis_long_format.csv"
penis <- read_csv(here(path))
Rows: 278 Columns: 9
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (5): Country, Region, Method, Source, state
dbl (4): N, length, volume, circumf

ℹ 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.
penis
# A tibble: 278 × 9
   Country     Region         Method        N Source state length volume circumf
   <chr>       <chr>          <chr>     <dbl> <chr>  <chr>  <dbl>  <dbl>   <dbl>
 1 Afghanistan Central Asia   Measured    100 Journ… Flac…    9.5   62.6     9.1
 2 Albania     Europe         Self rep…    95 Journ… Flac…    9.8   73.4     9.7
 3 Algeria     Africa         Self rep…   738 https… Flac…    9.9   62.4     8.9
 4 Angola      Africa         Measured    978 Unive… Flac…   10     73.3     9.6
 5 Argentina   South America  Self rep…  1669 Journ… Flac…    9.4   59.2     8.9
 6 Armenia     Europe         Measured    469 Ուրոլ… Flac…   10.5   61.8     8.6
 7 Australia   Australia      Self rep…  1638 Smith… Flac…   10     87.7    10.5
 8 Austria     Europe         Self rep…   547 https… Flac…   11.7   87.6     9.7
 9 Bahrein     Western Asia   Self rep…   492 https… Flac…    8.8   51.8     8.6
10 Bangladesh  Southeast Asia Measured    200 Lynn … Flac…    8.2   42.8     8.1
# ℹ 268 more rows

Plotting penis size versus reporting Figure 1.

penis %>% 
  ggplot(aes(Method, length)) +
  geom_boxplot() +
  geom_point(position = "jitter") +
  labs(y = "Average penis length, cm")

Figure 1: Self-reporting exaggerates penis size.

Plotting penis size versus reporting in different world regions Figure 2.

penis %>% 
  ggplot(aes(fct_reorder(Region, length), length, color = Method)) +
  geom_boxplot(outlier.shape = NULL, position = position_dodge2(preserve = "single")) +
  geom_point(position = position_dodge(0.75)) +
  labs(y = "Average penis length, cm") +
  coord_flip() +
  theme(
    axis.title.y = element_blank(),
    legend.position = "top"
    )

Figure 2: Penis size in different regions.