| Premenná | Význam | Jednotka | Typ premennej |
|---|---|---|---|
| Country | krajina | – | kategoriálna nominálna |
| Year | rok | rok | kvantitatívna diskrétna |
| Country_Code | kód krajiny (ISO) | – | kategoriálna nominálna |
| Continent | kontinent | – | kategoriálna nominálna |
| Region | región | – | kategoriálna nominálna |
| Population | počet obyvateľov | osoby | kvantitatívna spojitá |
| GDP_Per_Capita | HDP na obyvateľa | USD | kvantitatívna spojitá |
| Per_Capita_Sugar_Consumption | ročná spotreba cukru na obyvateľa | kg / osoba / rok | kvantitatívna spojitá |
| Total_Sugar_Consumption | celková spotreba cukru v krajine | tony | kvantitatívna spojitá |
| Sugar_From_Sugarcane | podiel cukru z cukrovej trstiny | % | kvantitatívna spojitá |
| Sugar_From_Beet | podiel cukru z cukrovej repy | % | kvantitatívna spojitá |
| Sugar_From_HFCS | podiel cukru z kukuričného sirupu (HFCS) | % | kvantitatívna spojitá |
| Sugar_From_Other | podiel cukru z iných zdrojov | % | kvantitatívna spojitá |
| Processed_Food_Consumption | spotreba spracovaných potravín | neuvedená | kvantitatívna spojitá |
| Avg_Daily_Sugar_Intake | priemerný denný príjem cukru | g / osoba / deň | kvantitatívna spojitá |
| Diabetes_Prevalence | výskyt cukrovky v populácii | % | kvantitatívna spojitá |
| Obesity_Rate | miera obezity | % | kvantitatívna spojitá |
| Sugar_Imports | dovoz cukru | neuvedená (asi tony) | kvantitatívna spojitá |
| Sugar_Exports | vývoz cukru | neuvedená (asi tony) | kvantitatívna spojitá |
| Avg_Retail_Price_Per_Kg | priemerná maloobchodná cena cukru | za kg (asi USD) | kvantitatívna spojitá |
| Gov_Tax | daň na cukor (1 = áno, 0 = nie) | 0/1 | binárna (dummy) |
| Gov_Subsidies | dotácie na cukor (1 = áno, 0 = nie) | 0/1 | binárna (dummy) |
| Education_Campaign | vzdelávacia kampaň (1 = áno, 0 = nie) | 0/1 | binárna (dummy) |
| Urbanization_Rate | miera urbanizácie | % | kvantitatívna spojitá |
| Climate_Conditions | klimatické podmienky | stupeň 1 – 5 | ordinálna |
| Sugarcane_Production_Yield | výnos cukrovej trstiny | neuvedená | kvantitatívna spojitá |
Spotreba cukru vo svete
Práca s údajmi, čistenie údajov, tabuľky a grafy
1 Popis údajov
1.1 Odkiaľ údaje pochádzajú
Pracujem so súborom sugar_consumption_dataset.csv, ktorý som si stiahla z otvorenej databázy Kaggle. Súbor je vo formáte CSV – položky sú oddelené čiarkou, desatinné čísla používajú desatinnú bodku a v prvom riadku sú názvy premenných.
1.2 Čo údaje ukazujú
Údaje opisujú spotrebu cukru v 12 krajinách sveta (Austrália, Brazília, Čína, Francúzsko, Nemecko, India, Indonézia, Japonsko, Mexiko, Rusko, Južná Afrika a USA) v rokoch 1960 – 2023. Pre každú krajinu a rok obsahujú:
- spotrebu cukru – ročnú spotrebu na obyvateľa, celkovú spotrebu krajiny a priemerný denný príjem cukru na osobu,
- zdroje cukru – aký podiel cukru pochádza z cukrovej trstiny, cukrovej repy, kukuričného sirupu s vysokým obsahom fruktózy (HFCS) a z iných zdrojov,
- zdravotné ukazovatele – výskyt cukrovky (diabetes) a mieru obezity,
- ekonomické ukazovatele – HDP na obyvateľa, dovoz a vývoz cukru, priemernú maloobchodnú cenu cukru, spotrebu spracovaných potravín, mieru urbanizácie a výnos cukrovej trstiny,
- opatrenia vlády – či krajina v danom roku mala daň na cukor, dotácie na cukor a vzdelávaciu kampaň o cukre,
- klimatické podmienky – vyjadrené číslom 1 až 5.
Takéto údaje sa dajú využiť napríklad na otázku, či vyššia spotreba cukru súvisí s vyšším výskytom cukrovky alebo obezity a či opatrenia vlády (napr. daň na cukor) súvisia s nižšou spotrebou.
1.3 O aký typ údajov ide
- Sekundárne údaje – prebrané z verejne dostupnej databázy Kaggle.
- Štruktúrované tabuľkové údaje – jeden riadok je jeden záznam (krajina + rok), jeden stĺpec je jedna premenná. Súbor má 10 000 riadkov a 26 stĺpcov.
- Podľa časovej a priestorovej dimenzie ide o kombináciu prierezových údajov (viac krajín) a časových radov (roky 1960 – 2023), teda o údaje panelového typu. Pre jednu krajinu a jeden rok je však v súbore viac záznamov (v priemere 13), preto nejde o klasický vyvážený panel, ale skôr o združené prierezové údaje (pooled cross-section). Ukážeme si to v časti o čistení údajov.
- Podľa typu premenných obsahuje súbor:
- kvantitatívne spojité (pomerové) premenné – napr. spotreba cukru, HDP na obyvateľa, cena, podiely v %,
- kvantitatívnu diskrétnu premennú – rok,
- kategoriálne nominálne premenné – krajina, kód krajiny, kontinent, región,
- ordinálnu premennú – klimatické podmienky (1 – 5),
- binárne (dummy) premenné 0/1 – daň na cukor, dotácie, vzdelávacia kampaň.
- Pravdepodobne ide o syntetické (simulované) údaje. Pri čistení a v grafoch sa ukáže, že hodnoty sú takmer rovnomerne rozložené, premenné spolu takmer nesúvisia, počet obyvateľov tej istej krajiny skáče medzi 1 a 300 miliónmi a podiel „iných zdrojov“ cukru je často záporný. Skutočné štatistiky takto nevyzerajú. Výsledky preto beriem ako cvičenie postupov, nie ako skutočné závery o spotrebe cukru.
Prehľad všetkých premenných (jednotky nie sú v súbore uvedené; tam, kde ich bolo možné overiť výpočtom, sú doplnené):
2 Import údajov
Súbor sugar_consumption_dataset.csv mám uložený v rovnakom priečinku ako tento .qmd dokument (OneDrive › Ema – osobné › Pracovná plocha › M3 › dataset_sugar_consumption), preto stačí uviesť len názov súboru. Na rozdiel od cvičenia, kde bol oddeľovač bodkočiarka (read.csv2), tu je oddeľovačom čiarka, preto používam read.csv. Prázdne bunky a text „NA“ sa načítajú ako chýbajúce hodnoty NA.
udaje <- read.csv(
"sugar_consumption_dataset.csv",
header = TRUE,
sep = ",",
dec = ".",
na.strings = c("", "NA"),
stringsAsFactors = FALSE )
dim(udaje) [1] 10000 26
colnames(udaje) [1] "Country" "Year"
[3] "Country_Code" "Continent"
[5] "Region" "Population"
[7] "GDP_Per_Capita" "Per_Capita_Sugar_Consumption"
[9] "Total_Sugar_Consumption" "Sugar_From_Sugarcane"
[11] "Sugar_From_Beet" "Sugar_From_HFCS"
[13] "Sugar_From_Other" "Processed_Food_Consumption"
[15] "Avg_Daily_Sugar_Intake" "Diabetes_Prevalence"
[17] "Obesity_Rate" "Sugar_Imports"
[19] "Sugar_Exports" "Avg_Retail_Price_Per_Kg"
[21] "Gov_Tax" "Gov_Subsidies"
[23] "Education_Campaign" "Urbanization_Rate"
[25] "Climate_Conditions" "Sugarcane_Production_Yield"
Prvých niekoľko riadkov databázy:
head(udaje) %>%
kable(digits = 2, caption = ) %>%
styl() %>%
scroll_box(width = "100%")| Country | Year | Country_Code | Continent | Region | Population | GDP_Per_Capita | Per_Capita_Sugar_Consumption | Total_Sugar_Consumption | Sugar_From_Sugarcane | Sugar_From_Beet | Sugar_From_HFCS | Sugar_From_Other | Processed_Food_Consumption | Avg_Daily_Sugar_Intake | Diabetes_Prevalence | Obesity_Rate | Sugar_Imports | Sugar_Exports | Avg_Retail_Price_Per_Kg | Gov_Tax | Gov_Subsidies | Education_Campaign | Urbanization_Rate | Climate_Conditions | Sugarcane_Production_Yield |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| France | 1972 | FRA | Europe | Western Europe | 261730647 | 8692.63 | 12.83 | 3357412.9 | 68.42 | 38.60 | 42.97 | -49.99 | 171.97 | 35.15 | 11.50 | 34.09 | 5401670 | 2358929 | 3.86 | 0 | 0 | 0 | 34.50 | 3 | 52.43 |
| Australia | 2003 | AUS | Oceania | Australia & New Zealand | 173796468 | 6859.20 | 21.36 | 3712750.0 | 55.43 | 38.46 | 16.22 | -10.12 | 229.24 | 58.53 | 6.52 | 16.04 | 3418790 | 9694348 | 3.28 | 0 | 0 | 0 | 31.78 | 4 | 58.38 |
| Germany | 1963 | DEU | Europe | Western Europe | 123636586 | 22075.95 | 32.08 | 3965950.7 | 86.47 | 10.00 | 51.72 | -48.19 | 203.26 | 87.89 | 8.25 | 14.41 | 8987281 | 5451632 | 1.10 | 0 | 0 | 0 | 51.55 | 1 | 32.18 |
| France | 1965 | FRA | Europe | Western Europe | 298996150 | 3728.03 | 47.65 | 14246846.5 | 69.81 | 34.01 | 43.57 | -47.39 | 34.18 | 130.56 | 11.00 | 38.50 | 5179004 | 8048500 | 2.76 | 0 | 0 | 0 | 80.39 | 2 | 84.30 |
| Germany | 2010 | DEU | Europe | Western Europe | 7341531 | 40420.97 | 23.21 | 170428.8 | 63.77 | 23.11 | 53.54 | -40.42 | 78.73 | 63.61 | 14.89 | 36.19 | 6463439 | 7062910 | 4.22 | 0 | 0 | 1 | 49.70 | 3 | 66.11 |
| South Africa | 1997 | ZAF | Africa | Sub-Saharan Africa | 91997984 | 45446.26 | 66.80 | 6145419.2 | 53.90 | 29.02 | 59.08 | -41.99 | 209.46 | 183.03 | 14.89 | 14.45 | 2178783 | 8683158 | 1.17 | 0 | 0 | 0 | 77.15 | 1 | 98.64 |
Štruktúra databázy – typ každej premennej:
str(udaje)'data.frame': 10000 obs. of 26 variables:
$ Country : chr "France" "Australia" "Germany" "France" ...
$ Year : int 1972 2003 1963 1965 2010 1997 1965 1970 1986 2013 ...
$ Country_Code : chr "FRA" "AUS" "DEU" "FRA" ...
$ Continent : chr "Europe" "Oceania" "Europe" "Europe" ...
$ Region : chr "Western Europe" "Australia & New Zealand" "Western Europe" "Western Europe" ...
$ Population : num 2.62e+08 1.74e+08 1.24e+08 2.99e+08 7.34e+06 ...
$ GDP_Per_Capita : num 8693 6859 22076 3728 40421 ...
$ Per_Capita_Sugar_Consumption: num 12.8 21.4 32.1 47.6 23.2 ...
$ Total_Sugar_Consumption : num 3357413 3712750 3965951 14246846 170429 ...
$ Sugar_From_Sugarcane : num 68.4 55.4 86.5 69.8 63.8 ...
$ Sugar_From_Beet : num 38.6 38.5 10 34 23.1 ...
$ Sugar_From_HFCS : num 43 16.2 51.7 43.6 53.5 ...
$ Sugar_From_Other : num -50 -10.1 -48.2 -47.4 -40.4 ...
$ Processed_Food_Consumption : num 172 229.2 203.3 34.2 78.7 ...
$ Avg_Daily_Sugar_Intake : num 35.1 58.5 87.9 130.6 63.6 ...
$ Diabetes_Prevalence : num 11.5 6.52 8.25 11 14.89 ...
$ Obesity_Rate : num 34.1 16 14.4 38.5 36.2 ...
$ Sugar_Imports : num 5401670 3418790 8987281 5179004 6463439 ...
$ Sugar_Exports : num 2358929 9694348 5451632 8048500 7062910 ...
$ Avg_Retail_Price_Per_Kg : num 3.86 3.28 1.1 2.76 4.22 ...
$ Gov_Tax : num 0 0 0 0 0 0 0 0 0 0 ...
$ Gov_Subsidies : int 0 0 0 0 0 0 0 0 1 0 ...
$ Education_Campaign : num 0 0 0 0 1 0 0 0 0 1 ...
$ Urbanization_Rate : num 34.5 31.8 51.6 80.4 49.7 ...
$ Climate_Conditions : int 3 4 1 2 3 1 4 5 5 4 ...
$ Sugarcane_Production_Yield : num 52.4 58.4 32.2 84.3 66.1 ...
3 Čistenie údajov
3.1 Úprava názvov premenných
Názvy stĺpcov v pôvodnom súbore síce neobsahujú medzery, ale sú dlhé a mixujú veľké a malé písmená. Pomocou knižnice janitor ich zjednotím na malé písmená s podčiarkovníkom (snake_case) a niektoré dlhé názvy ešte skrátim pomocou rename().
povodne_nazvy <- names(udaje)
udaje <- udaje %>%
clean_names() %>% # malé písmená, bez neprípustných znakov
rename(
spotreba_na_obyv = per_capita_sugar_consumption,
spotreba_celkova = total_sugar_consumption,
denny_prijem = avg_daily_sugar_intake,
trstina = sugar_from_sugarcane,
repa = sugar_from_beet,
hfcs = sugar_from_hfcs,
ine_zdroje = sugar_from_other,
spracovane_potr = processed_food_consumption,
diabetes = diabetes_prevalence,
obezita = obesity_rate,
cena_kg = avg_retail_price_per_kg,
hdp_na_obyv = gdp_per_capita,
urbanizacia = urbanization_rate,
klima = climate_conditions,
vynos_trstiny = sugarcane_production_yield
)
data.frame(Povodny_nazov = povodne_nazvy, Novy_nazov = names(udaje)) %>%
kable(col.names = c("Pôvodný názov", "Nový názov"),
caption = "Porovnanie pôvodných a upravených názvov premenných") %>%
styl()| Pôvodný názov | Nový názov |
|---|---|
| Country | country |
| Year | year |
| Country_Code | country_code |
| Continent | continent |
| Region | region |
| Population | population |
| GDP_Per_Capita | hdp_na_obyv |
| Per_Capita_Sugar_Consumption | spotreba_na_obyv |
| Total_Sugar_Consumption | spotreba_celkova |
| Sugar_From_Sugarcane | trstina |
| Sugar_From_Beet | repa |
| Sugar_From_HFCS | hfcs |
| Sugar_From_Other | ine_zdroje |
| Processed_Food_Consumption | spracovane_potr |
| Avg_Daily_Sugar_Intake | denny_prijem |
| Diabetes_Prevalence | diabetes |
| Obesity_Rate | obezita |
| Sugar_Imports | sugar_imports |
| Sugar_Exports | sugar_exports |
| Avg_Retail_Price_Per_Kg | cena_kg |
| Gov_Tax | gov_tax |
| Gov_Subsidies | gov_subsidies |
| Education_Campaign | education_campaign |
| Urbanization_Rate | urbanizacia |
| Climate_Conditions | klima |
| Sugarcane_Production_Yield | vynos_trstiny |
3.2 Duplicity a štruktúra záznamov
Najprv overím, či sa v databáze nenachádzajú úplne rovnaké (duplicitné) riadky.
pocet_duplicit <- sum(duplicated(udaje))
pocet_duplicit[1] 0
Úplne rovnaké riadky v databáze nie sú. Pri panelových údajoch by však mala byť každá dvojica krajina + rok v databáze iba raz. Pozrime sa, koľko záznamov pripadá na jednu krajinu a jeden rok:
zaznamy_kr <- udaje %>%
count(country, year, name = "pocet_zaznamov")
nrow(zaznamy_kr) # počet rôznych kombinácií krajina + rok[1] 768
zaznamy_kr %>%
summarise(
min = min(pocet_zaznamov),
priemer = mean(pocet_zaznamov),
median = median(pocet_zaznamov),
max = max(pocet_zaznamov)
) %>%
kable(digits = 1,
caption = "Počet záznamov na jednu dvojicu krajina + rok") %>%
styl()| min | priemer | median | max |
|---|---|---|---|
| 5 | 13 | 13 | 30 |
Zo 10 000 riadkov je len 768 rôznych kombinácií krajina + rok (12 krajín × 64 rokov = 768). Na jednu krajinu a rok pripadá v priemere 13,0 záznamov a tieto záznamy majú navzájom úplne odlišné hodnoty. Preto nejde o vyvážený panel. Riadky nemažem (nie sú to presné duplicity), ale:
- pri tabuľkách a testoch beriem každý riadok ako samostatné pozorovanie (združené prierezové údaje),
- pri grafoch vývoja v čase najprv vypočítam priemer za krajinu a rok.
Počet záznamov podľa krajín:
udaje %>%
group_by(country, continent) %>%
summarise(
pocet = n(),
od = min(year),
do = max(year),
.groups = "drop"
) %>%
arrange(desc(pocet)) %>%
kable(col.names = c("Krajina", "Kontinent", "Počet záznamov", "Od roku", "Do roku"),
caption = "Počet záznamov podľa krajín") %>%
styl()| Krajina | Kontinent | Počet záznamov | Od roku | Do roku |
|---|---|---|---|---|
| Australia | Oceania | 917 | 1960 | 2023 |
| Indonesia | Asia | 877 | 1960 | 2023 |
| France | Europe | 861 | 1960 | 2023 |
| Japan | Asia | 846 | 1960 | 2023 |
| Germany | Europe | 832 | 1960 | 2023 |
| India | Asia | 829 | 1960 | 2023 |
| Mexico | North America | 820 | 1960 | 2023 |
| Russia | Europe | 817 | 1960 | 2023 |
| South Africa | Africa | 816 | 1960 | 2023 |
| USA | North America | 800 | 1960 | 2023 |
| China | Asia | 797 | 1960 | 2023 |
| Brazil | South America | 788 | 1960 | 2023 |
3.3 Chýbajúce údaje
Koľko chýbajúcich hodnôt (NA) má každá premenná:
print("počet chýbajúcich údajov za jednotlivé premenné")[1] "počet chýbajúcich údajov za jednotlivé premenné"
colSums(is.na(udaje)) country year country_code continent
0 0 0 0
region population hdp_na_obyv spotreba_na_obyv
0 0 0 0
spotreba_celkova trstina repa hfcs
0 0 0 0
ine_zdroje spracovane_potr denny_prijem diabetes
0 0 0 0
obezita sugar_imports sugar_exports cena_kg
0 0 0 0
gov_tax gov_subsidies education_campaign urbanizacia
531 0 520 0
klima vynos_trstiny
0 0
Prehľadnejšie len premenné, ktorým nejaké hodnoty chýbajú:
chybajuce <- data.frame(
premenna = names(udaje),
pocet_NA = colSums(is.na(udaje))
) %>%
filter(pocet_NA > 0) %>%
mutate(podiel = 100 * pocet_NA / nrow(udaje))
chybajuce %>%
kable(digits = 2, row.names = FALSE,
col.names = c("Premenná", "Počet NA", "Podiel NA (%)"),
caption = "Premenné s chýbajúcimi hodnotami") %>%
styl()| Premenná | Počet NA | Podiel NA (%) |
|---|---|---|
| gov_tax | 531 | 5.31 |
| education_campaign | 520 | 5.20 |
Chýbajú hodnoty iba v dvoch binárnych premenných – daň na cukor (gov_tax) a vzdelávacia kampaň (education_campaign), približne 5 % hodnôt v každej. Štruktúru chýbajúcich údajov ukazuje md.pattern() z knižnice mice (pre prehľadnosť len na premenných, ktoré súvisia s opatreniami vlády; červená = chýbajúca hodnota). Čísla vľavo udávajú, koľko riadkov má daný vzor, čísla dole počet chýbajúcich hodnôt v stĺpci:
# kvôli čitateľnosti grafu premenné dočasne skrátim: dan, kampan, dotacie
md.pattern(udaje %>% select(dotacie = gov_subsidies, kampan = education_campaign, dan = gov_tax),
rotate.names = TRUE) dotacie kampan dan
8974 1 1 1 0
506 1 1 0 1
495 1 0 1 1
25 1 0 0 2
0 520 531 1051
Podiel chýbajúcich hodnôt vo všetkých premenných (graf podobný funkcii aggr() z knižnice VIM, nakreslený cez ggplot2):
udaje %>%
summarise(across(everything(), ~ 100 * mean(is.na(.x)))) %>%
pivot_longer(everything(), names_to = "premenna", values_to = "podiel_na") %>%
ggplot(aes(x = podiel_na, y = reorder(premenna, podiel_na),
fill = podiel_na > 0)) +
geom_col(width = 0.7) +
geom_text(aes(label = ifelse(podiel_na > 0, paste0(cislo(podiel_na, 1), " %"), "")),
hjust = -0.15, size = 3.5) +
scale_fill_manual(values = c("FALSE" = "navyblue", "TRUE" = "red"), guide = "none") +
scale_x_continuous(limits = c(0, 7), expand = c(0, 0)) +
labs(
title = "Podiel chýbajúcich hodnôt podľa premenných",
x = "Chýbajúce hodnoty (%)",
y = NULL
) +
theme_minimal() +
theme(panel.grid.minor = element_blank(), panel.grid.major.y = element_blank())Chýbajúcich údajov je málo a nie sú sústredené v rovnakých riadkoch, preto ich nahradím viacnásobnou imputáciou pomocou knižnice mice. Pre binárne premenné používam metódu pmm (predictive mean matching), ktorá dopĺňa len hodnoty, ktoré sa v údajoch naozaj vyskytujú – teda iba 0 alebo 1. Ako pomocné premenné vyberiem len niektoré číselné stĺpce. Odvodené premenné (denný príjem, celková spotreba, podiel „iných zdrojov“) sú presnými prepočtami iných stĺpcov a mice by s nimi skončila chybou system is computationally singular, preto ich do imputácie nezaraďujem.
# do imputácie vstupujú len vybrané číselné premenné
# (textové stĺpce mice nevie použiť, odvodené stĺpce spôsobujú singularitu)
vstup_imputacie <- udaje %>%
select(gov_tax, education_campaign, gov_subsidies, year,
spotreba_na_obyv, diabetes, obezita, hdp_na_obyv,
cena_kg, urbanizacia, spracovane_potr)
imp <- mice(vstup_imputacie, m = 5, maxit = 5, method = "pmm",
seed = 123, printFlag = FALSE)
udaje_imputovane <- complete(imp, 1)
# pred imputáciou si zapamätám pôvodné podiely
pred_imputaciou <- udaje %>%
summarise(gov_tax = mean(gov_tax, na.rm = TRUE),
education_campaign = mean(education_campaign, na.rm = TRUE))
# doplnené stĺpce vrátim do pôvodnej databázy
udaje$gov_tax <- udaje_imputovane$gov_tax
udaje$education_campaign <- udaje_imputovane$education_campaign
rm(imp, udaje_imputovane, vstup_imputacie)
print("počet chýbajúcich údajov po imputácii")[1] "počet chýbajúcich údajov po imputácii"
colSums(is.na(udaje)) country year country_code continent
0 0 0 0
region population hdp_na_obyv spotreba_na_obyv
0 0 0 0
spotreba_celkova trstina repa hfcs
0 0 0 0
ine_zdroje spracovane_potr denny_prijem diabetes
0 0 0 0
obezita sugar_imports sugar_exports cena_kg
0 0 0 0
gov_tax gov_subsidies education_campaign urbanizacia
0 0 0 0
klima vynos_trstiny
0 0
Kontrola, či imputácia nezmenila rozdelenie premenných (podiel záznamov s hodnotou 1):
po_imputacii <- udaje %>%
summarise(gov_tax = mean(gov_tax), education_campaign = mean(education_campaign))
bind_rows(pred_imputaciou, po_imputacii) %>%
mutate(stav = c("pred imputáciou (bez NA)", "po imputácii")) %>%
select(stav, everything()) %>%
kable(digits = 3,
col.names = c("", "Podiel s daňou na cukor", "Podiel so vzdelávacou kampaňou"),
caption = "Podiel hodnôt 1 pred a po imputácii") %>%
styl()| Podiel s daňou na cukor | Podiel so vzdelávacou kampaňou | |
|---|---|---|
| pred imputáciou (bez NA) | 0.151 | 0.407 |
| po imputácii | 0.151 | 0.407 |
Podiely sa takmer nezmenili, imputácia teda rozdelenie premenných neskreslila.
3.4 Logická kontrola hodnôt
Aj keď údajom nič nechýba, hodnoty môžu byť nezmyselné. Skontrolujem preto, či medzi sebou premenné logicky sedia.
3.4.1 Odvodené premenné
Denný príjem cukru by mal zodpovedať ročnej spotrebe na obyvateľa prepočítanej na gramy za deň (kg × 1000 / 365) a celková spotreba by mala byť spotreba na obyvateľa × počet obyvateľov (prepočítaná na tony).
udaje %>%
summarise(
`Denný príjem vs. spotreba × 1000 / 365` =
max(abs(denny_prijem - spotreba_na_obyv * 1000 / 365)),
`Celková spotreba vs. spotreba × obyvatelia / 1000` =
max(abs(spotreba_celkova - spotreba_na_obyv * population / 1000))
) %>%
pivot_longer(everything(), names_to = "Kontrola", values_to = "Najväčší rozdiel") %>%
kable(digits = 3, caption = "Kontrola odvodených premenných") %>%
styl()| Kontrola | Najväčší rozdiel |
|---|---|
| Denný príjem vs. spotreba × 1000 / 365 | 0.019 |
| Celková spotreba vs. spotreba × obyvatelia / 1000 | 0.000 |
Rozdiely sú prakticky nulové, takže odvodené premenné sú vypočítané správne. Zároveň to potvrdzuje jednotky: spotreba na obyvateľa je v kg za rok, denný príjem v gramoch a celková spotreba v tonách.
3.4.2 Podiely zdrojov cukru
Podiely štyroch zdrojov cukru by mali byť medzi 0 a 100 % a spolu dávať 100 %.
udaje %>%
summarise(
`Súčet podielov – minimum` = min(trstina + repa + hfcs + ine_zdroje),
`Súčet podielov – maximum` = max(trstina + repa + hfcs + ine_zdroje),
`Počet záporných podielov „iné zdroje“` = sum(ine_zdroje < 0),
`Podiel takých záznamov (%)` = 100 * mean(ine_zdroje < 0)
) %>%
pivot_longer(everything(), names_to = "Ukazovateľ", values_to = "Hodnota") %>%
kable(digits = 1, caption = "Kontrola podielov zdrojov cukru") %>%
styl()| Ukazovateľ | Hodnota |
|---|---|
| Súčet podielov – minimum | 100.0 |
| Súčet podielov – maximum | 100.0 |
| Počet záporných podielov „iné zdroje“ | 8254.0 |
| Podiel takých záznamov (%) | 82.5 |
Súčet je vždy 100 %, ale v 82,5 % záznamov je podiel „iných zdrojov“ záporný, čo je nemožné. Podiel „iné zdroje“ bol zrejme dopočítaný ako zvyšok do 100 %, pričom podiely trstiny, repy a HFCS spolu presahovali 100 %. Chybu opravím tak, že:
- záporný podiel „iných zdrojov“ nahradím nulou,
- všetky štyri podiely prepočítam tak, aby spolu dávali 100 %.
Pôvodné stĺpce ponechám a upravené podiely uložím do nových stĺpcov s príponou _upr.
udaje <- udaje %>%
mutate(
ine_zdroje_0 = pmax(ine_zdroje, 0), # záporné hodnoty -> 0
sucet = trstina + repa + hfcs + ine_zdroje_0,
trstina_upr = 100 * trstina / sucet,
repa_upr = 100 * repa / sucet,
hfcs_upr = 100 * hfcs / sucet,
ine_zdroje_upr = 100 * ine_zdroje_0 / sucet
) %>%
select(-ine_zdroje_0, -sucet)
udaje %>%
select(trstina_upr, repa_upr, hfcs_upr, ine_zdroje_upr) %>%
summary() trstina_upr repa_upr hfcs_upr ine_zdroje_upr
Min. :34.53 Min. : 3.404 Min. : 0.00176 Min. : 0.000
1st Qu.:50.29 1st Qu.:11.557 1st Qu.:13.31441 1st Qu.: 0.000
Median :56.00 Median :18.073 Median :24.22396 Median : 0.000
Mean :57.04 Mean :17.986 Mean :22.94242 Mean : 2.033
3rd Qu.:63.39 3rd Qu.:23.743 3rd Qu.:32.58729 3rd Qu.: 0.000
Max. :89.41 Max. :39.542 Max. :50.71461 Max. :40.710
Po úprave sú všetky podiely v rozmedzí 0 – 100 % a ich súčet je 100 %.
3.4.3 Počet obyvateľov
Počet obyvateľov jednej krajiny by sa medzi rokmi mal meniť len mierne.
udaje %>%
group_by(country) %>%
summarise(
min_mil = min(population) / 1e6,
max_mil = max(population) / 1e6
) %>%
kable(digits = 1,
col.names = c("Krajina", "Minimum (mil.)", "Maximum (mil.)"),
caption = "Rozpätie počtu obyvateľov v databáze") %>%
styl()| Krajina | Minimum (mil.) | Maximum (mil.) |
|---|---|---|
| Australia | 1.1 | 300.0 |
| Brazil | 1.6 | 299.4 |
| China | 1.0 | 299.6 |
| France | 1.0 | 299.5 |
| Germany | 2.0 | 300.0 |
| India | 1.0 | 299.7 |
| Indonesia | 1.2 | 299.9 |
| Japan | 1.2 | 299.5 |
| Mexico | 1.6 | 299.7 |
| Russia | 2.6 | 298.0 |
| South Africa | 1.2 | 300.0 |
| USA | 1.2 | 299.6 |
Počet obyvateľov sa v každej krajine pohybuje náhodne medzi približne 1 a 300 miliónmi (napr. Čína alebo India by mali mať vyše miliardy obyvateľov). Túto premennú nie je možné rozumne opraviť, preto ju ďalej neinterpretujem. Rovnaký problém má aj celková spotreba cukru, ktorá z počtu obyvateľov vychádza. V analýze preto používam ukazovatele na obyvateľa. Toto je zároveň jeden z dôkazov, že údaje sú syntetické.
3.5 Úprava typov premenných a nové premenné
- Kategoriálne premenné prevediem na faktory, klimatické podmienky na usporiadaný (ordinálny) faktor.
- Binárne premenné doplním o čitateľné verzie „áno / nie“.
- Vytvorím premennú desaťročie.
- Vytvorím premennú kategória denného príjmu podľa odporúčania WHO pre voľné cukry: menej ako 10 % energetického príjmu (asi 50 g denne), ideálne menej ako 5 % (asi 25 g denne). Ide len o orientačné porovnanie, keďže databáza uvádza celkovú spotrebu cukru, nie iba voľné cukry.
udaje <- udaje %>%
mutate(
country = factor(country),
continent = factor(continent),
region = factor(region),
klima = factor(klima, levels = 1:5, ordered = TRUE),
dan = factor(gov_tax, levels = c(0, 1), labels = c("nie", "áno")),
dotacie = factor(gov_subsidies, levels = c(0, 1), labels = c("nie", "áno")),
kampan = factor(education_campaign, levels = c(0, 1), labels = c("nie", "áno")),
desatrocie = paste0(floor(year / 10) * 10, "s"),
hdp_tis = hdp_na_obyv / 1000, # HDP v tisícoch USD (čitateľnejší koeficient v regresii)
kategoria_who = case_when(
denny_prijem <= 25 ~ "do 25 g (odporúčanie WHO)",
denny_prijem <= 50 ~ "25 – 50 g (horná hranica WHO)",
TRUE ~ "nad 50 g (nad hranicou WHO)"
),
kategoria_who = factor(kategoria_who,
levels = c("do 25 g (odporúčanie WHO)",
"25 – 50 g (horná hranica WHO)",
"nad 50 g (nad hranicou WHO)"))
)
glimpse(udaje)Rows: 10,000
Columns: 36
$ country <fct> France, Australia, Germany, France, Germany, South …
$ year <int> 1972, 2003, 1963, 1965, 2010, 1997, 1965, 1970, 198…
$ country_code <chr> "FRA", "AUS", "DEU", "FRA", "DEU", "ZAF", "IND", "M…
$ continent <fct> Europe, Oceania, Europe, Europe, Europe, Africa, As…
$ region <fct> Western Europe, Australia & New Zealand, Western Eu…
$ population <dbl> 261730647, 173796468, 123636586, 298996150, 7341531…
$ hdp_na_obyv <dbl> 8692.6317, 6859.1960, 22075.9506, 3728.0274, 40420.…
$ spotreba_na_obyv <dbl> 12.82774, 21.36263, 32.07748, 47.64893, 23.21434, 6…
$ spotreba_celkova <dbl> 3357412.9, 3712750.0, 3965950.7, 14246846.5, 170428…
$ trstina <dbl> 68.42296, 55.43256, 86.46612, 69.80671, 63.77228, 5…
$ repa <dbl> 38.600384, 38.463620, 10.001416, 34.005173, 23.1059…
$ hfcs <dbl> 42.970760, 16.223681, 51.720631, 43.573774, 53.5435…
$ ine_zdroje <dbl> -49.994107, -10.119866, -48.188167, -47.385654, -40…
$ spracovane_potr <dbl> 171.96618, 229.23802, 203.26325, 34.17728, 78.73348…
$ denny_prijem <dbl> 35.14801, 58.53361, 87.89231, 130.55807, 63.60730, …
$ diabetes <dbl> 11.495111, 6.517479, 8.252688, 10.997905, 14.893879…
$ obezita <dbl> 34.094017, 16.040118, 14.405741, 38.499271, 36.1909…
$ sugar_imports <dbl> 5401669.8, 3418789.6, 8987281.1, 5179004.2, 6463438…
$ sugar_exports <dbl> 2358929, 9694348, 5451632, 8048500, 7062910, 868315…
$ cena_kg <dbl> 3.8640198, 3.2821007, 1.0976869, 2.7612974, 4.21943…
$ gov_tax <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, …
$ gov_subsidies <int> 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, …
$ education_campaign <dbl> 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, …
$ urbanizacia <dbl> 34.50340, 31.78307, 51.55134, 80.38628, 49.70115, 7…
$ klima <ord> 3, 4, 1, 2, 3, 1, 4, 5, 5, 4, 3, 2, 5, 1, 3, 5, 2, …
$ vynos_trstiny <dbl> 52.43397, 58.38205, 32.18473, 84.29602, 66.11082, 9…
$ trstina_upr <dbl> 45.61710, 50.33839, 58.34887, 47.36330, 45.41480, 3…
$ repa_upr <dbl> 25.734600, 34.928866, 6.749133, 23.072241, 16.45465…
$ hfcs_upr <dbl> 28.648299, 14.732747, 34.901998, 29.564461, 38.1305…
$ ine_zdroje_upr <dbl> 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0…
$ dan <fct> nie, nie, nie, nie, nie, nie, nie, nie, nie, nie, n…
$ dotacie <fct> nie, nie, nie, nie, nie, nie, nie, nie, áno, nie, á…
$ kampan <fct> nie, nie, nie, nie, áno, nie, nie, nie, nie, áno, n…
$ desatrocie <chr> "1970s", "2000s", "1960s", "1960s", "2010s", "1990s…
$ hdp_tis <dbl> 8.6926317, 6.8591960, 22.0759506, 3.7280274, 40.420…
$ kategoria_who <fct> 25 – 50 g (horná hranica WHO), nad 50 g (nad hranic…
4 Tabuľky – popisná štatistika
4.1 Základné štatistiky hlavných premenných
udaje %>%
select(spotreba_na_obyv, denny_prijem, diabetes, obezita,
hdp_na_obyv, cena_kg, urbanizacia, spracovane_potr) %>%
pivot_longer(everything(), names_to = "premenna", values_to = "hodnota") %>%
mutate(premenna = factor(premenna, levels = unique(premenna))) %>%
group_by(premenna) %>%
summarise(
n = n(),
mean = mean(hodnota),
sd = sd(hodnota),
min = min(hodnota),
q25 = quantile(hodnota, 0.25),
median = median(hodnota),
q75 = quantile(hodnota, 0.75),
max = max(hodnota)
) %>%
mutate(premenna = recode(premenna,
spotreba_na_obyv = "Spotreba cukru (kg/osoba/rok)",
denny_prijem = "Denný príjem cukru (g/deň)",
diabetes = "Výskyt cukrovky (%)",
obezita = "Obezita (%)",
hdp_na_obyv = "HDP na obyvateľa (USD)",
cena_kg = "Cena cukru za kg",
urbanizacia = "Urbanizácia (%)",
spracovane_potr = "Spracované potraviny"
)) %>%
kable(digits = 2,
col.names = c("Premenná", "n", "Priemer", "Smer. odch.", "Min", "Q25", "Medián", "Q75", "Max"),
caption = "Základné štatistiky vybraných premenných") %>%
styl() %>%
column_spec(1, bold = TRUE) %>%
row_spec(0, bold = TRUE, background = "#f2f2f2") %>%
add_header_above(c(" " = 2, "Polohy a variability" = 2, "Kvantily" = 5))| Premenná | n | Priemer | Smer. odch. | Min | Q25 | Medián | Q75 | Max |
|---|---|---|---|---|---|---|---|---|
| Spotreba cukru (kg/osoba/rok) | 10000 | 37.63 | 18.73 | 5.02 | 21.39 | 37.88 | 54.00 | 69.99 |
| Denný príjem cukru (g/deň) | 10000 | 103.10 | 51.33 | 13.75 | 58.60 | 103.79 | 147.97 | 191.78 |
| Výskyt cukrovky (%) | 10000 | 9.35 | 3.80 | 2.14 | 6.05 | 9.33 | 12.66 | 16.55 |
| Obezita (%) | 10000 | 22.36 | 10.09 | 5.00 | 13.70 | 22.26 | 31.01 | 40.00 |
| HDP na obyvateľa (USD) | 10000 | 25242.49 | 14193.05 | 500.42 | 13219.35 | 25155.57 | 37558.13 | 49997.01 |
| Cena cukru za kg | 10000 | 2.75 | 1.30 | 0.50 | 1.62 | 2.74 | 3.87 | 5.00 |
| Urbanizácia (%) | 10000 | 49.97 | 23.19 | 10.02 | 29.37 | 50.20 | 70.07 | 90.00 |
| Spracované potraviny | 10000 | 155.29 | 83.68 | 10.03 | 81.79 | 155.91 | 228.08 | 299.93 |
Priemerný obyvateľ v databáze skonzumuje približne 37,6 kg cukru ročne, čo je asi 103 g denne – dvojnásobok hornej hranice odporúčanej WHO. Priemer a medián sú takmer rovnaké a kvartily sú rozložené pravidelne, čo zodpovedá rovnomernému rozdeleniu.
4.2 Spotreba cukru a zdravie podľa krajín
udaje %>%
group_by(country) %>%
summarise(
n = n(),
spotreba = mean(spotreba_na_obyv),
denny = mean(denny_prijem),
diabetes = mean(diabetes),
obezita = mean(obezita),
hdp = mean(hdp_na_obyv)
) %>%
arrange(desc(spotreba)) %>%
kable(digits = 1,
col.names = c("Krajina", "n", "Spotreba (kg/rok)", "Denný príjem (g)",
"Cukrovka (%)", "Obezita (%)", "HDP na obyv. (USD)"),
caption = "Priemerné hodnoty podľa krajín (zoradené podľa spotreby)") %>%
styl() %>%
column_spec(1, bold = TRUE)| Krajina | n | Spotreba (kg/rok) | Denný príjem (g) | Cukrovka (%) | Obezita (%) | HDP na obyv. (USD) |
|---|---|---|---|---|---|---|
| Japan | 846 | 39.1 | 107.1 | 9.7 | 22.4 | 25242.9 |
| Germany | 832 | 38.4 | 105.2 | 9.4 | 21.9 | 26338.9 |
| India | 829 | 38.2 | 104.8 | 9.3 | 22.3 | 24755.3 |
| Indonesia | 877 | 38.1 | 104.4 | 9.4 | 22.4 | 24323.4 |
| South Africa | 816 | 37.7 | 103.2 | 9.3 | 22.1 | 25558.2 |
| Australia | 917 | 37.5 | 102.8 | 9.3 | 22.2 | 25710.9 |
| Mexico | 820 | 37.5 | 102.7 | 9.2 | 22.9 | 25830.2 |
| Russia | 817 | 37.4 | 102.4 | 9.4 | 22.0 | 25516.1 |
| France | 861 | 37.1 | 101.8 | 9.3 | 23.2 | 24568.2 |
| Brazil | 788 | 36.9 | 101.1 | 9.5 | 22.4 | 24354.9 |
| USA | 800 | 36.8 | 100.7 | 9.3 | 22.4 | 25106.7 |
| China | 797 | 36.7 | 100.4 | 9.1 | 22.0 | 25610.6 |
Rozdiely medzi krajinami sú veľmi malé – všetky krajiny majú priemernú spotrebu okolo 37 – 39 kg na osobu a rok. V skutočnosti sa spotreba cukru medzi krajinami výrazne líši (napr. v USA je oveľa vyššia ako v Indii), čo je ďalší znak simulovaných údajov.
4.3 Vývoj podľa desaťročí
udaje %>%
group_by(desatrocie) %>%
summarise(
n = n(),
spotreba = mean(spotreba_na_obyv),
diabetes = mean(diabetes),
obezita = mean(obezita),
hfcs = mean(hfcs_upr),
dan = 100 * mean(gov_tax)
) %>%
kable(digits = 1,
col.names = c("Desaťročie", "n", "Spotreba (kg/rok)", "Cukrovka (%)",
"Obezita (%)", "Podiel HFCS (%)", "Záznamy s daňou (%)"),
caption = "Priemerné hodnoty podľa desaťročí") %>%
styl()| Desaťročie | n | Spotreba (kg/rok) | Cukrovka (%) | Obezita (%) | Podiel HFCS (%) | Záznamy s daňou (%) |
|---|---|---|---|---|---|---|
| 1960s | 1575 | 37.0 | 9.5 | 22.5 | 23.1 | 15.4 |
| 1970s | 1556 | 37.4 | 9.2 | 22.6 | 23.2 | 14.6 |
| 1980s | 1611 | 37.7 | 9.4 | 22.3 | 22.6 | 15.8 |
| 1990s | 1549 | 37.4 | 9.4 | 22.4 | 22.8 | 16.3 |
| 2000s | 1547 | 37.6 | 9.4 | 22.0 | 23.0 | 15.1 |
| 2010s | 1563 | 38.7 | 9.3 | 22.3 | 22.7 | 14.5 |
| 2020s | 599 | 37.5 | 9.3 | 22.4 | 23.7 | 13.0 |
4.4 Kategórie denného príjmu podľa WHO
udaje %>%
group_by(kategoria_who) %>%
summarise(
pocet = n(),
podiel = 100 * n() / nrow(udaje),
diabetes = mean(diabetes),
obezita = mean(obezita)
) %>%
kable(digits = 1,
col.names = c("Denný príjem cukru", "Počet", "Podiel (%)",
"Priem. výskyt cukrovky (%)", "Priem. obezita (%)"),
caption = "Záznamy podľa kategórie denného príjmu cukru") %>%
styl()| Denný príjem cukru | Počet | Podiel (%) | Priem. výskyt cukrovky (%) | Priem. obezita (%) |
|---|---|---|---|---|
| do 25 g (odporúčanie WHO) | 647 | 6.5 | 8.7 | 22.6 |
| 25 – 50 g (horná hranica WHO) | 1399 | 14.0 | 8.8 | 22.2 |
| nad 50 g (nad hranicou WHO) | 7954 | 79.5 | 9.5 | 22.4 |
So zvyšujúcim sa denným príjmom cukru mierne rastie priemerný výskyt cukrovky, obezita sa však medzi skupinami takmer nemení.
4.5 Spotreba cukru podľa opatrení vlády
Podobne ako v cvičení (group_by(MaAuto)) zoskupím záznamy podľa toho, či mala krajina v danom roku daň na cukor, resp. vzdelávaciu kampaň.
bind_rows(
udaje %>% group_by(hodnota = dan) %>% summarise(n = n(), spotreba = mean(spotreba_na_obyv), diabetes = mean(diabetes)) %>% mutate(opatrenie = "Daň na cukor"),
udaje %>% group_by(hodnota = kampan) %>% summarise(n = n(), spotreba = mean(spotreba_na_obyv), diabetes = mean(diabetes)) %>% mutate(opatrenie = "Vzdelávacia kampaň"),
udaje %>% group_by(hodnota = dotacie)%>% summarise(n = n(), spotreba = mean(spotreba_na_obyv), diabetes = mean(diabetes)) %>% mutate(opatrenie = "Dotácie na cukor")
) %>%
select(opatrenie, hodnota, n, spotreba, diabetes) %>%
kable(digits = 2,
col.names = c("Opatrenie", "Zavedené?", "Počet", "Spotreba (kg/rok)", "Cukrovka (%)"),
caption = "Priemerná spotreba cukru a výskyt cukrovky podľa opatrení vlády") %>%
styl() %>%
collapse_rows(columns = 1, valign = "middle")| Opatrenie | Zavedené? | Počet | Spotreba (kg/rok) | Cukrovka (%) |
|---|---|---|---|---|
| Daň na cukor | nie | 8486 | 37.58 | 9.35 |
| áno | 1514 | 37.86 | 9.34 | |
| Vzdelávacia kampaň | nie | 5931 | 37.54 | 9.35 |
| áno | 4069 | 37.75 | 9.36 | |
| Dotácie na cukor | nie | 7025 | 37.45 | 9.34 |
| áno | 2975 | 38.04 | 9.37 |
5 Grafy
Grafy kreslím knižnicou ggplot2.
5.1 Rozdelenie spotreby cukru – histogram
ggplot(udaje, aes(x = spotreba_na_obyv)) +
geom_histogram(binwidth = 2.5, boundary = 5, fill = farba, color = "white") +
labs(
title = "Rozdelenie ročnej spotreby cukru na obyvateľa",
x = "Spotreba cukru (kg na osobu za rok)",
y = "Počet záznamov"
) +
theme_minimal() +
theme(panel.grid.minor = element_blank())Histogram je takmer „plochý“ – spotreba je rovnomerne rozdelená medzi 5 a 70 kg. Skutočné ekonomické údaje majú zvyčajne rozdelenie s vrcholom a dlhším chvostom, takže aj tento graf naznačuje, že údaje boli vygenerované náhodne.
5.2 Spotreba cukru podľa kontinentov – boxplot
ggplot(udaje, aes(x = continent, y = spotreba_na_obyv)) +
geom_boxplot(fill = "lightblue", color = "darkblue") +
labs(
title = "Spotreba cukru na obyvateľa podľa kontinentov",
x = "Kontinent",
y = "Spotreba cukru (kg na osobu za rok)"
) +
theme_minimal() +
theme(panel.grid.minor = element_blank())Boxploty všetkých kontinentov sú takmer rovnaké – medián okolo 38 kg a rovnaké rozpätie.
5.3 Vývoj spotreby cukru v čase podľa krajín
Pre každú krajinu a rok najprv vypočítam priemer (keďže na jednu krajinu a rok pripadá viac záznamov).
udaje_kr <- udaje %>%
group_by(country, year) %>%
summarise(spotreba = mean(spotreba_na_obyv),
diabetes = mean(diabetes),
.groups = "drop")
ggplot(udaje_kr, aes(x = year, y = spotreba)) +
geom_line(color = farba, linewidth = 0.6) +
geom_smooth(method = "loess", se = FALSE, color = "grey30", linewidth = 0.6) +
facet_wrap(~ country, ncol = 4) +
labs(
title = "Priemerná spotreba cukru na obyvateľa v rokoch 1960 – 2023",
subtitle = "Modrá: ročný priemer záznamov, sivá: vyhladený trend (loess)",
x = "Rok",
y = "Spotreba (kg na osobu za rok)"
) +
theme_minimal() +
theme(panel.grid.minor = element_blank())Ročné priemery kolíšu náhodne okolo 37 kg a vyhladený trend je takmer vodorovný – v údajoch nie je žiadny výrazný dlhodobý trend.
5.4 Súvis spotreby cukru a cukrovky – bodový graf
ggplot(udaje, aes(x = spotreba_na_obyv, y = diabetes)) +
geom_point(alpha = 0.15, size = 1, color = farba) +
geom_smooth(method = "lm", color = "grey20", linewidth = 0.8) +
labs(
title = "Spotreba cukru a výskyt cukrovky",
subtitle = "Každý bod je jeden záznam, čiara je lineárna regresná priamka",
x = "Spotreba cukru (kg na osobu za rok)",
y = "Výskyt cukrovky (%)"
) +
theme_minimal() +
theme(panel.grid.minor = element_blank())Regresná priamka mierne stúpa – vyššia spotreba cukru súvisí s mierne vyšším výskytom cukrovky. Body sú však rozptýlené po celej ploche, takže súvis je slabý (korelačný koeficient 0,12).
5.5 Štruktúra zdrojov cukru podľa krajín
Používam upravené podiely (po oprave záporných hodnôt).
zdroje <- udaje %>%
group_by(country) %>%
summarise(
`Cukrová trstina` = mean(trstina_upr),
`Cukrová repa` = mean(repa_upr),
`HFCS` = mean(hfcs_upr),
`Iné zdroje` = mean(ine_zdroje_upr)
) %>%
pivot_longer(-country, names_to = "zdroj", values_to = "podiel") %>%
mutate(zdroj = factor(zdroj, levels = c("Cukrová trstina", "Cukrová repa", "HFCS", "Iné zdroje")))
ggplot(zdroje, aes(x = podiel, y = fct_rev(country), fill = zdroj)) +
geom_col(width = 0.7, color = "white", linewidth = 0.3,
position = position_stack(reverse = TRUE)) + # poradie v stĺpci = poradie v legende
scale_fill_manual(values = c("#2a78d6", "#eb6834", "#1baf7a", "#eda100")) +
scale_x_continuous(labels = function(x) paste0(x, " %"),
expand = expansion(mult = c(0, 0.03))) +
labs(
title = "Priemerná štruktúra zdrojov cukru podľa krajín",
x = "Podiel na spotrebe cukru",
y = NULL,
fill = "Zdroj"
) +
theme_minimal() +
theme(legend.position = "top", panel.grid.minor = element_blank(),
panel.grid.major.y = element_blank())Vo všetkých krajinách tvorí najväčšiu časť cukor z cukrovej trstiny, nasleduje HFCS a cukrová repa. V skutočnosti by Európa (Francúzsko, Nemecko, Rusko) mala vyrábať cukor najmä z cukrovej repy a USA by mali mať výrazne vyšší podiel HFCS – štruktúra je však vo všetkých krajinách takmer rovnaká.