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

Visreg绘制GLM因子交互图报错:Error using packet 1 object 'ind' not found

解决visreg绘制双因子交互GLM图时的面板缺失与绘图错误问题

问题分析

你遇到的是visreg 2.7.0版本的绘图渲染bug:当对包含双因子交互项的GLM模型使用by参数分面绘图时,base绘图后端会出现第二个面板无法加载、且显示"Error using packet 1 object 'ind' not found"的情况,而控制台无报错。

解决方案

方案1:切换到ggplot2后端绘图

在visreg()中添加gg=TRUE参数,调用ggplot2引擎绘图,可直接规避该bug,生成符合预期的双面板图:

dummyData = data.frame(X = factor(c("x", "y", "z", "x", "y", "z", "x", "y", "z", 
  "x", "y", "z", "x", "y", "z", "x", "y", "z", "x", "y")), 
  Y = c(1683, 2207, 2889, 200, 994, 3960, 2441, 2661, 1262, 3758, 28, 319, 474,
    303, 687, 52, 267, 49, 531, 231),   
  Inter = factor(c("a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "b", "b",
    "b", "b", "b", "b", "b", "b", "b", "b"))) 

testmod <- glm(Y ~ X*Inter, data = dummyData)

# 使用ggplot2后端生成双面板图
visreg::visreg(testmod, "X", by = "Inter", scale = "response", gg=TRUE)

方案2:手动提取预测值绘图

若偏好base绘图风格,可手动生成预测数据后自定义绘图:

# 生成所有因子组合的预测数据集
newdata <- expand.grid(X = levels(dummyData$X), Inter = levels(dummyData$Inter))
newdata$predicted_Y <- predict(testmod, newdata = newdata, type = "response")

# 分面绘图
par(mfrow = c(1, 2), mar = c(4,4,2,1))
for (level in levels(dummyData$Inter)) {
  sub_data <- subset(newdata, Inter == level)
  plot(sub_data$X, sub_data$predicted_Y, 
       main = paste("Inter =", level),
       xlab = "X", ylab = "预测响应值",
       pch = 16, cex = 1.2, col = "darkblue")
  lines(sub_data$X, sub_data$predicted_Y, lwd = 2, col = "darkred")
}

方案3:更新visreg包

该bug在visreg 2.8.x及以上版本中已修复,可通过更新包解决:

install.packages("visreg")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 00:27:04