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

A little more on subsetting

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

  1. Giá trị trung bình cho biến cân nặng weight
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