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

MÔ TẢ DỮ LIỆU

GrowthSW - Dữ liệu về tỷ lệ tăng trưởng trung bình trong giai đoạn 1960–1995 của 65 quốc gia, cùng với các biến số có khả năng liên quan đến tăng trưởng. Một khung dữ liệu chứa 65 quan sát trên 6 biến.

  • growth: phần trăm tăng trưởng trung bình hàng năm của GDP thực tế từ năm 1960 đến năm 1995.

  • rgdp60: giá trị GDP bình quân đầu người năm 1960, quy đổi ra đô la Mỹ năm 1960.

  • tradeshare: tỷ trọng thương mại trung bình trong nền kinh tế từ 1960 đến 1995, là giá trị trung bình của (X + M)/GDP từ 1960 đến 1995.

  • education: số năm đi học trung bình của cư dân trưởng thành ở quốc gia đó vào năm 1960.

  • revolutions: số cuộc cách mạng, nổi dậy và đảo chính trung bình hàng năm ở quốc gia đó từ năm 1960 đến năm 1995.

  • assassinations: số vụ ám sát chính trị trung bình hàng năm ở quốc gia đó từ năm 1960 đến năm 1995 (tính trên một triệu dân).

NHẬP DỮ LIỆU

Nhập dữ liệu thủ công

Đây là dữ liệu Chuỗi thời gian về mức tiêu dùng (Y : đơn vị 100000 VNĐ) và thu nhập (X : đơn vị 100000 VNĐ). Tính theo đầu người và tính theo giá cố định năm 1980 trong thời kỳ 1971 – 1990 ở một khu vực

nam <- c(1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990 )
chitieu <- c(48.34, 48.54,  47.44,  54.58,  55, 63.49,  59.22,  57.77,  60.22,  55.4,   52.17,  60.84,  60.73,  76.04,  76.42,  69.34,  61.75,  68.78,  67.07,  72.94 )
thunhap <- c(51.01, 52.41,  51.55,  58.88,  59.66,  68.42,  64.27,  63.01,  65.61,  61.05,  63.36,  67.42,  67.86,  83.39,  84.26,  77.41,  70.08,  77.44,  75.79,  81.89)
chuoitg <- data.frame(nam, chitieu, thunhap)
head(chuoitg)
##    nam chitieu thunhap
## 1 1971   48.34   51.01
## 2 1972   48.54   52.41
## 3 1973   47.44   51.55
## 4 1974   54.58   58.88
## 5 1975   55.00   59.66
## 6 1976   63.49   68.42

Trang tính Excel

Ta sử dụng package “readxl” để thực hiện thao tác nhập dữ liệu từ file excel.

library(readxl)
## Warning: package 'readxl' was built under R version 4.3.1

Cũng với bộ dữ liệu trên nhưng được lưu dưới dạng tập tin excel. Vị trí file dữ liệu cần dùng là “C:/Users/TIEN/Downloads/HQD.xlsx” thì ta thực hiện thao tác nhập dữ liệu như:

hq1 <- read_excel("C:/Users/TIEN/Downloads/HQD.xlsx")
View(hq1)

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

Đồ thị dạng scatter - biểu đồ phân tán dữ liệu.

Biểu đồ phân tán (scatter plot):

  • Sử dụng các dấu chấm để thể hiện giá trị (điểm giao nhau) của hai biến số khác nhau.

  • Dùng để quan sát mối tương quan giữa 2 biến định lượng.

  • Trục hoành (trục X) mô tả biến độc lập. Trục tung (Y) mô tả biến phụ thuộc.

Sử dụng bô dữ liệu đã được nhập thủ công hoặc đã nhập được từ file excel.

  • Vẽ đồ thị phân tán (scatter) giữa 2 biến thu nhập Và chi tiêu.
hq1 |> ggplot(map=aes(x = thunhap , y = chitieu )) + geom_point(color = "blue")

  • Cũng với những dữ liệu ở đồ thị trên nhưng ta muốn đặt tên lại trên các trục tọa độ.
hq1 |> ggplot(map=aes(x = thunhap , y = chitieu )) + geom_point(color = "blue")+ xlab("Thu Nhập")+ ylab("Chi Tiêu")

  • Vẽ thêm đường hồi quy tuyến tính.
hq1 |> ggplot(aes(x = thunhap, y = chitieu )) + 
  geom_smooth(formula = y ~ x, method = "lm", col = "green") + 
  geom_point(color = 'red') +
  labs(title = 'Đồ Thị Dạng Scatter', x = "Thu nhập", y = "Chi tiêu" )

=> Từ đồ thị ta có thể thấy rõ sự tương quan giữa 2 biến thu nhập và chi tiêu. Nếu biến thu nhập thay đổi thì cũng sẽ có ảnh hưởng đến mức chi tiêu. Cụ thể, nếu thu nhập giảm thì mức chi tiêu cũng sẽ giảm .

  • Nối các điểm trong đồ thị dạng Scatter của 2 biến thu nhập và chi tiêu.
hq1 |> ggplot(aes(x = thunhap , y = chitieu)) +  geom_point(color = 'blue') + geom_line(color = 'red')

=> 2 yếu tố này có một mối quan hệ tỉ lệ thuận với nhau, khi số thu nhập tăng lên thì mức chi tiêu cũng có xu hướng tăng theo.

Ta sử dụng dataset GrowthSW thuộc package AER

data("GrowthSW")
g <- GrowthSW
names(g) <- c("gr","rg","tr","ed","re","as")
  • Ta sử dụng biến education và biến rgdp60 để thực hiện phân tích

CreditCard |> ggplot(aes(x = income, y = dependents, color = card )) + geom_point(na.rm = T) + xlab(“Thu nhập hằng năm”) + ylab(” Số người phụ thuộc”)

growth <- GrowthSW$growth
g |> ggplot(aes(x = rg , y = ed , color = growth ))+ geom_point(na.rm = T) + xlab(" GDP bình quân đầu người ") + ylab(" Số năm đi học trung bình ")+ labs(title="Biểu đồ thể hiện sự tương quan giữa trình độ và GDP bình quân ")

=> Biểu đồ cho ta thấy sự tương quan giữa hai biến education và biến rgdp60. Nghĩa là mức độ học vấn của cư dân ở quốc gia đó có ảnh hưởng đến giá trị GDP bình quân đầu người.

  • Vẽ thêm đường hồi quy tương ứng với đồ thị biểu thị mối liên hệ education và rgdp60 .
GrowthSW$grow[growth>2.5] <- "phattriennhanh"
GrowthSW$grow[growth<2.5] <- "champhattrien"
GrowthSW |> ggplot(aes(x = rgdp60 , y = education ))+ geom_point(aes (color= growth ),na.rm = T ) +
  geom_smooth(aes(color = growth),formula = y ~ x, method = 'lm', na.rm=T) +
  xlab("GDP bình quân đầu người") + ylab(" Số năm đi học trung bình ")+ 
  labs(title="Biểu đồ thể hiện sự tương quan giữa trình độ và GDP bình quân")

=> Kết luận: Đường hồi quy cho ta biết biến education và biến rgdp60 tỷ lệ thuận với nhau, nếu thời gian đi học càng nhiều tức là trình dộ học vấn càng cao thì GDP bình quân sẽ có xu hường tăng cao.

  • Chúng ta cũng có thể nối các điểm trong đồ thị dạng scatter lại với nhau.
g |> ggplot(aes(x = ed , y = rg )) +
  geom_point(color = 'blue') +
  geom_line(color = 'red')

Đồ thị dạng cột

data("CreditCard")

Đồ thị dạng cột 1 biến

  • Đồ thì dạng cột cho biến card
CreditCard |> ggplot(aes(x = card)) + geom_bar(fill = 'blue')

  • Thay vì trên các trục thể hiện bằng số đếm thì chúng ta cũng có thể thể hiện bằng tỉ lệ % như sau:
CreditCard |> group_by(card) |>
  summarise(n = n()) |> mutate(pG = percent(n/sum(n),accuracy = ,01)) |>  ggplot(aes(x =card , y =pG)) +
  geom_col(fill = 'blue') + theme_classic() + labs(x = 'Tần số', y = 'Tỷ lệ %')

- Chúng ta có thể ghi chú tỷ lệ % hoặc số đếm lên đỉnh mỗi cột như sau:

CreditCard |> ggplot(aes(x = card, y = after_stat(count))) + geom_bar(fill = 'blue') + geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'red', vjust = - 0.1 ) + theme_classic() + labs(x = 'Cấp thẻ tín dụng ', y = 'Tần số')

=> Biểu đồ cho ta biết tỷ lệ người được cấp thẻ tín dụng chiếm 78% và tỷ lệ không được cấp thẻ tín dụng chiếm 22%

  • Ngoài việc tính tỷ lệ % và đếm số người theo giới tính chúng ta có thể phân chia đồ thị theo một một số tiêu chí (biến) khác để phân tích. Ví dụ chúng ta phân chia theo biến : Majorcards

Chú thích: - Số 0 là thẻ tín dụng không được tổ chức - Số 1 là thẻ tín dụng chính được tổ chức

CreditCard |> ggplot(aes(x = card, y = after_stat(count))) +
  geom_bar(fill = 'blue') +
  geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'red', vjust = - .5) + facet_grid(. ~ majorcards) +
  theme_classic() +
  labs(x = 'Cấp thẻ tín dụng ', y = 'tần số')

CreditCard |> ggplot(aes(x = card )) +
  geom_bar(aes(y = after_stat(count), fill = majorcards), stat = 'count') +  geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'red', vjust = - .5) + facet_grid(. ~  majorcards ) + ylab('tần số') + xlab(' Cấp thẻ tín dụng ')

  • Hoặc phân chia theo biến dependents
CreditCard|> count(dependents ) |>
  mutate(pC = percent(n/sum(n),accuracy = 0.01)) |>
  ggplot(aes(x = dependents , y = n)) +
  geom_col(fill = 'blue') +
  geom_text(aes(label = pC),color = 'black', vjust = 0.5, size = 5) +
  ylab('Tần số') +
  xlab('Số người phụ thuộc')

=> Biểu đồ cho thấy trường hợp có 0 người phụ thuộc chiếm tỷ lệ cao nhất đồng nghĩa với việc có 50% người không có ai phụ thộc vào họ và ngược lại số người phụ thuộc càng nhiều thì tần số càng thấp.

Với biểu đồ như trên chúng ta có thể quay ngang như sau:

CreditCard|> count(dependents ) |>
  mutate(pC = percent(n/sum(n),accuracy = 0.01)) |>
  ggplot(aes(x = dependents , y = n)) +
  geom_col(fill = 'blue') +
  geom_text(aes(label = pC),color = 'black', vjust = 0.5, size = 5) +
  ylab('Tần số') +
  xlab('Số người phụ thuộc ')+ 
  coord_flip()

### Đồ thị 2 biến

  • Để có thể so sánh rõ hơn chúng ta cũng có thể vẽ đồ thi dạng cột theo biến dependents nhưng đồng thời chúng ta sẽ phân đồ thì này thành 2 nhóm theo biến card như sau:
CreditCard |> ggplot(aes(x = dependents, y = after_stat(count),fill = card )) +
  geom_bar(position = 'dodge') +
  ylab('Tần số ') +
  xlab('Số người phụ thuộc')

Với dạng đồ thị như trên thay vì để 2 cột cạnh nhau, chúng ta có thể chồng nó lên nhau như sau để dễ phân tích hơn.

CreditCard |> ggplot(aes(x = dependents)) + geom_bar(aes(y = after_stat(count), fill = card ), stat = 'count') +
 ylab('Tần số ') +
  xlab('Số người phụ thuộc')

  • Tương tự như trường hợp ở trên, chúng ta cũng có thể thêm ghi chú và đồ thị để người đọc dễ so sánh như sau:
CreditCard |> count( dependents , card ) |>
  group_by(dependents) |>
  mutate(pH = n/sum(n)) |>
  ggplot(aes(x = dependents , y = n, fill = card)) +
  geom_col() +
  geom_text(aes(label = percent(pH, accuracy = .01)), position = position_stack(vjust = 0.5 ), size = 3) +
  ylab('Tần số ') +
  xlab('Số người phụ thuộc')

  • Ta có thể vẽ đồ thị thể hiện thu nhập trung bình theo nghề nghiệp như sau:
CreditCard |> group_by(selfemp) |> 
  summarise(mr = mean(income, na.rm = T)) |> 
  ggplot(aes(x = selfemp , y = mr)) +
  geom_col(fill = 'blue') +
  geom_text(aes(label = round(mr,2)), vjust = 2, color = 'red', size = 5) +
  xlab('Làm chủ ') +
  ylab('Thu nhập trung bình hằng năm')

Tương tự chúng ta cũng có thể dùng đồ thị cột để vẽ phương sai, độ lệch chuẩn, trung vị hay bất kỳ một đặc trưng thống kê nào để thực hiện việc so sánh.

CreditCard |> group_by(selfemp) |> 
  summarise(sdr = sd(income, na.rm = T)) |> 
  ggplot(aes(x = selfemp , y = sdr)) +
  geom_col(stat='indentity', fill = 'blue') +
  geom_text(aes(y= sdr+.5, label = round(sdr ,2)), vjust = 2, color = 'red', size = 5) +
  xlab('Làm chủ ') +
  ylab('Độ lệch chuẩn thu nhập hằng năm')
## Warning in geom_col(stat = "indentity", fill = "blue"): Ignoring unknown
## parameters: `stat`

PHÂN TÍCH HỒI QUY ĐƠN

Dữ liệu từ file excel

Mô tả dữ liệu

  • Chuỗi thời gian về Chi tiêu(100000VND) và thu nhập (10000VND). Tính theo đầu người và tính theo giá cố định năm 1980 trong thời kỳ năm 1971 - 1990 ở một khu vực
head(hq1)
## # A tibble: 6 × 3
##       N chitieu thunhap
##   <dbl>   <dbl>   <dbl>
## 1  1971    48.3    51.0
## 2  1972    48.5    52.4
## 3  1973    47.4    51.6
## 4  1974    54.6    58.9
## 5  1975    55      59.7
## 6  1976    63.5    68.4

Đồ thị thể hiện sự tương quan giữa mức chi tiêu và thu nhập.

hq1a <- lm(data= hq1 ,thunhap~chitieu)
plot(thunhap~chitieu,data=hq1) + abline(hq1a)

## integer(0)
  • Đồ thị cho thấy sự tương quan giữa hai biến thu nhập và chi tiêu.

Phân tích tương quan

Các hệ số tương quan tuyến tính

Hệ số tương quan Person
  • Hệ số tương quan Pearson còn được gọi là hệ số Pearson (Pearson Correlation Coefficient) trong thống kê được định nghĩa là thước đo mối quan hệ thống kê giữa hai biến và sự liên kết của chúng với nhau
cor.test(thunhap, chitieu)
## 
##  Pearson's product-moment correlation
## 
## data:  thunhap and chitieu
## t = 24, df = 18, p-value = 3e-15
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.9617 0.9942
## sample estimates:
##   cor 
## 0.985
  • Kết luận: p-value =3e-15 < mức ý nghĩa 0.05 nên ta có thể kết luận hai biến thu nhập và chi tiêu có quan hệ tương quan tuyến tính với nhau
Hệ số tương quan Spearman
  • Hệ số tương quan Pearson chỉ hợp lí nếu biến số x và y tuân theo luật phân phối chuẩn. Nếu x và y không tuân theo luật phân phối chuẩn, chúng ta phải sử dụng một hệ số tương quan khác tên là Spearman, một phương pháp phân tích phi tham số.
cor.test(thunhap, chitieu, method="spearman")
## 
##  Spearman's rank correlation rho
## 
## data:  thunhap and chitieu
## S = 28, p-value = 7e-06
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##    rho 
## 0.9789
  • Kết luận: p-value =7e-06 < mức ý nghĩa 0.05 nên ta có thể kết luận hai biến thu nhập và chi tiêu có quan hệ tương quan tuyến tính với nhau
    ##### Hệ số tương quan Kendall
cor.test( chitieu, thunhap,method="kendall")
## 
##  Kendall's rank correlation tau
## 
## data:  chitieu and thunhap
## T = 182, p-value = 2e-12
## alternative hypothesis: true tau is not equal to 0
## sample estimates:
##    tau 
## 0.9158
  • Kết luận: p-value =2e-12 < mức ý nghĩa 0.05 nên ta có thể kết luận hai biến thu nhập và chi tiêu có quan hệ tương quan tuyến tính với nhau

Hồi quy tuyến tính đơn biến

Viết hàm SRF và bảng thống kê tuyến tính
lm( chitieu ~ thunhap)
## 
## Call:
## lm(formula = chitieu ~ thunhap)
## 
## Coefficients:
## (Intercept)      thunhap  
##       3.766        0.848

=> SRF:Y = 3.766 + 0.848β ##### Kiểm định các giả thuyết thống kê - Lập bảng thống kê hồi quy ta có:

eq <- lm(chitieu ~ thunhap)
summary(eq)
## 
## Call:
## lm(formula = chitieu ~ thunhap)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -5.344 -0.370  0.130  0.883  1.684 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    3.765      2.378    1.58     0.13    
## thunhap        0.848      0.035   24.25  3.4e-15 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.56 on 18 degrees of freedom
## Multiple R-squared:  0.97,   Adjusted R-squared:  0.969 
## F-statistic:  588 on 1 and 18 DF,  p-value: 3.39e-15
  • Kiểm định xem sự phù hợp mô hình: ta có F= 588>C nên mô hình trên là phù hợp
  • Kiểm định sự ảnh hưởng của biến : T= 24.25>C nên khi thu nhập thay đổi thì sẽ làm ảnh hưởng đến mức chi tiêu.
Dự báo mô hình hồi quy đơn
  • Ta dự báo mức tiêu dùng khi thu nhập là 8000.000 VND với kết quả hàm SRF: Y=3.766+ 0.848β
ketqua <- 3.766 + 0.848*80
ketqua
## [1] 71.61

=> Khi mức thu nhập là 8 triệu VND thì mức chi tiêu trung bình sẽ là 7.161 triệu VND

Dữ liệu từ package dataset: equipment

Đồ thị thể hiện sự tương quan giữa trình độ và GDP bình quân

g |> ggplot(map = aes(x = ed , y = gr  )) + geom_point(color="red") + xlab(" Số năm đi học trung bình ") + ylab(" phần trăm tăng trưởng trung bình của GDP ") + geom_smooth(formula = y ~ x, method = 'lm', color = 'black') + labs(title = 'Đồ Thị thể hiện sự tương quan giữa trình độ và phần trăm tăng trưởng GDP thực tế ')

- Kết luận: như vậy giữa hai biến education và growth có quan hệ tương quan tuyến tính với nhau

Các hệ số tương quan tuyến tính

Hệ số tương quan Person
  • Hệ số tương quan Pearson còn được gọi là hệ số Pearson (Pearson Correlation Coefficient) trong thống kê được định nghĩa là thước đo mối quan hệ thống kê giữa hai biến và sự liên kết của chúng với nhau
gr <- g$gr
rg <- g$rg
tr <- g$tr
ed <- g$ed
re <- g$re
as <- g$as
  • Ta kiểm định tương quan giữa biến education và growth
cor.test( ed,gr)
## 
##  Pearson's product-moment correlation
## 
## data:  ed and gr
## t = 2.8, df = 63, p-value = 0.007
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.09475 0.53195
## sample estimates:
##   cor 
## 0.331

=> Kết luận: ta có p-value=0.007 < alpha=0.05 nên hai biến education và growth có quan hệ tương quan tuyến tính với nhau

  • Ta kiểm định sự tương quan giữa biến growth và rgdp60
cor.test(gr,rg)
## 
##  Pearson's product-moment correlation
## 
## data:  gr and rg
## t = 0.5, df = 63, p-value = 0.6
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.184  0.302
## sample estimates:
##     cor 
## 0.06271

=> Kết luận: p-value=0.6 > anpha=0.05 điều này có nghĩa là hai biến growth và rgdp60 không có mối quan hệ tuyến tính với nhau, có nghĩa nếu 1 trong hai biến thay đổi thì sẽ không làm ảnh hưởng đến biến còn lại.

Hệ số tương quan Spearman
cor.test(ed,gr ,method="spearman" )
## 
##  Spearman's rank correlation rho
## 
## data:  ed and gr
## S = 28510, p-value = 0.002
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##   rho 
## 0.377

=> Kết luận: ta có p-value=0.002 < alpha=0.05 nên hai biến education và growth có quan hệ tương quan tuyến tính với nhau

Hệ số tương quan Kendall
cor.test(ed,gr ,method="kendall" )
## 
##  Kendall's rank correlation tau
## 
## data:  ed and gr
## z = 2.8, p-value = 0.005
## alternative hypothesis: true tau is not equal to 0
## sample estimates:
##    tau 
## 0.2376

Hồi quy tuyến tính đơn biến

Viết hàm hồi quy tuyến tính mẫu SRF
lm(ed ~gr )
## 
## Call:
## lm(formula = ed ~ gr)
## 
## Coefficients:
## (Intercept)           gr  
##       3.123        0.444

=> SRF:Y = 3.123 + 0.444β ##### Kiểm định các giả thuyết

eq2 <- lm(ed~gr)
summary(eq2)
## 
## Call:
## lm(formula = ed ~ gr)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -3.690 -1.852 -0.601  1.399  5.980 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    3.123      0.431    7.25  7.4e-10 ***
## gr             0.444      0.159    2.78   0.0071 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.42 on 63 degrees of freedom
## Multiple R-squared:  0.11,   Adjusted R-squared:  0.0954 
## F-statistic: 7.75 on 1 and 63 DF,  p-value: 0.00708
  • Kiểm định sự phù hợp mô hình: ta có F= 7.75 >C nên mô hình trên là phù hợp.
  • Kiểm định sự ảnh hưởng của biến : T= 2.78 >C nên khi trình độ học vấn thay đổi thì sẽ làm ảnh hưởng đến sự tăng trưởng GDP.
Dự báo mô hình hồi quy đơn
  • Ta dự đoán khi giá trị biến growth = 3
kq2 <- 3.123 + 0.444 *3
kq2
## [1] 4.455

=> Khi giá trị của growth=3 thì giá trị trung bình của biến education=4.455