SAS9

Optimierung von PROC TTEST für Tausende von Variablen und Strukturierung der Daten

Simon 6 views

Die Analyse von Genexpressionsdaten stellt oft eine große Herausforderung dar: die Vielzahl der Variablen. Wenn es darum geht, die Expression von Tausenden von Genen zwischen zwei Gruppen (z. B. 'betroffene' vs. 'nicht betroffene' Probanden) zu vergleichen, besteht der naive Ansatz oft darin, Makros zu verwenden, um jede Variable in einer Schleife zu durchlaufen.

Diese Methode kann jedoch auf Leistungsprobleme und, noch heimtückischer, auf Datenstrukturfehler stoßen, die zu Null-Ergebnissen führen ($n=0$).

Optimierung von PROC TTEST für Tausende von Variablen und Strukturierung der Daten -

Die Falle der PAIRED-Anweisung und fehlender Daten

Stellen Sie sich einen Datensatz vor, bei dem jede Zeile einen Probanden darstellt. Sie haben Spalten für die Gene von gesunden Personen (unaffected_gene_x) und andere für kranke Personen (affected_gene_x).

Wenn Sie versuchen, die PAIRED-Anweisung in PROC TTEST zu verwenden:

1
1paired unaffected_gene_1 * affected_gene_1;

SAS© schließt automatisch jede Zeile aus, die in einer der beiden Variablen einen fehlenden Wert enthält. Wenn Ihre Daten so strukturiert sind, dass ein Proband entweder in der gesunden Gruppe oder in der kranken Gruppe ist (und somit einen fehlenden Wert für die andere Bedingung hat), wird SAS© alle Beobachtungen ausschließen. Ergebnis: Das Protokoll zeigt 0 verwendete Beobachtungen an.

Die Lösung: Daten umstrukturieren ("Wide to Long")

Anstatt ein komplexes Makro zu erstellen, das PROC TTEST 2500 Mal ausführt (was ineffizient ist), besteht die beste Vorgehensweise darin, die Daten so umzustrukturieren, dass nur eine einzige Wertespalte und eine Identifikationsspalte (Gruppe/Status) vorhanden sind.

So transformieren Sie Ihre 'breiten' Daten mit einem DATA-Schritt und Arrays (ARRAY) in 'lange' Daten:

1DATA analyse_genes;
2 SET donnees_source;
3 /* Déclaration des tableaux pour vos colonnes existantes */
4 /* Ajustez la dimension (ici 10) au nombre réel de gènes (ex: 2500) */
5 array u unaffected_gene_1 - unaffected_gene_10;
6 array a affected_gene_1 - affected_gene_10;
7
8 /* Boucle pour pivoter les données */
9 DO gene_id = 1 to dim(u);
10 /* Traitement du cas 'Non Affecté' */
11 IF u[gene_id] ne . THEN DO;
12 STATUS = 'Unaffected';
13 value = u[gene_id];
14 OUTPUT;
15 END;
16
17 /* Traitement du cas 'Affecté' */
18 IF a[gene_id] ne . THEN DO;
19 STATUS = 'Affected';
20 value = a[gene_id];
21 OUTPUT;
22 END;
23 END;
24 keep gene_id STATUS value;
25RUN;
26 
27/* Tri indispensable pour le traitement par groupe */
28PROC SORT DATA=analyse_genes;
29 BY gene_id;
30RUN;
Diese Transformation ermöglicht den Übergang von einer verstreuten Struktur zu einer für die statistische Gruppenanalyse optimierten Struktur.

Den T-Test effizient ausführen

Sobald die Daten umstrukturiert sind, ist kein Makro mehr erforderlich. Ein einziges PROC TTEST-Verfahren genügt, wobei die BY-Anweisung zur separaten Verarbeitung jedes Gens und die CLASS-Anweisung zur Definition der Gruppen verwendet werden.

1PROC TTEST DATA=analyse_genes;
2 BY gene_id; /* Effectue le test pour chaque gène */
3 class STATUS; /* Définit les groupes (Affected / Unaffected) */
4 var value; /* La variable contenant la mesure */
5RUN;
Diese Methode ist deutlich schneller, als das Verfahren tausende Male aufzurufen.

Automatisierung der Erfassung signifikanter Ergebnisse

Bei Tausenden von Tests ist das Lesen der Standardausgabe unmöglich. Der Trick besteht darin, ODS OUTPUT zu verwenden, um die Statistiken (t-Werte und p-Werte) in einer Tabelle zu erfassen und diese Tabelle dann zu filtern.

1/* Redirection des résultats vers une table SAS */
2ods OUTPUT ttests = resultats_ttests;
3 
4PROC TTEST DATA=analyse_genes;
5 BY gene_id;
6 class STATUS;
7 var value;
8RUN;
9 
10/* Filtrer pour ne garder que les différences significatives */
11DATA genes_significatifs;
12 SET resultats_ttests;
13 /* On filtre souvent sur la méthode Pooled ou Satterthwaite selon l'égalité des variances */
14 where Probt < 0.05;
15RUN;

Die Tabelle resultats_ttests wird Variablen wie tValue (t-Statistik) und Probt (der p-Wert) enthalten, sodass Sie die interessierenden Gene unter Tausenden sofort identifizieren können.