RED_WINE_VARS
<-c("fixed.acidity","volatile.acidity","citric.acid","residual.sugar","chlorides","free.sulfur.dioxide","total.sulfur.dioxide","density","pH","sulphates","alcohol","quality") > my_RW_stats <- function(RW, na.omit = FALSE) { if (na.omit) x <- RW[!is.na(RW)] m <- mean(RW) med <- median(RW) n <- length(RW) min <- min(RW) max <- max(RW) s <- sd(RW) v<- var(RW) quant <- quantile (RW)
skew <- sum((RW -
m)^3/s^3)/n kurt <- sum((RW -
m)^4/s^4)/n - 3 return(c( n = n, Min =
min, Max = max, Mean= m, Median = med, Stddev = s, Var =v, Quantile = quant,
Skew = skew, Kurtosis = kurt)) } > sapply(RW[RED_WINE_VARS],my_RW_stats) fixed.acidity
volatile.acidity citric.acid
residual.sugar n
1599.0000000 1599.00000000
1599.00000000 1599.000000 Min
4.6000000 0.12000000 0.00000000 0.900000 Max
15.9000000 1.58000000 1.00000000 15.500000 Mean
8.3196373 0.52782051 0.27097561 2.538806 Median
7.9000000 0.52000000 0.26000000 2.200000 Stddev
1.7410963 0.17905970 0.19480114 1.409928 Var 3.0314164 0.03206238 0.03794748 1.987897 Quantile.0%
4.6000000 0.12000000 0.00000000 0.900000 Quantile.25%
7.1000000 0.39000000 0.09000000 1.900000 Quantile.50%
7.9000000 0.52000000 0.26000000 2.200000 Quantile.75%
9.2000000 0.64000000 0.42000000 2.600000 Quantile.100%
15.9000000 1.58000000 1.00000000 15.500000 Skew
0.9809084 0.67033307 0.31774029 4.532140 Kurtosis
1.1196987 1.21268929 -0.79304553 28.485020
chlorides free.sulfur.dioxide total.sulfur.dioxide n
1599.000000000
1599.000000 1599.000000 Min
0.012000000 1.000000 6.000000 Max
0.611000000
72.000000 289.000000 Mean
0.087466542
15.874922 46.467792 Median
0.079000000
14.000000 38.000000 Stddev 0.047065302 10.460157 32.895324 Var
0.002215143
109.414884 1082.102373 Quantile.0%
0.012000000
1.000000 6.000000 Quantile.25%
0.070000000
7.000000 22.000000 Quantile.50%
0.079000000
14.000000 38.000000 Quantile.75%
0.090000000
21.000000 62.000000 Quantile.100%
0.611000000
72.000000 289.000000 Skew
5.669693705 1.248222 1.512689 Kurtosis
41.525963494
2.007221 3.785676
density pH sulphates alcohol n
1599.000000000000 1599.00000000 1599.00000000 1599.0000000 Min 0.990070000000 2.74000000 0.33000000 8.4000000 Max
1.003690000000 4.01000000 2.00000000
14.9000000 Mean
0.996746679174 3.31111320 0.65814884
10.4229831 Median
0.996750000000 3.31000000 0.62000000
10.2000000 Stddev
0.001887333954 0.15438646 0.16950698 1.0656676 Var
0.000003562029 0.02383518 0.02873262 1.1356474 Quantile.0%
0.990070000000 2.74000000 0.33000000 8.4000000 Quantile.25% 0.995600000000 3.21000000 0.55000000 9.5000000 Quantile.50%
0.996750000000 3.31000000 0.62000000
10.2000000 Quantile.75%
0.997835000000 3.40000000 0.73000000
11.1000000 Quantile.100%
1.003690000000 4.01000000 2.00000000
14.9000000 Skew
0.071153970752 0.19332027 2.42411764 0.8592144
Kurtosis
0.922500001405 0.79591912 11.66152852 0.1916586
> library(lessR)
lessR 3.2 now RStudio compatible www.lessRstats.com --------------------------------------------------------------- To get started, and for help in general, enter: > Help() To read a text, Excel, SPSS or R data file: > mydata <- Read() ---------------------------------------------------------------
> ?boxplot > boxplot.stats(fixed.acidity) $stats [1] 4.6 7.1 7.9 9.2 12.3
$n [1] 1599
$conf [1] 7.817024 7.982976
$out [1] 12.8 12.8 15.0 15.0 12.5 13.3 13.4 12.4 12.5 13.8 13.5 12.6 12.5 12.8 12.8 14.0 13.7 13.7 [19] 12.7 12.5 12.8 12.6 15.6 12.5 13.0 12.5 13.3 12.4 12.5 12.9 14.3 12.4 15.5 15.5 15.6 13.0 [37] 12.7 13.0 12.7 12.4 12.7 13.2 13.2 13.2 15.9 13.3 12.9 12.6 12.6
> opar <- par(no.readonly=TRUE) > par(mfrow=c(2,2)) > y <- fixed.acidity > x <- total.sulfur.dioxide > m <- volatile.acidity > n <- density > # 4 box plots with outliers more strongly highlighted > BoxPlot(y, col.stroke="red", horiz=TRUE, col.fill="grey",xlab="_Fixed_Acidity_")
--- _Fixed_Acidity_ ---
Present: 1599 Missing: 0 Total : 1599
Minimum : 4.6 Lower Whisker: 4.6 Lower Hinge : 7.1 Median : 7.9 Upper Hinge : 9.2 Upper Whisker: 12.3 Maximum : 15.9
1st Quartile : 7.1 3rd Quartile : 9.2 IQR : 2.1
Number of outliers: 49 Small: none Large: 12.4 12.4 12.4 12.4 12.5 12.5 12.5 12.5 12.5 12.5 12.5 12.6 12.6 12.6 12.6 12.7 ... 15 15.5 15.5 15.6 15.6 15.9
> BoxPlot(x, col.stroke="blue", horiz=1, col.fill="plum", xlab="_ total.sulfur.dioxide_")
--- _ total.sulfur.dioxide_ ---
Present: 1599 Missing: 0 Total : 1599
Minimum : 6.0 Lower Whisker: 6.0 Lower Hinge : 22.0 Median : 38.0 Upper Hinge : 62.0 Upper Whisker: 122.0 Maximum : 289.0
1st Quartile : 22.0 3rd Quartile : 62.0 IQR : 40.0
Number of outliers: 55 Small: none Large: 124 124 124 125 125 126 127 127 128 128 129 129 129 130 131 131 ... 153 155 160 165 278 289
> BoxPlot(m, col.stroke="red", horiz=1, col.fill="grey", xlab="_Volatile_Acidity_")
--- _Volatile_Acidity_ ---
Present: 1599 Missing: 0 Total : 1599
Minimum : 0.120 Lower Whisker: 0.120 Lower Hinge : 0.390 Median : 0.520 Upper Hinge : 0.640 Upper Whisker: 1.010 Maximum : 1.580
1st Quartile : 0.390 3rd Quartile : 0.640 IQR : 0.250
> BoxPlot(n, col.stroke="blue", horiz=1, col.fill="plum", xlab="_ Density _")
--- _ Density _ ---
Present: 1599 Missing: 0 Total : 1599
Minimum : 0.99007 Lower Whisker: 0.99235 Lower Hinge : 0.99560 Median : 0.99675 Upper Hinge : 0.99784 Upper Whisker: 1.00100 Maximum : 1.00369
1st Quartile : 0.99560 3rd Quartile : 0.99784 IQR : 0.00223
> > > opar <- par(no.readonly=TRUE) > par(mfrow=c(2,2)) > ca <- citric.acid > rs <- residual.sugar > cl <- chlorides > al <- alcohol > # 4 box plots with outliers more strongly highlighted > > BoxPlot(ca, col.stroke="red", horiz=TRUE, col.fill="plum",xlab="_Citric.Acid_")
--- _Citric.Acid_ ---
Present: 1599 Missing: 0 Total : 1599
Minimum : 0.00 Lower Whisker: 0.00 Lower Hinge : 0.09 Median : 0.26 Upper Hinge : 0.42 Upper Whisker: 0.79 Maximum : 1.00
1st Quartile : 0.09 3rd Quartile : 0.42 IQR : 0.33
> BoxPlot(rs, col.stroke="blue", horiz=TRUE, col.fill="plum",xlab="_Residual.Sugar_")
--- _Residual.Sugar_ ---
Present: 1599 Missing: 0 Total : 1599
Minimum : 0.90 Lower Whisker: 0.90 Lower Hinge : 1.90 Median : 2.20 Upper Hinge : 2.60 Upper Whisker: 3.65 Maximum : 15.50
1st Quartile : 1.90 3rd Quartile : 2.60 IQR : 0.70
> BoxPlot(cl, col.stroke="black", horiz=TRUE, col.fill="plum",xlab="_ chlorides_")
--- _ chlorides_ ---
Present: 1599 Missing: 0 Total : 1599
Minimum : 0.012 Lower Whisker: 0.041 Lower Hinge : 0.070 Median : 0.079 Upper Hinge : 0.090 Upper Whisker: 0.119 Maximum : 0.611
1st Quartile : 0.070 3rd Quartile : 0.090 IQR : 0.020
> BoxPlot(al, col.stroke="black", horiz=TRUE, col.fill="plum",xlab="_ Alcohol _")
--- _ Alcohol _ ---
Present: 1599 Missing: 0 Total : 1599
Minimum : 8.400000 Lower Whisker: 8.400000 Lower Hinge : 9.500000 Median : 10.200000 Upper Hinge : 11.100000 Upper Whisker: 13.500000 Maximum : 14.900000
1st Quartile : 9.500000 3rd Quartile : 11.100000 IQR : 1.600000
Number of outliers: 13 Small: none Large: 13.56667 13.6 13.6 13.6 13.6 14 14 14 14 14 14 14 14.9
> >
> > > RW$residual.sugar<- ifelse(residual.sugar>4.8,(RW$residual.sugar=="5"),(RW$residual.sugar<-RW$residual.sugar )) > summary(RW$residual.sugar) Min. 1st Qu. Median Mean 3rd Qu. Max. 0.000 1.800 2.100 2.152 2.500 4.800 > > BoxPlot(RW$residual.sugar, col.stroke="blue", horiz=TRUE, col.fill="plum",xlab="_Residual.Sugar_")
Error: ------ Data frame (table) mydata, the default data table name, does not exist
So either create the data table with the Read function, or specify the actual data table with the parameter: data
> RS<-RW$residual.sugar > BoxPlot(RS, col.stroke="blue", horiz=TRUE, col.fill="plum",xlab="_Residual.Sugar_")
--- _Residual.Sugar_ ---
Present: 1599 Missing: 0 Total : 1599
Minimum : 0.00 Lower Whisker: 0.90 Lower Hinge : 1.80 Median : 2.10 Upper Hinge : 2.50 Upper Whisker: 3.50 Maximum : 4.80
1st Quartile : 1.80 3rd Quartile : 2.50 IQR : 0.70
> > > RW$residual.sugar<- ifelse(residual.sugar>3.65,(RW$residual.sugar=="4"),(RW$residual.sugar<-RW$residual.sugar )) > summary(RW$residual.sugar) Min. 1st Qu. Median Mean 3rd Qu. Max. 0.000 1.800 2.100 1.975 2.400 3.650 > > RS<-RW$residual.sugar > BoxPlot(RS, col.stroke="blue", horiz=TRUE, col.fill="plum",xlab="_Residual.Sugar_")
--- _Residual.Sugar_ ---
Present: 1599 Missing: 0 Total : 1599
Minimum : 0.00 Lower Whisker: 1.00 Lower Hinge : 1.80 Median : 2.10 Upper Hinge : 2.40 Upper Whisker: 3.30 Maximum : 3.65
1st Quartile : 1.80 3rd Quartile : 2.40 IQR : 0.60
> > > opar <- par(no.readonly=TRUE) > par(mfrow=c(2,2)) > with(RW,plot(alcohol,quality,main="RW-Corr_ALCOHOL_with_QUAL.", + col="BLACK")) > with(RW,plot(citric.acid,quality,main="RW-Corr_CITRIC.ACID_with_QUAL.", + col="BLUE")) > with(RW,plot(sulphates,quality,main="RW-Corr_SULPHATES_with_QUAL.", + col="RED")) > with(RW,plot(density,quality,main="RW-Corr_DENSITY_with_QUAL.", + col="BROWN")) > > opar <- par(no.readonly=TRUE) > par(mfrow=c(2,2)) > with(RW,plot(volatile.acidity,quality,main="RW-Corr_ALCOHOL_with_QUAL.",col="BLACK")) > with(RW,plot(total.sulfur.dioxide,quality,main="RW-Corr_CITRIC.ACID_with_QUAL.",col="BLUE")) > with(RW,plot(residual.sugar,quality,main="RW-Corr_SULPHATES_with_QUAL.",col="RED")) > with(RW,plot(density,quality,main="RW-Corr_DENSITY_with_QUAL.", col="BROWN")) > > opar <- par(no.readonly=TRUE) > par(mfrow=c(2,2)) > with(RW,plot(volatile.acidity,quality,main="RW-Corr_Volatile.Acidity_with_QUAL.",col="BLACK")) > with(RW,plot(total.sulfur.dioxide,quality,main="RW-Corr_total.sulfur.dioxide_with_QUAL.",col="BLUE")) > with(RW,plot(residual.sugar,quality,main="RW-Corr_Residual.Sugar_with_QUAL.",col="RED")) > with(RW,plot(density,quality,main="RW-Corr_Density_with_QUAL.", col="BROWN")) > > ## Testing if the Correlation between
Alcohol and Quality is Significant
>cor.test(WW$alcohol,WW$quality)
Pearson's
product-moment correlation
data:
WW$alcohol and WW$quality
t = 33.8585, df = 4896, p-value < 2.2e-16
alternative hypothesis: true correlation is not
equal to 0
95 percent confidence interval:
0.4126015
0.4579941
sample estimates:
cor
0.4355747
cor.test(WW$pH,WW$quality)
Pearson's
product-moment correlation
data:
WW$pH and WW$quality
t = 6.9917, df = 4896, p-value = 3.081e-12
alternative hypothesis: true correlation is
not equal to 0
95 percent confidence interval:
0.07162022 0.12707983
sample estimates:
cor
0.09942725
|
|
|
|
cor(WW$quality,WW[,1:11])
fixed.acidity
volatile.acidity citric.acid
residual.sugar chlorides
[1,] -0.1136628 -0.194723 -0.009209091 -0.09757683 -0.2099344
free.sulfur.dioxide
total.sulfur.dioxide density pH
[1,]
0.008158067 -0.1747372
-0.3071233 0.09942725
sulphates alcohol
[1,] 0.05367788 0.4355747
>
We can observe – Highest
Positive Correlation –
1.
Alcohol and Quality = .435
or 43.5%
2.
pH and Quality =
.099 or 10%
3.
Sulphates and Quality = .053 or 5.3%
Thus by increasing the proportion of these
above mentioned three variables
we have a high probability of
increasing White Wine Quality.
Highest Negative Correlation
–
1.
Density and Quality =
-0.307 or 31%
2.
Chloride and Quality = -0.209 or 21%
3.
Volatile Acidity and Quality
= -0.194 or 19.4%
Thus by decreasing the proportion of these
above mentioned three variables
we have a high probability of increasing White
Wine Quality.
>
cor(RW$quality,RW[,1:11])
fixed.acidity volatile.acidity
citric.acid residual.sugar chlorides
[1,] 0.1240516 -0.3905578 0.2263725 0.01373164 -0.1289066
free.sulfur.dioxide total.sulfur.dioxide density pH
[1,] -0.05065606 -0.1851003 -0.1749192 -0.05773139
sulphates alcohol
[1,] 0.2513971 0.4761663
|
|
|
We can observe – Highest
Positive Correlation –
1. Alcohol and Quality =
.476 or 47%
2. Sulphates and Quality = .251 or 25%
3. CitricAcid and Quality= .226 or 22%
Thus by increasing proportion of above mentioned variables we have high
probability of increasing Red Wine Quality.
Highest Negative Correlation
–
1. Volatile Acidity and Quality =
-0.390 or 39%
2. Total Sulfur Di Oxide and Quality = -0.185 or 18%
3. Density and Quality = -0.174 or 17%
Thus by decreasing proportion of these variables we have high
probability of increasing Red Wine Quality.
Scatter plots – Correlating Red
Wine Variables
with RW$QUALITY.
opar <- par(no.readonly=TRUE)
> par(mfrow=c(2,2))
> with(RW,plot(alcohol,quality,main="RW-Corr_ALCOHOL_with_QUAL.",
+ col="BLACK"))
> with(RW,plot(citric.acid,quality,main="RW-Corr_CITRIC.ACID_with_QUAL.",
+ col="BLUE"))
> with(RW,plot(sulphates,quality,main="RW-Corr_SULPHATES_with_QUAL.",
+ col="RED"))
> with(RW,plot(density,quality,main="RW-Corr_DENSITY_with_QUAL.",
+ col="BROWN"))
opar
<- par(no.readonly=TRUE)
par(mfrow=c(2,2))
with(RW,plot(volatile.acidity,quality,main="RW-Corr_ALCOHOL_with_QUAL.",col="BLACK"))
with(RW,plot(total.sulfur.dioxide,quality,main="RW-Corr_CITRIC.ACID_with_QUAL.",col="BLUE"))
with(RW,plot(residual.sugar,quality,main="RW-Corr_SULPHATES_with_QUAL.",col="RED"))
with(RW,plot(density,quality,main="RW-Corr_DENSITY_with_QUAL. col="BROWN"))
opar
<- par(no.readonly=TRUE) par(mfrow=c(2,2)) VAR1
<- fixed.acidity h<-hist(VAR1,breaks=72,col="orange",border="red",xlab="
Fixed.Acidity", main="Fixed.Acidity-
with Normal Distribution Curve ") ### - Defined two more Variables -
VAR1fit & yfit - ### VAR1fit<-seq(min(VAR1),
max(VAR1), length=40) yfit<-dnorm(VAR1fit,
mean=mean(VAR1), sd=sd(VAR1)) yfit
<- yfit*diff(h$mids[1:2])*length(VAR1) lines(VAR1fit,
yfit, col="red", lwd=2) box() VAR2
<- pH h<-hist(VAR2,breaks=72,col="orange",border="red",xlab="pH", main="pH
RED WINE- with Normal Distribution Curve ") ### - Defined two more
Variables – VAR2fit & yfit - ### VAR2fit<-seq(min(VAR2),
max(VAR2), length=40) yfit<-dnorm(VAR2fit,
mean=mean(VAR2), sd=sd(VAR2)) yfit
<- yfit*diff(h$mids[1:2])*length(VAR2) lines(VAR2fit,
yfit, col="red", lwd=2)
box()
> opar <- par(no.readonly=TRUE) > par(mfrow=c(2,2)) > fa <- fixed.acidity > va <- volatile.acidity > tsd <- total.sulfur.dioxide > den <- density > > BoxPlot(fa, col.stroke="red", horiz=TRUE, + col.fill="plum",xlab="_fixed.acidity_") --- _fixed.acidity_ --- Present: 4898 Missing: 0 Total : 4898 Minimum : 3.80 Lower Whisker: 4.80 Lower Hinge : 6.30 Median : 6.80 Upper Hinge : 7.30 Upper Whisker: 8.80 Maximum : 14.20 1st Quartile : 6.30 3rd Quartile : 7.30 IQR : 1.00 Number of outliers: 119 Small: 3.8 3.9 4.2
4.2 4.4 4.4
4.4 4.5 4.6 4.7
4.7 4.7 4.7 4.7 Large: 8.9 8.9 8.9
8.9 8.9 8.9
8.9 8.9 8.9 8.9 8.9
8.9 8.9 8.9
8.9 8.9 ... 10.3
10.3 10.7 10.7
11.8 14.2
> RW$residual.sugar<- ifelse(residual.sugar>3.65,
+ (RW$residual.sugar=="5"),
+ (RW$residual.sugar<-RW$residual.sugar ))
> summary(RW$residual.sugar)
Min. 1st Qu. Median
Mean 3rd Qu. Max.
0.000 1.800
2.100 1.975 2.400
3.650
As a result of the capping done using the ifelse –
We see Mean has changed from earlier = 2.538 to 1.975
Median has changed from the earlier = 2.200 to 2.100
Max changed from = 15.500 to 3.650
N the sample size remains the same = 1599.
Thus this is better than
the use of the SUBSET function in which observations / rows from all variables
– which did not have outliers also were getting removed.
White Wine Variables are seen to have high number of Outliers
– we use IFELSE to cap the OUTLIERS . We can see below the Summary STATS for capped and Non Capped variables. > library("lessR", lib.loc="~/R/win-library/3.1")
lessR 3.2 now RStudio compatible www.lessRstats.com --------------------------------------------------------------- To get started, and for help in general, enter: > Help() To read a text, Excel, SPSS or R data file: > mydata <- Read() ---------------------------------------------------------------
> y <- WW$fixed.acidity > BoxPlot(y, col.stroke="red", horiz=TRUE,col.fill="grey",xlab="_Fixed_Acidity_")
--- _Fixed_Acidity_ ---
Present: 4898 Missing: 0 Total : 4898
Minimum : 3.80 Lower Whisker: 4.80 Lower Hinge : 6.30 Median : 6.80 Upper Hinge : 7.30 Upper Whisker: 8.80 Maximum : 14.20
1st Quartile : 6.30 3rd Quartile : 7.30 IQR : 1.00
Number of outliers: 119 Small: 3.8 3.9 4.2 4.2 4.4 4.4 4.4 4.5 4.6 4.7 4.7 4.7 4.7 4.7 Large: 8.9 8.9 8.9 8.9 8.9 8.9 8.9 8.9 8.9 8.9 8.9 8.9 8.9 8.9 8.9 8.9 ... 10.3 10.3 10.7 10.7 11.8 14.2
> > y <- WW$fixed.acidity > BoxPlot(y, col.stroke="red", horiz=TRUE,col.fill="grey",xlab="_Fixed_Acidity_",main="WW$Fixed.Acidity_119_Outliers_UpperWhisker-8.80_")
--- _Fixed_Acidity_, WW$Fixed.Acidity_119_Outliers_UpperWhisker-8.80_ ---
Present: 4898 Missing: 0 Total : 4898
Minimum : 3.80 Lower Whisker: 4.80 Lower Hinge : 6.30 Median : 6.80 Upper Hinge : 7.30 Upper Whisker: 8.80 Maximum : 14.20
1st Quartile : 6.30 3rd Quartile : 7.30 IQR : 1.00
Number of outliers: 119 Small: 3.8 3.9 4.2 4.2 4.4 4.4 4.4 4.5 4.6 4.7 4.7 4.7 4.7 4.7 Large: 8.9 8.9 8.9 8.9 8.9 8.9 8.9 8.9 8.9 8.9 8.9 8.9 8.9 8.9 8.9 8.9 ... 10.3 10.3 10.7 10.7 11.8 14.2
> > WW$fixed.acidity<- ifelse(fixed.acidity>8.80,(WW$fixed.acidity=="9"),(WW$fixed.acidity<-WW$fixed.acidity )) > summary(WW$fixed.acidity) Min. 1st Qu. Median Mean 3rd Qu. Max. 0.000 6.300 6.800 6.657 7.300 8.800 > > y <- WW$fixed.acidity > BoxPlot(y, col.stroke="red", horiz=TRUE,col.fill="grey",xlab="_Fixed_Acidity_",main="WW$Fixed.Acidity_119_Outliers_UpperWhisker-8.80_")
--- _Fixed_Acidity_, WW$Fixed.Acidity_119_Outliers_UpperWhisker-8.80_ ---
Present: 4898 Missing: 0 Total : 4898
Minimum : 0.00 Lower Whisker: 4.80 Lower Hinge : 6.30 Median : 6.80 Upper Hinge : 7.30 Upper Whisker: 8.80 Maximum : 8.80
1st Quartile : 6.30 3rd Quartile : 7.30 IQR : 1.00
Number of outliers: 119 Small: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... 4.6 4.7 4.7 4.7 4.7 4.7 Large: none
> > y <- WW$fixed.acidity > BoxPlot(y, col.stroke="red", horiz=TRUE,col.fill="grey",xlab="_Fixed_Acidity_",main="WW$Fixed.Acidity_119_Small-Outliers_UpperWhisker and MAX Value-8.80_")
--- _Fixed_Acidity_, WW$Fixed.Acidity_119_Small-Outliers_UpperWhisker and MAX Value-8.80_ ---
Present: 4898 Missing: 0 Total : 4898
Minimum : 0.00 Lower Whisker: 4.80 Lower Hinge : 6.30 Median : 6.80 Upper Hinge : 7.30 Upper Whisker: 8.80 Maximum : 8.80
1st Quartile : 6.30 3rd Quartile : 7.30 IQR : 1.00
Number of outliers: 119 Small: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... 4.6 4.7 4.7 4.7 4.7 4.7 Large: none

|