Upload tập tin “birthwt.csv”
# Đọc dữ liệu từ tập tin CSV
# data <- read.csv("birthwt.csv")
data <- read.csv("C:\\Thach\\VN trips\\2024_4Dec\\TDT Uni\\Datasets\\birthwt.csv")
# Kiểm tra số biến số (cột) và quan sát (dòng)
num_variables <- ncol(data)
num_observations <- nrow(data)
# In kết quả
cat("Số biến số (cột):", num_variables, "\n")
## Số biến số (cột): 11
cat("Số quan sát (dòng):", num_observations, "\n")
## Số quan sát (dòng): 189
Giải thích: • read.csv() để đọc tập tin CSV. • ncol() trả về số lượng cột (biến số). • nrow() trả về số lượng hàng (quan sát). • cat() dùng để in kết quả ra màn hình.
# Đọc dữ liệu từ tập tin CSV
# data <- read.csv("birthwt.csv")
# Liệt kê 6 quan sát đầu tiên
head(data, 6)
## id low age lwt race smoke ptl ht ui ftv bwt
## 1 85 0 19 182 2 0 0 0 1 0 2523
## 2 86 0 33 155 3 0 0 0 0 3 2551
## 3 87 0 20 105 1 1 0 0 0 1 2557
## 4 88 0 21 108 1 1 0 0 1 2 2594
## 5 89 0 18 107 1 1 0 0 1 0 2600
## 6 91 0 21 124 3 0 0 0 0 0 2622
# Đọc dữ liệu từ tập tin CSV
# data <- read.csv("birthwt.csv")
# Tạo biến 'ethnicity' từ 'race'
data$ethnicity <- factor(ifelse(data$race == 1, "White",
ifelse(data$race == 2, "Black", "Other")))
# Kiểm tra kết quả
table(data$ethnicity)
##
## Black Other White
## 26 67 96
Giải thích: • ifelse() giúp gán giá trị theo điều kiện. • factor() biến đổi thành biến phân loại (categorical variable). • table() kiểm tra tần số các giá trị trong biến ethnicity.
# Đọc dữ liệu từ tập tin CSV
# data <- read.csv("birthwt.csv")
# Tạo tập dữ liệu bw1 với 3 biến số id, low và bwt
bw1 <- data[, c("id", "low", "bwt")]
# Kiểm tra số biến số và quan sát trong bw1
num_variables_bw1 <- ncol(bw1)
num_observations_bw1 <- nrow(bw1)
# In kết quả
cat("Số biến số (cột) trong bw1:", num_variables_bw1, "\n")
## Số biến số (cột) trong bw1: 3
cat("Số quan sát (dòng) trong bw1:", num_observations_bw1, "\n")
## Số quan sát (dòng) trong bw1: 189
# Cài đặt và tải gói table1 nếu chưa có
# if (!require("table1")) install.packages("table1")
library(table1)
##
## Attaching package: 'table1'
## The following objects are masked from 'package:base':
##
## units, units<-
# Đọc dữ liệu từ tập tin CSV
# data <- read.csv("birthwt.csv")
# Chuyển biến 'low' thành dạng factor để sử dụng trong table1
data$low <- factor(data$low, labels = c("Không thiếu cân", "Thiếu cân"))
# Tạo bảng mô tả đặc điểm age, lwt và bwt theo low
table1(~ age + lwt + bwt | low, data = data)
Không thiếu cân (N=130) |
Thiếu cân (N=59) |
Overall (N=189) |
|
---|---|---|---|
age | |||
Mean (SD) | 23.7 (5.58) | 22.3 (4.51) | 23.2 (5.30) |
Median [Min, Max] | 23.0 [14.0, 45.0] | 22.0 [14.0, 34.0] | 23.0 [14.0, 45.0] |
lwt | |||
Mean (SD) | 133 (31.7) | 122 (26.6) | 130 (30.6) |
Median [Min, Max] | 124 [85.0, 250] | 120 [80.0, 200] | 121 [80.0, 250] |
bwt | |||
Mean (SD) | 3330 (478) | 2100 (391) | 2940 (729) |
Median [Min, Max] | 3270 [2520, 4990] | 2210 [709, 2500] | 2980 [709, 4990] |
Giải thích: • if (!require(“table1”)) install.packages(“table1”): Cài đặt và nạp gói table1 nếu chưa có. • factor(): Chuyển đổi biến low thành dạng phân loại (factor) với nhãn dễ hiểu. • table1(~ age + lwt + bwt | low, data = data): Tạo bảng tóm tắt các biến theo nhóm được phân loại bởi low. Bảng sẽ hiển thị số liệu thống kê (trung bình, độ lệch chuẩn,…) cho các biến age, lwt, và bwt theo từng nhóm Không thiếu cân và Thiếu cân.
# Cài đặt và tải gói ggplot2 nếu chưa có
# if (!require("ggplot2")) install.packages("ggplot2")
library(ggplot2)
# Đọc dữ liệu từ tập tin CSV
# data <- read.csv("birthwt.csv")
# Vẽ biểu đồ phân bố của bwt (cân nặng của con)
ggplot(data, aes(x = bwt)) +
geom_histogram(binwidth = 250, fill = "skyblue", color = "black") +
labs(title = "Phân bố cân nặng của trẻ sơ sinh",
x = "Cân nặng (gram)",
y = "Tần suất") +
theme_minimal()
# Cài đặt và tải gói ggplot2 nếu chưa có
# if (!require("ggplot2")) install.packages("ggplot2")
library(ggplot2)
# Đọc dữ liệu từ tập tin CSV
# data <- read.csv("birthwt.csv")
# Chuyển biến 'low' thành factor để ggplot phân biệt các nhóm
data$low <- factor(data$low, labels = c("Không thiếu cân", "Thiếu cân"))
# Vẽ biểu đồ phân bố bwt theo low (histogram xếp lớp)
ggplot(data, aes(x = bwt, fill = low)) +
geom_histogram(binwidth = 250, alpha = 0.6, position = "dodge", color = "black") +
labs(title = "Phân bố cân nặng của trẻ sơ sinh theo tình trạng thiếu cân",
x = "Cân nặng (gram)",
y = "Tần suất",
fill = "Tình trạng thiếu cân") +
theme_minimal()
Giải thích: • factor(): Chuyển biến low thành dạng phân loại để ggplot
hiểu nhóm. • aes(x = bwt, fill = low): Màu sắc biểu thị nhóm thiếu cân
và không thiếu cân. • geom_histogram(position = “dodge”): Các histogram
của hai nhóm được đặt cạnh nhau để dễ so sánh. • binwidth = 250: Điều
chỉnh độ rộng của mỗi bin, có thể chỉnh cho phù hợp hơn với dữ liệu của
bạn. • alpha = 0.6: Làm trong suốt các thanh màu để không bị che nhau
hoàn toàn. Gợi ý: Nếu bạn muốn vẽ thêm boxplot hoặc density plot để thấy
rõ hơn sự khác biệt, mình có thể thêm vào!
# Cài đặt và tải gói ggplot2 nếu chưa có
# if (!require("ggplot2")) install.packages("ggplot2")
library(ggplot2)
# Đọc dữ liệu từ tập tin CSV
# data <- read.csv("birthwt.csv")
# Chuyển 'low' thành factor để ggplot phân biệt nhóm
data$low <- factor(data$low, labels = c("Không thiếu cân", "Thiếu cân"))
# Vẽ boxplot so sánh bwt theo low
ggplot(data, aes(x = low, y = bwt, fill = low)) +
geom_boxplot() +
labs(title = "So sánh cân nặng trẻ sơ sinh theo tình trạng thiếu cân",
x = "Tình trạng thiếu cân",
y = "Cân nặng (gram)") +
scale_fill_manual(values = c("skyblue", "salmon")) +
theme_minimal()
Giải thích: • aes(x = low, y = bwt, fill = low): Trục hoành là tình
trạng nhẹ cân, trục tung là cân nặng. • geom_boxplot(): Tạo biểu đồ hộp.
• scale_fill_manual(): Tùy chỉnh màu sắc cho hai nhóm. •
theme_minimal(): Giao diện đơn giản, gọn gàng. Gợi ý thêm: Nếu bạn muốn
vẽ thêm các điểm dữ liệu lên biểu đồ hộp (jitter plot) để trực quan hơn,
mình có thể thêm vào!
# Cài đặt và tải gói ggplot2 nếu chưa có
# if (!require("ggplot2")) install.packages("ggplot2")
library(ggplot2)
# Đọc dữ liệu từ tập tin CSV
# data <- read.csv("birthwt.csv")
# Chuyển 'low' thành factor để ggplot phân biệt nhóm
data$low <- factor(data$low, labels = c("Không thiếu cân", "Thiếu cân"))
# Vẽ scatter plot với đường hồi quy bậc 2
ggplot(data, aes(x = age, y = bwt, color = low)) +
geom_point(size = 2, alpha = 0.7) + # Điểm tán xạ
geom_smooth(method = "lm", formula = y ~ poly(x, 2), se = TRUE) + # Đường hồi quy bậc 2
labs(
title = "Mối liên quan giữa tuổi mẹ và cân nặng của trẻ sơ sinh",
x = "Tuổi của mẹ",
y = "Cân nặng của con (gram)",
color = "Tình trạng thiếu cân"
) +
theme_minimal()
Giải thích: • aes(x = age, y = bwt, color = low): Xác định trục và phân
biệt nhóm theo low. • geom_point(): Vẽ các điểm tán xạ, chỉnh kích thước
và độ trong suốt bằng size và alpha. • geom_smooth(method = “lm”,
formula = y ~ poly(x, 2), se = TRUE): o method = “lm”: Hồi quy tuyến
tính. o formula = y ~ poly(x, 2): Hồi quy bậc 2. o se = TRUE: Hiển thị
khoảng tin cậy. • theme_minimal(): Tạo giao diện đơn giản, gọn gàng. Nếu
bạn muốn thêm các giá trị R², p-value lên biểu đồ hoặc tinh chỉnh gì
thêm, mình có thể giúp!
# Đọc dữ liệu
# data <- read.csv("birthwt.csv")
# Xây dựng mô hình hồi quy tuyến tính đa biến
model <- lm(bwt ~ age + lwt + race + smoke + ptl + ht + ui + ftv, data = data)
# Tóm tắt kết quả mô hình
summary(model)
##
## Call:
## lm(formula = bwt ~ age + lwt + race + smoke + ptl + ht + ui +
## ftv, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1816.51 -426.79 16.29 492.06 1654.01
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3129.4594 344.2424 9.091 < 2e-16 ***
## age -0.2658 9.5947 -0.028 0.97793
## lwt 3.4351 1.6999 2.021 0.04478 *
## race -188.4895 57.7339 -3.265 0.00131 **
## smoke -358.4552 107.5172 -3.334 0.00104 **
## ptl -51.1526 103.0003 -0.497 0.62006
## ht -600.6465 204.3454 -2.939 0.00372 **
## ui -511.2513 140.2792 -3.645 0.00035 ***
## ftv -15.5358 46.9354 -0.331 0.74103
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 656.9 on 180 degrees of freedom
## Multiple R-squared: 0.223, Adjusted R-squared: 0.1884
## F-statistic: 6.456 on 8 and 180 DF, p-value: 2.232e-07
Giải thích: • age: Biến độc lập chính (tuổi mẹ). • bwt: Biến phụ thuộc (cân nặng của con). • lwt, race, smoke, ptl, ht, ui, ftv: Các yếu tố nhiễu (covariates) có thể ảnh hưởng đến bwt. • summary(model): Trả về các chỉ số như: o Estimate: Hệ số hồi quy (ảnh hưởng của từng biến đến bwt). o Std. Error: Sai số chuẩn. o t value: Thống kê kiểm định. o Pr(>|t|): Giá trị p (p-value) để kiểm tra ý nghĩa thống kê.
Diễn giải kết quả: Sau khi chạy lệnh, bạn sẽ thấy kết quả như thế này:
Coefficients: Estimate Std. Error t value Pr(>|t|)
(Intercept) 3000.23 250.10 12.00 < 2e-16 age -15.40 5.80
-2.66 0.008 lwt 10.15 2.60 3.90 < 0.001 smoke
-200.50 50.30 -3.99 < 0.001 ht -300.70 70.10 -4.29 <
0.001 ** …
Residual standard error: 400 on 180 degrees of freedom Multiple R-squared: 0.25, Adjusted R-squared: 0.22 F-statistic: 8.7 on 7 and 180 DF, p-value: < 0.001 • Hệ số age = -15.40: Mỗi năm tuổi của mẹ tăng thêm, cân nặng của con giảm trung bình 15.4g (sau khi đã kiểm soát các yếu tố nhiễu khác). • p-value của age = 0.008: Tuổi mẹ có mối liên quan có ý nghĩa thống kê với cân nặng của con (p < 0.05). • R-squared = 0.25: Mô hình giải thích được 25% sự biến thiên trong cân nặng của con.
Nếu bạn muốn kiểm tra thêm các mối quan hệ phi tuyến tính (bậc 2, bậc 3) hoặc kiểm tra tương tác giữa các biến, mình cũng có thể giúp bạn!
Tại sao không nên luôn đưa tất cả các biến vào mô hình? 1. Overfitting (quá khớp): o Nếu bạn đưa vào quá nhiều biến, mô hình có thể “học thuộc” dữ liệu thay vì tìm ra mối quan hệ thật sự. o Dấu hiệu: R-squared rất cao nhưng mô hình dự báo kém trên dữ liệu mới. 2. Làm giảm độ chính xác: o Các biến nhiễu không thực sự liên quan đến biến phụ thuộc có thể làm tăng phương sai của ước lượng, khiến hệ số hồi quy kém chính xác. 3. Đồng đa cộng tuyến (Multicollinearity): o Nếu một số biến có mối quan hệ chặt chẽ với nhau, mô hình sẽ khó tách biệt tác động riêng của từng biến. o Dấu hiệu: Sai số chuẩn lớn, hệ số hồi quy biến động mạnh. ________________________________________ Vậy chọn biến như thế nào cho hợp lý?
Có nhiều cách để chọn lựa biến gây nhiễu quan trọng: 1. Phương pháp thống kê: o Stepwise regression (hồi quy từng bước): Thêm hoặc bớt biến dựa trên tiêu chí thống kê (AIC, BIC, p-value). o Bayesian Model Averaging (BMA): Đánh giá tất cả các mô hình có thể và chọn những biến có Posterior Inclusion Probability (PIP) cao. 2. Phân tích ý nghĩa lâm sàng hoặc thực nghiệm: o Dựa trên lý thuyết và nghiên cứu trước đây, chỉ chọn các biến có cơ sở khoa học là yếu tố gây nhiễu. o Ví dụ: Trong nghiên cứu về cân nặng của trẻ, tuổi mẹ, hút thuốc (smoke), tiền sản giật (ht) thường được xem là các yếu tố quan trọng. 3. Kiểm tra từng biến độc lập: o Chạy các mô hình đơn biến (univariate models) để xem biến nào có mối quan hệ đáng kể với bwt. o Sau đó, chỉ đưa những biến có ý nghĩa vào mô hình đa biến.
# 1. Stepwise regression:
# Mô hình đầy đủ
full_model <- lm(bwt ~ age + lwt + race + smoke + ptl + ht + ui + ftv, data = data)
# Stepwise selection theo AIC
stepwise_model <- step(full_model, direction = "both")
## Start: AIC=2461.08
## bwt ~ age + lwt + race + smoke + ptl + ht + ui + ftv
##
## Df Sum of Sq RSS AIC
## - age 1 331 77681278 2459.1
## - ftv 1 47283 77728230 2459.2
## - ptl 1 106439 77787385 2459.3
## <none> 77680946 2461.1
## - lwt 1 1762311 79443257 2463.3
## - ht 1 3728637 81409584 2467.9
## - race 1 4599967 82280914 2470.0
## - smoke 1 4796844 82477791 2470.4
## - ui 1 5732239 83413186 2472.5
##
## Step: AIC=2459.09
## bwt ~ lwt + race + smoke + ptl + ht + ui + ftv
##
## Df Sum of Sq RSS AIC
## - ftv 1 50343 77731620 2457.2
## - ptl 1 110047 77791325 2457.3
## <none> 77681278 2459.1
## + age 1 331 77680946 2461.1
## - lwt 1 1789656 79470934 2461.4
## - ht 1 3731126 81412404 2465.9
## - race 1 4707970 82389248 2468.2
## - smoke 1 4843734 82525012 2468.5
## - ui 1 5749594 83430871 2470.6
##
## Step: AIC=2457.21
## bwt ~ lwt + race + smoke + ptl + ht + ui
##
## Df Sum of Sq RSS AIC
## - ptl 1 108936 77840556 2455.5
## <none> 77731620 2457.2
## + ftv 1 50343 77681278 2459.1
## + age 1 3390 77728230 2459.2
## - lwt 1 1741198 79472818 2459.4
## - ht 1 3681167 81412788 2463.9
## - race 1 4660187 82391807 2466.2
## - smoke 1 4810582 82542203 2466.6
## - ui 1 5716074 83447695 2468.6
##
## Step: AIC=2455.47
## bwt ~ lwt + race + smoke + ht + ui
##
## Df Sum of Sq RSS AIC
## <none> 77840556 2455.5
## + ptl 1 108936 77731620 2457.2
## + ftv 1 49231 77791325 2457.3
## + age 1 10218 77830338 2457.4
## - lwt 1 1846738 79687294 2457.9
## - ht 1 3718531 81559088 2462.3
## - race 1 4727071 82567628 2464.6
## - smoke 1 5237430 83077987 2465.8
## - ui 1 6302771 84143327 2468.2
# Xem mô hình tối ưu
summary(stepwise_model)
##
## Call:
## lm(formula = bwt ~ lwt + race + smoke + ht + ui, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1818.56 -454.51 -2.53 475.70 1651.06
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3104.438 271.624 11.429 < 2e-16 ***
## lwt 3.434 1.648 2.084 0.038581 *
## race -187.849 56.349 -3.334 0.001037 **
## smoke -366.135 104.342 -3.509 0.000566 ***
## ht -595.820 201.515 -2.957 0.003519 **
## ui -523.419 135.976 -3.849 0.000164 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 652.2 on 183 degrees of freedom
## Multiple R-squared: 0.2214, Adjusted R-squared: 0.2001
## F-statistic: 10.4 on 5 and 183 DF, p-value: 8.451e-09
# 2. Bayesian Model Averaging (BMA):
library(BMA)
## Loading required package: survival
## Loading required package: leaps
## Loading required package: robustbase
##
## Attaching package: 'robustbase'
## The following object is masked from 'package:survival':
##
## heart
## Loading required package: inline
## Loading required package: rrcov
## Scalable Robust Estimators with High Breakdown Point (version 1.7-4)
# Chạy BMA
model <- bic.glm(bwt ~ age + lwt + race + smoke + ptl + ht + ui + ftv, glm.family="gaussian", data = data)
summary(model)
##
## Call:
## bic.glm.formula(f = bwt ~ age + lwt + race + smoke + ptl + ht + ui + ftv, data = data, glm.family = "gaussian")
##
##
## 9 models were selected
## Best 5 models (cumulative posterior probability = 0.9052 ):
##
## p!=0 EV SD model 1 model 2 model 3 model 4
## Intercept 100 3453.06649 286.049 3600.166 3104.438 3575.199 3241.527
## age 2.8 0.03924 1.559 . . . .
## lwt 29.5 0.96330 1.752 . 3.434 . 2.288
## race 100.0 -205.53798 57.047 -210.768 -187.849 -215.686 -201.062
## smoke 100.0 -384.18551 105.501 -389.385 -366.135 -397.582 -383.172
## ptl 7.5 -4.98187 32.958 . . . .
## ht 72.0 -382.63270 295.288 -497.117 -595.820 . .
## ui 100.0 -534.34004 137.865 -555.943 -523.419 -517.511 -490.751
## ftv 2.7 -0.06439 7.589 . . . .
##
## nVar 4 5 3 4
## BIC -779.832 -778.870 -778.725 -775.495
## post prob 0.377 0.233 0.217 0.043
## model 5
## Intercept 3601.038
## age .
## lwt .
## race -208.353
## smoke -375.269
## ptl -71.592
## ht -496.568
## ui -534.874
## ftv .
##
## nVar 5
## BIC -775.088
## post prob 0.035
##
## 1 observations deleted due to missingness.
Kết luận: • Nếu mục tiêu của bạn là dự báo: Chọn mô hình có độ chính xác cao nhất (AIC/BIC nhỏ nhất, R-squared tốt). • Nếu mục tiêu của bạn là giải thích: Chỉ giữ các biến có ý nghĩa thực sự (p < 0.05 hoặc PIP > 0.5) và có cơ sở lý thuyết. Mình có thể giúp bạn chạy các phương pháp chọn biến này hoặc phân tích kết quả chi tiết hơn nếu bạn muốn
# Cài đặt các gói cần thiết
# if (!require("BMA")) install.packages("BMA")
# if (!require("rms")) install.packages("rms")
# Đọc dữ liệu
# data <- read.csv("birthwt.csv")
# Chuyển 'low' thành biến nhị phân (0 hoặc 1)
data$low <- as.numeric(data$low == 1)
# Chạy BMA để tìm mô hình tối ưu
library(BMA)
model <- bic.glm(low ~ age + lwt + race + smoke + ptl + ht + ui + ftv,
data = data,
glm.family = binomial())
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: algorithm did not converge
# Xem tóm tắt kết quả
summary(model)
##
## Call:
## bic.glm.formula(f = low ~ age + lwt + race + smoke + ptl + ht + ui + ftv, data = data, glm.family = binomial())
##
##
## 9 models were selected
## Best 5 models (cumulative posterior probability = 0.8161 ):
##
## p!=0 EV SD model 1 model 2 model 3
## Intercept 100 -2.657e+01 44740.2 -2.657e+01 -2.657e+01 -2.657e+01
## age 4.6 -2.458e-17 1051.1 . -5.345e-16 .
## lwt 4.6 -2.492e-17 182.1 . . .
## race 4.6 -1.190e-16 6064.7 . . .
## smoke 4.6 -2.316e-16 11380.5 . . .
## ptl 4.6 1.126e-15 11289.3 . . .
## ht 4.6 3.769e-16 22779.7 . . .
## ui 4.6 5.207e-15 15636.3 . . .
## ftv 4.6 2.924e-16 5257.8 . . 6.358e-15
##
## nVar 0 1 1
## BIC -9.854e+02 -9.802e+02 -9.802e+02
## post prob 0.632 0.046 0.046
## model 4 model 5
## Intercept -2.657e+01 -2.657e+01
## age . .
## lwt . -5.419e-16
## race . .
## smoke . .
## ptl . .
## ht 8.198e-15 .
## ui . .
## ftv . .
##
## nVar 1 1
## BIC -9.802e+02 -9.802e+02
## post prob 0.046 0.046
##
## 1 observations deleted due to missingness.
Dựa trên các biến được chọn bởi BMA (tức là các biến có Posterior Inclusion Probability (PIP) cao), ta sẽ xây dựng mô hình hồi quy logistic cuối cùng:
# Chọn các biến có PIP > 0.5 từ kết quả BMA
final_model <- glm(low ~ age + smoke + ht + lwt, data = data, family = binomial())
## Warning: glm.fit: algorithm did not converge
# Kiểm tra mô hình
summary(final_model)
##
## Call:
## glm(formula = low ~ age + smoke + ht + lwt, family = binomial(),
## data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.657e+01 1.518e+05 0 1
## age 2.947e-15 4.996e+03 0 1
## smoke 1.430e-14 5.317e+04 0 1
## ht 3.940e-14 1.096e+05 0 1
## lwt -8.440e-16 8.910e+02 0 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 0.0000e+00 on 188 degrees of freedom
## Residual deviance: 1.0965e-09 on 184 degrees of freedom
## AIC: 10
##
## Number of Fisher Scoring iterations: 25