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

R语言运行Box-Cox变换处理回归响应变量时报错求助

问题原因

你的报错核心是公式中的log(mpg)无法在你指定的auto.tf.bc数据集里找到对应列,R会自动向上层级搜索变量,刚好命中了R内置的mpg数据框(ggplot2包自带),你对数据框整体执行log()数学运算,就触发了非数值列的报错。
从你输出的str(auto.tf.bc)结果可以看到,你已经把对数转换后的mpg作为第一列存入数据集,自动生成的列名为log.mpg.,不存在原始的mpg列,所以公式里写log(mpg)是完全错误的。

解决步骤

  1. 创建数据集时手动指定列名(可选但推荐)
    避免R自动生成的杂乱列名导致后续调用出错,你可以修改创建auto.tf.bc的代码:
auto.tf.bc <- with(auto_mpg, data.frame(
  log_mpg = log(mpg),
  cylinders = as.character(cylinders),
  displacement_trans = displacement ** .2,
  log_horsepower = log(as.numeric(horsepower)),
  log_weight = log(weight),
  log_acceleration = log(acceleration),
  model_year = model_year
))
  1. 修正线性回归的公式写法
    直接用已经存在于数据集的对数转换后列作为响应变量,不要重复做对数转换:
# 如果已经改了自定义列名就用这个
auto.tf.bc.lm <- lm(log_mpg ~ ., data = auto.tf.bc)
# 如果你不想改列名,就用自动生成的列名
# auto.tf.bc.lm <- lm(log.mpg. ~ ., data = auto.tf.bc)
  1. 可选:清除冲突的内置数据集
    如果后续不想再碰到类似的变量名冲突,可以执行rm(mpg)删除全局环境里的ggplot2内置mpg数据集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 22:45:00