load dữ liệu
source("http://www.openintro.org/stat/data/cdc.R")
xem tên cac biến
names(cdc)
## [1] "genhlth" "exerany" "hlthplan" "smoke100" "height" "weight" "wtdesire"
## [8] "age" "gender"
Bài tập 1. Trong dữ liệu có bao nhiêu biến? bao nhiêu quan sát? và mỗi biến thuộc loại nào? (biến rời rạc, biến thực, biến phân loại)
str(cdc)
## 'data.frame': 20000 obs. of 9 variables:
## $ genhlth : Factor w/ 5 levels "excellent","very good",..: 3 3 3 3 2 2 2 2 3 3 ...
## $ exerany : num 0 0 1 1 0 1 1 0 0 1 ...
## $ hlthplan: num 1 1 1 1 1 1 1 1 1 1 ...
## $ smoke100: num 0 1 1 0 0 0 0 0 1 0 ...
## $ height : num 70 64 60 66 61 64 71 67 65 70 ...
## $ weight : int 175 125 105 132 150 114 194 170 150 180 ...
## $ wtdesire: int 175 115 105 124 130 114 185 160 130 170 ...
## $ age : int 77 33 49 42 55 55 31 45 27 44 ...
## $ gender : Factor w/ 2 levels "m","f": 1 2 2 2 2 2 1 1 2 1 ...
xem một vài dòng đầu tiên của dữa liệu
head(cdc)
## genhlth exerany hlthplan smoke100 height weight wtdesire age gender
## 1 good 0 1 0 70 175 175 77 m
## 2 good 0 1 1 64 125 115 33 f
## 3 good 1 1 1 60 105 105 49 f
## 4 good 1 1 0 66 132 124 42 f
## 5 very good 0 1 0 61 150 130 55 f
## 6 very good 1 1 0 64 114 114 55 f
xem một vài dòng cuối của dữ liệu
tail(cdc)
## genhlth exerany hlthplan smoke100 height weight wtdesire age gender
## 19995 good 0 1 1 69 224 224 73 m
## 19996 good 1 1 0 66 215 140 23 f
## 19997 excellent 0 1 0 73 200 185 35 m
## 19998 poor 0 1 0 65 216 150 57 f
## 19999 good 1 1 0 67 165 165 81 f
## 20000 good 1 1 1 69 170 165 83 m
Hàm summary() trả về max min và tứ phân vị của biến
summary(cdc$weight)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 68.0 140.0 165.0 169.7 190.0 500.0
tính trung bình của biến weight
mean(cdc$weight)
## [1] 169.683
Phương sai của biến weight
var(cdc$weight)
## [1] 1606.484
Trung vị của biến biến weight. tức là giá trị của biến chia đôi phân phối xác suất
median(cdc$weight)
## [1] 165
Nếu biến ngẫu nhiên là định lượng thì các thống kê của biến này cho ta cái nhìn tổng quan. Nhưng biến định tính, biến phân loai thì sao? Chúng ta sẽ xem xét về tần sô của biến phân loại.
table(cdc$smoke100)
##
## 0 1
## 10559 9441
tính tỉ lệ phần trăm người hút thuốc
(table(cdc$smoke100)/20000)*100
##
## 0 1
## 52.795 47.205
biểu đồ hình cột cho số người hút thuốc
barplot(table(cdc$smoke100))
Tạo một bảng tóm tắt bằng số cho height và weight, đồng thời tính toán phân vị cho mỗi thành phần. Tính toán phân phối tần suất cho giới tính và ngoại hình. có bao nhiêu nam trong các quan sát? tỷ lệ mẫu cho số người khoẻ mạnh có trong mẫu Lệnh table có thể được dùng để tạo một bảng từ bất kì một số các biến.
table(cdc$gender,cdc$smoke100)
##
## 0 1
## m 4547 5022
## f 6012 4419
Đổi thức tự xem bảng in ra có khác không
table(cdc$smoke100, cdc$gender)
##
## m f
## 0 4547 6012
## 1 5022 4419
tạo một biểu đồ mảng gồm số người tút thuốc và giới tính
mosaicplot(table(cdc$gender,cdc$smoke100))
số chiều của data
dim(cdc)
## [1] 20000 9
Nếu chúng ta muốn làm việc với một tập con của tập dữ liệu thì chúng ta có thể dùng kí hiệu dòng và cột của data như sau
cdc[234,1]
## [1] fair
## Levels: excellent very good good fair poor
kí hiệu trên có nghĩa là phần tử ở dòng 234 và cột 1 của bảng dữ liệu là “fair”
cdc[22:33,5]
## [1] 65 73 67 64 68 67 69 61 74 67 71 71
các phần tử từ dòng 22 đến dòng 33 và giá trị cột 5. Các phần tử từ dòng 33 đến dòng 44 của biến nằm trên cột 6 là
cdc[33:44,6]
## [1] 182 185 220 117 160 190 125 160 124 143 118 210
head(cdc$smoke100 ==0,20)
## [1] TRUE FALSE FALSE TRUE TRUE TRUE TRUE TRUE FALSE TRUE FALSE FALSE
## [13] FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE
head(cdc$age >30,20)
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE
## [13] FALSE TRUE FALSE TRUE TRUE TRUE TRUE TRUE
tail(cdc)
## genhlth exerany hlthplan smoke100 height weight wtdesire age gender
## 19995 good 0 1 1 69 224 224 73 m
## 19996 good 1 1 0 66 215 140 23 f
## 19997 excellent 0 1 0 73 200 185 35 m
## 19998 poor 0 1 0 65 216 150 57 f
## 19999 good 1 1 0 67 165 165 81 f
## 20000 good 1 1 1 69 170 165 83 m
các lệnh trên sản sinh ra một chuổi các giá trị TRUE hoặc FAIL. Giá trị TRUE khi biến gender nhận giá trị là ‘m’ và ngược lại. ## Trích xuất ra một data con chỉ có các thông tin của gander là “man” tức là chi có nam
mdata <- subset(cdc, cdc$gender == "m")
data chỉ gồm thông tin của giới tính “man” đã được lưu và bảng mdata xem 10 dòng đầu tiên của bảng dữ liệu mới
head(mdata,10)
## genhlth exerany hlthplan smoke100 height weight wtdesire age gender
## 1 good 0 1 0 70 175 175 77 m
## 7 very good 1 1 0 71 194 185 31 m
## 8 very good 0 1 0 67 170 160 45 m
## 10 good 1 1 0 70 180 170 44 m
## 11 excellent 1 1 1 69 186 175 46 m
## 12 fair 1 1 1 69 168 148 62 m
## 13 excellent 1 0 1 66 185 220 21 m
## 14 excellent 1 1 1 70 170 170 69 m
## 15 fair 1 0 0 69 170 170 23 m
## 16 good 1 1 1 73 185 175 79 m
ta có thể tạo ra một bảng dữ liệu con có nhiều hơn 1 tính chất
madata <- subset(cdc, cdc$gender == "f" & cdc$age >30)
xem dữ liệu mới
head(madata,10)
## genhlth exerany hlthplan smoke100 height weight wtdesire age gender
## 2 good 0 1 1 64 125 115 33 f
## 3 good 1 1 1 60 105 105 49 f
## 4 good 1 1 0 66 132 124 42 f
## 5 very good 0 1 0 61 150 130 55 f
## 6 very good 1 1 0 64 114 114 55 f
## 20 very good 1 1 0 67 125 120 33 f
## 21 very good 1 1 0 69 200 150 48 f
## 22 good 1 1 1 65 160 140 54 f
## 26 good 0 1 0 68 190 150 33 f
## 27 excellent 1 0 1 67 190 165 44 f
hoặc một bảng dữ liệu for men hoặc age >30
m_or_over30 <- subset(cdc,cdc$gender == "m"|cdc$age>30)
xem dữ liệu
head(m_or_over30,10)
## genhlth exerany hlthplan smoke100 height weight wtdesire age gender
## 1 good 0 1 0 70 175 175 77 m
## 2 good 0 1 1 64 125 115 33 f
## 3 good 1 1 1 60 105 105 49 f
## 4 good 1 1 0 66 132 124 42 f
## 5 very good 0 1 0 61 150 130 55 f
## 6 very good 1 1 0 64 114 114 55 f
## 7 very good 1 1 0 71 194 185 31 m
## 8 very good 0 1 0 67 170 160 45 m
## 10 good 1 1 0 70 180 170 44 m
## 11 excellent 1 1 1 69 186 175 46 m
Bài tập 4. Tạo một bảng dữ liệu con gồm thông của female và tuổi nhỏ hơn 23
m_and_under23 <- subset(cdc, cdc$gender =="m"& cdc$age <= 23)
head(m_and_under23,10)
## genhlth exerany hlthplan smoke100 height weight wtdesire age gender
## 13 excellent 1 0 1 66 185 220 21 m
## 15 fair 1 0 0 69 170 170 23 m
## 96 excellent 1 1 1 74 175 200 22 m
## 120 excellent 1 1 0 70 170 175 23 m
## 121 very good 0 1 0 67 280 200 22 m
## 172 excellent 1 1 1 76 215 185 23 m
## 220 excellent 1 1 0 70 165 165 22 m
## 262 fair 0 1 1 71 185 185 20 m
## 296 fair 1 1 1 72 185 170 19 m
## 297 excellent 1 0 1 63 105 100 19 m
##Quantitative data Phân tích để thấy tổng quan của biến chiều cao
boxplot(cdc$height)
so sánh với bản summary statis
summary(cdc$height)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 48.00 64.00 67.00 67.18 70.00 93.00
Đồ thị của biến height
plot(cdc$height)
Ta có thể dùng biểu đồ họp để cho ta một cái nhìn tổng quan về số người hút thuốc và nam và nữ
boxplot(cdc$height~cdc$gender)
Chú ý biến đứng sau dấu ‘~’ phải là biến factor
Tiếp theo ta tính chỉ số BMI (body mass index), chỉ số khối của cơ thể. Vì đơn vị của biến height tính bằng in và weight tính bằng pound nên khi tính BMI ta có các hệ sồ nhân như trong công thức
bmi <- (cdc$weight/cdc$height^2)*703
boxplot(bmi~cdc$genhlth)
Lưu ý rằng dòng đầu tiên ở trên chỉ là một số số học, nhưng nó được áp dụng cho tất cả 20.000 số trong tập dữ liệu cdc. Nghĩa là, đối với mỗi 20.000 người tham gia, chúng tôi lấy cân nặng của họ, chia cho bình phương chiều cao của họ và sau đó nhân với 703. Kết quả là 20.000 giá trị BMI, một giá trị cho mỗi người trả lời. Đây là một lý do tại sao chúng tôi thích R: nó cho phép chúng tôi thực hiện các phép tính như thế này bằng cách sử dụng các biểu thức rất đơn giản.
Bài Tập 5. Biểu đồ hình hợp biểu diễn điều gì? Lấy một biến phân loại khác và khảo sát sự liên hệ giữa biến BMI và biến phân loại này. Liệt kê những biến mà mình chọn.
boxplot(bmi~cdc$gender)
str(cdc)
## 'data.frame': 20000 obs. of 9 variables:
## $ genhlth : Factor w/ 5 levels "excellent","very good",..: 3 3 3 3 2 2 2 2 3 3 ...
## $ exerany : num 0 0 1 1 0 1 1 0 0 1 ...
## $ hlthplan: num 1 1 1 1 1 1 1 1 1 1 ...
## $ smoke100: num 0 1 1 0 0 0 0 0 1 0 ...
## $ height : num 70 64 60 66 61 64 71 67 65 70 ...
## $ weight : int 175 125 105 132 150 114 194 170 150 180 ...
## $ wtdesire: int 175 115 105 124 130 114 185 160 130 170 ...
## $ age : int 77 33 49 42 55 55 31 45 27 44 ...
## $ gender : Factor w/ 2 levels "m","f": 1 2 2 2 2 2 1 1 2 1 ...
Phân tích BMI theo smoke100
boxplot(bmi~cdc$smoke100)
Histogam của age
hist(cdc$age)
histogram của height
hist(cdc$height,n=20)
histogram của weight
hist(cdc$weight)
Histogram của BMI
hist(bmi)
Histogram với khoảng chia nhỏ là 50
hist(bmi, breaks = 50)
plot(cdc)
Vẻ biểu đồ Scatterplot để biểu diễn mối quan hệ giữa hai biến weight với biến desired weight
plot(cdc$weight~cdc$wtdesire)
Tạo một biến mới về độ khác biệt giữa biến weight và desired weight bằng cách lấy hai cột này trừ nhau
wdiff <- (cdc$wtdesire-cdc$weight)
Đây là biến số nguyên. Nếu tại một quan sát nào đó mà wdiff =0 thì cân nặng của người đó bằng với cân nặng kì vọng. Nếu wdiff là số âm thì cân nặng mong muốn nhỏ hơn cân nặng thực tế. Nếu wdiff dương thì cân nặng mong muốn lớn hơn cân nặng thực thực tế. Đồ thị Histogram của biến wdiff
hist(wdiff)
nhìn vào đồ thị ta thấy số người mong muôn cân nặng của mình nhỏ hơn cân nặng thực tế. tính xác suất của số người không hài lòng với cân nặng của mình
tính các giá trị thống kê cơ bản cho các biến trong bảng dữ liệu
mean(cdc$weight)
## [1] 169.683
độ lệch chuẩn của biến cân nặng weight
sd(cdc$weight,na.rm = T)
## [1] 40.08097
phương sai của biến weight
var(cdc$weight,na.rm = F)
## [1] 1606.484
sd(cdc$weight,na.rm = F)^2
## [1] 1606.484
tách ra một tập con có độ lệch giữa cân nặng và cân nặng trung bình nhỏ hơn độ lệch chuẩn
one_sd <- subset(cdc,((abs(weight-mean(weight)) < sd(weight))))
nrow(one_sd)/nrow(cdc)
## [1] 0.7076