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

使用partykit包绘制ctree时出现invalid 'yscale' in viewport错误求助

解决partykit包ctree绘图时的"invalid 'yscale' in viewport"错误

问题根源

你遇到的错误和无终端节点问题,核心原因是na.action = na.pass的设置:

  • 该参数会保留所有含缺失值的观测,但ctree在构建分裂节点时,会自动排除含缺失值的样本进行显著性检验。
  • airquality数据集的Ozone等变量存在大量缺失值,导致有效样本量不足,模型无法找到符合显著性要求的分裂规则,最终生成的树只有一个根节点。而plot()函数无法处理这种仅含根节点的ctree结构,因此抛出invalid 'yscale' in viewport错误。

解决方案

方案1:合理处理缺失值(推荐)

删除或插补缺失值,让模型有足够的有效样本生成分裂节点:

方法A:删除含缺失值的观测

library(partykit)
data("airquality")

# 清理缺失值
clean_air <- na.omit(airquality)
# 重新构建模型
dumm_model <- ctree(Ozone ~ ., data = clean_air,
                   control = ctree_control(teststat = "quadratic", testtype = "Bonferroni"))
# 绘图
plot(dumm_model)

方法B:插补缺失值

如果不想删除数据,可对缺失值进行插补(以下为简单均值插补示例,实际可根据需求选择更专业的插补方法,如多重插补):

library(partykit)
data("airquality")

# 均值插补Ozone和Solar.R的缺失值
airquality$Ozone[is.na(airquality$Ozone)] <- mean(airquality$Ozone, na.rm = TRUE)
airquality$Solar.R[is.na(airquality$Solar.R)] <- mean(airquality$Solar.R, na.rm = TRUE)

# 构建模型并绘图
dumm_model <- ctree(Ozone ~ ., data = airquality,
                   control = ctree_control(teststat = "quadratic", testtype = "Bonferroni"))
plot(dumm_model)

方案2:调整模型控制参数(仅测试用)

若必须保留缺失值,可降低显著性检验的阈值,让模型更容易生成分裂节点,但此方法可能导致过拟合,仅用于测试:

library(partykit)
data("airquality")

dumm_model <- ctree(Ozone ~ ., data = airquality, na.action = na.pass,
                   control = ctree_control(teststat = "quadratic", testtype = "Bonferroni",
                                           mincriterion = 0.9)) # 默认mincriterion为0.95,降低阈值
plot(dumm_model)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 06:10:54