Cet article est un article d'un certain Asahi Shimbun Digital "Pouvez-vous augmenter le nombre de nombreux échantillons" collectivement "des tests PCR? J'ai pensé que la méthode de test PCR décrite dans " était intéressante, et j'ai posté les résultats et les considérations de diverses expériences par moi-même. ** Je n'ai aucune expertise dans le test PCR lui-même. Considérez cet article comme une expérience de pensée dans une situation extrêmement idéalisée. **
Selon Wikipedia, qu'est-ce qu'un test PCR?
Une série de réactions ou de techniques qui amplifient une région spécifique à partir d'un échantillon d'ADN des millions à des milliards de fois.
En utilisant l'action d'une enzyme appelée ADN polymérase, une petite quantité d'ADN est amplifiée de manière exponentielle (mouseally, enchaînée) à travers une série de cycles de changement de température pour amplifier une copie d'une région de gène arbitraire ou d'une région génomique. Le but est d'amplifier l'échantillon à une quantité suffisante pour en étudier les détails.
C'est une technique comme. Je ne peux rien dire sur le contenu spécialisé parce que je suis un étranger, mais il semble qu'un test prend beaucoup de temps, et cela coûte cher parce que je fais cela pour chaque patient.
Selon l'article Asahi Shimbun Digital mentionné ci-dessus
Théoriquement, si même un échantillon sur 500 contient le virus, l'acide nucléique du virus doit être amplifié et positif.
Il semble que nous essayons d'améliorer l'efficacité en frappant d'abord des échantillons positifs en testant plusieurs échantillons à la fois au lieu d'effectuer des tests PCR individuellement. Quelle dynamique ** Est-ce vraiment bien? Cela ressemble à **, mais ce qui suit peut être déduit de la description de cet article.
Si le taux positif est suffisamment bas, il est vrai que le test PCR peut être rendu plus efficace en testant le mélange une fois, puis en le retestant un par un s'il est positif, plutôt que de tester un par un. Je pense. Il semble qu'une telle méthode s'appelle ** méthode de pool ** et ainsi de suite.
Simulons à quel point cela peut être efficace. ** Je pense qu'il y a différents problèmes dans la réalité **, mais dans ce qui suit, je vais l'oublier et définir le problème dans une situation extrêmement idéalisée. Supposons que * N * échantillons soient obtenus. Supposons que vous souhaitiez effectuer les opérations suivantes pour déterminer si tous les échantillons sont positifs ** avec le moins de tests possible **.
Évidemment, si vous effectuez un test PCR sur tous les échantillons un par un, vous pouvez terminer le test en * N * fois. Ce qui suit est une simulation de l'efficacité de la mise en commun.
La taille de l'échantillon était de * N = 100 000 *, le nombre d'échantillons de * 1 000 *, et diverses tailles de mise en commun * M * et le taux positif de chaque échantillon ont été définis pour la simulation. Voyons le résultat tout en montrant le code Python utilisé. Importez les bibliothèques requises
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
from numpy.random import rand
Définissez divers paramètres. (Ici, le cas du taux positif de 0,01 est montré)
sample_number = 10**5 #taille de l'échantillon
positive_rate = 0.01 #Taux positif
sample_size = 1000 #Le nombre d'échantillons
#Mise en commun des candidats de taille
pool_sizes = [2,3,4,5,8,10,15,20,25,50,75,100,200,500,1000,5000]
Ici, nous définissons une fonction qui renvoie le nombre total de contrôles pour l'échantillon et la taille du pool.
#Une fonction qui renvoie le nombre total de contrôles
def pcr(pool_size,sample):
#pool_size:Nombre d'échantillons à regrouper lors d'une inspection
#sample:échantillon
count=0
count += (len(sample)+pool_size-1)//pool_size#Nombre d'inspections de mise en commun
count += len(np.unique(sample[0:-1:pool_size]))*pool_size#Retester la mise en commun positive
return count
Maintenant que nous sommes prêts, nous allons générer des données avec des nombres aléatoires et expérimenter.
#Génération de données
samples = [np.insert((rand(sample_number)<positive_rate).cumsum(),0,0) for _ in range(sample_size)]
#Cumsum pour améliorer l'efficacité du traitement ultérieur(Somme cumulée)Prends
#Effectuer une simulation et enregistrer les résultats
rslt = dict()
for pool_size in pool_sizes:
rslt[pool_size] = [pcr(pool_size,sample) for sample in samples]
rslt_binary[positive_rate] = [binary_pcr(sample) for sample in samples]
Enfin, un diagramme de moustaches de boîte visualise les résultats à chaque taille de regroupement.
#Tracez les moustaches de la boîte
plt.rcParams["font.size"] = 18
points = tuple(rslt.values())
fig, ax = plt.subplots()
bp = ax.boxplot(points)
ax.set_xticklabels(tuple(rslt.keys()))
plt.title("Taux positif"+str(int(100*positive_rate))+"%dans le cas de")
plt.xlabel("Taille de la mise en commun")
plt.xticks(rotation=45)
plt.ylabel("Nombre total d'inspections")
plt.axhline(sample_number,color='black',ls='--')
Les résultats lorsque le taux positif est de 1%, 5%, 10%, 30% sont les suivants. Vous pouvez voir que l'efficacité de chaque graphique augmente lorsque la taille du pool est augmentée au début, mais lorsqu'elle est trop augmentée, l'efficacité diminue. Comme vous pouvez le voir, la taille de la mise en commun ne peut pas être trop grande ou trop petite, et il semble y avoir une valeur optimale en fonction du taux positif. De plus, plus le taux positif de chaque échantillon est petit, plus on peut s'attendre à ce qu'il soit efficace, et lorsque le taux positif est de 1%, on peut voir qu'un maximum d'environ 20000 tests est suffisant pour 100000 échantillons (environ 5 fois). Efficacité). En revanche, lorsque le taux positif de chaque échantillon était élevé, il a été confirmé que la mise en commun ne serait pas très efficace et qu'elle serait moins efficace que les tests un par un.
Existe-t-il un moyen d'effectuer l'inspection plus efficacement? Dans la méthode précédente, la taille du regroupement était fixée quel que soit le résultat de l'inspection au milieu, mais il semble qu'il soit possible d'inspecter plus efficacement en modifiant dynamiquement la taille du regroupement en fonction du résultat de l'inspection (par exemple, d'abord). Prend une grande taille de mise en commun, puis diminue la taille de mise en commun). Ici, nous allons encore améliorer l'efficacité en modifiant la taille de la mise en commun de manière dichotomique. Je décrirai l'algorithme spécifique.
Appelons cet algorithme ** test de regroupement de bisection **. Dans le test PCR de regroupement de deux minutes, il n'est pas nécessaire de fixer d'abord la taille du regroupement, et le test peut être effectué tout en modifiant dynamiquement le nombre de regroupement en regroupant l'échantillon par deux en fonction du résultat du test à chaque fois. Je peux le faire. Intuitivement, cela semble être plus efficace que de fixer la taille de la mise en commun. Mettons-le en œuvre. Le test de regroupement dichotomique peut être écrit de manière relativement nette en utilisant une fonction récursive.
def binary_pcr(sample):
N = len(sample)
if(N<=1): #Inspectez correctement s'il y a moins d'un échantillon
return N
if(sample[0] == sample[-1]): #Si la mise en commun est négative, aucun autre test
return 1
#Sinon, mélangez à nouveau dans les moitiés gauche et droite et inspectez
return binary_pcr(spcm[:N//2]) + binary_pcr(spcm[N//2:])
Le résultat de la simulation du test de regroupement de bissection est le suivant.
Vous pouvez voir que l'inspection est plus efficace que la méthode précédente où la taille de regroupement était fixée. (Surtout lorsque le taux positif est de 1%, le nombre total de tests est inférieur à 6000 pour 100000 échantillons, on peut donc s'attendre à ce que l'efficacité augmente d'environ 16 fois.)
Les simulations ont confirmé que le nombre de tests PCR coûteux peut être réduit en effectuant des tests PCR sur des échantillons d'un lot dans un contexte de problème idéal. Cependant, dans la méthode de fixation de la taille du pool en premier, il est nécessaire de sélectionner une valeur appropriée en fonction du taux positif. En revanche, dans le test de pool de dichotomie, qui détermine dynamiquement le nombre de pooling du test suivant en fonction du résultat du test groupé, il n'est pas nécessaire de penser à une telle chose et c'est de haute performance. Dans les deux méthodes, plus le taux positif est bas, plus le degré d'efficacité est élevé.
En réalité, il peut y avoir une raison pour laquelle seuls les spécialistes et les personnes dans le domaine peuvent comprendre pourquoi nous ne réalisons pas de tests PCR de type piscine.