2016-03-18 7 views
0

Ich habe eine Frequenzdaten von verschiedenen Allelen eines Gens und die Gesamtzahl der Proben (1242890). Um die statistischen Tests (Chi-Quadrat, Fisher usw.) durchzuführen, brauche ich die Anzahl der Male, die Allel gesehen wurde. Was ist der beste Weg, um Frequenzdaten die genaueste Zählung jedes Allels (Integer) zu konvertieren. Gibt es irgendeine Funktion in R? In Excel Ich habe versucht, Roundup, ABRUNDEN und rund:Was ist der beste Weg, um Frequenzdaten zu Proben Zahlen (Integer) zu konvertieren

*Allele* *Frequency* 
Allele1  0.228 
Allele2  0.195 
Allele3  0.099 
Allele4  0.04 
Allele5  0.00167 
Allele6  0.00127 
Allele7  0.027 
Allele8  0.117 
Allele9  0.016 
Allele10 0.027 
Allele11 0.00031 
Allele12 0.00725 
Allele13 0.134 
Allele14 0.058 
Allele15 0.036 
Allele16 0.012 
+2

Welche Ausgabe wird basierend auf diesem Beispiel erwartet? – mtoto

+2

Ich schätze, Sie wollen nur das Produkt von Frequenz und 1242890 runden? In R, 'round (1242890 * Frequency)' Das ergibt eine ganze Zahl. Was ist falsch an den Methoden, die Sie bereits ausprobiert haben? Können Sie konkrete Beispiele für Probleme nennen? – MrFlick

+0

Ich habe dies in Excel versucht, aber das Problem ist nach der Rundung der Gesamtanzahl ist nie gleich 1242890, die wahrscheinlich OK ist, weil Häufigkeit Werte nicht zu 1 hinzufügen. Ich dachte, es gibt möglicherweise eine bessere Möglichkeit, die Rundung in Anbetracht der Gesamtzahl –

Antwort

0

Zufalls-Datensatz:

category <- letters[1:10] 
freq <- runif(10, 0.1, 0.9) 
df <- data.frame(category, freq) 

    category  freq 
1   a 0.3631365 
2   b 0.7180477 
3   c 0.2827611 
4   d 0.8640651 
5   e 0.7192371 
6   f 0.5747942 
7   g 0.3487860 
8   h 0.4138134 
9   i 0.3984429 
10  j 0.1522889 

Sie eine Funktion über eine Säule mit mapply anwenden können:

freqCount <- function(freq, sampleSize){ 
    result <- freq * sampleSize 

    return(result) 
} 

round(mapply(freqCount, df$freq, sampleSize = nrow(df))) 

Würde beispielsweise Rückkehr ;

[1] 4 7 3 9 7 6 3 4 4 2 

Sie werden nie eine Gesamtzahl erhalten, die 1.242.890 (aus Ihrem Kommentar) gleich, nur weil der einzige Weg, das zu erhalten ist, würde dies würde, wenn jede Frequenzzahl auf genau 1 gerundet wird bedeuten, dass jedes Allel wurde genau einmal gesehen. Wenn man bedenkt, dass man mit einer großen Stichprobengröße multipliziert, sind selbst sehr kleine Frequenzen ziemlich groß. Selbst die kleinste Häufigkeit in Ihrem Beispieldatensatz wäre round(1242890*0.00033) = 410. Selbst wenn alle Häufigkeiten in Ihrem Datensatz 0,00001 wären, würde dies zu einer Zählung von round(1242890*0.00001)*1242890 = 14914680 führen.

Das alles gesagt, warum reist du? Das würde bedeuten, dass Sie ein wenig Genauigkeit verlieren. Ich bin zwar kein Experte für Statistik, aber die Durchführung statistischer Tests mit ungenauen Daten scheint ... komisch. Soweit ich weiß, um chisq.test() und fisher.test() in R laufen zu lassen, müssen Sie nichts runden. Obwohl dies ein ganz anderes Thema sein könnte und mein Wissen darüber begrenzt ist.

+0

verbessert Ich habe früher darüber nachgedacht, aber ich denke, das Runden ist die bessere Option, weil das Daten von Individuen sind und es diskret sein sollte. Also können Sie nicht 9999.7231 Personen mit einem bestimmten Allel sagen, es sollte entweder 9999 oder 10000 sein. –

Verwandte Themen