Created
October 3, 2025 08:30
-
-
Save StaffanBetner/80caa2bee83099898f8fea2e5234b8a1 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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