2016-03-18 9 views
0

遺伝子の異なるアレルの頻度データとサンプルの総数(1242890)を持っています。統計的検定(カイ2乗、フィッシャーなど)を行うには、アレルが見られた回数が必要です。頻度データを各対立遺伝子(整数)の最も正確な数に変換する最良の方法は何ですか? Rには何か機能はありますか? Excelで私はROUNDDOWNと丸いラウンドアップを試してみました:頻度データをサンプル数(整数)に変換する最良の方法は

*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

この例ではどのような出力が得られますか? – mtoto

+2

周波数と1242890の積を丸めたいと思っていますか? Rでは、 'round(1242890 * Frequency)'は整数を与えます。既に試した方法で何が問題になっていますか?あなたは問題の具体例を挙げることができますか? – MrFlick

+0

私はExcelでこれを試しましたが、丸め後の問題は総数が1242890に決して等しくないことを意味します。周波数値が1に加算されないのでおそらくOKです。総数を考慮して丸めを改善する良い方法があるかもしれないと思った –

答えて

0

ランダムデータセット:

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 

あなたはmapplyと列全体に関数を適用することができます:例えば、リターンを

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

    return(result) 
} 

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

う;

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

あなたは、各対立遺伝子が持っているであろう(あなたのコメントから)1242890と等しい総数それを取得するための唯一の方法であるため、各周波数カウントは、正確に1に丸められた場合には、単にこれが意味するであろうを得ることはありませんちょうど一回見られました。大きなサンプルサイズを乗算していることを考慮すると、非常に小さい周波数でもかなり大きくなります。サンプルデータセットの最小頻度でさえもround(1242890*0.00033) = 410となります。データセット内のすべての頻度が0.00001になっても、結果はround(1242890*0.00001)*1242890 = 14914680となります。

これはすべて言われていますが、なぜあなたは丸めていますか?これは、あなたが少し正確を失うことを意味します。私は確かに統計の専門家ではありませんが、不正確なデータに関する統計的なテストを実行するのは...変です。私が知る限り、chisq.test()fisher.test()をRで実行するには、何も丸める必要はありません。しかし、これはまったく別の話題かもしれませんし、これに関する私の知識は限られています。

+0

私は以前これについて考えましたが、丸めは個人のデータであり、慎重にすべきであるため、より良い選択肢だと思います。したがって、特定の対立遺伝子を持つ9999.7231個の個体が9999または10000のいずれかであると言うことはできません。 –

関連する問題