使用R语言optim函数直接实现logistics regression(逻辑回归)的计算

简介

对于连续因变量,通常使用线性回归。在R语言中,通常使用函数lm,计算回归估计参数。最小二乘法有解析解,因此也很容易手动写代码实现计算,如 β = ( X ⊤ X ) − 1 X ⊤ y \mathbf{\beta} = (\mathbf{X}^\top \mathbf{X})^{-1} \mathbf{X}^\top \mathbf{y} β=(XX)1Xy

而对于二元因变量,常常使用逻辑回归。然而逻辑回归不具有解析解,通常使用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")

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值