Como estimar uma curva de calibração com o bootstrap (R)

9

Pergunta : Eu ajustei um modelo probabilístico (rede bayesiana) para modelar uma variável de resultado binário. Gostaria de criar um gráfico de calibração de alta resolução (por exemplo, spline) corrigido para sobreajuste com o bootstrapping. Existe um procedimento padrão para calcular essa curva?

Considerações : eu poderia fazer isso facilmente com a divisão de trem / teste, mas preferiria não jogar fora nenhum dado, pois tenho menos de 20.000 amostras. Então, naturalmente, pensei em iniciar. Eu sei que uma dessas funções (calibrar) é implementada no pacote rms de Frank Harrell, mas infelizmente o modelo que eu uso não é suportado pelo pacote.

Pergunta de bônus : é possível recalibrar um modelo mal calibrado com o bootstrap? A razão pela qual pergunto isso é que tentei recalibrar um modelo

  1. dividir dados no trem / teste
  2. modelo de montagem para treinar
  3. recalibrar o modelo para treinar o conjunto (com um spline cúbico)
  4. avaliar a calibração no conjunto de teste

Os modelos recalibrados da maneira acima foram perfeitamente calibrados no conjunto de trem, mas não tanto no conjunto de teste, o que provavelmente indica um ajuste excessivo. Também tentei dividir ainda mais o conjunto de testes, calibrando em uma divisão e avaliando a calibração na segunda divisão. Obtive melhores resultados (ainda não perfeitamente calibrados), mas os conjuntos se tornaram muito pequenos (~ 1000 amostras) e, portanto, a calibração não é confiável

Gino_JrDataScientist
fonte
1
Não tenho certeza do que está disponível no R, mas o sklearn do Python possui um excelente módulo de calibração de probabilidade, que suporta validação cruzada e regressão isotônica / monotônica, que são essenciais para a calibração de probabilidade de alta qualidade. scikit-learn.org/stable/modules/calibration.html
olooney
Obrigado pela sua resposta! Estou vinculado ao R e não estou particularmente interessado em começar reticulate. Eu mesmo poderia implementar o procedimento, se soubesse, mas não o encontrei em lugar algum. Acho que espero que o professor Harrell veja esta pergunta: D
Gino_JrDataScientist
1
Inclua um exemplo (pequeno) de dados para ilustrar o que você está falando. Obrigado.
24518 Jim
Você deve dar uma olhada nesta introdução ao pacote rms (e sua função de calibração) em R: r-bloggers.com/introduction-to-the-rms-package
rpatel
Oi rpatel, obrigado pela sugestão. Eu mencionei a função rms :: calibrate na minha pergunta original, observando que ela não suporta a classe de modelo que estou usando. Também possuo o livro Estratégias de Modelagem de Regressão de Harrell, mas não consigo encontrar nenhuma descrição detalhada sobre como a função de calibração funciona.
Gino_JrDataScientist 28/05

Respostas:

6

Depois de discutir com o professor Frank Harrell por e-mail, desenvolvi o seguinte procedimento para estimar a curva de calibração corrigida pelo otimismo, parcialmente baseada em seu Tutorial em Bioestatística (STATISTICS IN MEDICINE, VOL. 15.361-387 (1996)):

  1. ajustar um modelo de previsão de risco em todos os dados
  2. ajuste um modelo flexível (gam com spline e link logit) às probabilidades previstas do modelo versus resultado e consulte o gam em uma grade de probabilidades previstas . Essa é a curva de calibração aparente e a chamamos dep=(0,01,0,02,...,0,99)cumaeuumapp
  3. extrair amostra de bootstrap com substituição, mesmo tamanho dos dados originais
  4. ajuste o modelo de previsão de risco na amostra de inicialização
  5. use o modelo de autoinicialização para prever probabilidades da amostra de autoinicialização , ajuste um gam entre as probabilidades previstas e o resultado e consulte o gam em uma grade de probabilidades previstas (vamos chamar esses pontos de )cumaeuboot
  6. use o modelo de autoinicialização para prever probabilidades da amostra original , ajustar um gam entre as probabilidades previstas e o resultado e consultar o gam em uma grade de probabilidades previstas, obtendo uma curva de calibração ( )cumaeuorEug
  7. calcule o otimismo em todos os pontos da grade, assimp
    OptEumEusm(p)=cumaeuboot(p)-cumaeuorEug(p)
  8. repita as etapas 3 a 7 cerca de 100 vezes, calcule a média do otimismo em cada pontop
  9. calcular a calibração corrigida pelo otimismo da seguinte forma
    cumaeucorr(p)=cumaeuumapp(p)-<OptEumEusm(p)>

Nota importante : O procedimento acima é inspirado no trabalho de Harrell e na minha discussão com ele, mas todos os erros são apenas meus.

Gino_JrDataScientist
fonte