Qiita a également publié des articles sur la fiabilité des tests PCR pour le coronavirus.
Je pense que tout cela est correct, mais en réalité, ils sont inspectés plusieurs fois. Alors peu importe si le test PCR n'est pas très sensible ou si la spécificité n'est pas parfaite, n'est-ce pas? Dans quelle mesure pouvez-vous vous améliorer en testant plusieurs fois? J'avais une question, alors je l'ai recherchée.
La sensibilité et la spécificité des tests sont souvent présentées dans des articles et autres.
D'autre part, il est important de discuter s'il est préférable ou non d'effectuer un test PCR avec COVID-19. Lorsque le résultat du test est positif, c'est la probabilité d'avoir effectivement le virus ** précision positive ** [^ 1], Probabilité que le résultat du test ne soit pas réellement infecté par le virus lorsque l'étudiant est un étudiant diplômé ** Précision négative **.
[^ 1]: Il ne s'agit pas de "taux positif / prédictif" mais de "taux positif / prédictif".
Comme nous le verrons, ces valeurs varient fortement en fonction de la probabilité antérieure.
Si vous écrivez ceci comme une table de continuité, ce sera comme suit [^ 4].
True state th> | ||||
---|---|---|---|---|
Affecté td> | Non affecté td> | td> | ||
Inspection Inspection Conclusion Résultat th> | Positive td> | $$ \begin{matrix} \ text {vrai positif} \\ \text{(true positive)} \\ \end{matrix} = a $$ | $$ \begin{matrix} \ text {faux positif} \\ \text{(false positive)} \\ \end{matrix} = b $$ | $$ \begin{matrix} \ text {Valeur prédictive positive} \\ \text{(positive precision)} \\ \end{matrix} = \frac{a}{a+b} $$ |
Negative td> | $$ \begin{matrix} \ text {faux négatif} \\ \text{(false negative)} \\ \end{matrix} = c $$ | $$ \begin{matrix} \ text {vrai négatif} \\ \text{(true negative)} \\ \end{matrix} = d $$ | $$ \begin{matrix} \ text {Valeur prédictive négative} \\ \text{(negative precision)} \\ \end{matrix} = \frac{d}{c+d} $$ | |
$$ \begin{matrix} \ text {sensibilité} \\ \text{(sensitivity)} \\ \end{matrix} = \frac{a}{a+c} $$ | $$ \begin{matrix} \ text {singularité} \\ \text{(specificity)} \\ \end{matrix} = \frac{d}{b+d} $$ |
[^ 4]: J'ai du mal à modifier le tableau. Il est difficile pour un amateur de changer avec Markdown.
Sensibilité = $ \ frac {a} {a + c} $ et spécificité = $ \ frac {d} {b + d} $ et probabilité a priori = $ \ frac {a + Supposons que l'on vous donne c} {a + b + c + d} $. Si vous définissez le nombre total d'échantillons sur $ a + b + c + d = 1 $ et trouvez la valeur prédictive positive et la valeur prédictive négative,
Cela devient [^ 3].
[^ 3]: Pourquoi? Cet article , Il vous suffit de résoudre les équations simultanées.
Après cela, cet article Supposons $ et calculons.
import matplotlib.pyplot as plt
import numpy as np
sensitivity = 0.70 #Sensibilité d'un test. La probabilité que le test soit positif lorsque vous êtes affecté.
specificity = 0.95 #La spécificité d'un seul test. La probabilité que le test soit négatif s'il n'est pas affecté.
def positive_precision(prior_probability, sensitivity, specificity):
'''
Args:
prior_probability:Pré-probabilité. Probabilité d'être affecté lorsqu'il n'y a pas de prérequis.
sensitivity:sensibilité. Probabilité d'être positif lors du test des patients affectés.
specificity:Singularité. Probabilité d'être négatif lors du test de patients non affectés.
Returns:
positive_precision:Valeur prédictive positive. La probabilité d'être réellement affecté lorsque le résultat du test est positif.
'''
return sensitivity * prior_probability / (sensitivity * prior_probability + (1 - specificity) * (1 - prior_probability))
def negative_precision(prior_probability, sensitivity, specificity):
'''
Args:
prior_probability:Pré-probabilité. Probabilité d'être affecté lorsqu'il n'y a pas de prérequis.
sensitivity:sensibilité. Probabilité d'être positif lors du test des patients affectés.
specificity:Singularité. Probabilité d'être négatif lors du test de patients non affectés.
Returns:
negative_precision:Valeur prédictive négative. La probabilité que vous ne soyez pas réellement affecté lorsque le résultat du test est négatif.
'''
return specificity * (1 - prior_probability) / ((1 - sensitivity) * prior_probability + specificity * (1 - prior_probability))
Ici, les fonctions positive_precision ()
et negative_precision ()
, comme leur nom l'indique, obtiennent respectivement la valeur prédictive positive et la valeur prédictive négative à partir de la probabilité, de la sensibilité et de la singularité antérieures données par les arguments.
En d'autres termes, considérons un cas basé sur une façon pessimiste de penser que si vous testez plusieurs fois et obtenez un résultat positif même une fois, vous serez positif. Tracons la probabilité a priori et le nombre de vérifications $ n $ sur le graphique.
def sensitivity_pessimistic(sensitivity, n):
'''
Args:
sensitivity:Sensibilité d'un test
n:Nombre d'inspections
Returns:
Sensibilité d'inspection n fois:Sensibilité du test à considérer comme négatif si tous sont négatifs après n tests
'''
return 1 - (1 - sensitivity) ** n
def specificity_pessimistic(specificity, n):
'''
Args:
specificity:Spécificité d'un test
n:Nombre d'inspections
Returns:
Spécificité du test n temps:La spécificité du test est considérée comme négative si tous sont négatifs après n tests
'''
return specificity ** n
xs = [ np.exp(-0.05 * i) for i in range(0, 200)]
ys_list = []
legend_list = []
for n in [1, 3, 5]:
ys_list.append([ positive_precision(x, sensitivity_pessimistic(sensitivity, n), specificity_pessimistic(specificity, n)) for x in xs ])
legend_list.append('Inspection{}Valeur prédictive positive au moment de la mise en œuvre'.format(n))
for n in [1, 3, 5]:
ys_list.append([ negative_precision(x, sensitivity_pessimistic(sensitivity, n), specificity_pessimistic(specificity, n)) for x in xs ])
legend_list.append('Inspection{}Valeur prédictive négative au moment de la mise en œuvre'.format(n))
fig, ax = plt.subplots()
plt.xscale('log')
for ys in ys_list:
ax.plot(xs, ys)
ax.legend(legend_list)
ax.set_xlabel('Probabilité de pré-morbidité')
ax.set_title('Précision de plusieurs tests PCR(Négatif si testé n fois et tous négatifs)')
plt.show()
Cette idée pessimiste selon laquelle «si vous obtenez un résultat positif même une fois, vous êtes malade» peut être proche de la façon de penser actuelle de la société. Cela peut sembler bon parce que vous êtes du bon côté, mais lorsque la pré-probabilité est faible, vous pouvez finir par traiter un grand nombre de personnes qui ne sont pas réellement touchées comme touchées. Les hôpitaux et les installations d'isolement peuvent être perforés et difficiles.
Par exemple, à ce jour (18 avril 2020), le nombre de personnes infectées confirmées au Japon [^ 2] est supérieur à 9 000, mais il y a 100 000 (10 $ ^ 5) $ véritablement infectés, soit 10 fois ce nombre. Supposez que vous l'êtes. En supposant que la population totale du Japon est de 100 millions (10 ^ 8
[^ 2]: Je ne connais pas bien la définition, mais c'est le nombre annoncé par le gouvernement local, et c'est probablement le nombre de personnes qui ont été ** positives ** même une fois au test PCR.
Ensuite, que se passe-t-il si vous adoptez une façon de penser très optimiste, en la secouant dans la direction opposée et en pensant que si vous obtenez un négatif même une fois, vous pensez qu'il est négatif. Tracons-le sur le graphique en modifiant la probabilité a priori et le nombre d'inspections $ n $.
def sensitivity_optimistic(sensitivity, n):
'''
Args:
sensitivity:Sensibilité d'un test
n:Nombre d'inspections
Returns:
Sensibilité d'inspection n fois:Sensibilité du test à être considéré comme positif lorsque n fois sont testés et que tous sont positifs n fois
'''
return sensitivity ** n
def specificity_optimistic(specificity, n):
'''
Args:
specificity:Spécificité d'un test
n:Nombre d'inspections
Returns:
Spécificité du test n temps:Spécificité du test considéré comme positif lorsque n fois sont testés et que tous sont positifs n fois
'''
return 1 - (1 - specificity) ** n
xs = [ np.exp(-0.05 * i) for i in range(0, 200)]
ys_list = []
legend_list = []
for n in [1, 3, 5]:
ys_list.append([ positive_precision(x, sensitivity_optimistic(sensitivity, n), specificity_optimistic(specificity, n)) for x in xs ])
legend_list.append('Inspection{}Valeur prédictive positive au moment de la mise en œuvre'.format(n))
for n in [1, 3, 5]:
ys_list.append([ negative_precision(x, sensitivity_optimistic(sensitivity, n), specificity_optimistic(specificity, n)) for x in xs ])
legend_list.append('Inspection{}Valeur prédictive négative au moment de la mise en œuvre'.format(n))
fig, ax = plt.subplots()
plt.xscale('log')
for ys in ys_list:
ax.plot(xs, ys)
ax.legend(legend_list)
ax.set_xlabel('Probabilité de pré-morbidité')
ax.set_title('Précision de plusieurs tests PCR(Testé n fois et positif si tous sont positifs)')
plt.show()
De cette façon, en testant plusieurs fois, nous avons pu augmenter considérablement la probabilité d'être positif, même si la pré-probabilité était très faible.
Inutile de dire que si vous avez une forte fièvre ou une pneumonie, il est très logique de faire un test, car vous avez plus de chances d'avoir le COVID-19. .. Cela est dû au fait que le taux positif et le taux négatif sont élevés, quel que soit le graphique ci-dessus pris.
Les personnes dont le test est positif même une fois sont susceptibles d'être traitées comme des personnes infectées, mais je pense que les gens ordinaires ne sont pas encore condamnés parce que la pré-probabilité n'est pas si élevée. Je vais. Dans le contexte clinique réel, il est probable que les personnes qui examinent d'autres symptômes (pneumonie, anomalies du goût et de l'odorat, etc.) soient sélectionnées pour les tests (= personnes ayant une probabilité antérieure suffisamment élevée).
De plus, lorsque vous sortez de l'hôpital, il semble que vous effectuez correctement des tests PCR à plusieurs reprises, et s'il est négatif deux fois de suite, vous êtes renvoyé.
Je ne sais pas.
J'ai mis le notebook jupyter sur github. Je suis désolé si j'ai fait une erreur.
Recommended Posts