简介
对于连续因变量,通常使用线性回归。在R语言中,通常使用函数lm,计算回归估计参数。最小二乘法有解析解,因此也很容易手动写代码实现计算,如 β = ( X ⊤ X ) − 1 X ⊤ y \mathbf{\beta} = (\mathbf{X}^\top \mathbf{X})^{-1} \mathbf{X}^\top \mathbf{y} β=(X⊤X)−1X⊤y
而对于二元因变量,常常使用逻辑回归。然而逻辑回归不具有解析解,通常使用glm函数来估计,比如 glm(y ~ x1 + x2, data = data, family = binomial)
。
本文则介绍如何不使用glm,直接对logistics regression进行估计。
# 创建一个示例数据集
set.seed(123)
n <- 100 # 样本数量
x1 <- rnorm(n) # 特征1
x2 <- rnorm(n) # 特征2
y <- rbinom(n, size = 1, prob = 0.5) # 生成二元目标变量,这里假设概率为0.5
# 将数据放入数据框中
data <- data.frame(y = y, x1 = x1, x2 = x2)
# 定义逻辑回归的似然函数
log_likelihood <- function(theta, X, y) {
z <- as.numeric(X %*% theta)
log_likelihood <- sum(y * log(1 + exp(-z)) + (1 - y) * log(1 + exp(z)))
return(-log_likelihood)
}
# 使用optim函数来最小化负对数似然函数
initial_theta <- rep(0, ncol(data) - 1) # 初始化参数向量
result <- optim(par = initial_theta, fn = log_likelihood, X = as.matrix(data[, -1]), y = data$y)
# 输出估计出的参数
cat("估计的参数值:", result$par, "\n")
# 输出最优似然值
cat("最优似然值:", -result$value, "\n")