lines() 根本不显示我的非线性回归的线性预测

lines() simply doesn't show linear prediction of my non-linear regression

我在使用非线性回归绘制线条时遇到了问题,因为绘制变量的长度不同,因为回归忽略了一些观察结果。我使用 na.action=na.exclude 解决了这个问题。现在 "lengths differ" 警告不再显示,但 lines() 根本不显示我的非线性预测。

如果这有点含糊,我很抱歉,但我真的不知道发生了什么,因为没有错误消息。

这是我使用的代码:

data_lm <- read.csv('notaport.csv', sep=';', dec=',')

regs <- lm(notaport ~ tamturma, data=data_lm)
regm <- lm(notaport ~ tamturma + I(tamturma**2), data=data_lm, na.action = na.exclude)

plot(data_lm$tamturma, data_lm$notaport, xlab='Tamanho da Turma', ylab = 'Notas de Português', pch='.')
abline(regs, col='red')

linearpred_regm <- predict(regm) 

plot(data_lm$tamturma, data_lm$notaport, xlab='Tamanho da Turma', ylab = 'Notas de Português', pch='.')
lines(linearpred_regm, data_lm$tamturma, col='red')

summary(data_lm)
summary(regs)
summary(regm)

我的数据可以在We Transfer中用这个link下载。

您正在将 y 轴变量传递给 x 轴,反之亦然。此外,您需要确保您的 x 变量的顺序正确:

plot(data_lm$tamturma, data_lm$notaport, xlab='Tamanho da Turma', ylab= 'Notas de Português', pch='.')

ord <- order(data_lm$tamturma)

lines(data_lm$tamturma[ord], linearpred_regm[ord], col='red')

有时曲线需要更平滑。也许在这种情况下不会,但在其他时候可能会。那么你可以使用这个方法:

newdata <- data.frame(tamturma=seq(6,65,0.1))
linearpred_regm <- predict(regm, newdata=newdata) 
lines(newdata$tamturma, linearpred_regm, col='red')