Code
knitr::opts_chunk$set(
echo = TRUE,
message = FALSE,
warning = FALSE
)echo = TRUE zobrazí použitý R kód.message = FALSE potlačí informačné správy.warning = FALSE potlačí upozornenia.knitr::opts_chunk$set(
echo = TRUE,
message = FALSE,
warning = FALSE
)Cieľom tohto dokumentu je demonštrovať základné operácie v programovacom jazyku R na príkladoch z ekonomickej a podnikateľskej praxe.
Dokument obsahuje prácu s numerickými hodnotami, textovými premennými, logickými operáciami, vektormi a maticami. Súčasťou sú aj vlastné cvičenia zamerané na využitie jednotlivých príkazov.
Numerické skaláre predstavujú jednotlivé číselné hodnoty. V ekonomickej praxi ich môžeme využiť napríklad pri výpočte tržieb, nákladov alebo zisku.
Predpokladajme, že malá kaviareň dosiahla mesačné tržby 18 500 € a náklady 12 300 €.
trzby <- 18500
naklady <- 12300
sucet <- trzby + naklady
rozdiel <- trzby - naklady
podiel <- trzby / naklady
nasobenie <- trzby * 2
sucet[1] 30800
rozdiel[1] 6200
podiel[1] 1.504065
nasobenie[1] 37000
hodnota <- 15.678
round(hodnota, digits = 2)[1] 15.68
ceiling(hodnota)[1] 16
floor(hodnota)[1] 15
Zadanie:
Kaviareň dosiahla mesačné tržby 18 500 € a náklady 12 300 €. Vypočítajte jej zisk a ziskovú maržu v percentách. Výslednú maržu zaokrúhlite na dve desatinné miesta.
trzby <- 18500
naklady <- 12300
zisk <- trzby - naklady
marza <- (zisk / trzby) * 100
zisk[1] 6200
round(marza, digits = 2)[1] 33.51
Interpretácia:
Kaviareň dosiahla zisk 6 200 € a ziskovú maržu približne 33,51 %. To znamená, že zo 100 € tržieb jej po odpočítaní uvedených nákladov zostáva približne 33,51 €.
firma <- "Coffee"
nazov <- "House"
cely_nazov <- paste(firma, nazov)
nazov_bez_medzery <- paste0(firma, nazov)
cely_nazov[1] "Coffee House"
nazov_bez_medzery[1] "CoffeeHouse"
Funkcia paste() spája textové hodnoty s medzerou, zatiaľ čo paste0() ich spája bez medzery.
produkt <- "Cappuccino"
nchar(produkt)[1] 10
substr(produkt, 1, 5)[1] "Cappu"
Funkcia nchar() zisťuje počet znakov a substr() vyberá časť textového reťazca.
Zadanie:
Vytvorte textové premenné s názvom produktu a kategórie. Následne ich spojte do jedného textu a zistite počet znakov v názve produktu.
produkt <- "Espresso"
kategoria <- "Kava"
popis <- paste(kategoria, produkt)
popis[1] "Kava Espresso"
nchar(produkt)[1] 8
Logické operácie umožňujú porovnávať hodnoty a overovať splnenie určitých podmienok. Výsledkom je hodnota TRUE alebo FALSE.
p <- TRUE
q <- FALSE
!p[1] FALSE
p & q[1] FALSE
p | q[1] TRUE
xor(p, q)[1] TRUE
! znamená negáciu.& znamená logické A.| znamená logické ALEBO.xor() znamená, že platí práve jedna z dvoch podmienok.trzby <- 18500
plan <- 17000
trzby > plan[1] TRUE
trzby == plan[1] FALSE
trzby != plan[1] TRUE
Zadanie:
Spoločnosť si stanovila minimálny mesačný cieľ tržieb 20 000 € a maximálne prípustné náklady 15 000 €. Skutočné tržby boli 22 000 € a náklady 14 000 €.
Overte, či spoločnosť splnila obidve podmienky súčasne.
trzby <- 22000
naklady <- 14000
ciel_trzieb <- 20000
limit_nakladov <- 15000
splnene_trzby <- trzby >= ciel_trzieb
splnene_naklady <- naklady <= limit_nakladov
splnene_trzby[1] TRUE
splnene_naklady[1] TRUE
splneny_ciel <- splnene_trzby & splnene_naklady
splneny_ciel[1] TRUE
Interpretácia:
Výsledkom je TRUE, pretože spoločnosť dosiahla požadované tržby a zároveň neprekročila stanovený limit nákladov.
Vektory umožňujú uchovávať viacero hodnôt v jednej premennej. V ekonomickej analýze ich môžeme využiť napríklad pri spracovaní mesačných tržieb.
v1 <- c(10, 20, 30, 40)
v2 <- 1:6
v3 <- seq(from = 0, to = 10, by = 2)
v4 <- rep(5, times = 4)
v1[1] 10 20 30 40
v2[1] 1 2 3 4 5 6
v3[1] 0 2 4 6 8 10
v4[1] 5 5 5 5
trzby <- c(12000, 15000, 11000, 18000)
trzby + 1000[1] 13000 16000 12000 19000
trzby * 1.10[1] 13200 16500 12100 19800
trzby / 2[1] 6000 7500 5500 9000
Každá operácia sa vykoná na jednotlivých prvkoch vektora.
trzby <- c(12000, 15000, 11000, 18000, 21000)
trzby[1][1] 12000
trzby[2:4][1] 15000 11000 18000
trzby[-1][1] 15000 11000 18000 21000
trzby[trzby > 15000][1] 18000 21000
which(trzby > 15000)[1] 4 5
predaj <- c(100, 120, NA, 150, 180)
is.na(predaj)[1] FALSE FALSE TRUE FALSE FALSE
mean(predaj)[1] NA
mean(predaj, na.rm = TRUE)[1] 137.5
Argument na.rm = TRUE zabezpečí, že chýbajúce hodnoty nebudú zahrnuté do výpočtu.
trzby <- c(12000, 15000, 11000, 18000, 21000)
mean(trzby)[1] 15400
sd(trzby)[1] 4159.327
max(trzby)[1] 21000
min(trzby)[1] 11000
summary(trzby) Min. 1st Qu. Median Mean 3rd Qu. Max.
11000 12000 15000 15400 18000 21000
sort(trzby)[1] 11000 12000 15000 18000 21000
Zadanie:
Spoločnosť dosiahla za šesť mesiacov tržby 12 000 €, 15 000 €, 11 000 €, 18 000 €, 21 000 € a 17 000 €.
Vypočítajte celkové tržby, priemerné mesačné tržby a identifikujte mesiace, v ktorých tržby prekročili 16 000 €.
trzby <- c(12000, 15000, 11000,
18000, 21000, 17000)
celkove_trzby <- sum(trzby)
priemerne_trzby <- mean(trzby)
nad_limit <- trzby[trzby > 16000]
mesiace <- which(trzby > 16000)
celkove_trzby[1] 94000
priemerne_trzby[1] 15666.67
nad_limit[1] 18000 21000 17000
mesiace[1] 4 5 6
Interpretácia:
Celkové tržby predstavovali 94 000 € a priemerné mesačné tržby približne 15 666,67 €. Hranicu 16 000 € prekročili tržby vo štvrtom, piatom a šiestom mesiaci.
Matice predstavujú dvojrozmerné usporiadanie hodnôt do riadkov a stĺpcov. Môžeme ich použiť napríklad na analýzu tržieb jednotlivých produktov v rôznych regiónoch.
M <- matrix(1:12, nrow = 3, byrow = TRUE)
M [,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
dim(M)[1] 3 4
Argument byrow = TRUE znamená, že hodnoty sa do matice zapisujú postupne po riadkoch.
M[1, 2][1] 2
M[, 3][1] 3 7 11
M[2, ][1] 5 6 7 8
M[1:2, 2:3] [,1] [,2]
[1,] 2 3
[2,] 6 7
A <- matrix(c(2, 4, 1, 3), nrow = 2)
B <- matrix(c(5, 2, 3, 6), nrow = 2)
A + B [,1] [,2]
[1,] 7 4
[2,] 6 9
A * B [,1] [,2]
[1,] 10 3
[2,] 8 18
A %*% B [,1] [,2]
[1,] 12 12
[2,] 26 30
t(A) [,1] [,2]
[1,] 2 4
[2,] 1 3
det(A)[1] 2
solve(A) [,1] [,2]
[1,] 1.5 -0.5
[2,] -2.0 1.0
Operátor * vykonáva násobenie zodpovedajúcich prvkov, zatiaľ čo %*% vykonáva maticové násobenie.
C <- cbind(1:3, 4:6)
D <- rbind(1:3, 4:6)
C [,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
D [,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
M <- matrix(1:12, nrow = 3, byrow = TRUE)
rowSums(M)[1] 10 26 42
colSums(M)[1] 15 18 21 24
apply(M, 1, mean)[1] 2.5 6.5 10.5
apply(M, 2, mean)[1] 5 6 7 8
Zadanie:
Spoločnosť predáva tri produkty v štyroch regiónoch. Vytvorte maticu 3 × 4 s hodnotami tržieb v eurách.
Vypočítajte celkové tržby jednotlivých produktov, celkové tržby jednotlivých regiónov a transponovanú maticu.
trzby_matica <- matrix(
c(1200, 1500, 1800, 1400,
2000, 1700, 1900, 2200,
900, 1100, 1300, 1600),
nrow = 3,
byrow = TRUE
)
rownames(trzby_matica) <- c(
"Produkt_A", "Produkt_B", "Produkt_C"
)
colnames(trzby_matica) <- c(
"Zapad", "Stred", "Vychod", "Juh"
)
trzby_matica Zapad Stred Vychod Juh
Produkt_A 1200 1500 1800 1400
Produkt_B 2000 1700 1900 2200
Produkt_C 900 1100 1300 1600
rowSums(trzby_matica)Produkt_A Produkt_B Produkt_C
5900 7800 4900
colSums(trzby_matica) Zapad Stred Vychod Juh
4100 4300 5000 5200
t(trzby_matica) Produkt_A Produkt_B Produkt_C
Zapad 1200 2000 900
Stred 1500 1700 1100
Vychod 1800 1900 1300
Juh 1400 2200 1600
Interpretácia:
Funkcia rowSums() vypočíta celkové tržby jednotlivých produktov a colSums() celkové tržby jednotlivých regiónov. Funkcia t() vymení riadky a stĺpce matice.
Vlastné čísla a vlastné vektory patria medzi dôležité nástroje lineárnej algebry. V ekonomickej analýze sa využívajú napríklad pri analýze hlavných komponentov (PCA) a pri skúmaní variančno-kovariančných matíc.
Pre štvorcovú maticu A platí:
\[ A v = \lambda v \]
Kde:
A_eig <- matrix(
c(4, 2, 1,
2, 5, 0,
1, 0, 3),
nrow = 3,
byrow = TRUE
)
A_eig [,1] [,2] [,3]
[1,] 4 2 1
[2,] 2 5 0
[3,] 1 0 3
eig_A <- eigen(A_eig, symmetric = TRUE)
eig_Aeigen() decomposition
$values
[1] 6.669079 3.476024 1.854897
$vectors
[,1] [,2] [,3]
[1,] -0.6311790 0.3743620 0.6793131
[2,] -0.7563200 -0.4912963 -0.4319815
[3,] -0.1720265 0.7864357 -0.5932333
vlastne_cisla <- eig_A$values
vlastne_vektory <- eig_A$vectors
vlastne_cisla[1] 6.669079 3.476024 1.854897
vlastne_vektory [,1] [,2] [,3]
[1,] -0.6311790 0.3743620 0.6793131
[2,] -0.7563200 -0.4912963 -0.4319815
[3,] -0.1720265 0.7864357 -0.5932333
Funkcia eigen() vypočíta vlastné čísla a vlastné vektory matice.
Príkaz $values vyberá vlastné čísla a $vectors vyberá vlastné vektory uložené v stĺpcoch.
lambda <- vlastne_cisla[1]
v <- vlastne_vektory[, 1]
lava_strana <- A_eig %*% v
prava_strana <- lambda * v
lava_strana [,1]
[1,] -4.209382
[2,] -5.043958
[3,] -1.147259
prava_strana[1] -4.209382 -5.043958 -1.147259
all.equal(
as.vector(lava_strana),
as.vector(prava_strana)
)[1] TRUE
Funkcia all.equal() overuje približnú rovnosť výsledkov s prihliadnutím na numerickú presnosť výpočtu.
Zadanie:
Vytvorte vlastnú symetrickú maticu 3 × 3. Pomocou funkcie eigen() vypočítajte jej vlastné čísla a vlastné vektory.
Následne overte, či sa súčet vlastných čísel rovná stope matice a ich súčin determinantu.
B <- matrix(
c(6, 2, 0,
2, 3, 1,
0, 1, 4),
nrow = 3,
byrow = TRUE
)
B [,1] [,2] [,3]
[1,] 6 2 0
[2,] 2 3 1
[3,] 0 1 4
eig_B <- eigen(B, symmetric = TRUE)
eig_B$values[1] 7.068708 4.277754 1.653538
eig_B$vectors [,1] [,2] [,3]
[1,] 0.8717580 -0.2967815 -0.3898189
[2,] 0.4658273 0.2555653 0.8471666
[3,] 0.1517992 0.9201126 -0.3610400
# Súčet vlastných čísel
sum(eig_B$values)[1] 13
# Stopa matice
sum(diag(B))[1] 13
# Súčin vlastných čísel
prod(eig_B$values)[1] 50
# Determinant matice
det(B)[1] 50
# Overenie
all.equal(
sum(eig_B$values),
sum(diag(B))
)[1] TRUE
all.equal(
prod(eig_B$values),
as.numeric(det(B))
)[1] TRUE
Interpretácia:
Súčet vlastných čísel sa rovná súčtu diagonálnych prvkov matice. Súčin vlastných čísel sa rovná determinantu matice. Pri numerických výpočtoch sa môžu objaviť malé odchýlky spôsobené zaokrúhľovaním.
V tomto dokumente boli demonštrované základné operácie v programovacom jazyku R prostredníctvom vlastných príkladov z ekonomickej praxe.
Práca zahŕňa základné aritmetické výpočty, manipuláciu s textovými premennými, logické operácie, analýzu numerických vektorov a maticové výpočty.
Samostatné cvičenia ukázali možnosti využitia R pri analýze tržieb, nákladov, ziskovosti a pri základných matematických operáciách potrebných na spracovanie ekonomických údajov.