You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中手动设定逻辑回归的系数与截距并输出摘要

在R语言中手动设定逻辑回归的截距与系数并输出模型摘要

问题场景

工作中需要手动指定逻辑回归模型的截距和系数(不需要模型自动拟合优化),之前在线性回归里用offset的方法可行:

price ~ offset(c1*memory) + offset(c2*screen_size) + rep(c0, length(memory)) - 1

但把这套方法搬到逻辑回归里时遇到问题:

  • 原常规逻辑回归代码:
## 常规逻辑回归
my_logit <- glm(Insolvency ~ profits + assets, data = my_data, family="binomial")
summary(my_logit)
  • 尝试用offset的代码:
## 尝试用offset固定系数
my_logit <- glm(Insolvency ~ offset(c1*profits) + offset(c2*assets), data = my_data, family="binomial")
summary(my_logit)

结果要么加rep(c0, length(Insolvency))-1时模型直接运行失败,要么只用offset时,summary()只输出截距的估计值,完全没法手动指定截距和系数,也得不到包含手动参数的有效摘要。

样本数据

以下是用于测试的样本数据:

my_data <- data.frame(
  Insolvency = c(0,0,0,0,0,0,0,1),
  Lprofits = c(-23.43471027, -23.39077178, -23.1376606, -22.95771212,
               -22.88628836, -22.69567881, -22.29604723, -22.07703701),
  Lassets = c(25.68146508, 25.7462893, 22.72271675, 24.3626251,
              24.39917186, 26.66993697, 21.91259524, 23.80678002)
)

解决方案

这里提供两种可行的实现方式,根据你的需求选择:

方式一:替换现有模型的系数(生成带手动参数的完整摘要)

先拟合一个常规逻辑回归模型获取结构,再手动替换系数并更新模型的拟合结果,这样summary()就能显示你设定的参数:

# 1. 定义手动设定的参数值
c0 <- 2.0    # 截距
c1 <- -0.15  # Lprofits的系数
c2 <- 0.08   # Lassets的系数

# 2. 拟合一个基础逻辑回归模型(用于获取模型结构)
my_logit <- glm(Insolvency ~ Lprofits + Lassets, data = my_data, family = "binomial")

# 3. 替换为手动设定的系数
my_logit$coefficients <- c(`(Intercept)` = c0, Lprofits = c1, Lassets = c2)

# 4. 更新模型的拟合相关结果
my_logit$linear.predictors <- predict(my_logit, type = "link")
my_logit$fitted.values <- predict(my_logit, type = "response")
my_logit$residuals <- my_data$Insolvency - my_logit$fitted.values

# 5. 查看模型摘要
summary(my_logit)

# 手动标注参数说明
cat("\n注:以上模型的截距与系数为手动指定,非模型拟合优化结果\n")

注意:摘要中的标准误、z值、p值等统计量是原拟合模型的结果,并非针对手动参数的统计量,需要手动标注说明。

方式二:用offset固定全部线性预测项(无待估计参数)

如果你希望模型完全没有需要拟合的参数,可以把手动计算的完整线性预测项作为offset传入,同时去掉截距项:

# 1. 定义手动参数
c0 <- 2.0    # 截距
c1 <- -0.15  # Lprofits的系数
c2 <- 0.08   # Lassets的系数

# 2. 计算手动设定的线性预测值
my_data$manual_eta <- c0 + c1*my_data$Lprofits + c2*my_data$Lassets

# 3. 拟合无待估计参数的模型
my_logit_offset <- glm(Insolvency ~ offset(manual_eta) - 1, data = my_data, family = "binomial")

# 4. 查看模型信息
summary(my_logit_offset)

# 手动输出设定的参数
cat("\n手动设定的逻辑回归参数:\n")
cat(paste0("截距: ", c0, "\n"))
cat(paste0("Lprofits系数: ", c1, "\n"))
cat(paste0("Lassets系数: ", c2, "\n"))

这种方法的summary()会显示没有系数估计(因为没有待优化的参数),需要手动补充输出你设定的参数值。

为什么之前的方法失败

  • 加入rep(c0, length(Insolvency))-1会失败:rep(c0, ...)是常数项,-1是去掉截距的语法,但offset是固定项,无法和常数项这样结合,导致模型公式语法错误。
  • 只用offset时summary()只输出截距:此时模型默认保留截距作为待估计参数,其他项被offset固定,所以只会拟合截距,而非使用你手动设定的值。

内容的提问来源于stack exchange,提问作者StMatthias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 06:54:53