BÀI TẬP VỀ NHÀ TUẦN 1

GIẢI THÍCH DỮ LIỆU

Dataset

  • “Parade2005” là 1 tập dữ liệu được thu thập ở Mỹ trong năm 2005 bởi tạp chí Parade. Tập dữ liệu này gồm 130 quan sát và 5 biến.

Các biến

earnings

  • Thu nhập cá nhân hàng năm.

age

  • Tuổi của người được khảo sát

ender

  • Giới tính của người được khảo sát.

state

  • Tiểu bang của người được khảo sát.

celebrity

  • Người được khảo sát có phải là người nổi tiếng? (yes/no).

THAO TÁC CƠ BẢN TRÊN DỮ LIỆU

Sử dụng tập dữ liệu “Parade2005”. Và hiển thị 6 quan sát đầu tiên

library(AER)
data("Parade2005")
head(Parade2005,4)
##   earnings age gender state celebrity
## 1  1.0e+04  26   male    ND        no
## 2  1.0e+07  18 female    CA       yes
## 3  8.5e+04  39   male    NE        no
## 4  7.5e+04  50 female    NC        no

Tiến hành tạo dữ liệu bản sao

Pa <- Parade2005
names(Pa) <- c("ThuNhap","Tuoi","GioiTinh","Bang","NoiTieng")

Truy vấn dữ liệu con

ThuNhap <- Pa$ThuNhap
Tuoi <- Pa$Tuoi
GioiTinh <- Pa$GioiTinh
x <- Pa[, c("ThuNhap","Tuoi","GioiTinh")]
str(x)
## 'data.frame':    130 obs. of  3 variables:
##  $ ThuNhap : num  10000 10000000 85000 75000 91500 49500 105000 30000 40000 23000 ...
##  $ Tuoi    : num  26 18 39 50 61 39 31 24 24 45 ...
##  $ GioiTinh: Factor w/ 2 levels "female","male": 2 1 2 1 2 1 1 2 1 2 ...

TRỰC QUAN HÓA DỮ LIỆU

Sử dụng Package :ggplot2”

library(ggplot2)

Đồ thị thể hiện dữ liệu

barplot(ThuNhap, xlab = "", ylab = "Thu Nhập",  main = "Biểu đồ thể hiện dữ liệu của biến Thu Nhập", col = c("red", "green", "blue", "pink", "white"))

barplot(Tuoi, xlab = "", ylab = "Tuổi",  main = "Biểu đồ thể hiện dữ liệu của biến Tuổi", col = c("red", "green", "blue", "pink", "white"))

XỬ LÝ DỮ LIỆU

Lọc dữ liệu

m <- Pa[Pa$GioiTinh=='male' & Pa$ThuNhap > 20000000, ]
head(m)
##    ThuNhap Tuoi GioiTinh Bang NoiTieng
## 13 2.1e+07   20     male   OH      yes
## 29 2.5e+07   51     male   FL      yes
## 96 4.2e+07   28     male   IN      yes

Sắp xếp lại dữ liệu

ThuNhaptang = Pa[order(Pa$ThuNhap), ]
head(ThuNhaptang,4)
##     ThuNhap Tuoi GioiTinh Bang NoiTieng
## 1     10000   26     male   ND       no
## 100   11000   43   female   IN       no
## 21    12000   39   female   MI       no
## 94    12000   27   female   VA       no

LẬP BẢNG TẦN SỐ VÀ ĐỒ THỊ MÔ TẢ

Biến Thu Nhập

Bảng tần số

BangThuNhap <- cut(ThuNhap, breaks = c(10000, 50000, 250000, 1000000,10000000, 42000000 ), labels = c("thap", "trungbinh", "trungbinhcao","cao", "ratcao"), right = TRUE)
tabThuNhap=table(BangThuNhap)
tabThuNhap
## BangThuNhap
##         thap    trungbinh trungbinhcao          cao       ratcao 
##           66           51            3            2            7

Giải thích kết quả

  • Phần lớn người được khảo sát thuộc nhóm thu nhập thấp và trung bình (từ 10000$ đến 250000) với tỉlệ rất cao là 90.
  • Trong đó nhóm thu nhập thấp(10000đến50000) chiếm tỉ lệ cao nhất là 50.1%.

Biến Tuổi

Bảng tần số

BangTuoi <- cut(Tuoi, breaks = c(18, 30, 40, 52), labels = c("18-30", "30-40", "40-50"), right = TRUE)
tabTuoi=table(BangTuoi)
tabTuoi
## BangTuoi
## 18-30 30-40 40-50 
##    32    44    33

Giải thích kết quả

  • Phần lớn người được khảo sát thuộc nhóm độ tuổi trung niên (từ 30 đến 45 tuổi) với tỉ lệ cao nhất là 46.2%

BÀI TẬP VỀ NHÀ TUẦN 2

CHỦ ĐỀ PHÂN TÍCH

  • PHÂN TÍCH SỰ TÁC ĐỘNG CỦA BIẾN TUỔI VÀ GIỚI TÍNH LÊN BIẾN THU NHẬP

Mô tả dữ liệu

Dataset

  • “Parade2005” à 1 tập dữ liệu được thu thập ở Mỹ trong năm 2005 bởi tạp chí Parade. Tập dữ liệu này gồm 130 quan sát và 5 biến. Ở chủ đề này, chúng ta sẽ phân tích 3 biến: earnings, age, gender.

Các biến

  • earnings: thu nhập cá nhân hàng năm
  • age:tuổi của người được khảo sát
  • gender: giới tính của người được khảo sát

Mục tiêu

  • Đánh giá được độ tập trung và phân tán của dữ liệu.
  • Dùng đồ thị để thể hiện tần số của các biến.
  • Kiểm định rằng càng biến có quan hệ phụ thuộc nhau hay không và phân tích quan hệ ấy bằng đồ thị đơn giản.

CÁC ĐẠI LƯỢNG ĐO LƯỜNG ĐỘ TẬP TRUNG

Biến Thu Nhập

Trung bình

  • Ý nghĩa: được tính là giá trị trung bình cộng của các giá trị.
mean(ThuNhap)
## [1] 1503412

Trung vị

  • Ý nghĩa: là số nằm ở giữa một nhóm các số; có nghĩa là, phân nửa các số có giá trị lớn hơn số trung vị, còn phân nửa các số có giá trị bé hơn số trung vị.
median(ThuNhap)
## [1] 50000

=> Kết luận:

  • Ta có Mean>Median nên biến Thu Nhập có phân phối lệch phải.

Biến Tuổi

  • Ý nghĩa: được tính là giá trị trung bình cộng của các giá trị.
mean(Tuoi)
## [1] 39.17692

Trung vị

  • Ý nghĩa: là số nằm ở giữa một nhóm các số; có nghĩa là, phân nửa các số có giá trị lớn hơn số trung vị, còn phân nửa các số có giá trị bé hơn số trung vị.
median(Tuoi)
## [1] 38.5

=> Kết luận:

  • Ta có Mean>Median nên biến Thu Nhập có phân phối lệch phải.

CÁC ĐẠI LƯỢNG ĐO LƯỜNG ĐỘ PHÂN TÁN

Biến Thu Nhập

Phương sai

  • Ý nghĩa: là số đại diện cho độ phân tán của các số liệu so với giá trị trung bình.
var(ThuNhap)
## [1] 3.49546e+13

Độ lệch chuẩn

  • Ý nghĩa: là số được tính bằng căn hai của phương sai và được thể hiện bằng các đơn vị giống với dữ liệu có sẵn.
sd(ThuNhap)
## [1] 5912241

=> Kết luận:

  • Biến Thu Nhập có độ phân tán dữ liệu lớn (sd gấp hơn 3 lần mean).

Biến Tuổi

Phương sai

  • Ý nghĩa: là số đại diện cho độ phân tán của các số liệu so với giá trị trung bình.
var(Tuoi)
## [1] 122.8909

Độ lệch chuẩn

  • Ý nghĩa: là số được tính bằng căn hai của phương sai và được thể hiện bằng các đơn vị giống với dữ liệu có sẵn.
sd(Tuoi)
## [1] 11.08562

=> Kết luận:

  • Biến Tuổi có độ phân tán thấp (sd chỉ bằng khoảng 1/3 so với mean).

LẬP BẢNG TẦN SỐ VÀ VẼ ĐỒ THỊ GIỮA 2 BIẾN

Lập bảng tần số cho biến Thu Nhập, Tuổi, Giới Tính

tabThuNhap
## BangThuNhap
##         thap    trungbinh trungbinhcao          cao       ratcao 
##           66           51            3            2            7
tabTuoi
## BangTuoi
## 18-30 30-40 40-50 
##    32    44    33
table(GioiTinh)
## GioiTinh
## female   male 
##     62     68

Vẽ đồ thị cho biến Thu Nhập, Tuổi, Giới Tính

barplot(tabThuNhap, xlab = "Thu Nhập", ylab = "Tần số",  main = "Biểu đồ tần số của biến Thu Nhập", col = c("red", "green", "blue", "pink", "white"))

barplot(tabTuoi, xlab = "Tuổi", ylab = "Tần số",  main = "Biểu đồ tần số của Biến Tuổi", col = c("red", "green", "blue"))

tabGioiTinh=table(GioiTinh)
barplot(tabGioiTinh, xlab = "Tuổi", ylab = "Tần số",  main = "Biểu đồ tần số của Biến Tuổi", col = c("red", "green"))

Kiểm định Chi bình phương xác định sự phụ thuộc giữa 2 biến

Biến Thu Nhập và biến Tuổi

  • Trong kiểm định này, chúng ta phải kiểm tra các giá trị p. Hơn nữa, giống như tất cả các thử nghiệm thống kê, chúng tôi giả định thử nghiệm này là giả thuyết H0 và giả thuyết H1.
  • Chúng ta sẽ bác bỏ giả thuyết H0 nếu giá trị p xuất hiện trong kết quả nhỏ hơn mức ý nghĩa xác định trước, thường là 0,05, thì chúng ta bác bỏ giả thuyết H0
chisq.test(ThuNhap, Tuoi, correct=FALSE)
## 
##  Pearson's Chi-squared test
## 
## data:  ThuNhap and Tuoi
## X-squared = 3735.3, df = 3526, p-value = 0.007096
  • Ta có giá trị chi bình phương xấp xỉ 3735 và giá trị p-value xấp xỉ 0.0071. Vì chúng ta nhận được giá trị p nhỏ hơn mức ý nghĩa 0,05, chúng ta bác bỏ giả thuyết H0.
  • Như vậy, biến thu nhập (earnings) và biến tuổi (age) trên thực tế là 2 biến phụ thuộc.
Lập bảng tần số giữa biến Thu Nhập và Tuổi
tabTNT=table(BangThuNhap, BangTuoi)
tabTNT
##               BangTuoi
## BangThuNhap    18-30 30-40 40-50
##   thap            21    25    13
##   trungbinh        5    16    18
##   trungbinhcao     1     0     1
##   cao              1     0     0
##   ratcao           3     3     1
Vẽ đồ thị biến Thu Nhập theo từng nhóm độ tuổi
plot(vearnandage18den30, xlab = "Mức Thu Nhập: Thấp - Tr.Bình - Cao - Rất Cao", ylab = "Tần Số",  main = "Biểu đồ tần số của biến Thu Nhập ở độ tuổi 18 đến 30", col = c("red", "green", "blue","white"))+plot(vearnandage30den45, xlab = "Mức Thu Nhập: Thấp - Tr.Bình - Cao - Rất Cao", ylab = "Tần Số",  main = "Biểu đồ tần số của biến Thu Nhập ở độ tuổi 30 đến 40", col = c("red", "green", "blue","white"))+plot(vearnandage45den52, xlab = "Mức Thu Nhập: Thấp - Tr.Bình - Cao - Rất Cao", ylab = "Tần Số",  main = "Biểu đồ tần số  của biến Thu Nhập ở độ tuổi 40 đến 52", col = c("red", "green", "blue","white"))

## integer(0)
Giải thích kết quả:
  • Nhóm thu nhập thấp từ độ tuổi 18-30 đến độ tuổi 40-52 có xu hướng giảm từ 21 xuống 13 người, trong khi đó nhóm thu nhập trung bình từ độ tuổi 18-30 đến độ tuổi 40-52 có xu hướng tăng từ 5 lên 18 người. Các nhóm thu nhập trung bình cao, cao và rất cao có tần số quá ít để xác định kết xu hướng tăng giảm.
  • Kết luận: biến Tuổi và Thu Nhập có quan hệ tương quan dương khi độ tuổi càng cao thì nhóm thu nhập thấp giảm và thu nhập nhóm trung bình càng tăng.

Biến Thu Nhập và biến Giới Tính

  • Trong kiểm định này, chúng ta phải kiểm tra các giá trị p. Hơn nữa, giống như tất cả các thử nghiệm thống kê, chúng tôi giả định thử nghiệm này là giả thuyết H0 và giả thuyết H1.
  • Chúng ta sẽ bác bỏ giả thuyết H0 nếu giá trị p xuất hiện trong kết quả nhỏ hơn mức ý nghĩa xác định trước, thường là 0,05, thì chúng ta bác bỏ giả thuyết H0
chisq.test(ThuNhap, GioiTinh, correct=FALSE)
## 
##  Pearson's Chi-squared test
## 
## data:  ThuNhap and GioiTinh
## X-squared = 84.78, df = 86, p-value = 0.517
  • Ta có giá trị chi bình phương xấp xỉ 85 và giá trị p-value xấp xỉ 0.517. Vì chúng ta nhận được giá trị p lớn hơn mức ý nghĩa 0,05, chúng ta chấp nhận giả thiết H0.
  • Như vậy, biến Thu Nhập (earnings) và biến Giới Tính (gender) trên thực tế là 2 biến độc lậplập.

BÀI TẬP VỀ NHÀ TUẦN 3

Biên tập dữ liệu

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.2     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ lubridate 1.9.2     ✔ tibble    3.2.1
## ✔ purrr     1.0.1     ✔ tidyr     1.3.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ✖ dplyr::recode() masks car::recode()
## ✖ purrr::some()   masks car::some()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(dplyr)
library(utf8)

Tách rời dữ liệu

-Chỉ riêng những người nam giớigiới

Nam <- subset(Parade2005, gender=="male")
head(Nam,4)
##   earnings age gender state celebrity
## 1    10000  26   male    ND        no
## 3    85000  39   male    NE        no
## 5    91500  61   male    DE        no
## 8    30000  24   male    NM        no
  • Chỉ riêng những người có độ tuổi trên 35
Tren35 <- subset(Parade2005, age>35)
head(Tren35,4)
##   earnings age gender state celebrity
## 3    85000  39   male    NE        no
## 4    75000  50 female    NC        no
## 5    91500  61   male    DE        no
## 6    49500  39 female    SD        no
  • Chỉ riêng những người vừa là nam giới vừa trên 35 tuổi
N35 <- subset(Parade2005, age>35 & gender=="male") 
head(N35,4)
##    earnings age gender state celebrity
## 3     85000  39   male    NE        no
## 5     91500  61   male    DE        no
## 10    23000  45   male    VA        no
## 14    65500  36   male    ID        no

Chiết số liệu từ 1 data.frame

  • Chỉ lấy biến earnings, age, gender từ tập dữ liệu Parade2005
data123 <- Pa[, c(1,2,3)]
head(data123,5)
##    ThuNhap Tuoi GioiTinh
## 1    10000   26     male
## 2 10000000   18   female
## 3    85000   39     male
## 4    75000   50   female
## 5    91500   61     male
  • Chỉ chọn 3 dòng đầu tiên sau khi chọn 3 biến như trên
data3 <- Pa[1:3, c(1,2,3)] 
head(data3)
##   ThuNhap Tuoi GioiTinh
## 1 1.0e+04   26     male
## 2 1.0e+07   18   female
## 3 8.5e+04   39     male

Bổ sung số liệu mới

ThuNhapmoi <- (ThuNhap + Tuoi)
Tuoimoi <- (Tuoi+2)

Gộp các biến thành 1 dữ liệu mới

d1 <- data.frame(ThuNhap, Tuoi, ThuNhapmoi)
d2 <- data.frame(d1, Tuoimoi)
head(d2,4)
##   ThuNhap Tuoi ThuNhapmoi Tuoimoi
## 1 1.0e+04   26      10026      28
## 2 1.0e+07   18   10000018      20
## 3 8.5e+04   39      85039      41
## 4 7.5e+04   50      75050      52

Thay dổi dữ liệu: giới tính là nữ, bang NE, tuoi tren 60 thì thu nhập = 00

Pa$ThuNhap[Pa$Bang=="NE" & Pa$Tuoi > 30] <- 0
head(Pa,6)
##    ThuNhap Tuoi GioiTinh Bang NoiTieng
## 1    10000   26     male   ND       no
## 2 10000000   18   female   CA      yes
## 3        0   39     male   NE       no
## 4    75000   50   female   NC       no
## 5    91500   61     male   DE       no
## 6    49500   39   female   SD       no

Tạo thêm 1 biến định tính phân chia giàu nghèo từ biến định lượng Thu Nhập

Pa$GiauNgheo[ThuNhap >= 10000000] <- 'giau'
Pa$GiauNgheo[ThuNhap < 10000000 &  ThuNhap >= 500000] <- 'vua'
Pa$GiauNgheo[ThuNhap < 500000] <- 'ngheo'
head(Pa,4)
##   ThuNhap Tuoi GioiTinh Bang NoiTieng GiauNgheo
## 1 1.0e+04   26     male   ND       no     ngheo
## 2 1.0e+07   18   female   CA      yes      giau
## 3 0.0e+00   39     male   NE       no     ngheo
## 4 7.5e+04   50   female   NC       no     ngheo

CÁC HÀM PHÂN PHỐI NHỊ PHÂN VÀ PHÂN PHỐI POISSON

Hàm phân phối nhị phân

table(GioiTinh)
## GioiTinh
## female   male 
##     62     68
  • Ý nghĩa: Biết rằng trong một quần thể quan sát có khoảng 62/130 người thuộc giới tính nữ; nếu chúng ta tiến hành chọn mẫu 1000 lần, mỗi lần chọn 20 người trong quần thể đó một cách ngẫu nhiên, sự phân phối đó sẽ như thế nào?
b <- rbinom(1000, 20, 0.477)
table(b)
## b
##   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17 
##   1   2   8  18  55  90 149 170 217 120  78  51  25  13   2   1
  • => Đồ thị thể hiện:
hist(b, main="Phân phối nhị phân của biến giới tính nữ") 

- Giải thích: Dòng số liệu thứ nhất (2, 3, …, 18) là số người thuộc giới tính nữ trong số 20 người mà chúng ta chọn. Dòng số liệu thứ hai cho chúng ta biết số lần chọn mẫu trong 1000 lần xảy ra.

Hàm phân phối Poisson

  • Ý nghĩa: Hàm phân phối Poisson, nói chung, rất giống với hàm nhị phân, ngoại trừ thông số p thường rất nhỏ và n thường rất lớn. Vì thế, hàm Poisson thường được sử dụng để mô tả các biến số rất hiếm xảy ra.

  • Qua số liệu đã thống kê, ta biết được tỉ lệ người được khảo sát là người nổi tiếng là 11/130=0.085.Tính trung bình cứ khoảng 2.000 người thì thì có 17 người nổi tiếng. Hỏi xác suất chọn trúng 2 người nổi tiếng là bao nhiêu

dpois(2, 8.5)
## [1] 0.007350295
  • Giải thích: Vậy xác xuất khảo sát được 2 hoặc trên 2 người nổi tiếng trong tổng số mẫu 1000 người là 0,73%

BIỂU DIỄN DỮ LIỆU BẰNG ĐỒ THỊ

Biểu đồ cột cho 1 biến

barplot(tabGioiTinh, main= "Biểu đồ biến Giới Tính" ) 

NoiTieng <- Pa$NoiTieng
tabNoiTieng <- table(NoiTieng)
barplot(tabNoiTieng, main= " Biểu đồ biến Nổi Tiếng" )

Bang <- Pa$Bang
tabBang <- table(Bang)
barplot(tabBang, main= "Biểu đồ biến các Bang") 

barplot(tabThuNhap, main= "Biểu đồ biến Thu Nhập") 

barplot(tabTuoi, main= "Biểu đồ biến Thu Nhập") 

### Biểu đồ Strip cho 1 biến

stripchart(ThuNhap, main= "Biểu đồ Strip của biến Thu Nhập", xlab = "Thu Nhập") 

stripchart(Tuoi, main= "Biểu đồ Strip của biến Tuổi", xlab = "Tuổi") 

### Biểu đồ cột cho 2 biến

Thu Nhập và Tuổi

  • Chú thích: màu đen -> màu xám trắng: thu nhập thấp -> rất cao
barplot(tabTNT, beside=TRUE, xlab="Độ tuổi", ylab= "Tần số") 

#### Giới Tính và Nổi Tiếng

  • Chú thích: màu đen -> không nổi tiếng; màu xám -> có nổi tiếng
tabGTNT=table(NoiTieng, GioiTinh)
barplot(tabGTNT, beside=TRUE, xlab="Giới Tính", ylab= "Tần số") 

Biểu đồ tròn cho 1 biến

pie(tabThuNhap, main = " Biểu đồ tròn của biến Thu Nhập")

pie(tabGioiTinh, main = "Biểu đồ tròn của biến Giới Tính")

pie(tabNoiTieng, main = "Biểu đồ tròn của biến Nổi Tiếng" )

pie(tabTuoi, main = "Biểu đồ tròn của biến Tuổi")

Biểu đồ tán xạ

ThuNhap và Tuoi

 plot(ThuNhap, Tuoi)