R基础绘图lines()函数输出多段折线而非平滑线问题求助
问题根因
你使用rnorm()生成的X向量是无序随机分布的,base R的lines()函数会严格按照传入坐标点的先后顺序逐段连接,不会自动对X轴变量排序后再拟合连线,因此X顺序混乱时,拟合值的连线就会来回穿插,形成多段折线的效果。
修正方案
只需在绘图前将X和对应的Yhat按X的升序排列即可,完整调整后的代码如下:
# 生成X和随机扰动项 X <- rnorm(100, mean = 10, sd = 1) epsilon <- rnorm(100, 0, 1) # 构造Y b0 <- 0.27 b1 <- 0.49 b2 <- 0.62 b3 <- 0.8 Y <- b0 + b1*X + b2*2^2 + b3*X^3 + epsilon # 拟合回归模型生成拟合值 df = data.frame(Y,X,epsilon) reg <- lm(Y ~ I(X^3), data = df) Yhat <- fitted.values(reg) cbind(df, Yhat) -> df # 新增排序步骤:按X升序整理数据 df_sorted <- df[order(df$X), ] # 绘图 plot(X, Y) lines(df_sorted$X, df_sorted$Yhat, col = "blue", lwd = 0.5)
额外提示:你当前构造Y的代码里
b2*2^2是固定常数,不会随X变化,如果你本意是要加入X的二次项效应,可以修改为b2*X^2。
内容的提问来源于stack exchange,提问作者mbeasle2
相关产品推荐
相关产品推荐

