Skip to content

Instantly share code, notes, and snippets.

@StaffanBetner
Created October 3, 2025 08:30
Show Gist options
  • Select an option

  • Save StaffanBetner/80caa2bee83099898f8fea2e5234b8a1 to your computer and use it in GitHub Desktop.

Select an option

Save StaffanBetner/80caa2bee83099898f8fea2e5234b8a1 to your computer and use it in GitHub Desktop.
pacman::p_load(pacman, tidyverse, rio, magrittr, janitor, ggdist, distributional)
tibble::tribble(
~Kön, ~Ålder, ~Kapital.Medel, ~Kapital.Median, ~Månadssparande.Medel, ~Månadssparande.Median,
"Kvinna", 18L, 66660L, 10750L, 2440L, 550L,
"Kvinna", 19L, 66510L, 12810L, 4570L, 1700L,
"Kvinna", 20L, 71230L, 17110L, 4730L, 2000L,
"Kvinna", 21L, 72470L, 16100L, 4110L, 1500L,
"Kvinna", 22L, 71510L, 15910L, 3710L, 1400L,
"Kvinna", 23L, 78860L, 16720L, 3590L, 1500L,
"Kvinna", 24L, 78820L, 16570L, 3750L, 1500L,
"Kvinna", 25L, 81710L, 17110L, 3940L, 1800L,
"Kvinna", 26L, 88070L, 19750L, 4450L, 2000L,
"Kvinna", 27L, 96220L, 21960L, 4230L, 2000L,
"Kvinna", 28L, 105870L, 26520L, 4250L, 2000L,
"Kvinna", 29L, 112740L, 27650L, 4180L, 2000L,
"Kvinna", 30L, 118890L, 30440L, 3920L, 2000L,
"Kvinna", 31L, 133140L, 32910L, 3770L, 1850L,
"Kvinna", 32L, 143490L, 35010L, 3780L, 1840L,
"Kvinna", 33L, 149580L, 37960L, 3720L, 1960L,
"Kvinna", 34L, 163330L, 39590L, 3740L, 1700L,
"Kvinna", 35L, 180190L, 43420L, 3740L, 2000L,
"Kvinna", 36L, 192070L, 44140L, 3580L, 1850L,
"Kvinna", 37L, 198110L, 46080L, 3610L, 2000L,
"Kvinna", 38L, 212440L, 47040L, 3700L, 2000L,
"Kvinna", 39L, 231300L, 50830L, 3790L, 2000L,
"Kvinna", 40L, 240250L, 55420L, 3850L, 2000L,
"Kvinna", 41L, 281590L, 52770L, 3780L, 1900L,
"Kvinna", 42L, 273690L, 56300L, 3640L, 2000L,
"Kvinna", 43L, 282740L, 59560L, 3850L, 2000L,
"Kvinna", 44L, 295940L, 60430L, 3690L, 2000L,
"Kvinna", 45L, 312600L, 58460L, 3540L, 1820L,
"Kvinna", 46L, 299580L, 55690L, 3570L, 1700L,
"Kvinna", 47L, 298690L, 55870L, 3570L, 1730L,
"Kvinna", 48L, 360980L, 58930L, 3880L, 1800L,
"Kvinna", 49L, 326500L, 55370L, 3630L, 1650L,
"Kvinna", 50L, 368500L, 53520L, 3910L, 1600L,
"Kvinna", 51L, 358190L, 54390L, 3810L, 1600L,
"Kvinna", 52L, 361710L, 53190L, 3590L, 1700L,
"Kvinna", 53L, 359410L, 58560L, 3600L, 1500L,
"Kvinna", 54L, 362530L, 55280L, 3660L, 1500L,
"Kvinna", 55L, 393240L, 60910L, 3810L, 1800L,
"Kvinna", 56L, 391520L, 62150L, 3730L, 2000L,
"Kvinna", 57L, 409690L, 60650L, 3850L, 1800L,
"Kvinna", 58L, 410510L, 66320L, 3830L, 1900L,
"Kvinna", 59L, 410510L, 69220L, 3690L, 1800L,
"Kvinna", 60L, 448280L, 74570L, 3720L, 2000L,
"Kvinna", 61L, 447910L, 78440L, 3450L, 1800L,
"Kvinna", 62L, 474740L, 77890L, 3610L, 1800L,
"Kvinna", 63L, 474980L, 87950L, 3710L, 2000L,
"Kvinna", 64L, 506230L, 89320L, 3900L, 1890L,
"Kvinna", 65L, 556840L, 98060L, 3790L, 1740L,
"Kvinna", 66L, 542500L, 100000L, 3920L, 1500L,
"Kvinna", 67L, 580980L, 102130L, 3880L, 1400L,
"Kvinna", 68L, 617690L, 107100L, 3730L, 1490L,
"Kvinna", 69L, 591350L, 106610L, 3380L, 1100L,
"Kvinna", 70L, 625870L, 111940L, 3500L, 1000L,
"Kvinna", 71L, 613770L, 105470L, 3430L, 1100L,
"Kvinna", 72L, 616910L, 116530L, 3710L, 1000L,
"Kvinna", 73L, 704820L, 115780L, 3680L, 1000L,
"Kvinna", 74L, 671350L, 123400L, 3180L, 1000L,
"Kvinna", 75L, 839200L, 130300L, 3820L, 1000L,
"Kvinna", 76L, 843960L, 122830L, 3230L, 1000L,
"Kvinna", 77L, 833560L, 126720L, 3040L, 1000L,
"Kvinna", 78L, 936450L, 132400L, 2890L, 1000L,
"Kvinna", 79L, 961370L, 144180L, 3320L, 1000L,
"Kvinna", 80L, 1074620L, 133700L, 3720L, 1000L,
"Man", 18L, 40800L, 7890L, 2900L, 1050L,
"Man", 19L, 51380L, 12990L, 6430L, 4050L,
"Man", 20L, 64840L, 19180L, 7780L, 5000L,
"Man", 21L, 84840L, 17800L, 7420L, 4000L,
"Man", 22L, 88890L, 17560L, 6320L, 3000L,
"Man", 23L, 94440L, 16810L, 6330L, 3000L,
"Man", 24L, 106150L, 18140L, 6380L, 3000L,
"Man", 25L, 109610L, 16240L, 6380L, 3050L,
"Man", 26L, 120240L, 19920L, 6400L, 3500L,
"Man", 27L, 133660L, 24270L, 6470L, 3500L,
"Man", 28L, 152040L, 26720L, 6460L, 3500L,
"Man", 29L, 156430L, 29050L, 6420L, 3050L,
"Man", 30L, 177540L, 32430L, 6160L, 3000L,
"Man", 31L, 194550L, 36410L, 6410L, 3000L,
"Man", 32L, 215690L, 40840L, 6000L, 3000L,
"Man", 33L, 240820L, 42790L, 5770L, 2750L,
"Man", 34L, 261400L, 45440L, 5780L, 2500L,
"Man", 35L, 276840L, 49840L, 5590L, 2650L,
"Man", 36L, 306840L, 54640L, 5690L, 2650L,
"Man", 37L, 357740L, 58630L, 5570L, 2630L,
"Man", 38L, 357550L, 61930L, 5510L, 2650L,
"Man", 39L, 405210L, 66380L, 5510L, 2530L,
"Man", 40L, 431800L, 72040L, 5660L, 2600L,
"Man", 41L, 429970L, 75140L, 5430L, 2600L,
"Man", 42L, 546050L, 81840L, 5580L, 2600L,
"Man", 43L, 532280L, 83710L, 5290L, 2500L,
"Man", 44L, 559170L, 87160L, 5480L, 2510L,
"Man", 45L, 562630L, 89160L, 5350L, 2500L,
"Man", 46L, 608850L, 90480L, 5510L, 2500L,
"Man", 47L, 687870L, 93430L, 5580L, 2500L,
"Man", 48L, 661490L, 92630L, 5650L, 2500L,
"Man", 49L, 674540L, 95810L, 5490L, 2400L,
"Man", 50L, 842310L, 95190L, 5760L, 2250L,
"Man", 51L, 770020L, 88530L, 5610L, 2340L,
"Man", 52L, 1049330L, 86540L, 5840L, 2340L,
"Man", 53L, 788960L, 87390L, 5340L, 2100L,
"Man", 54L, 836200L, 84620L, 5440L, 2000L,
"Man", 55L, 795840L, 87490L, 5380L, 2010L,
"Man", 56L, 864490L, 91390L, 5380L, 2000L,
"Man", 57L, 806190L, 89540L, 5440L, 2100L,
"Man", 58L, 857580L, 89560L, 5480L, 2000L,
"Man", 59L, 897950L, 100110L, 5170L, 2000L,
"Man", 60L, 979160L, 99490L, 5400L, 2100L,
"Man", 61L, 945810L, 105380L, 5430L, 2100L,
"Man", 62L, 1091290L, 99310L, 5420L, 2000L,
"Man", 63L, 974970L, 102290L, 5770L, 2100L,
"Man", 64L, 940760L, 116580L, 6340L, 2200L,
"Man", 65L, 988960L, 122300L, 5580L, 2000L,
"Man", 66L, 1091660L, 122180L, 6540L, 2100L,
"Man", 67L, 1156430L, 128210L, 6170L, 2100L,
"Man", 68L, 998760L, 131040L, 6140L, 2000L,
"Man", 69L, 971550L, 133940L, 5870L, 2000L,
"Man", 70L, 1068890L, 138950L, 5980L, 2000L,
"Man", 71L, 1133100L, 144180L, 5890L, 2000L,
"Man", 72L, 1228110L, 138050L, 6050L, 2000L,
"Man", 73L, 1424960L, 140940L, 5990L, 2000L,
"Man", 74L, 1240230L, 156740L, 5870L, 2000L,
"Man", 75L, 1533480L, 166530L, 5970L, 1900L,
"Man", 76L, 1393660L, 155470L, 5600L, 1700L,
"Man", 77L, 1407490L, 156320L, 5690L, 2000L,
"Man", 78L, 1497190L, 163240L, 5520L, 1700L,
"Man", 79L, 1527660L, 147240L, 5580L, 2000L,
"Man", 80L, 1702810L, 184040L, 6360L, 2000L
) -> avanza
avanza %>% clean_names() %>%
mutate(kapital_meanlog = log(kapital_median),
kapital_sdlog = sqrt(2 * log(kapital_medel / kapital_median)),
manadssparande_meanlog = log(manadssparande_median),
manadssparande_sdlog = sqrt(2 * log(manadssparande_medel / manadssparande_median))) %>%
select(-ends_with("_medel"), -ends_with("_median")) -> avanza_lognormal
avanza_lognormal %>%
mutate(kapital = dist_lognormal(kapital_meanlog, kapital_sdlog),
manadssparande = dist_lognormal(manadssparande_meanlog, manadssparande_sdlog)) %>%
select(-ends_with("_meanlog"), -ends_with("_sdlog")) -> avanza_lognormal
avanza_lognormal %>%
ggplot(aes(x = alder, ydist = kapital, fill = after_stat(.width) %>% as.ordered())) +
stat_lineribbon(key_glyph = draw_key_polygon) +
facet_wrap(~kon) +
scale_y_log10(labels = scales::label_number(big.mark = " ")) +
scale_fill_brewer(palette = "Blues", direction = -1) +
labs(
title = "Kapital per ålder bland Avanzas kunder",
subtitle = "Skattade Lognormalfördelningar utifrån medelvärde och median",
x = "Ålder",
y = "Kapital (SEK, logaritmisk skala)",
fill = "Sannolikhets-\nintervall",
caption = "Av Staffan Betnér, datakälla: Avanzabloggen"
) +
theme_minimal(base_size = 12) +
theme(
plot.title.position = "plot", # Justerar titeln snyggt
plot.caption.position = "plot", # Justerar caption snyggt
# plot.caption = element_text(hjust = 0), # Vänsterställer caption
legend.position = "right"
)
avanza_lognormal %>%
ggplot(aes(x = alder, ydist = manadssparande, fill = after_stat(.width) %>% as.ordered())) +
stat_lineribbon(key_glyph = draw_key_polygon) +
facet_wrap(~kon) +
scale_y_log10(labels = scales::label_number(big.mark = " ")) +
scale_fill_brewer(palette = "Blues", direction = -1) +
labs(
title = "Månadssparande per ålder bland Avanzas kunder",
subtitle = "Skattade Lognormalfördelningar utifrån medelvärde och median",
x = "Ålder",
y = "Kapital (SEK, logaritmisk skala)",
fill = "Sannolikhets-\nintervall",
caption = "Av Staffan Betnér, datakälla: Avanzabloggen"
) +
theme_minimal(base_size = 12) +
theme(
plot.title.position = "plot", # Justerar titeln snyggt
plot.caption.position = "plot", # Justerar caption snyggt
# plot.caption = element_text(hjust = 0), # Vänsterställer caption
legend.position = "right"
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment