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

将嵌套Logit预测结果转成长格式并编写通用处理函数

通用函数make_plotdata实现方案

直接上可用的函数代码,基于tidyverse工具链实现,适配任意行数的newdata和任意数量的响应类别:

make_plotdata <- function(prob_matrix, se_matrix, newdata) {
  # 检查tidyverse是否安装
  if (!requireNamespace("tidyverse", quietly = TRUE)) {
    stop("请先安装tidyverse包:install.packages('tidyverse')")
  }
  
  # 处理预测概率矩阵:转长格式+标记行号
  prob_long <- prob_matrix %>%
    as.data.frame() %>%
    mutate(row_id = row_number()) %>%
    pivot_longer(-row_id, names_to = "response_category", values_to = "pred_prob")
  
  # 处理标准误矩阵:同概率矩阵的格式转换逻辑
  se_long <- se_matrix %>%
    as.data.frame() %>%
    mutate(row_id = row_number()) %>%
    pivot_longer(-row_id, names_to = "response_category", values_to = "pred_se")
  
  # 合并概率与标准误数据(按行号+响应类别匹配)
  prob_se_combined <- inner_join(prob_long, se_long, by = c("row_id", "response_category"))
  
  # 复制newdata的每一行,次数等于响应类别数量
  newdata_replicated <- newdata %>%
    mutate(row_id = row_number()) %>%
    slice(rep(row_number(), each = ncol(prob_matrix)))
  
  # 最终合并所有数据,清理临时行号
  plot_data <- inner_join(newdata_replicated, prob_se_combined, by = "row_id") %>%
    select(-row_id)
  
  return(plot_data)
}

函数逻辑说明

  1. 格式转换:把宽格式的概率/标准误矩阵转成长格式,用row_id标记每个原始观测的位置,确保每个响应类别的数据能对应到正确的newdata行
  2. 数据复制:将newdata的每一行重复响应类别数次,保证每个观测的所有响应类别都能关联到原始协变量
  3. 最终合并:把协变量、预测概率、标准误整合到同一个长格式数据框里,直接满足ggplot等绘图工具的输入要求

示例用法

# 模拟测试数据
set.seed(123)
# 3个观测,4个响应类别的概率矩阵
pred_prob <- matrix(runif(12), nrow = 3, dimnames = list(NULL, c("A", "B", "C", "D")))
# 对应标准误矩阵
pred_se <- matrix(runif(12, 0.01, 0.1), nrow = 3, dimnames = list(NULL, c("A", "B", "C", "D")))
# 协变量数据框
new_data <- data.frame(x = c(1, 2, 3), group = factor(c("low", "medium", "high")))

# 生成绘图数据
plotdata <- make_plotdata(pred_prob, pred_se, new_data)

# 查看结果
head(plotdata)

运行后得到的plotdata就是长格式,直接可以用来画误差棒图、分组折线图等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 04:28:21