2016-03-18 10 views
0

Bir genin farklı alelleri ve toplam örnek sayısı (1242890) için bir frekans verisi var. İstatistiksel testler yapmak için (Ki-kare, Fisher vb) allellerin görülme sayısına ihtiyacım var. Frekans verisini her alelin en hassas sayımını (tamsayı) dönüştürmenin en iyi yolu nedir? R'de herhangi bir işlev var mı? excel ben toparlama, ROUNDDOWN işlevini ve yuvarlak denedim:Frekans verilerinin örnek sayılarına dönüştürülmesinin en iyi yolu nedir (tamsayı)

*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

Bu örnekte beklenen çıktı nedir? – mtoto

+2

Ben sadece Frekans ve 1242890 ürününü yuvarlamak istediğinizi tahmin ediyorum? R, 'yuvarlak (1242890 * Frekans)' Bu tam bir sayı verecektir. Denediğin yöntemlerin nesi var? Özel problem örnekleri verebilir misiniz? – MrFlick

+0

Bu excel denedim ama sorun toplam sayımı hiçbir zaman 1242890'a eşittir, ki bu muhtemelen sıklık değerleri 1'e eklenmez çünkü OK. –

cevap

0

Rastgele veri kümesi: Sen mapply ile sütun boyunca bir işlevi uygulayabilirsiniz

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 

:

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

    return(result) 
} 

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

ederim örneği dönüş için ;

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

Her allel olurdu (Yorumlarınız itibaren) 1242890 eşittir toplam sayısı o almak için tek yol olduğu için her frekans sayımı tam 1'e yuvarlanır edilirse, sadece bu demektir asla tam olarak bir kez görüldü. Büyük bir örnek büyüklüğü ile çarptığınız düşünüldüğünde, çok küçük frekanslar bile oldukça büyük olacaktır. Örnek veri kümenizdeki en küçük frekans bile round(1242890*0.00033) = 410 olacaktır. Veri kümenizdeki tüm frekanslar 0,00001 olsa bile, round(1242890*0.00001)*1242890 = 14914680 sayısıyla sonuçlanır.

Bu söylendiği gibi, neden yuvarlanıyorsunuz? Bu, biraz doğruluk kaybettiğiniz anlamına gelir. İstatistikte kesinlikle uzman olmamakla birlikte, hatalı verilerle ilgili istatistiksel testler yapmak garip görünüyor. Bildiğim kadarıyla, chisq.test() ve R'de fisher.test()'u çalıştırmak için, hiçbir şeyi yuvarlamanız gerekmez. Yine de, bu tamamen farklı bir konu olabilir ve bu konudaki bilgim sınırlıdır.

+0

toplam sayısı göz önüne alındığında yuvarlamayı geliştiren daha iyi bir yol olabileceğini düşündüm Bunu daha önce düşünmüştüm ama sanırım yuvarlama daha iyi bir seçenek çünkü bu, bireylerin verileridir ve dikkatli olmalıdır. Yani, belirli bir alleli olan 9999.7231 kişiyi söyleyemezsiniz, ya 9999 ya da 10000 olmalıdır. –

İlgili konular