#Nap du lieu
library(stringr) #Thư viện dùng để tách thay chuỗi con
library(knitr) #Thư viện dùng để kẻ khung cho bảng cú pháp kable()
library(corrplot)
## corrplot 0.92 loaded
library(car)
## Loading required package: carData
library(caTools)
library(ggplot2)
library(nortest)
All_GPUs <- read.csv("~/All_GPUs.csv")
head(All_GPUs,5)
All_GPUs <- All_GPUs[,c("Manufacturer", "Memory_Bandwidth", "Memory_Bus", "Memory_Speed")]
head(All_GPUs,5)
All_GPUs$"Memory_Bandwidth" <- gsub("GB/sec", "", All_GPUs$"Memory_Bandwidth")
All_GPUs$"Memory_Bus" <- gsub(" Bit", "", All_GPUs$"Memory_Bus")
All_GPUs$"Memory_Speed" <- gsub(" MHz","",All_GPUs$"Memory_Speed")
suppressWarnings(All_GPUs$"Memory_Bandwidth" <- as.numeric(All_GPUs$"Memory_Bandwidth"))
suppressWarnings(All_GPUs$"Memory_Bus" <- as.integer(All_GPUs$"Memory_Bus"))
suppressWarnings(All_GPUs$"Memory_Speed" <- as.integer(All_GPUs$"Memory_Speed"))

Show Data

You can also embed plots, for example:

#Hiển thị dữ liệu đã được chuyển đổi ra màn hình
head(All_GPUs,5)
apply(is.na(All_GPUs),2,sum)
##     Manufacturer Memory_Bandwidth       Memory_Bus     Memory_Speed 
##                0              125               62              105
apply(is.na(All_GPUs),2,mean)
##     Manufacturer Memory_Bandwidth       Memory_Bus     Memory_Speed 
##       0.00000000       0.03669994       0.01820317       0.03082795
All_GPUs_1 <- na.omit(All_GPUs)

Delete Data

#So quan sat da xoa
nrow(All_GPUs)-nrow(All_GPUs_1)
## [1] 125

Rate of deletions

#Ty le quan sat da xoa
(nrow(All_GPUs)-nrow(All_GPUs_1))/nrow(All_GPUs)
## [1] 0.03669994
apply(is.na(All_GPUs),2,sum)
##     Manufacturer Memory_Bandwidth       Memory_Bus     Memory_Speed 
##                0              125               62              105

Statistical parameters of variable Memory_Bandwidth

length = tapply(All_GPUs_1$Memory_Bandwidth, All_GPUs_1$Manufacturer,length)
mean = tapply(All_GPUs_1$Memory_Bandwidth, All_GPUs_1$Manufacturer,mean)
sd = tapply(All_GPUs_1$Memory_Bandwidth, All_GPUs_1$Manufacturer,sd)
min = tapply(All_GPUs_1$Memory_Bandwidth, All_GPUs_1$Manufacturer,min)
max = tapply(All_GPUs_1$Memory_Bandwidth, All_GPUs_1$Manufacturer,max)
Q1 = tapply(All_GPUs_1$Memory_Bandwidth, All_GPUs_1$Manufacturer,quantile,probs = 0.25)
Q2 = tapply(All_GPUs_1$Memory_Bandwidth, All_GPUs_1$Manufacturer,quantile,probs = 0.5)
Q3 = tapply(All_GPUs_1$Memory_Bandwidth, All_GPUs_1$Manufacturer,quantile,probs = 0.75)
t(data.frame(length,mean,sd,min,max,Q1,Q2,Q3))
##              AMD       ATI      Intel    Nvidia
## length 1267.0000   85.0000 223.000000 1706.0000
## mean    132.4570  222.5694  22.838565  151.7079
## sd      135.5163  113.7684   8.798548  135.9393
## min       1.0000  112.0000   1.100000    1.1000
## max    1280.0000 1024.0000  34.100000  769.0000
## Q1       28.8000  211.2000  12.800000   40.1000
## Q2       96.0000  224.0000  25.600000  112.2000
## Q3      179.2000  256.0000  29.900000  224.3000

Statistical parameters of variable Memory_Bus

length = tapply(All_GPUs_1$Memory_Bus, All_GPUs_1$Manufacturer,length)
mean = tapply(All_GPUs_1$Memory_Bus, All_GPUs_1$Manufacturer,mean)
sd = tapply(All_GPUs_1$Memory_Bus, All_GPUs_1$Manufacturer,sd)
min = tapply(All_GPUs_1$Memory_Bus, All_GPUs_1$Manufacturer,min)
max = tapply(All_GPUs_1$Memory_Bus, All_GPUs_1$Manufacturer,max)
Q1 = tapply(All_GPUs_1$Memory_Bus, All_GPUs_1$Manufacturer,quantile,probs = 0.25)
Q2 = tapply(All_GPUs_1$Memory_Bus, All_GPUs_1$Manufacturer,quantile,probs = 0.5)
Q3 = tapply(All_GPUs_1$Memory_Bus, All_GPUs_1$Manufacturer,quantile,probs = 0.75)
t(data.frame(length,mean,sd,min,max,Q1,Q2,Q3))
##              AMD       ATI     Intel    Nvidia
## length 1267.0000   85.0000 223.00000 1706.0000
## mean    219.8074  318.1176 112.78924  204.9566
## sd      294.4522  866.1188  27.30319  153.0466
## min      32.0000   32.0000  64.00000   32.0000
## max    4096.0000 8192.0000 128.00000 4096.0000
## Q1      128.0000  256.0000 128.00000  128.0000
## Q2      128.0000  256.0000 128.00000  192.0000
## Q3      256.0000  256.0000 128.00000  256.0000

Statistical parameters of variable Memory_Speed

#Thong so thong ke bien Memory_Speed 
length = tapply(All_GPUs_1$Memory_Speed, All_GPUs_1$Manufacturer,length)
mean = tapply(All_GPUs_1$Memory_Speed, All_GPUs_1$Manufacturer,mean)
sd = tapply(All_GPUs_1$Memory_Speed, All_GPUs_1$Manufacturer,sd)
min = tapply(All_GPUs_1$Memory_Speed, All_GPUs_1$Manufacturer,min)
max = tapply(All_GPUs_1$Memory_Speed, All_GPUs_1$Manufacturer,max)
Q1 = tapply(All_GPUs_1$Memory_Speed, All_GPUs_1$Manufacturer,quantile,probs = 0.25)
Q2 = tapply(All_GPUs_1$Memory_Speed, All_GPUs_1$Manufacturer,quantile,probs = 0.5)
Q3 = tapply(All_GPUs_1$Memory_Speed, All_GPUs_1$Manufacturer,quantile,probs = 0.75)
t(data.frame(length,mean,sd,min,max,Q1,Q2,Q3))
##              AMD       ATI     Intel    Nvidia
## length 1267.0000   85.0000  223.0000 1706.0000
## mean   1119.4301 1809.4118  799.1794 1237.7544
## sd      381.8171  196.9249  189.9718  468.8829
## min     130.0000  500.0000  133.0000  110.0000
## max    2000.0000 2000.0000 1067.0000 2127.0000
## Q1      840.0000 1750.0000  667.0000  900.0000
## Q2     1125.0000 1750.0000  800.0000 1252.5000
## Q3     1400.0000 2000.0000  933.0000 1750.0000

Scatter graph

boxplot(Memory_Bandwidth~Manufacturer, xlab = "Manufacturer", ylab = "Memory_Bandwidth", main =
          "Boxplot of Memory_Bandwidth for each Manufacturer", data = All_GPUs_1, col = 2:7)

boxplot(Memory_Bus~Manufacturer, xlab = "Manufacturer", ylab = "Memory_Bus", main =
          "Boxplot of Memory_Bus for each Manufacturer", data = All_GPUs_1, col = 2:7)

boxplot(Memory_Speed~Manufacturer, xlab = "Manufacturer", ylab = "Memory_Speed", main =
          "Boxplot of Memory_Speed for each Manufacturer", data = All_GPUs_1, col = 2:7)

Treatment outliers

rm.out <- function(x, na.rm = TRUE, ...){
  qnt <- quantile(x, probs = c(.25,.75), na.rm = na.rm, ...)
  H <- 1.5 * IQR(x, na.rm = na.rm)
  y <- x
  y[x < (qnt[1] - H)] <- NA
  y[x > (qnt[2] + H)] <- NA
  y
}

Nvidia = subset(All_GPUs_1,All_GPUs_1$Manufacturer =="Nvidia")
Nvidia$Memory_Bandwidth = rm.out(Nvidia$Memory_Bandwidth)
Nvidia$Memory_Bus = rm.out(Nvidia$Memory_Bus)
Nvidia$Memory_Speed = rm.out(Nvidia$Memory_Speed)
AMD = subset(All_GPUs_1,All_GPUs_1$Manufacturer =="AMD")
AMD$Memory_Bandwidth = rm.out(AMD$Memory_Bandwidth)
AMD$Memory_Bus = rm.out(AMD$Memory_Bus)
AMD$Memory_Speed = rm.out(AMD$Memory_Speed)
ATI = subset(All_GPUs_1,All_GPUs_1$Manufacturer =="ATI")
ATI$Memory_Bandwidth = rm.out(ATI$Memory_Bandwidth)
ATI$Memory_Bus = rm.out(ATI$Memory_Bus)
ATI$Memory_Speed = rm.out(ATI$Memory_Speed)
Intel = subset(All_GPUs_1,All_GPUs_1$Manufacturer =="Intel")
Intel$Memory_Bandwidth = rm.out(Intel$Memory_Bandwidth)
Intel$Memory_Bus = rm.out(Intel$Memory_Bus)
Intel$Memory_Speed = rm.out(Intel$Memory_Speed)

Join the data together

All_GPUs_2 <- rbind(Nvidia,AMD,ATI,Intel)

Check N/A

apply(is.na(All_GPUs_2),2,sum)
##     Manufacturer Memory_Bandwidth       Memory_Bus     Memory_Speed 
##                0               92              183                2
apply(is.na(All_GPUs_2),2,mean)
##     Manufacturer Memory_Bandwidth       Memory_Bus     Memory_Speed 
##     0.0000000000     0.0280402316     0.0557756781     0.0006095703
Nvidia$Memory_Bandwidth[is.na(Nvidia$Memory_Bandwidth)] = mean(Nvidia$Memory_Bandwidth, na.rm = T)
AMD$Memory_Bandwidth[is.na(AMD$Memory_Bandwidth)] = mean(AMD$Memory_Bandwidth, na.rm = T)
ATI$Memory_Bandwidth[is.na(ATI$Memory_Bandwidth)] = mean(ATI$Memory_Bandwidth, na.rm = T)
Intel$Memory_Bandwidth[is.na(Intel$Memory_Bandwidth)] = mean(Intel$Memory_Bandwidth, na.rm = T)
Nvidia$Memory_Bus[is.na(Nvidia$Memory_Bus)] = mean(Nvidia$Memory_Bus, na.rm = T)
AMD$Memory_Bus[is.na(AMD$Memory_Bus)] = mean(AMD$Memory_Bus, na.rm = T)
ATI$Memory_Bus[is.na(ATI$Memory_Bus)] = mean(ATI$Memory_Bus, na.rm = T)
Intel$Memory_Bus[is.na(Intel$Memory_Bus)] = mean(Intel$Memory_Bus, na.rm = T)
Nvidia$Memory_Speed[is.na(Nvidia$Memory_Speed)] = mean(Nvidia$Memory_Speed, na.rm = T)
AMD$Memory_Speed[is.na(AMD$Memory_Speed)] = mean(AMD$Memory_Speed, na.rm = T)
ATI$Memory_Speed[is.na(ATI$Memory_Speed)] = mean(ATI$Memory_Speed, na.rm = T)
Intel$Memory_Speed[is.na(Intel$Memory_Speed)] = mean(Intel$Memory_Speed, na.rm = T)
All_GPUs_2 <- rbind(Nvidia,AMD,ATI,Intel)
apply(is.na(All_GPUs_2), 2, which)
## integer(0)

Statistics again

apply(is.na(All_GPUs_2),2,sum)
##     Manufacturer Memory_Bandwidth       Memory_Bus     Memory_Speed 
##                0                0                0                0
apply(is.na(All_GPUs_2),2,mean)
##     Manufacturer Memory_Bandwidth       Memory_Bus     Memory_Speed 
##                0                0                0                0

Scatter graph

boxplot(Memory_Bandwidth~Manufacturer, xlab = "Manufacturer", ylab = "Memory_Bandwidth", main =
          "Boxplot of Memory_Bandwidth for each Manufacturer", data = All_GPUs_2, col = 2:7)

boxplot(Memory_Bus~Manufacturer, xlab = "Manufacturer", ylab = "Memory_Bus", main =
          "Boxplot of Memory_Bus for each Manufacturer", data = All_GPUs_2, col = 2:7)

boxplot(Memory_Speed~Manufacturer, xlab = "Manufacturer", ylab = "Memory_Speed", main =
          "Boxplot of Memory_Speed for each Manufacturer", data = All_GPUs_2, col = 2:7)

hist(All_GPUs_2$Memory_Bandwidth,xlab="Memory_Bandwidth",main="Histogram of Memory_Bandwidth", labels=T)

hist(All_GPUs_2$Memory_Bus,xlab="Memory_Bus",main="Histogram of Memory_Bus", labels=T)

hist(All_GPUs_2$Memory_Speed,xlab="Memory_Speed",main="Histogram of Memory_Speed", labels=T)

ggplot()+geom_point(data=All_GPUs_2,aes(x=Memory_Bandwidth,y=Memory_Speed))

## ANOVA

Nvidia= subset(All_GPUs_2 , All_GPUs_2$Manufacturer == "Nvidia")
qqnorm(Nvidia$Memory_Bandwidth)
qqline(Nvidia$Memory_Bandwidth)

ad.test(Nvidia$Memory_Bandwidth)
## 
##  Anderson-Darling normality test
## 
## data:  Nvidia$Memory_Bandwidth
## A = 41.523, p-value < 2.2e-16

Levene test

library(car)
leveneTest(Memory_Bandwidth~as.factor(Manufacturer), data =All_GPUs_2)

Implement the model

All_GPUs_3 <- aov(Memory_Bandwidth~Manufacturer,All_GPUs_2)
summary(All_GPUs_3)
##                Df   Sum Sq Mean Sq F value Pr(>F)    
## Manufacturer    3  3938568 1312856   118.9 <2e-16 ***
## Residuals    3277 36188288   11043                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Perform multiple comparison:

TukeyHSD(All_GPUs_3)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = Memory_Bandwidth ~ Manufacturer, data = All_GPUs_2)
## 
## $Manufacturer
##                    diff        lwr        upr p adj
## ATI-AMD       118.43804   88.17388  148.70221     0
## Intel-AMD     -94.69758 -114.31268  -75.08249     0
## Nvidia-AMD     24.70366   14.68620   34.72112     0
## Intel-ATI    -213.13563 -247.56678 -178.70448     0
## Nvidia-ATI    -93.73438 -123.75274  -63.71603     0
## Nvidia-Intel  119.40124  100.16757  138.63492     0
plot(TukeyHSD(All_GPUs_3))