You are on page 1of 4

Code

# Đọc dữ liệu

data1 <- read.csv("D:/XSTK-BTL/Concrete Compressive Strength.csv", header = T)

sapply(data1, class)

attach(data1)

head(data1)

# Kiểm tra dữ liệu khuyết trong bộ dữ liệu

apply(is.na(data1),2,which)

apply(is.na(data1),2,sum)

# Đổi tên các biến cần tính

Cement..component.1..kg.in.a.m.3.mixture. -> cement

Blast.Furnace.Slag..component.2..kg.in.a.m.3.mixture. -> slag

Fly.Ash..component.3..kg.in.a.m.3.mixture. -> ash

Water...component.4..kg.in.a.m.3.mixture. -> water

Superplasticizer..component.5..kg.in.a.m.3.mixture. -> superplastic

Coarse.Aggregate...component.6..kg.in.a.m.3.mixture. -> coarseagg

Fine.Aggregate..component.7..kg.in.a.m.3.mixture.-> fineagg

as.numeric(Age..day.) -> age

Concrete.compressive.strength.MPa..megapascals.. -> strength

data2 <- data.frame(cement,slag,ash,water,superplastic,coarseagg,fineagg,age,strength)

# Kiem tra cac gai tri ngoai lai bang boxplot

par(mfrow=c(1,1))

attach(data2)

boxplot(cement, slag, ash, water, superplastic, coarseagg, fineagg, age, strength)

# Bo cac gia tri ngoai lai

# Tinh toan cac khoang gia tri phu hop cua tung bien dua vao summary

# Khoang phu hop (Q1-1.5*IQR , 1.5*IQR+Q3)

# bien slag

summary(data2$slag) # tim Q1, Q3


subset(data2,slag < 357.25) -> data3

# kiểm tra xem khi ta loại bỏ các giá trị ngoại lai của biến slag thì các giá trị ngoại lai của các biến còn lại có
bị thay đổi hay không

boxplot(aa$cement, aa$slag, aa$ash, aa$water, aa$superplastic, aa$coarseagg, aa$fineagg, aa$age,


aa$strength)

# bien water

summary(data3$water) # tim Q1, Q3

subset(data3,water > 124.25 & water < 232.65) -> data3

boxplot(data3$cement, data3$slag, data3$ash, data3$water, data3$superplastic, data3$coarseagg,


data3$fineagg, data3$age, data3$strength)

# bien superplastic

summary(data3$superplastic) # tim Q1, Q3

subset(data3,superplastic < 25.75) -> data3

boxplot(data3$cement, data3$slag, data3$ash, data3$water, data3$superplastic, data3$coarseagg,


data3$fineagg, data3$age, data3$strength)

# bien fineaggg (LUU Y)

summary(data3$fineagg) # tim Q1, Q3

subset(data3, fineagg < 956.6) -> data3

boxplot(data3$cement, data3$slag, data3$ash, data3$water, data3$superplastic, data3$coarseagg,


data3$fineagg, data3$age, data3$strength)

# bien age

summary(dd$age) # tim Q1, Q3

dd$age [dd$age > 129] <- 46

dd$age [dd$age > 105] <- 33

boxplot(data3$cement, data3$slag, data3$ash, data3$water, data3$superplastic, data3$coarseagg,


data3$fineagg, data3$age, data3$strength)

# Tính toán các giá trị cần tính

func=function(x){list(mean(x),median(x),sd(x),min(x),max(x))}

table = as.data.frame(sapply(data3,func),row.names = c("mean","median","sd","min","max"))

table
# Vẽ biểu đồ thể hiện mối liên hệ

attach(data2)

hist(strength)

boxplot(strength ~ age, main= "Sự phụ thuộc của strength vào age")

pairs(strength ~ cement, col=2, main= "Sự phụ thuộc của strength vào cement")

pairs(strength ~ slag, col=3, main= "Sự phụ thuộc của strength vào slag")

pairs(strength ~ ash, col=4, main= "Sự phụ thuộc của strength vào ash")

pairs(strength ~ water, col=2, main= "Sự phụ thuộc của strength vào water")

pairs(strength ~ superplastic, col=3, main= "Sự phụ thuộc của strength vào superplastic")

pairs(strength ~ coarseagg, col=4, main= "Sự phụ thuộc của strength vào coarseagg")

pairs(strength ~ fineagg, col=5, main= "Sự phụ thuộc của strength vào fineagg")

# Thực hiện mô hình hồi quy

fix(data3) -> chuyển đổi các dữ liệu trong data3 thành 1. Vd cemetn -> cement1

attach(data3)

names(data3)

Model1 <- lm(strength1 ~ cement1 + slag1 + ash1 + water1 + superplastic1 + coarseagg1 + fineagg1 + age1)

summary(Model1)

Model2 <- lm(strength1 ~ cement1 + slag1 + ash1 + water1 + superplastic1 + age1)

summary(Model2)

# So sánh 2 mô hình

# Kiểm tra 2 mô hình

# Ta thấy hệ số Pr>F >0.05 nên 2 bien coarseagg và fineagg không ảnh hưởng đến mô hình

# => mô hình Model2 (ít biến hơn) phù hợp hơn Model1

anova(Model1,Model2)

# Kiểm tra giả thuyết

op<- par(mfrow=c(1,1))

plot(Model2)
# Dự đoán

# a. Dự đoán tỉ lệ đạt khi strength >=35 MPA

A <- data.frame("PASS"= data3$strength1 >= 35)

B <- nrow(data.frame(which(A$PASS))==T)

estimate <- data.frame("PASS"=B/length(data3$strength1), "FAIL"=1-B /length(data3$strength1)) -> C

# b. Dự đoàn strength khi có các yêu cầu

strength3 <- data.frame("cement1"=540.0,"slag1"=0.0,"ash1"=0,


"water1"=162.0,"superplastic1"=2.5,"age1"=28)

head(strength3)

predict_strength <- predict(Model2,strength3, interval= "confidence")

head(predict_strength)

You might also like