R语言运行Box-Cox变换处理回归响应变量时报错求助
问题原因
你的报错核心是公式中的log(mpg)无法在你指定的auto.tf.bc数据集里找到对应列,R会自动向上层级搜索变量,刚好命中了R内置的mpg数据框(ggplot2包自带),你对数据框整体执行log()数学运算,就触发了非数值列的报错。
从你输出的str(auto.tf.bc)结果可以看到,你已经把对数转换后的mpg作为第一列存入数据集,自动生成的列名为log.mpg.,不存在原始的mpg列,所以公式里写log(mpg)是完全错误的。
解决步骤
- 创建数据集时手动指定列名(可选但推荐)
避免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 ))
- 修正线性回归的公式写法
直接用已经存在于数据集的对数转换后列作为响应变量,不要重复做对数转换:
# 如果已经改了自定义列名就用这个 auto.tf.bc.lm <- lm(log_mpg ~ ., data = auto.tf.bc) # 如果你不想改列名,就用自动生成的列名 # auto.tf.bc.lm <- lm(log.mpg. ~ ., data = auto.tf.bc)
- 可选:清除冲突的内置数据集
如果后续不想再碰到类似的变量名冲突,可以执行rm(mpg)删除全局环境里的ggplot2内置mpg数据集。
内容的提问来源于stack exchange,提问作者jamerson11228
相关产品推荐
相关产品推荐

