Скопированный комментарий: Вам нужно отсортировать x и y по значениям x. Вы также должны научиться использовать формулы без имен data.frame в теле формулы и использовать параметр data для имени dataframe. Донвотер, вероятно, реагировал на отсутствие примера данных, но источник ошибки был совершенно ясен из приведенного графика.
Я проверил мой совет в тексте, ранее известном как «комментарий», с этим кодом, и, кажется, он дает ожидаемый результат:
fit_bmi <- glm(genhlth ~ poly(bmi, 2, raw = TRUE), data=dat)
plot(genhlth ~ bmi, data=dat)
lines(dat$bmi[order(dat$bmi)], predict(fit_bmi)[order(dat$bmi)],lwd=3, col = 'red')
Вот dat
-объект, построенный со структурой, которая, я полагаю, похожа на ваш объект данных:
dat <- data.frame(genhlth = sample(1:5, size=100, repl=TRUE,
prob=c(.1, .2, .3, .2, .2) ),
bmi = rnorm(100,30,5) )
table(dat$genhlth)
#------------
1 2 3 4 5
6 24 25 30 15