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
相关产品推荐
相关产品推荐

