Predpokladajme, že v názvoch stĺpcov v pôvodnom súbore máme medzery, teda
Tu sa v názvoch stĺpcov vyskytujú medzery. Názvy stĺpcov sa v prostredí R stávajú názvami premenných a tie nesmú byť súčasťou názvu premennej. Neprípustné znaky v názvoch premenných vo všeobecnosti môžeme nahradiť s pomocou knižnice janitor.
Import údajov
Skontrolujeme si, či sa doplňujú na miesta chýbajúcich údajov doplňujú NA hodnoty (NA - Not Available).
# Import the CSV file into a data frame# - header = TRUE: the first row contains variable names# - sep = ";": variables are separated by semicolons# - dec = ".": decimal numbers use a dot# - na.strings = c("", "NA"): empty cells and text "NA" are treated as missing values# - stringsAsFactors = FALSE: text variables remain text, not factorsudaje1 <-read.csv2("udaje/ChybnaDatabaza.csv",header =TRUE,sep =";",dec =".",na.strings =c("", "NA"),stringsAsFactors =FALSE)# Show the first rows of the datasethead(udaje1)
# Load the dplyr package# dplyr provides convenient tools for working with data frameslibrary(dplyr)
Attaching package: 'dplyr'
The following objects are masked from 'package:stats':
filter, lag
The following objects are masked from 'package:base':
intersect, setdiff, setequal, union
# -----------------------------# 1. Save the original column names# -----------------------------old_names <-names(udaje1)# -----------------------------# 2. Shorten (abbreviate) column names# -----------------------------# rename_with() applies a function to all column names# abbreviate() automatically shortens long names# strict = FALSE allows a more flexible abbreviationudaje1 <- udaje1 %>%rename_with(~abbreviate(.x, strict =FALSE))# -----------------------------# 3. Ensure that column names are unique# -----------------------------# Sometimes abbreviation may create identical names# make.unique() automatically adds suffixes (.1, .2, ...) if necessarynames(udaje1) <-make.unique(names(udaje1))# -----------------------------# 4. Show comparison: old vs. new names# -----------------------------comparison <-data.frame(Original_Name = old_names,Shortened_Name =names(udaje1))print(comparison)
E3te raz si pozrime našu pôvodnú databázu s chýbajúcimi údajmi:
Databáza s chýbajúcimi údajmi
library(mice)
Attaching package: 'mice'
The following object is masked from 'package:stats':
filter
The following objects are masked from 'package:base':
cbind, rbind
library(VIM)
Loading required package: colorspace
Loading required package: grid
VIM is ready to use.
Suggestions and bug-reports can be submitted at: https://github.com/statistikat/VIM/issues
Attaching package: 'VIM'
The following object is masked from 'package:datasets':
sleep
# Count missing values in each columnprint("pocet chybajucich udajov za jednotlive premenne")
[1] "pocet chybajucich udajov za jednotlive premenne"
colSums(is.na(udaje1))
YEAR COMP EXCH PRIM TOBI MARK RETU DEBT FIRM SOCI ENVI GOVE ESG.
1 0 0 1 0 1 0 1 1 1 1 1 0
Štatistika vyššie nám hovorí, koľko NA má ktorý stĺpec databázy. Ďalšie riadky nám hovoria o štruktúre záznamov, kde sa nachádzajú chýbajúce hodnoty. Posledný riadok hovorí o počte chýbajúcich údajov za jednotlivé premenné a za celú databázu. Máme 760 záznamov , z kotých 754 je úplných a mámo 8 chýbajúcich hodnôt. Podbnú informáciu nám dáva nasledovný graf.
Variables sorted by number of missings:
Variable Count
YEAR 0.001315789
PRIM 0.001315789
MARK 0.001315789
DEBT 0.001315789
FIRM 0.001315789
SOCI 0.001315789
ENVI 0.001315789
GOVE 0.001315789
COMP 0.000000000
EXCH 0.000000000
TOBI 0.000000000
RETU 0.000000000
ESG. 0.000000000
# multiple imputation - v pripade, ak vam chyba mensi rozsah udajovimp <-mice(udaje1, seed=123) # konkretne parametre imputacie vieme nastavovat - pozri help
iter imp variable
1 1 YEAR MARK DEBT FIRM SOCI ENVI GOVE
1 2 YEAR MARK DEBT FIRM SOCI ENVI GOVE
1 3 YEAR MARK DEBT FIRM SOCI ENVI GOVE
1 4 YEAR MARK DEBT FIRM SOCI ENVI GOVE
1 5 YEAR MARK DEBT FIRM SOCI ENVI GOVE
2 1 YEAR MARK DEBT FIRM SOCI ENVI GOVE
2 2 YEAR MARK DEBT FIRM SOCI ENVI GOVE
2 3 YEAR MARK DEBT FIRM SOCI ENVI GOVE
2 4 YEAR MARK DEBT FIRM SOCI ENVI GOVE
2 5 YEAR MARK DEBT FIRM SOCI ENVI GOVE
3 1 YEAR MARK DEBT FIRM SOCI ENVI GOVE
3 2 YEAR MARK DEBT FIRM SOCI ENVI GOVE
3 3 YEAR MARK DEBT FIRM SOCI ENVI GOVE
3 4 YEAR MARK DEBT FIRM SOCI ENVI GOVE
3 5 YEAR MARK DEBT FIRM SOCI ENVI GOVE
4 1 YEAR MARK DEBT FIRM SOCI ENVI GOVE
4 2 YEAR MARK DEBT FIRM SOCI ENVI GOVE
4 3 YEAR MARK DEBT FIRM SOCI ENVI GOVE
4 4 YEAR MARK DEBT FIRM SOCI ENVI GOVE
4 5 YEAR MARK DEBT FIRM SOCI ENVI GOVE
5 1 YEAR MARK DEBT FIRM SOCI ENVI GOVE
5 2 YEAR MARK DEBT FIRM SOCI ENVI GOVE
5 3 YEAR MARK DEBT FIRM SOCI ENVI GOVE
5 4 YEAR MARK DEBT FIRM SOCI ENVI GOVE
5 5 YEAR MARK DEBT FIRM SOCI ENVI GOVE
Knižnica .ggplot2. je v súčasnosti najčastejšie používaná grafická knižnica, pričom predpripravené kódy k jednotlivým obrázkom si viete nájsť v R Graph Gallery. Tu si uvedieme jednoduchšie z nich.
Scatter plot
# Basic scatter plotlibrary(ggplot2)ggplot(udaje.2013, aes(x = FIRM, y = ESG.)) +# specifikacia osigeom_point() +# typ grafu - scatterplottheme_minimal() +labs(title ="ESG index", x ="Veľkosť firmy", y ="Score") # oznacenie osi
Boxplot
# Bar plot with groupinglibrary(ggplot2)library(ggplot2)ggplot(udaje1, aes(x =factor(YEAR), y = ESG.)) +# specifikacia osigeom_boxplot(fill ="lightblue", color ="darkblue") +# typ grafu - boxplotlabs( # oznacenie osi, nazov grafutitle ="ESG Index by YEAR",x ="Year",y ="ESG Index" ) +theme_minimal()
Welch Two Sample t-test
data: udaje1$ESG.[udaje1$YEAR == 2013] and udaje1$ESG.[udaje1$YEAR == 2015]
t = -1.2984, df = 147.86, p-value = 0.1962
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-0.05906743 0.01222533
sample estimates:
mean of x mean of y
0.2276316 0.2510526
ANOVA: Comparing Reading Scores Across Programs
anova.result <-aov(ESG. ~ YEAR, data = udaje1)summary(anova.result)
Df Sum Sq Mean Sq F value Pr(>F)
YEAR 1 0.617 0.6169 29.88 6.25e-08 ***
Residuals 758 15.651 0.0206
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Linear Regression: Predicting Math Scores
model <-lm(ESG. ~ RETU + FIRM + DEBT, data = udaje.2013)summary(model)
Call:
lm(formula = ESG. ~ RETU + FIRM + DEBT, data = udaje.2013)
Residuals:
Min 1Q Median 3Q Max
-0.189450 -0.054050 -0.001079 0.049273 0.237250
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -3.080e-01 8.210e-02 -3.751 0.000354 ***
RETU 1.668e-04 9.115e-05 1.830 0.071345 .
FIRM 8.080e-02 1.136e-02 7.115 6.78e-10 ***
DEBT -6.201e-04 4.205e-04 -1.475 0.144688
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.08095 on 72 degrees of freedom
Multiple R-squared: 0.4217, Adjusted R-squared: 0.3976
F-statistic: 17.5 on 3 and 72 DF, p-value: 1.24e-08