Como devo abordar esse problema de previsão binária?

9

Eu tenho um conjunto de dados com o seguinte formato.

Previsões de câncer sem câncer

Há um resultado binário câncer / sem câncer. Todo médico no conjunto de dados viu todos os pacientes e julgou independentemente se o paciente tem câncer ou não. Os médicos dão a seu nível de confiança em 5 que seu diagnóstico está correto e o nível de confiança é exibido entre parênteses.

Eu tentei várias maneiras de obter boas previsões deste conjunto de dados.

Funciona muito bem para mim apenas mediar entre os médicos, ignorando seus níveis de confiança. Na tabela acima, isso produziria diagnósticos corretos para o Paciente 1 e o Paciente 2, embora tenha dito incorretamente que o Paciente 3 tem câncer, uma vez que por uma maioria de 2-1 os médicos acham que o Paciente 3 tem câncer.

Eu também tentei um método no qual aleatoriamente provamos dois médicos, e se eles discordam entre si, o voto decisivo é para o médico que estiver mais confiante. Esse método é econômico, pois não precisamos consultar muitos médicos, mas também aumenta bastante a taxa de erros.

Eu tentei um método relacionado no qual selecionamos aleatoriamente dois médicos e, se eles não concordam, selecionamos aleatoriamente mais dois. Se um diagnóstico estiver à frente por pelo menos dois 'votos', então resolveremos as coisas a favor desse diagnóstico. Caso contrário, continuamos a amostrar mais médicos. Este método é bastante econômico e não comete muitos erros.

Não posso deixar de sentir que estou perdendo uma maneira mais sofisticada de fazer as coisas. Por exemplo, pergunto-me se há alguma maneira de dividir o conjunto de dados em conjuntos de treinamento e teste, e descobrir uma maneira ideal de combinar os diagnósticos e depois ver como esses pesos se comportam no conjunto de teste. Uma possibilidade é algum tipo de método que me permita médicos com baixo peso que cometeram erros no conjunto de ensaios e, talvez, diagnósticos com excesso de peso feitos com alta confiança (a confiança se correlaciona com a precisão neste conjunto de dados).

Eu tenho vários conjuntos de dados que correspondem a essa descrição geral, portanto os tamanhos das amostras variam e nem todos os conjuntos de dados estão relacionados a médicos / pacientes. No entanto, nesse conjunto de dados em particular, existem 40 médicos, cada um com 108 pacientes.

EDIT: Aqui está um link para algumas das ponderações que resultam da minha leitura da resposta da @ jeremy-miles.

  1. Os resultados não ponderados estão na primeira coluna. Na verdade, neste conjunto de dados, o valor máximo de confiança era 4, e não 5, como eu disse anteriormente. Assim, seguindo a abordagem de jeremy-miles, a maior pontuação não ponderada que qualquer paciente poderia obter seria 7. Isso significaria que literalmente todos os médicos afirmavam com um nível de confiança de 4 que aquele paciente tinha câncer. A pontuação mais baixa não ponderada que qualquer paciente poderia obter é 0, o que significa que todo médico afirmou com um nível de confiança 4 que aquele paciente não tinha câncer.

  2. α=KK1(1σxi2σT2)Kσxi2σT2α=40401(18.7915200.7112)=0.9807

  3. Ponderação por correlação total de itens. Calculo todas as correlações totais de itens e, em seguida, pondero cada médico proporcionalmente ao tamanho de sua correlação.

  4. Ponderação por coeficientes de regressão.

Uma coisa que ainda não tenho certeza é como dizer qual método está funcionando "melhor" que o outro. Anteriormente, eu estava calculando coisas como o Peirce Skill Score, que é apropriado para casos em que há uma previsão binária e um resultado binário. No entanto, agora tenho previsões que variam de 0 a 7 em vez de 0 a 1. Devo converter todas as pontuações ponderadas> 3,50 para 1 e todas as pontuações ponderadas <3,50 para 0?

user1205901 - Restabelecer Monica
fonte
Podemos dizer que No Cancer (3)é isso Cancer (2)? Isso simplificaria um pouco o seu problema.
Wayne
11
Re: sua estrutura de dados, quase sempre é melhor ter variáveis ​​diferentes (se o paciente tem câncer; quão confiante a avaliação é) em colunas diferentes. Combiná-los como em "sem câncer (3)" limita severamente suas opções.
Rolando2
@Wayne Os dados variam desde a previsão de câncer com a máxima confiança Cancer (4)até a previsão de nenhum câncer com a máxima confiança No Cancer (4). Não podemos dizer isso No Cancer (3)e Cancer (2)somos iguais, mas poderíamos dizer que há um continuum, e os pontos médios nesse continuum são Cancer (1)e No Cancer (1).
user1205901 - Restabelece Monica dec
@ rolando2 Obrigado pelo conselho. Reorganizei as coisas no meu próprio arquivo de dados para que agora elas sejam separadas.
User1205901 - Restabelece Monica dec
11
Observe que seu limite é um parâmetro ajustável , portanto o ponto de corte apropriado dependerá do seu critério de avaliação. Como eu não estava familiarizado com a sua métrica, pesquisei no Google e, na verdade, o primeiro acerto pode ser relevante para você: Uma nota sobre a pontuação máxima das habilidades de Peirce (2007) .
GeoMatt22

Respostas:

7

Primeiro, eu veria se os médicos concordavam um com o outro. Você não pode analisar 50 médicos separadamente, porque superestimará o modelo - um médico ficará ótimo, por acaso.

Você pode tentar combinar confiança e diagnóstico em uma escala de 10 pontos. Se um médico diz que o paciente não tem câncer e está muito confiante, isso é 0. Se o médico diz que ele tem câncer e está muito confiante, esse é um 9. Se o médico diz que não, e não estão confiantes, isso é um 5, etc.

Quando você está tentando prever, faz algum tipo de análise de regressão, mas, pensando na ordem causal dessas variáveis, é o contrário. Se o paciente tem câncer é a causa do diagnóstico, o resultado é o diagnóstico.

Suas linhas devem ser pacientes e suas colunas devem ser médicos. Agora você tem uma situação comum em psicometria (e foi por isso que adicionei a tag).

Em seguida, observe as relações entre as pontuações. Cada paciente tem uma pontuação média e uma pontuação de cada médico. A pontuação média está correlacionada positivamente com a pontuação de todos os médicos? Caso contrário, esse médico provavelmente não é confiável (isso é chamado de correlação item-total). Às vezes, você remove um médico da pontuação total (ou pontuação média) e verifica se esse médico se correlaciona com a média de todos os outros médicos - essa é a correlação total do item corrigido.

Você pode calcular o alfa de Cronbach (que é uma forma de correlação intra-classe) e o alfa sem cada médico. O alfa sempre deve aumentar quando você adiciona um médico; portanto, se ele aumentar quando você remove um médico, a classificação do médico é suspeita (isso não costuma dizer nada diferente da correlação total entre itens corrigidos).

Se você usa R, esse tipo de coisa está disponível no pacote psych, usando a função alpha. Se você usa Stata, o comando é alfa, no SAS é proc corr e no SPSS está em escala, confiabilidade.

Em seguida, você pode calcular uma pontuação, como a pontuação média de cada médico ou a média ponderada (ponderada pela correlação) e ver se essa pontuação é preditiva do verdadeiro diagnóstico.

Ou você pode pular esse estágio e regredir a pontuação de cada médico no diagnóstico separadamente e tratar os parâmetros de regressão como pesos.

Sinta-se à vontade para pedir esclarecimentos e, se você quiser um livro, gosto das "Escalas de medição de saúde" de Streiner e Norman.

-Editar: baseado em informações adicionais dos OPs.

Uau, isso é um alfa de Cronbach. A única vez que eu vi isso tão alto foi quando um erro foi cometido.

Agora eu faria regressão logística e observaria as curvas ROC.

A diferença entre ponderação por regressão e correlação depende de como você acredita que os médicos estão respondendo. Alguns documentos podem geralmente ser mais confiantes (sem serem mais habilidosos) e, portanto, podem usar os intervalos extremos mais. Se você deseja corrigir isso, usando correlação, em vez de regressão, faz isso. Eu provavelmente ponderaria por regressão, pois isso mantém os dados originais (e não descarta nenhuma informação).

Edit (2): Eu executei modelos de regressão logística em R para ver quão bem cada um previu a saída. tl / dr: não há nada entre eles.

Aqui está o meu código:

d <- read.csv("Copy of Cancer data - Weightings.csv")

mrc <- glm(cancer ~ weightrc, data = d, family = "binomial")
mun <- glm(cancer ~ unweight, data = d, family = "binomial")
mca <- glm(cancer ~ weightca, data = d, family = "binomial")
mic <- glm(cancer ~ weightic, data = d, family = "binomial")

d$prc <- predict(mrc, type = "response")
d$pun <- predict(mun, type = "response")
d$pca <- predict(mca, type = "response")
d$pic <- predict(mic, type = "response")

par(mfrow = c(2, 2))
roc(d$cancer, d$prc, ci = TRUE, plot = TRUE)
roc(d$cancer, d$pun, ci = TRUE, plot = TRUE)
roc(d$cancer, d$pca, ci = TRUE, plot = TRUE)
roc(d$cancer, d$pic, ci = TRUE, plot = TRUE)

4 curvas ROC

E a saída:

> par(mfrow = c(2, 2))
> roc(d$cancer, d$prc, ci = TRUE, plot = TRUE)

Call:
roc.default(response = d$cancer, predictor = d$prc, ci = TRUE,     plot = TRUE)

Data: d$prc in 81 controls (d$cancer 0) < 27 cases (d$cancer 1).
Area under the curve: 0.9831
95% CI: 0.9637-1 (DeLong)
> roc(d$cancer, d$pun, ci = TRUE, plot = TRUE)

Call:
roc.default(response = d$cancer, predictor = d$pun, ci = TRUE,     plot = TRUE)

Data: d$pun in 81 controls (d$cancer 0) < 27 cases (d$cancer 1).
Area under the curve: 0.9808
95% CI: 0.9602-1 (DeLong)
> roc(d$cancer, d$pca, ci = TRUE, plot = TRUE)

Call:
roc.default(response = d$cancer, predictor = d$pca, ci = TRUE,     plot = TRUE)

Data: d$pca in 81 controls (d$cancer 0) < 27 cases (d$cancer 1).
Area under the curve: 0.9854
95% CI: 0.9688-1 (DeLong)
> roc(d$cancer, d$pic, ci = TRUE, plot = TRUE)

Call:
roc.default(response = d$cancer, predictor = d$pic, ci = TRUE,     plot = TRUE)

Data: d$pic in 81 controls (d$cancer 0) < 27 cases (d$cancer 1).
Area under the curve: 0.9822
95% CI: 0.9623-1 (DeLong)
Jeremy Miles
fonte
11
Muito bom. E, conforme seu raciocínio permitir, é possível que algum médico torne o alfa pior, contribuindo com uma visão única e contrariando a tendência.
Rolando2
@ jeremy-miles Obrigado por esta resposta e pela gentil oferta de perguntas sobre o assunto. Tentei implementar o que você sugeriu e editei o OP para publicar alguns dos resultados. A principal coisa que eu estou pensando é se eu interpretei sua postagem corretamente e também o que seria necessário para mostrar que certos métodos de agregação estão funcionando melhor do que outros na previsão do resultado.
User1205901 - Restabelece Monica dec
Obrigado por postar os dados. Vou dar uma olhada mais tarde. (O software que você está usando?)
Jeremy Miles
Obrigado por publicar esta edição! Estou usando o MATLAB, mas sei o suficiente sobre o R para mudar e usá-lo, pois você já publicou o código R. Calculei que o Alpha de Cronbach no SPSS - você obtém um valor diferente de R?
User1205901 - Restabelece Monica
11
Sim, era isso que eu estava pensando. Então, cada médico recebe um peso diferente.
Jeremy Miles
2

Duas sugestões prontas para uso:

  1. Você pode usar pesos na função de perda da sua regressão logística, para que o médico que tem muita certeza de que o paciente tenha câncer com P = 1 obtenha o dobro do impacto, tenha outro que diga que tem câncer com P = 0,75. Não se esqueça de transformar corretamente suas probabilidades em pesos.
  2. Uma família de modelos frequentemente negligenciados são os modelos de classificação. Dentro dos corretores, existem três grandes grupos: ranking por ordem, por ordem dos pares e por pares, dependendo da sua entrada. Parece que você poderia usar a classificação no sentido do seu caso.
Ricardo Cruz
fonte
Você pode sugerir uma maneira de transformar corretamente probabilidades em pesos? Tentei pesquisar esse conceito no Google, mas não consegui encontrar nenhum conselho claro sobre como fazer isso.
user1205901 - Reintegrar Monica
@ user1205901, eu tinha em mente algo muito simples como: Let P= probabilidade de ser câncer dado pelo médico, então (em notação python): y=[1 if p >= 0.5 else 0 for p in P]e w=[abs(p-0.5)*2 for p in P]. Em seguida, treine o modelo:LogisticRegression().fit(X,y,w)
Ricardo Cruz
Na função de perda, isso dará, por exemplo, o dobro do peso para 0,1 que 0,2 por não ser câncer (0,1 -> 0,8 e 0,2 -> 0,6). Se o médico não tiver certeza (P ~ 0,5), a observação não contribuirá quase nada para a perda. Qualquer que seja o modelo que ele use, é necessário adicionar um vetor de custo à função de perda, suportada pela maioria dos modelos. Não sei se isso é bom, mas parece trivial tentar. Ele precisa especificar uma métrica primeiro. A função de perda pode ser mais adaptada a qualquer métrica que ele queira maximizar.
Ricardo Cruz
2

(Como está fora da minha área de especialização, a resposta de Jeremy Miles pode ser mais confiável.)

Aqui está uma ideia.

i=1Nci{0,1}j=1mdij{0,1}

dijci

p[c]1Nici

p[dj|c]idijciici
jci

p[dj|c,wj]idijwijciiwijci
wij0dij

w[0,1]

p[dw]=dw(1d)1w
d=0

0^0=10^0=NaNw(0,1)k{1K}w=k/(K+1)

GeoMatt22
fonte
No Cancer (3) = Cancer (2)w[k]=kK25=135No Cancer (3) = Cancer (3)w[k]=kK+136=136
p[dj|c,wj]idijwijciiwijci
dδ[0,1]d{0,1}δi=wi(di=1)+(1wi)(di=0)δ=[0.8,0.4,0.8]p[c,δ]=cδ¯=0.8+0+0.83=230.8p[2]=c¯=23p[δ]=δ¯=560.8p[c|δ]=p[c,δ]/p[δ]=0.8p[δ|c]=p[c,δ]/p[c]=0.8
0

Da sua pergunta, parece que o que você deseja testar é o seu sistema de medição. No campo da engenharia de processo, isso seria uma análise do sistema de medição de atributos ou MSA.

Este link fornece algumas informações úteis sobre o tamanho da amostra necessário e os cálculos executados para realizar um estudo desse tipo. https://www.isixsigma.com/tools-templates/measurement-systems-analysis-msa-gage-rr/making-sense-attribute-gage-rr-calculations/

Com este estudo, você também precisaria do médico para diagnosticar o mesmo paciente com as mesmas informações pelo menos duas vezes.

Você pode conduzir este estudo de duas maneiras. Você pode usar a classificação de câncer simples / sem câncer para determinar a concordância entre os médicos e por cada médico. Idealmente, eles também devem poder diagnosticar com o mesmo nível de confiança. Você pode usar a escala completa de 10 pontos para testar a concordância entre e por cada médico. (Todos devem concordar que câncer (5) é a mesma classificação, que nenhum câncer (1) é a mesma classificação, etc.)

Os cálculos no site vinculado são simples de realizar em qualquer plataforma que você possa estar usando para seus testes.

Tavrock
fonte