Leíró statisztika


A bank.csv táblázat beolvasása bankAdat néven

Argumentumok

bankAdat <- read.csv("bank.csv", header = TRUE, stringsAsFactors = TRUE, encoding = 'UTF-8')

Mik a mezőneveink?

names(bankAdat)
## [1] "Azonosító"           "KezdőFizetésUSD"     "Nem"                
## [4] "Életkor"             "JelenlegiFizetésUSD" "IskolázottságÉv"    
## [7] "Beosztás"

Rövid összefoglalás az adattábláról

summary(bankAdat)
##    Azonosító      KezdőFizetésUSD    Nem       Életkor   
##  Min.   : 626.0   Min.   : 3600   férfi:258   20-29:172  
##  1st Qu.: 748.2   1st Qu.: 4995   nő   :216   30-39:146  
##  Median : 877.5   Median : 6000               40-49: 62  
##  Mean   : 876.6   Mean   : 6806               50-59: 64  
##  3rd Qu.:1002.8   3rd Qu.: 6996               60-69: 30  
##  Max.   :1129.0   Max.   :31992                          
##  JelenlegiFizetésUSD IskolázottságÉv                  Beosztás  
##  Min.   : 6300       Min.   : 8.00   alkalmazott          :427  
##  1st Qu.: 9600       1st Qu.:12.00   alsó vezető          : 33  
##  Median :11550       Median :12.00   közép és felső vezető: 14  
##  Mean   :13768       Mean   :13.49                              
##  3rd Qu.:14775       3rd Qu.:15.00                              
##  Max.   :54000       Max.   :21.00

A jelenlegi fizetéseket tartalmazó oszlopot mentsük el JelFiz néven

JelFiz <- bankAdat$JelenlegiFizetésUSD

A leggyakrabban használt leíró statisztikai funkciók ismertetése

Módusz

A módusz meghatározásához definiáljunk egy függvényt:

Mode <- function(x) {
          ux <- unique(x)
          ux[which.max(tabulate(match(x, ux)))]
        }

Hogyan működik a függvény?
Lépésről lépésre:

  • A unique() függvény az eredeti vektor elemei közül mindegyiket csak egyszer tartalmazza, az ismétlődő elemek közül csak az elsőt
uJelFiz <- unique(JelFiz)
head(uJelFiz, 20)
##  [1] 10680  8940 16080 11640 41400  8580 21960 19200 13320 28350  7860
## [12] 27250 10500  9900 11340 10620 11220  8700  8760  6960
  • Összehasonlításképpen fűzzük össze a két oszlopot, és nézzük az első 20 elemet
head(cbind(JelFiz, uJelFiz),20)
## Warning in cbind(JelFiz, uJelFiz): number of rows of result is not a
## multiple of vector length (arg 2)
##       JelFiz uJelFiz
##  [1,]  10680   10680
##  [2,]   8940    8940
##  [3,]  16080   16080
##  [4,]  11640   11640
##  [5,]  41400   41400
##  [6,]   8580    8580
##  [7,]  21960   21960
##  [8,]  19200   19200
##  [9,]  13320   13320
## [10,]  28350   28350
## [11,]   7860    7860
## [12,]  27250   27250
## [13,]  10500   10500
## [14,]   9900    9900
## [15,]  11340   11340
## [16,]  16080   10620
## [17,]  10620   11220
## [18,]  11220    8700
## [19,]   7860    8760
## [20,]   8700    6960
  • A match() függvény azt mutatja meg, hogy az első vektor elemei a második vektor hanyadik elemei
match(JelFiz, uJelFiz)
##   [1]   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15   3  16
##  [18]  17  11  18  19  20  21  22  23  24  25  26  18  27  28  29  30  25
##  [35]  31  32  33  34   6   2  35  36  37  38  39  40  41  40  42  25  35
##  [52]  43  44  45  44   6  46  47  48  49  50  51  52  53  16  14  54  55
##  [69]  56  57  58  27  59  17  28  16  12  60  35  61  62   9  62  63   4
##  [86]  64  65  28  49  66  24   2  21  67  68  16  69  22  35  56  21  70
## [103]  71  72  65  73  74  75  76  25  77  19  68  78  49  79  72  80  81
## [120]  20  82  83  67  84  85  67  86   3  87  88  89  25  70   4  90  91
## [137]  92  70  66  32  15  68   3  91  93   2  94  95  96  97  34  98  99
## [154]  11  48 100  16  24 101 102  58   1 103  67  83  67 104  11  13   2
## [171] 105 106  31  75  71 107  35  49 108 109 110 111 110  17 112  49  67
## [188]  19 113 114 115  25 110 116 117 118 119  38  41   4 120 121 122  38
## [205] 103  63 106 109  44 123 124 125 126  71  27  62 127  71 128 129  36
## [222] 130 131  41 132 133 101  97  85 134 130 135 136 137 138  68  19  78
## [239]  36 139  24  25  35 140 141  45   1  31 124 142 143 129  14 144  32
## [256]  70  78  32 145 146 109 147 129  13 148 149  89 150 151   1   4  15
## [273] 152  32 143 153 154 155 156  11 157  25  42 158  40 159 160 161 101
## [290] 105 155 102 162 163  58 118  39 164 105  19  40   1 165 132 166 167
## [307] 110 126  43  31  52 168  22  13 169 170  82  70 171 144   2 172  85
## [324] 124 130  25 173  13  39 147 174 175 176 139  40 177  21  38 143  74
## [341]  84  49 156 178  45 179 180 181 182 183 184  25  18 185  33 186  62
## [358] 187  58 147  63 188  49  62  22   1 178   1  65 146 189 186  98 190
## [375]  64  25  59  46  52  65 191  32 192  50 193  49 194 195  43 196 197
## [392] 198 199  32 149  13 200 103  63  72  70 201  67 143  14  79 202 203
## [409]  58   9 204 113 205 206 103  39  84 207 208 209  25 210 181  35  84
## [426]  25  75 211 212 213 197  48  63 111 214 215  79  43  72  33  75  11
## [443] 216 179  21 127  13 205 203 147 152 217  52 218 194 219  71  57  50
## [460]  48 101 161  32 216 156 220  84  65  63 188  44 155 221 130
  • A tabulate() eredményeként kapott vektor i-edik értéke azt mutatja meg, hogy az eredeti vektor i-edik eleme hányszor szerepelt az eredeti vektorban.
tabulate(match(JelFiz, uJelFiz))
##   [1]  7  6  4  5  1  3  1  1  3  1  6  2  7  4  3  5  3  3  5  2  5  4  1
##  [24]  4 13  1  3  3  1  1  4  8  3  2  7  3  1  4  4  5  3  2  4  4  3  2
##  [47]  1  4  8  3  1  4  1  1  1  2  2  5  2  1  1  5  6  2  5  2  7  4  1
##  [70]  6  5  4  1  2  4  1  1  3  3  1  1  2  2  5  3  1  1  1  2  1  2  1
##  [93]  1  1  1  1  2  2  1  1  4  2  4  1  3  2  1  1  3  4  2  1  2  1  1
## [116]  1  1  2  1  1  1  1  1  3  1  2  2  1  3  4  1  2  1  1  1  1  1  1
## [139]  2  1  1  1  4  2  1  2  4  1  2  1  1  2  1  1  3  3  1  1  1  1  2
## [162]  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  2  2  1  2  1  1  1
## [185]  1  2  1  2  1  1  1  1  1  2  1  1  2  1  1  1  1  1  2  1  2  1  1
## [208]  1  1  1  1  1  1  1  1  2  1  1  1  1  1
  • A which.max() azt adja meg, hogy adott vektorban hanyadik elem a vektor maximuma
index <- which.max(tabulate(match(JelFiz, uJelFiz)))
index
## [1] 25
  • Tehát az uJelFiz vektor 25. eleme a jelenlegi fizetések módusza
uJelFiz[index]
## [1] 12300
Mode(JelFiz)
## [1] 12300

Medián

A medián kiszámítása a median() függvénnyel történik

median(JelFiz)
## [1] 11550

Számtani közép

Az átlag vagy számtani közép kiszámítása a mean() függvénnyel

mean(JelFiz)
## [1] 13767.83

Standard szórás

A standard szórás kiszámítására rendelkezésre áll az sd() függvény

sd(JelFiz)
## [1] 6830.265

Standard hiba

Kiszámíthatjuk sd() és sqrt(length()) függvények hányadosaként

sd(JelFiz) / sqrt(length(JelFiz)) 
## [1] 313.7244

Vagy használhatjuk a plotrix csomag std.error() függvényét

install.packages("plotrix")
## Installing package into '/home/bea/R/x86_64-pc-linux-gnu-library/3.4'
## (as 'lib' is unspecified)
library(plotrix)
std.error(JelFiz)
## [1] 313.7244
(sd(JelFiz) / sqrt(length(JelFiz)) ) == std.error(JelFiz)
## [1] TRUE

Csúcsosság (kurtosis)

A moments csomagban található kurtosis függvénnyel lehetséges

install.packages("moments")
## Installing package into '/home/bea/R/x86_64-pc-linux-gnu-library/3.4'
## (as 'lib' is unspecified)
library(moments)
kurtosis(JelFiz)
## [1] 8.30863

Ferdeség (skewness)

Szintén a moments csomag függvényét, a skewness()-t használjuk

skewness(JelFiz)
## [1] 2.117877

Tartomány (range)

A range() függvény a vektor legnagyobb és legkisebb elemét tartalmazza

A diff() adja ezek különbségét

range(JelFiz)
## [1]  6300 54000
diff(range(JelFiz))
## [1] 47700

Minimum és maximum

min() és max() (vagy a range() függvény)

min(JelFiz)
## [1] 6300
max(JelFiz)
## [1] 54000
min(JelFiz) == range(JelFiz)[1]
## [1] TRUE
max(JelFiz) == range(JelFiz)[2]
## [1] TRUE

Összeg

Az összes ismérvérték összegét a sum() függvény adja

sum(JelFiz)
## [1] 6525950

Darabszám, elemszám

A vektor hosszaként értelmezzük, amit a length() függvény ad meg

length(JelFiz)
## [1] 474

Ábrázolás

par(mar=c(5,5,1,1))              # A margók beállítása  
myPlot = hist(JelFiz,            # Az ábrázolni kívánt adathalmaz
xlab="Jelenlegi fizetés (USD)",  # Az x tengely felirata
ylab="Gyakoriság (db)",          # Az y tengely felirata    
main = "1. hisztogram",          # A diagram címe
sub = "Forrás: Saját szerkesztés", # Forrás
xlim=c(0,60000),                 # Az x tengelyen ábrázolt intervallum      
ylim=c(0, 225) )                 # Az y tengelyen ábrázolt intervallum

A 2. hisztogramhoz a ggplot2 csomag telepítése szükséges

install.packages("ggplot2")
## Installing package into '/home/bea/R/x86_64-pc-linux-gnu-library/3.4'
## (as 'lib' is unspecified)
## also installing the dependencies 'colorspace', 'dichromat', 'munsell', 'labeling', 'gtable', 'plyr', 'reshape2', 'scales'
library(ggplot2)

Az ábrázolás elött határozzuk meg az alkalmazott színeket

szinek <- c("goldenrod2", "darkolivegreen4", "sandybrown")

A következöképpen hozzuk létre az ábrát

ggplot(bankAdat, aes(x=bankAdat$Életkor, fill=bankAdat$Beosztás)) + # Az ábrázolni kívánt adatok
geom_bar(alpha=.5, position="identity", colours=szinek ) +  # A plot típusa, és további opciók; alpha: az oszlopok színének telítettsége, position: pontok igazítása átfedés esetén, "identity": a gyakoriságok ugyanazon nullponttól történő ábrázolása
theme(plot.title = element_text(hjust = 0.5), plot.subtitle = element_text(hjust = 0.5)) + # címek középre igazítása
labs(title = "2. hisztogram", # Az ábra címe
     subtitle = "A jelenlegi fizetések gyakorisági eloszlása beosztás szerinti bontásban", # Alcím
     x = "Életkor (Év)", # Az x tengely felirata
     y = "Gyakoriság (db)", # Az y tengely felirata
     caption = "Forrás: saját szerkesztés") + # Forrás
scale_fill_manual("Beosztás", values = szinek) # A jelmagyarázat felirata és a kitöltöszínek meghatározása
## Warning: Ignoring unknown parameters: colours

Változtassuk meg a használt színeket

szinek <- c("darkolivegreen4", "sandybrown")
ggplot(bankAdat, aes(x=bankAdat$Életkor, fill=bankAdat$Nem)) +
ggtitle("3. hisztogram") + 
geom_bar(position="dodge")+ # A plot típusa, és további opciók: position = "dodge" - az oszlopok egymás mellett helyezkednek el
theme(plot.title = element_text(hjust = 0.5), plot.subtitle = element_text(hjust = 0.5)) + # címek középre igazítása
labs(title = "3. hisztogram", # Az ábra címe
     subtitle = "A jelenlegi fizetések gyakorisági eloszlása nem szerinti bontásban", # Alcím
     x = "Életkor (Év)", # Az x tengely felirata
     y = "Gyakoriság (db)", # Az y tengely felirata
     caption = "Forrás: saját szerkesztés") + # Forrás
scale_fill_manual("Nem", values = szinek) # A jelmagyarázat felirata és a kitöltöszínek meghatározása

  1. hisztogram
ggplot(bankAdat, aes(x=bankAdat$JelenlegiFizetésUSD, fill=bankAdat$Nem)) +
geom_histogram(aes(y = (..count..)/sum(..count..))) + # A plot típusa; y tengely: relatív gyakoriság
theme(plot.title = element_text(hjust = 0.5), plot.subtitle = element_text(hjust = 0.5)) + # címek középre igazítása
labs(title = "4. hisztogram", # Az ábra címe
     subtitle = "A jelenlegi fizetések relatív gyakorisága nem szerinti bontásban", # Alcím
     x = "Jelenlegi fizetés (USD)", # Az x tengely felirata
     y = "Relatív gyakoriság (%)", # Az y tengely felirata
     caption = "Forrás: saját szerkesztés") + # Forrás
scale_fill_manual("Nem", values = szinek) + # A jelmagyarázat felirata és a kitöltöszínek meghatározása
scale_y_continuous(labels=function(x)x*100) # Az y tengely beosztásának %-ra történö módosítása
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.