Ошибки построения ограниченного кубического сплайна с помощью ggplot2

Я хотел бы использовать ggplot2, чтобы проиллюстрировать подгонку с использованием ограниченного кубического сплайна с использованием geom_smooth(), но, похоже, он работает неправильно. Вот краткий пример:

# rms package Contains Restricted Cubic Splines (RCS)
library(rms)
library(ggplot2)

# Load Data
data(cars)

# Model Fit with RCS
fit <- lm(speed ~ rcs(dist, 5), data=cars)

# Obtain Diagnostic Data
plot.dat <- cbind(cars, fitted=fitted(fit))

# Compare Smooth to Actual
ggplot(data=plot.dat) +
  geom_point(aes(x=dist, y=speed)) +
  geom_smooth(aes(x=dist, y=speed), method="lm", 
              formula=y ~ rcs(x, 5), se=FALSE, colour="blue") +
  geom_line(aes(y=fitted, x=dist), size=1.25, colour="red")

В результате получается следующее изображение: Сравнение сплайнов Я не уверен, почему geom_smooth() не дает правильные результаты. Очевидно, что есть обходной путь (как показано выше), но есть ли способ заставить geom_smooth() выдавать правильные результаты?


person reyesem    schedule 12.01.2016    source источник
comment
Интересно, это будет легко? Функция rcs является частью мира 'rms'. Как и в случае с функциями 'ggplot2'-world, функции 'rms' ожидают, что в среде будут доступны другие вспомогательные функции и структуры. Есть отдельные методы Predict для функции ols, аналог lm. Для этого необходимо указать объект datadist в качестве опции. Когда я запускаю Predict(ols(speed ~ rcs(dist, 5),data=cars)) , я получаю те же результаты, что и ваш fitted. Когда я пытаюсь предложить ols в качестве метода для geom_smooth, я получаю сообщение об ошибке.   -  person IRTFM    schedule 13.01.2016
comment
Я не знал, что существует функция ggplot.Predict: вопрос без ответа, который устанавливает пример: stackoverflow.com/questions/33039815/   -  person IRTFM    schedule 13.01.2016


Ответы (1)


Я не знаю, как интегрировать это с geom_smooth, но я могу сделать это с ggplot.Predict из пакета rms:

ddist <- datadist(cars)
options(datadist='ddist')

fit <- ols(speed~  rcs(dist,5),data=cars,
               x=TRUE, y=TRUE)

ggplot(Predict(fit))+geom_point(data=cars, aes(x=dist, y=speed))

введите здесь описание изображения

person IRTFM    schedule 12.01.2016