Como o ggplot calcula intervalos de confiança para regressões?

15

O pacote de plotagem R ggplot2 possui uma função impressionante chamada stat_smooth para plotar uma linha de regressão (ou curva) com a banda de confiança associada.

No entanto, estou tendo dificuldade em descobrir exatamente como essa faixa de confiança é gerada, para cada momento da linha de regressão (ou "método"). Como posso encontrar esta informação?

static_rtti
fonte
2
Consulte a seção "Detalhes" no seu link.
Stéphane Laurent
11
@ StéphaneLaurent: Eu li essa seção, mas ainda tenho problemas para conectar os pontos. Eu uso o método "rlm" para ajustar uma linha, como é calculado o intervalo de confiança (matematicamente, que equação / algoritmo?)? Como posso encontrar essa informação?
static_rtti
11
Então eu acho que você deveria fazer uma pergunta mais precisa.
Stéphane Laurent
11
Acho que sua pergunta é razoavelmente precisa ... mas suspeito que você não receberá uma resposta aqui. Você pode ter melhor sorte no grupo ggplot2 google: groups.google.com/forum/?fromgroups#!forum/ggplot2
russellpierce

Respostas:

22

Na Detailsseção da ajuda

O cálculo é realizado pela função genérica predictdf (atualmente não documentada) e seus métodos. Para a maioria dos métodos, os limites de confiança são calculados usando o método de previsão - as exceções são loess, que usam uma aproximação baseada em t, e para glm, onde o intervalo de confiança normal é construído na escala de links e depois transformado novamente na escala de resposta.

Portanto, o predictdf geralmente chama stats::predict, o que por sua vez chama o predictmétodo correto para o método de suavização. Outras funções envolvendo stat_smooth também são úteis a considerar.

A maioria das funções de ajuste de modelo terá um predictmétodo associado ao classdo modelo. Geralmente, isso requer um newdataobjeto e um argumento se.fitque indicam se os erros padrão serão ajustados. (veja ?predict) para mais detalhes.

se
exibir intervalo de confiança suave? (VERDADEIRO por padrão, consulte o nível para controlar

Isso é passado diretamente ao método de previsão para retornar os erros padrão apropriados (dependentes do método)

fullrange
o ajuste deve abranger toda a faixa do gráfico ou apenas os dados

Isso define os newdatavalores para os xquais as previsões serão avaliadas

level nível de intervalo de confiança a ser usado (0,95 por padrão)

Passado diretamente para o método de previsão, para que o intervalo de confiança possa definir o valor crítico apropriado (por exemplo, predict.lmusos qt((1 - level)/2, df)dos erros padrão a serem multiplicados por

n número de pontos para avaliar mais suavemente

Utilizado em conjunto com fullrangepara definir os xvalores no newdataobjeto.

Em uma chamada, stat_smoothvocê pode definir sequal é o que corresponde parcialmente a se.fit(ou se) e definirá o intervalargumento, se necessário. leveldará o nível do intervalo de confiança (padrão 0,95).

O newdataobjeto é definido dentro do processamento, dependendo da configuração de fullrangeuma sequência de comprimento ndentro de toda a faixa do gráfico ou dos dados.

No seu caso, usando rlm, isso usará predict.rlm, definido como

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, ...)
}

Portanto, ele está chamando internamente predict.lmcom uma escala apropriada da qrdecomposição e do scaleargumento.

mnel
fonte
... e o forecast.rlm está oculto no MASS ... e a chamada para predictdf passa os argumentos de modelo, xseq, se e level para o forecast.rlm ... mas de onde vieram esses valores? Bem, eu acho que depende do que acontece quando argumentos são passados de stat_smooth para StatSmooth $ nova ... que, em seguida, em chamadas por sua vez ...
russellpierce
11
O que quero dizer é que sua resposta é um passo na direção certa, mas responder à pergunta dos OPs não é tão trivial quanto parece à primeira vista (embora se espere que o código se comporte de maneira sensata ... não se tem certeza a menos que o rastreie completamente )
russellpierce
2
Espera-se que o código se comporte de maneira sensata, se o predictmétodo tiver sido configurado de maneira padrão. Editei minha resposta para resolver os problemas levantados em seu primeiro comentário.
mnel
@ canal: muito obrigado por esta resposta muito detalhada e útil!
static_rtti