欢迎光临
我们一直在努力

变量选择AIC、BIC

变量选择,AIC、BIC

# =========================================================
# 1. 构造最开始的十维多元回归模拟数据
# =========================================================

set.seed(123)

# 样本量
n <- 200

# 自变量个数
p <- 10

# 生成 n × p 的自变量矩阵
X_raw <- matrix(rnorm(n * p, mean = 0, sd = 1), nrow = n, ncol = p)

# 给自变量命名
colnames(X_raw) <- paste0(\”X\”, 1:p)

# 真实截距
beta0_true <- 5

# 真实回归系数
# 其中 X4 和 X7 的真实系数为 0,表示它们实际上是无效变量
beta_true <- c(
2.0, # X1
1.5, # X2
3.0, # X3
0.0, # X4
1.2, # X5
2.0, # X6
0.0, # X7
0.8, # X8
1.5, # X9
1.0 # X10
)

# 随机误差项
epsilon <- rnorm(n, mean = 0, sd = 1)

# 因变量 Y
Y <- beta0_true + X_raw %*% beta_true + epsilon
Y <- as.vector(Y)

cat(\”\\n========== 真实模型信息 ==========\\n\”)
cat(\”真实截距 beta0 =\”, beta0_true, \”\\n\”)
cat(\”真实有效变量:X1, X2, X3, X5, X6, X8, X9, X10\\n\”)
cat(\”真实无效变量:X4, X7\\n\\n\”)

# =========================================================
# 2. 手动 OLS 拟合函数
# =========================================================
# 对任意变量集合 selected_vars 拟合线性回归模型
# 并计算 SSE、R2、调整后 R2、AIC、BIC
#
# AIC = n * log(SSE / n) + 2k
# BIC = n * log(SSE / n) + k * log(n)
#
# 其中:
# n 为样本量
# SSE 为残差平方和
# k 为参数个数,包括截距项
# =========================================================

manual_ols_by_vars <- function(X_raw, Y, selected_vars) {

X_raw <- as.matrix(X_raw)
Y <- matrix(Y, ncol = 1)

n <- length(Y)

# 如果没有选择任何变量,则只拟合截距模型
if (length(selected_vars) == 0) {

X_design <- matrix(1, nrow = n, ncol = 1)
colnames(X_design) <- \”Intercept\”

} else {

X_selected <- X_raw[, selected_vars, drop = FALSE]
X_design <- cbind(1, X_selected)
colnames(X_design) <- c(\”Intercept\”, selected_vars)
}

# 参数个数,包括截距项
k <- ncol(X_design)

# OLS估计 beta_hat = (X\’X)^(-1)X\’Y
beta_hat <- solve(t(X_design

赞(0)
未经允许不得转载:171主机测评 » 变量选择AIC、BIC
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址