2016-05-15 6 views
0

Ich habe eine Spalte von Daten, aus denen ich randomisierte Unter Stichproben von 50% nehme. Ich führe einen zweiseitigen ks-Test, um die Verteilung von 50% der Daten gegen 100% der Daten zu vergleichen, um zu sehen, ob die Verteilung noch eine signifikante Anpassung ist.zweiseitige ks Testschleife, erhalten p.value

Um meine Ziele zu erreichen, möchte ich dies als eine Schleife von sagen 1000 ausführen, um einen durchschnittlichen p-Wert von 1000 randomisierten Unterproben zu erhalten. Diese Codezeile gibt mir einen einzigen p-Wert für eine zufällige Teilmenge von 50% meiner Probe:

dat50=dat[sample(nrow(dat),replace=F,size=0.50*nrow(dat)),] 
ks.test(dat[,1],dat50[,1], alternative="two.sided") 

Ich brauche eine Codezeile, die diese 1000-mal ausgeführt wird den resultierenden (verschiedenen) p-Wert Speicher jeden Zeit in einer Spalte, die ich dann mitteln kann. Der Code, den ich versuche, zur Arbeit zu kommen sieht wie folgt aus:

x <- numeric(100) 
for (i in 1:100){ 
    x<- ks.test(dat[,7],dat50[,7], alternative="two.sided") 
    x<-x$p.value 
} 

jedoch diese nicht speichert mehr p-Wert

Auch dies versucht:

get.p.value <- function(df1, df2) { 
    x <- rf(5, df1=df1, df2=df2) 
    p.value <- ks.test(dat[,6],dat50[,6], alternative="two.sided")$p.value 
} 
replicate (2000, get.p.value(df1 = 5, df2 = 10)) 

Ich hoffe, das ist klar und ich würde jede Hilfe bei der Lösung dieses Problems sehr schätzen!

Q

+2

Das macht keinen Sinn. Sie wissen, dass die Teilstichprobe aus der vollen Variablen gezogen wurde, also wissen Sie, dass die Null wahr ist. Warum tust du das? Was ist dein ultimatives Ziel? – gung

+0

Danke für die Antwort! Ich vergleiche die Repräsentativität der Sampling-Strategien, ich habe einen Datensatz von 137 Proben von einer Methode und meine Frage ist, wie viele Proben erforderlich wären, um die gleiche Repräsentativität statistisch durch zufällige Stichproben zu treffen. Da die räumliche Abdeckung des vollständigen Datasets sehr gut ist, ist kein erneutes Sampling erforderlich, da ich eine zufällige Untergruppe verwenden kann. Die Verteilungen meiner Variablen sind nicht normal, so dass ich denke, dass ich feststellen kann, ob eine 50% -Unterabtastung repräsentativ für die Verteilung der gesamten Stichprobe ist, indem ein zweiseitiger ks-Test verwendet wird. –

+0

* Antwort fortgesetzt * Problem ist nur, dass eine zufällige Teilmenge von 50% der Probe mir einen p-Wert irgendwo zwischen 0,5 und 1 geben kann, je nachdem wie oft ich die zufällige Teilstichprobe nehme. Um dies zu lösen, dachte ich, ich könnte die p-Werte aus der Randomisierung 1000 mal nehmen und das Ergebnis mitteln. Ich habe gerade nicht gut genug gelernt, um den Code zu erstellen. Hoffe, dass es erklärt –

Antwort

0

In Ihrer for-Schleife Sie x in jeder Iteration überschreiben was bedeutet, dass Sie nur den p-Wert für die letzte Iteration sparen. Versuchen Sie stattdessen:

x <- numeric(100) 
for (i in 1:length(x)) 
    x[i] <- ks.test(dat[,17], dat[sample(nrow(dat), replace=F, size=0.5*nrow(dat)),7])$p.value 

Sie das gleiche Ergebnis mit bekommen replicate mit:

replicate(100, ks.test(dat[,7], dat[sample(nrow(dat), replace=F, size=0.5*nrow(dat)),7])$p.value) 
+0

Vielen Dank! Die erste Zeile scheint zu funktionieren! –

+0

Der 'Replikat' Code scheint zu kommen mit: Fehler in Daten [Beispiel (nrow (dat), ersetzen = F, Größe = 0,5 * nrow (dat)),: Objekt des Typs 'Schließung' ist nicht Teilmenge Tabelle Ich bin mir auch nicht sicher, wo ich die p-Werte für diesen finden kann. Ich kann sie im ersten Code abrufen, indem ich einfach 'x' starte. Der erste Code funktioniert ein Traum, also noch einmal vielen Dank! –

+0

Ein Tippfehler im '' 'replicate''' Beispiel wurde behoben. – DGKarlsson