Ich habe zwei Datensätze und möchte wissen, ob sie sich erheblich unterscheiden oder nicht (dies kommt von " Zwei Gruppen unterscheiden sich erheblich? Test zu verwenden ").
Ich habe mich für einen Permutationstest entschieden und in R Folgendes durchgeführt:
permutation.test <- function(coding, lncrna) {
coding <- coding[,1] # dataset1
lncrna <- lncrna[,1] # dataset2
### Under null hyphotesis, both datasets would be the same. So:
d <- c(coding, lncrna)
# Observed difference
diff.observed = mean(coding) - mean(lncrna)
number_of_permutations = 5000
diff.random = NULL
for (i in 1:number_of_permutations) {
# Sample from the combined dataset
a.random = sample (d, length(coding), TRUE)
b.random = sample (d, length(lncrna), TRUE)
# Null (permuated) difference
diff.random[i] = mean(b.random) - mean(a.random)
}
# P-value is the fraction of how many times the permuted difference is equal or more extreme than the observed difference
pvalue = sum(abs(diff.random) >= abs(diff.observed)) / number_of_permutations
pvalue
}
Trotzdem sollten p-Werte laut diesem Artikel nicht 0 sein: http://www.statsci.org/smyth/pubs/permp.pdf
Was empfehlen Sie mir zu tun? So berechnen Sie den p-Wert:
pvalue = sum(abs(diff.random) >= abs(diff.observed)) / number_of_permutations
ein guter Weg? Oder ist es besser, Folgendes zu tun?
pvalue = sum(abs(diff.random) >= abs(diff.observed)) + 1 / number_of_permutations + 1
p-value
permutation-test
user2886545
quelle
quelle
a.random
b.random
b.random
a.random
coding
lncrna
Antworten:
Diskussion
Ein Permutationstest generiert alle relevanten Permutationen eines Datensatzes, berechnet für jede dieser Permutationen eine festgelegte Teststatistik und bewertet die tatsächliche Teststatistik im Kontext der resultierenden Permutationsverteilung der Statistiken. Eine übliche Methode zur Bewertung besteht darin, den Anteil der Statistiken zu melden, der (in gewissem Sinne) "als oder extremer" als die tatsächliche Statistik ist. Dies wird oft als "p-Wert" bezeichnet.
Da es sich bei dem tatsächlichen Datensatz um eine dieser Permutationen handelt, gehört seine Statistik zwangsläufig zu denjenigen, die in der Permutationsverteilung zu finden sind. Daher kann der p-Wert niemals Null sein.
Sofern der Datensatz nicht sehr klein ist (normalerweise weniger als 20-30 Gesamtzahlen) oder die Teststatistik eine besonders schöne mathematische Form hat, ist es nicht praktikabel, alle Permutationen zu generieren. (Ein Beispiel, in dem alle Permutationen generiert werden, wird unter Permutationstest in R angezeigt .) Daher werden Computerimplementierungen von Permutationstests normalerweise aus der Permutationsverteilung entnommen . Sie erzeugen dazu einige unabhängige zufällige Permutationen und hoffen, dass die Ergebnisse eine repräsentative Stichprobe aller Permutationen sind.
Daher sind alle von einer solchen Stichprobe abgeleiteten Zahlen (wie z. B. ein "p-Wert") nur Schätzer für die Eigenschaften der Permutationsverteilung. Es ist durchaus möglich - und häufig bei großen Effekten -, dass der geschätzte p-Wert Null ist. Daran ist nichts auszusetzen, aber es wirft sofort die bisher vernachlässigte Frage auf, inwieweit der geschätzte p-Wert vom richtigen Wert abweichen kann. Da die Stichprobenverteilung eines Anteils (z. B. ein geschätzter p-Wert) binomisch ist, kann dieser Unsicherheit mit einem binomischen Konfidenzintervall begegnet werden .
Die Architektur
Eine gut aufgebaute Implementierung wird die Diskussion in jeder Hinsicht genau verfolgen. Es würde mit einer Routine beginnen, die Teststatistik zu berechnen, da diese die Mittelwerte von zwei Gruppen vergleicht:
Schreiben Sie eine weitere Routine, um eine zufällige Permutation des Datensatzes zu generieren und die Teststatistik anzuwenden. Die Schnittstelle zu dieser ermöglicht es dem Aufrufer, die Teststatistik als Argument anzugeben. Es werden die ersten
m
Elemente eines Arrays (vermutlich eine Referenzgruppe) mit den verbleibenden Elementen (der "Behandlungs" -Gruppe) verglichen .Die Permutation Test wird bestimmt, indem die Statistik für die eigentlichen Daten zuerst durchgeführt (hier angenommen , in zwei Arrays gespeichert werden
control
undtreatment
) und dann Statistiken für viele unabhängigen Zufälle Permutationen davon zu finden:Berechnen Sie nun die Binomialschätzung des p-Wertes und ein Konfidenzintervall dafür. Eine Methode verwendet die
binconf
in dasHMisc
Paket integrierte Prozedur :Es ist keine schlechte Idee, das Ergebnis mit einem anderen Test zu vergleichen, auch wenn bekannt ist, dass dies nicht ganz zutreffend ist: Zumindest könnte man eine Größenordnung erkennen, wo das Ergebnis liegen sollte. In diesem Beispiel (zum Vergleichen der Mittelwerte) liefert ein Student-T-Test normalerweise trotzdem ein gutes Ergebnis:
Diese Architektur wird in einer komplexeren Situation mit
R
Arbeitscode unter Testen, ob Variablen der gleichen Verteilung folgen dargestellt .Beispiel
Nachdem ich mit dem obigen Code einen Permutationstest durchgeführt hatte, zeichnete ich die Stichprobe der Permutationsverteilung zusammen mit einer vertikalen roten Linie auf, um die tatsächliche Statistik zu markieren:
Die Berechnung der Binomialvertrauensgrenze ergab
3.16e-05
Bemerkungen
quelle
(B ist die Anzahl der zufälligen Permutationen, bei denen eine Statistik erhalten wird, die größer oder gleich der beobachteten ist, und M ist die Gesamtzahl der abgetasteten zufälligen Permutationen).
quelle