Úvod

V tomto cvičení si precvičíme základné operácie s databázami v prostredí R – tvorbu dátového rámca, manipuláciu s údajmi pomocou balíka dplyr, vizualizáciu pomocou ggplot2, a nakoniec aj jednoduchú regresnú analýzu. Údaje budú simulovať predaj produktov v troch regiónoch.

# Vytvorenie dátového rámca
Produkt <- c("A", "B", "C", "D", "E", "F")
Region <- c("Západ", "Východ", "Sever", "Západ", "Východ", "Sever")
Predaj <- c(120, 150, 130, 170, 160, 110)
Zisk <- c(45, 50, 47, 65, 55, 40)

udaje <- data.frame(Produkt, Region, Predaj, Zisk)
library(knitr)
kable(udaje, caption = "Prehľad údajov o produktoch")
Prehľad údajov o produktoch
Produkt Region Predaj Zisk
A Západ 120 45
B Východ 150 50
C Sever 130 47
D Západ 170 65
E Východ 160 55
F Sever 110 40

Malé cvičenie

Vypočítajte priemerný predaj a priemerný zisk.

mean(udaje$Predaj)
## [1] 140
mean(udaje$Zisk)
## [1] 50.33333

Práca s dplyr

library(dplyr)

# Výber produktov s predajom nad 130
udaje %>%
  filter(Predaj > 130) %>%
  kable(caption = "Produkty s predajom nad 130") %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
Produkty s predajom nad 130
Produkt Region Predaj Zisk
B Východ 150 50
D Západ 170 65
E Východ 160 55

Malé cvičenie

Vyberte iba produkty z regiónu “Západ” a zoradte ich podľa zisku zostupne.

udaje %>%
  filter(Region == "Západ") %>%
  arrange(desc(Zisk)) %>%
  kable(
    caption = "Produkty z regiónu Západ zoradené podľa zisku"
  ) %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
Produkty z regiónu Západ zoradené podľa zisku
Produkt Region Predaj Zisk
D Západ 170 65
A Západ 120 45

Skupinová sumarizácia

library(kableExtra)

udaje %>%
  group_by(Region) %>%
  summarise(
    PriemernyPredaj = mean(Predaj),
    PriemernyZisk = mean(Zisk)
  )%>%
  kable(digits = 1, caption = "Priemerný predaj a zisk podľa regiónu") %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
Priemerný predaj a zisk podľa regiónu
Region PriemernyPredaj PriemernyZisk
Sever 120 43.5
Východ 155 52.5
Západ 145 55.0

Vizualizácia s ggplot2

library(ggplot2)
ggplot(udaje, aes(x = Produkt, y = Predaj, fill = Region)) +
  geom_col() +
  theme_minimal() +
  labs(title = "Predaj produktov podľa regiónu",
       x = "Produkt", y = "Predaj (v tisícoch)")

# Malé cvičenie ### Skúste vytvoriť scatter plot, kde na osi X bude Predaj a na osi Y Zisk. Zvýraznite body farbou podľa regiónu.

ggplot(udaje, aes(x = Predaj, y = Zisk, color = Region)) +
  geom_point(size = 3) +
  theme_minimal() +
  labs(title = "Vzťah medzi predajom a ziskom")

# T-test – porovnanie priemerov #### Predpokladajme, že región Západ a Východ chceme porovnať z hľadiska predaja:

t.test(
  udaje$Predaj[udaje$Region == "Západ"],
  udaje$Predaj[udaje$Region == "Východ"]
)
## 
##  Welch Two Sample t-test
## 
## data:  udaje$Predaj[udaje$Region == "Západ"] and udaje$Predaj[udaje$Region == "Východ"]
## t = -0.39223, df = 1.0799, p-value = 0.7582
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -282.4661  262.4661
## sample estimates:
## mean of x mean of y 
##       145       155

Jednoduchá lineárna regresia

model <- lm(Zisk ~ Predaj, data = udaje)
summary(model)
## 
## Call:
## lm(formula = Zisk ~ Predaj, data = udaje)
## 
## Residuals:
##       1       2       3       4       5       6 
##  1.6667 -3.8333  0.1667  4.1667 -2.3333  0.1667 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)   
## (Intercept)  1.33333    8.50082   0.157  0.88296   
## Predaj       0.35000    0.06001   5.832  0.00431 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.175 on 4 degrees of freedom
## Multiple R-squared:  0.8948, Adjusted R-squared:  0.8685 
## F-statistic: 34.02 on 1 and 4 DF,  p-value: 0.004306

Krajšia tabuľka výsledkov

library(broom)
library(kableExtra)

coef.tbl <- tidy(model, conf.int = TRUE)

coef.tbl %>%
  kable(digits = 3, caption = "OLS model: Zisk ~ Predaj") %>%
  kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
OLS model: Zisk ~ Predaj
term estimate std.error statistic p.value conf.low conf.high
(Intercept) 1.333 8.501 0.157 0.883 -22.269 24.935
Predaj 0.350 0.060 5.832 0.004 0.183 0.517

Môj návrh použitia novinky

Ako novinku, použijem balík ggcorrplot na vizualizáciu korelačnej matice medzi číselnými premennými. Tento spôsob graficky znázorňuje, ako spolu jednotlivé premenné súvisia.

# install.packages("ggcorrplot")
library(ggcorrplot)

num_data <- udaje[, c("Predaj", "Zisk")]
cor_matrix <- cor(num_data)

ggcorrplot(cor_matrix,
           lab = TRUE,
           colors = c("tomato2", "white", "springgreen3"),
           title = "Korelačná matica medzi číselnými premennými")