Как ggplot вычисляет доверительные интервалы для регрессий?

15

Пакет построения графиков R ggplot2 имеет потрясающую функцию stat_smooth для построения линии регрессии (или кривой) с соответствующей доверительной полосой.

Однако мне трудно понять, как именно генерируется этот доверительный интервал для каждого времени линии регрессии (или «метода»). Как я могу найти эту информацию?

static_rtti
источник
2
Смотрите раздел «Детали» в вашей ссылке.
Стефан Лоран
1
@ StéphaneLaurent: я прочитал этот раздел, но мне все еще не удается соединить точки. Я использую метод «rlm» для подгонки линии, как рассчитывается доверительный интервал (математически, какое уравнение / алгоритм?)? Как я могу найти эту информацию?
static_rtti
1
Поэтому я думаю, что вы должны задать более точный вопрос.
Стефан Лоран
1
Я думаю, что ваш вопрос достаточно точен ... но я подозреваю, что вы не получите ответ здесь. Вам может повезти в группе ggplot2 google: groups.google.com/forum/?fromgroups#!forum/ggplot2
russellpierce

Ответы:

22

Из Detailsраздела помощи

Вычисление выполняется (в настоящее время недокументированной) обобщенной функцией предикд и ее методами. Для большинства методов доверительные границы вычисляются с использованием метода прогнозирования. Исключениями является лесс, который использует основанное на t приближение, и для glm, где нормальный доверительный интервал строится на шкале связи, а затем обратно преобразуется в шкалу ответов.

Так что в общем случае будет вызываться Предсказаниеstats::predict , которое в свою очередь вызовет правильный predictметод для метода сглаживания. Другие функции, включающие stat_smooth , также полезны для рассмотрения.

Большинство функций подбора модели будут иметь predictметод, связанный с classмоделью. Они обычно принимают newdataобъект и аргумент, se.fitкоторый будет обозначать, будут ли установлены стандартные ошибки. (см. ?predict) для получения дополнительной информации.

se
показать доверительный интервал вокруг гладкой? (По умолчанию TRUE, см. Уровень для контроля

Это передается непосредственно в метод предиката для возврата соответствующих стандартных ошибок (зависит от метода)

fullrange
должно ли совпадение охватывать весь диапазон графика или только данные

Это определяет newdataзначения, для xкоторых будут оцениваться прогнозы

level уровень доверительного интервала для использования (0,95 по умолчанию)

Передается непосредственно в метод прогнозирования, чтобы доверительный интервал мог определить соответствующее критическое значение (например, predict.lmиспользуется qt((1 - level)/2, df)для стандартных ошибок, которые нужно умножить на

n количество баллов, чтобы оценить более гладко в

Используется в сочетании с fullrangeдля определения xзначений в newdataобъекте.

В рамках вызова stat_smoothвы можете определить, seчто является тем, что частично соответствует se.fit(или se), и определит intervalаргумент при необходимости. levelдаст уровень доверительного интервала (по умолчанию 0,95).

newdataОбъект определяется в обработке, в зависимости от настройки fullrangeк последовательности длины в nпределах полного диапазона участка или данных.

В вашем случае, используя rlm, это будет использовать predict.rlm, который определяется как

predict.rlm <- function (object, newdata = NULL, scale = NULL, ...)
{
    ## problems with using predict.lm are the scale and
    ## the QR decomp which has been done on down-weighted values.
    object$qr <- qr(sqrt(object$weights) * object$x)
        predict.lm(object, newdata = newdata, scale = object$s, ...)
}

Так что это внутренний вызов predict.lmс соответствующим масштабированием qrдекомпозиции и scaleаргумента.

mnel
источник
... и Предикат.rlm скрыт внутри МАССЫ ... и вызов предиката передает аргументы модели, xseq, se и level в предикат ..., но откуда взялись эти значения? Ну, я думаю, это зависит от того, что происходит, когда аргументы передаются из stat_smooth в StatSmooth $ new ..., который затем, в свою очередь, вызывает ...
russellpierce
1
Я хочу сказать, что ваш ответ - это шаг в правильном направлении, но полностью ответить на вопрос OP не так тривиально, как кажется на первый взгляд (хотя можно ожидать, что код будет вести себя разумно ... никто не уверен, если не проследит его полностью )
russellpierce
2
Можно ожидать, что код будет вести себя разумно, если predictметод был настроен стандартным образом. Я отредактировал свой ответ для решения проблем, поднятых в вашем первом комментарии.
mnel
@mnel: большое спасибо за этот очень подробный и полезный ответ!
static_rtti