如何解决R中xy.coords报错:'x'和'y'长度不一致问题?
修复R语言线性回归绘图的长度不匹配问题
报错原因分析
你遇到的Error in xy.coords(x, y, xlabel, ylabel, log) : 'x' and 'y' lengths differ错误,核心原因是绘图时混用了训练集的观测价格(train$Price,占总数据75%)和测试集的预测价格(predprice,占总数据25%),两者样本数量不一致,导致坐标映射时长度不匹配。
同时你的多项式回归线逻辑也存在问题:当前代码基于线性回归的预测值构建二次多项式回归,且绘图时未将预测值与观测值按顺序对应,会导致回归线混乱。
修复方案
- 绘图统一使用训练集的观测值和训练集的预测值,保证数据长度一致;
- 重新构建多项式回归模型,直接基于数据集的特征而非线性回归的预测值;
- 绘制回归线时,先对观测值排序,再对应排序后的多项式预测值,确保线条连续合理。
修复后的完整代码
library(rstudioapi) options(scipen = 999) options(digits = 3) rm(list=ls()) load("carData.rdata") set.seed(25) trainIndex <- sample(1:nrow(carData), trunc(nrow(carData) * 0.75)) train <- carData[trainIndex,] test <- carData[-trainIndex,] # 构建基础线性回归模型 lm.results <- lm(Price~., data=train) library(car) numeric_columns <- sapply(carData, is.numeric) numeric_data <- carData[, numeric_columns] correlation_matrix <- cor(numeric_data) vif_values <- vif(lm(Price ~ ., data = numeric_data)) print(correlation_matrix) print(vif_values) summary(lm.results) # 处理因子水平匹配 train$Model <- factor(train$Model) test$Model <- factor(test$Model) test$Model <- factor(test$Model, levels = levels(train$Model)) # 测试集预测与RMSE计算 predprice_test <- predict(lm.results, newdata = test) rmse <- sqrt(mean((test$Price-predprice_test)^2, na.rm=TRUE)) print(round(rmse,2)) # 构建基于训练集特征的二次多项式回归(示例针对Horsepower做二次项,可按需替换) poly_results <- lm(Price ~ . + poly(Horsepower, 2), data = train) # 生成训练集的多项式预测值 poly_predprice_train <- predict(poly_results) # 训练集的线性回归预测值(用于绘图散点) predprice_train <- predict(lm.results) par(mar = c(3, 3, 1, 1)) # 绘图:训练集观测值 vs 训练集线性预测值,保证x和y长度一致 plot(train$Price, predprice_train, xlab = "观测价格", ylab = "预测价格", main = "线性回归:观测 vs 预测价格", cex.axis = 0.8) # 绘制多项式回归线:按观测价格排序后对应预测值,保证线条连贯 sorted_idx <- order(train$Price) lines(train$Price[sorted_idx], poly_predprice_train[sorted_idx], col = "blue")
关键修改点说明
- 将测试集预测值重命名为
predprice_test,避免和训练集预测值混淆; - 绘图时使用
train$Price和predprice_train(训练集的线性预测值),确保两者长度完全匹配; - 调整多项式回归模型的构建逻辑,直接基于数据集的特征(示例中选择
Horsepower做二次项,你可根据需求替换为其他特征或扩展为所有数值特征); - 通过
order()获取观测值的排序索引,让预测值和观测值一一对应,保证回归线的连续性和合理性。
内容的提问来源于stack exchange,提问作者didi
相关产品推荐
相关产品推荐

