Embora as respostas de @ Tim ♦ e @ gung ♦ cubram praticamente tudo, tentarei sintetizá-las em uma única e fornecer esclarecimentos adicionais.
O contexto das linhas citadas pode se referir principalmente a testes clínicos na forma de um determinado limiar, como é mais comum. Imagine uma doença e tudo além de D, incluindo o estado saudável referido como D c . Nós, para o nosso teste, gostaríamos de encontrar alguma medida de proxy que nos permita obter uma boa previsão para D. (1) A razão pela qual não obtemos especificidade / sensibilidade absolutas é que os valores de nossa quantidade de proxy não se correlacionam perfeitamente com o estado da doença, mas apenas geralmente se associa a ele e, portanto, em medições individuais, podemos ter uma chance dessa quantidade cruzar nosso limiar para D cDDDcDDcindivíduos e vice-versa. Por uma questão de clareza, vamos assumir um modelo gaussiano de variabilidade.
Digamos que estamos usando como quantidade proxy. Se x tiver sido bem escolhido, então E [ x D ] deverá ser maior que E [ x D c ] ( E é o operador de valor esperado). Agora, o problema surge quando percebemos que D é uma situação composta (o mesmo acontece com D c ), na verdade composta de 3 graus de gravidade D 1 , D 2 , D 3 , cada um com um valor esperado progressivamente crescente para x . Para um único indivíduo, selecionado entrexxE[ xD]E[ xD c]EDDcD1 1D2D3xCategoria D ou da categoria D c , as probabilidades de o 'teste' se tornar positivo ou não dependerão do valor limite escolhido. Digamos que escolhemos x T com base no estudo de uma amostra verdadeiramente aleatória comindivíduos D e D c . Nosso x T causará alguns falsos positivos e negativos. Se selecionarmos umapessoaaleatoriamente, a probabilidade que governa seuvalorse dado pelo gráfico verde e a de umapessoaescolhida aleatoriamentepelo gráfico vermelho.DDcxTDDcxTDxDc
Os números reais obtidos dependerão dos números reais de indivíduos e mas a especificidade e a sensibilidade resultantes não. Seja uma função cumulativa de probabilidade. Então, para a prevalência de da doença , aqui está uma tabela 2x2, como seria de esperar do caso geral, quando tentamos realmente ver como o nosso teste se comporta na população combinada.DDcF()pD
(D,+)=p(1−FD(xT))
(Dc,−)=(1−p)(1−FDc(xT))
(D,−)=p(FD(xT))
(Dc,+)=(1−p)∗FDc(xT)
Os números reais são dependentes de , mas a sensibilidade e a especificidade são independentes de . Mas, ambos são dependentes de e . Portanto, todos os fatores que os afetam definitivamente mudarão essas métricas. Se estivéssemos, por exemplo, trabalhando na UTI, nosso seria substituído por e, se pacientes ambulatoriais, substituído por . É uma questão separada que, no hospital, a prevalência também é diferente,p F D F D c F D F D 3 F D 1 D c D c x D D c F D F D c D F FppFDFDcFDFD3FD1mas não é a prevalência diferente que está causando diferenças nas sensibilidades e especificidades, mas a distribuição diferente, uma vez que o modelo no qual o limiar foi definido não era aplicável à população que aparecia como paciente ambulatorial ou internado . Você pode ir em frente e dividir em várias subpopulações, porque a subpartição de internamento de também terá um elevado devido a outras razões (uma vez que a maioria dos proxies também é 'elevada' em outras condições graves). A quebra da população em subpopulação explica a mudança na sensibilidade, enquanto a da população explica a mudança na especificidade (por mudanças correspondentes em eDcDcxDDcFDFDc ). Isto é o que o gráfico composto realmente compreende. Cada uma das cores terá seu próprio e, portanto, contanto que seja diferente do no qual a sensibilidade e a especificidade originais foram calculadas, essas métricas serão alteradas.DFF
Exemplo
Suponha uma população de 11550 com 10000 Dc, 500,750,300 D1, D2, D3, respectivamente. A parte comentada é o código usado para os gráficos acima.
set.seed(12345)
dc<-rnorm(10000,mean = 9, sd = 3)
d1<-rnorm(500,mean = 15,sd=2)
d2<-rnorm(750,mean=17,sd=2)
d3<-rnorm(300,mean=20,sd=2)
d<-cbind(c(d1,d2,d3),c(rep('1',500),rep('2',750),rep('3',300)))
library(ggplot2)
#ggplot(data.frame(dc))+geom_density(aes(x=dc),alpha=0.5,fill='green')+geom_density(data=data.frame(c(d1,d2,d3)),aes(x=c(d1,d2,d3)),alpha=0.5, fill='red')+geom_vline(xintercept = 13.5,color='black',size=2)+scale_x_continuous(name='Values for x',breaks=c(mean(dc),mean(as.numeric(d[,1])),13.5),labels=c('x_dc','x_d','x_T'))
#ggplot(data.frame(d))+geom_density(aes(x=as.numeric(d[,1]),..count..,fill=d[,2]),position='stack',alpha=0.5)+xlab('x-values')
Podemos calcular facilmente os meios x para as várias populações, incluindo Dc, D1, D2, D3 e o composto D.
mean(dc)
mean(d1)
mean(d2)
mean(d3)
mean(as.numeric(d[,1]))
> mean(dc) [1] 8.997931
> mean(d1) [1] 14.95559
> mean(d2) [1] 17.01523
> mean(d3) [1] 19.76903
> mean(as.numeric(d[,1])) [1] 16.88382
Para obter uma tabela 2x2 para o nosso caso de teste original, primeiro definimos um limite com base nos dados (que em um caso real seriam definidos após a execução do teste, como mostra o @gung). De qualquer forma, assumindo um limite de 13,5, obtemos a seguinte sensibilidade e especificidade quando computados em toda a população.
sdc<-sample(dc,0.1*length(dc))
sdcomposite<-sample(c(d1,d2,d3),0.1*length(c(d1,d2,d3)))
threshold<-13.5
truepositive<-sum(sdcomposite>13.5)
truenegative<-sum(sdc<=13.5)
falsepositive<-sum(sdc>13.5)
falsenegative<-sum(sdcomposite<=13.5)
print(c(truepositive,truenegative,falsepositive,falsenegative))
sensitivity<-truepositive/length(sdcomposite)
specificity<-truenegative/length(sdc)
print(c(sensitivity,specificity))
> print(c(truepositive,truenegative,falsepositive,falsenegative)) [1]139 928 72 16
> print(c(sensitivity,specificity)) [1] 0.8967742 0.9280000
Vamos supor que estamos trabalhando com pacientes ambulatoriais e só temos pacientes doentes na proporção D1, ou estamos trabalhando na UTI onde só temos D3. (para um caso mais geral, também precisamos dividir o componente Dc). Como nossa sensibilidade e especificidade mudam? Alterando a prevalência (ou seja, alterando a proporção relativa de pacientes pertencentes a ambos os casos, não alteramos a especificidade e a sensibilidade. De fato, acontece que essa prevalência também muda com a alteração da distribuição)
sdc<-sample(dc,0.1*length(dc))
sd1<-sample(d1,0.1*length(d1))
truepositive<-sum(sd1>13.5)
truenegative<-sum(sdc<=13.5)
falsepositive<-sum(sdc>13.5)
falsenegative<-sum(sd1<=13.5)
print(c(truepositive,truenegative,falsepositive,falsenegative))
sensitivity1<-truepositive/length(sd1)
specificity1<-truenegative/length(sdc)
print(c(sensitivity1,specificity1))
sdc<-sample(dc,0.1*length(dc))
sd3<-sample(d3,0.1*length(d3))
truepositive<-sum(sd3>13.5)
truenegative<-sum(sdc<=13.5)
falsepositive<-sum(sdc>13.5)
falsenegative<-sum(sd3<=13.5)
print(c(truepositive,truenegative,falsepositive,falsenegative))
sensitivity3<-truepositive/length(sd3)
specificity3<-truenegative/length(sdc)
print(c(sensitivity3,specificity3))
> print(c(truepositive,truenegative,falsepositive,falsenegative)) [1] 38 931 69 12
> print(c(sensitivity1,specificity1)) [1] 0.760 0.931
> print(c(truepositive,truenegative,falsepositive,falsenegative)) [1] 30 944 56 0
> print(c(sensitivity3,specificity3)) [1] 1.000 0.944
Para resumir, um gráfico para mostrar a mudança de sensibilidade (a especificidade seguiria uma tendência semelhante se também compuséssemos a população Dc a partir de subpopulações) com média variável x para a população, aqui está um gráfico
df<-data.frame(V1=c(sensitivity,sensitivity1,sensitivity3),V2=c(mean(c(d1,d2,d3)),mean(d1),mean(d3)))
ggplot(df)+geom_point(aes(x=V2,y=V1),size=2)+geom_line(aes(x=V2,y=V1))
- D