Câu 1

Chiều cao của sinh viên một trường đại học tuân theo phân phối chuẩn
với trung bình 170 cm và độ lệch chuẩn 5 cm.
• Tính xác suất một sinh viên có chiều cao lớn hơn 175 cm.
• Kiểm tra lại bằng hàm pnorm() trong R.

1. Phân phối chuẩn

\[Z(X) = \frac{X - \mu}{\sigma}\] Trong đó:
\(\mu\) = Giá trị trung bình (mean) = 170cm
\(\sigma\) = Độ lệch chuẩn = 5cm
\(X\) = Biến ngẫu nhiên liên tục (hoặc cái mẹ gì đó gọi là giá trị quan sát) = 175cm
\(Z\) = Giá trị chuẩn hóa (Z-score) cho biết giá trị X đang cách giá trị trung bình \(\mu\) bao nhiêu lần độ lệch chuẩn \(\sigma\)

2. Code R

Cách 1: Thuần chay

mu_me_may <- 170
ligma <- 5
yo_maam <- 175

play_yo_maam <- as.numeric((yo_maam - mu_me_may)/ligma)
cat("Z(X) =", play_yo_maam, "\n")
## Z(X) = 1
ket_qua <- pnorm(play_yo_maam)
cat("Ket qua cach 1 P(Z) =", ket_qua, "\n")
## Ket qua cach 1 P(Z) = 0.8413447

Cách 2: Một dòng

ket_qua_cach_2 <- pnorm(175, 170, 5)
cat("Ket qua cach 2 P(Z) =", ket_qua_cach_2, "\n")
## Ket qua cach 2 P(Z) = 0.8413447

Câu 2

Sử dụng bộ dữ liệu hoa Iris trong R để:
• Xây dựng mô hình hồi quy logistic phân loại hoa dựa vào tất cả các biến.
• Sử dụng kiểm định Hosmer-Lemeshow để đánh giá mức độ phù hợp của mô hình.

1. Lý thuyết mô hình hồi quy Logistic

a. Khái niệm

Hồi quy Logistic là một thuật toán thống kê được sử dụng để dự đoán xác suất của một biến mục tiêu rời rạc (thường là nhị phân 0 hoặc 1, Đúng hoặc Sai).

b. Hàm Sigmoid (hàm logistic)

Trong hồi quy tuyến tính, kết quả đầu ra có thể là bất kỳ giá trị nào từ \(-\infty\) đến \(+\infty\). Tuy nhiên, trong phân loại, chúng ta cần một giá trị xác suất nằm trong khoảng \([0, 1]\). Để làm được điều này, hồi quy Logistic sử dụng hàm Sigmoid:
\[f(z) = \frac{1}{1 + e^{-z}}\] Trong đó, \(z\) là phương trình đường thẳng (tương tự hồi quy tuyến tính):
\[z = \beta_0 + \beta_1x_1 + \beta_2x_2 + ... + \beta_nx_n\]

c. Cơ chế hoạt động

• Mô hình tính toán giá trị \(z\) dựa trên các biến đầu vào (\(x_1, x_2, x_3\) tương ứng với Petal.Length, Petal.Width, Sepal.Length).
• Giá trị \(z\) được đưa qua hàm Sigmoid để chuyển thành xác suất \(P\).
• Ngưỡng quyết định (Decision Boundary): Thông thường, nếu \(P \geq 0.5\), mô hình sẽ phân loại vào nhóm 1 (ví dụ: Versicolor), và nếu \(P < 0.5\) sẽ thuộc nhóm 0 (ví dụ: Setosa).

2. Lý thuyết về đánh giá mô hình

Để biết mô hình hoạt động tốt đến đâu, chúng ta sử dụng hai công cụ chính

Công cụ 1: Ma trận nhầm lẫn (Confusion Matrix)

                | Dự đoán: Lớp 0 | Dự đoán: Lớp 1
------------------------------------------------
Thực tế: Lớp 0 |    Đúng (TN)     | Sai (FP)
------------------------------------------------
Thực tế: Lớp 1 |    Sai (FN)      | Đúng (TP)

• TP (True Positive): Thực tế là lớp 1, dự đoán đúng là lớp 1.
• TN (True Negative): Thực tế là lớp 0, dự đoán đúng là lớp 0.
• FP (False Positive): Thực tế là lớp 0, nhưng dự đoán sai là lớp 1.
• FN (False Negative): Thực tế là lớp 1, nhưng dự đoán sai là lớp 0.

Công cụ 2: Độ chính xác (Accuracy)

Là tỉ lệ giữa số lượng điểm dữ liệu được dự đoán đúng trên tổng số điểm dữ liệu:
\[\text{Accuracy} = \frac{TP + TN}{TP + TN + FP + FN}\]

3. Code R

a. Xây dựng mô hình

data_iris <- iris # Gán dataset vào biến mới

library(nnet)

# Xây dựng mô hình cho cả 3 loài cùng lúc
model_multi <- multinom(Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, 
                        data = iris)
## # weights:  18 (10 variable)
## initial  value 164.791843 
## iter  10 value 16.177348
## iter  20 value 7.111438
## iter  30 value 6.182999
## iter  40 value 5.984028
## iter  50 value 5.961278
## iter  60 value 5.954900
## iter  70 value 5.951851
## iter  80 value 5.950343
## iter  90 value 5.949904
## iter 100 value 5.949867
## final  value 5.949867 
## stopped after 100 iterations
pred_prob <- predict(model_multi, data_iris, type = "probs")
pred_class <- predict(model_multi, data_iris)


cat("--- Ket qua nhan dien (6 dong dau) ---\n")
## --- Ket qua nhan dien (6 dong dau) ---
print(head(pred_class))
## [1] setosa setosa setosa setosa setosa setosa
## Levels: setosa versicolor virginica
cat("\n--- Xac suat tuong ung ---\n")
## 
## --- Xac suat tuong ung ---
print(head(pred_prob))
##      setosa   versicolor    virginica
## 1 1.0000000 1.526406e-09 2.716417e-36
## 2 0.9999996 3.536476e-07 2.883729e-32
## 3 1.0000000 4.443506e-08 6.103424e-34
## 4 0.9999968 3.163905e-06 7.117010e-31
## 5 1.0000000 1.102983e-09 1.289946e-36
## 6 1.0000000 3.521573e-10 1.344907e-35

b. Sử dụng kiểm định Hosmer-Lemeshow

(Vì tôi dùng multinorm nên đếch dùng được hoslem.test (đề như dái) nên câu này chịu chết. Ae dùng glm tính thuần chay từng cặp loài hoa thôi)