0

次のようなデータフレームがあります。

>head(df)
 alleleA_obs_prob alleleB_obs_prob alleleA_exp_prob alleleB_exp_prob
    0.6923077        0.3076923              0.5              0.5
          NaN              NaN              0.5              0.5
          NaN              NaN              0.5              0.5
    0.6250000        0.3750000              0.5              0.5
    0.6250000        0.3750000              0.5              0.5
          NaN              NaN              0.5              0.5

したがって、2 つのグループがあります: alleleA と alleleB について、確率を観察し、予測しました。

このデータに対してカイ 2 乗検定を実行し、2 つのグループの期待確率と観測確率を比較するように言われました。多くのチュートリアルを検索しましたが、カイ二乗検定が 2 つのグループでどのように機能するかを理解できませんでした。明確にするために、私は人々が私のためにコードを投稿したくありません. 私はただ確信が持てないので

  1. Web 上の既存のカイ 2 乗検定の例を見ても、自分のデータに対してカイ 2 乗検定を実行する方法を理解できませんでした。

  2. 2 つのグループ間でまとめてテストを実行する例は見つかりませんでした。

  3. データフレームの各行に対してカイ二乗検定を実行する例が見つかりませんでした。

各行のカイ二乗値と p 値が必要です。どこを見ても、彼らはデータフレーム全体に対してカイ二乗テストを実行しています。

この問題を解決するにはどうすればよいか、お好きな方法でリンクを共有するか、洞察を共有してください。しかし、私があなたに私のコードを書いてほしいと思い込まないでください。

ありがとう!

4

2 に答える 2

3

まず、これは統計に関する質問であり、R に関する質問ではありません。より良い回答が得られる可能性が高いstats.stackexchange.comに投稿してみてください。

第 2 に、カイ 2 乗検定には 2 つのタイプがあります。1 つはサンプルが特定の検定分布からのものであるかどうかを評価するもので、もう 1 つは独立性を検定するものです。あなたは最初のタイプに興味があると思います。

それが正しい場合、あなたが尋ねているように見えます-あなたのdfの最初の行を例として使用して-対立遺伝子Aと対立遺伝子Bが同量存在する場合、対立遺伝子Aのサンプルを取得できる可能性はどれくらいですかは 69% 存在し、対立遺伝子 B は 31% 存在しますか? 可能性 (p) が非常に低い場合、対立遺伝子 A と対立遺伝子 B が同量存在しなかったことを 1-p の確信をもって断言できます。

[注: これがあなたの求めているものでない場合、私はあなたの質問を誤解しています - コメントでお知らせください。回答を削除します。]

あなたの場合、R の関数の気まぐれをスキップしてchisq.test(...)、Xi-sq の定義に直接行く方がおそらく良いでしょう:

χ 2 = Σ( O i - E i ) 2 / E i

ここで、O iと E iは、それぞれ i番目の観測値と期待値です。このように設定すると、各行には対立遺伝子 A と対立遺伝子 B の 2 つの観測値しかありません。したがって、行 1 については次のように記述します。

χ 2 = (0.692 - 0.5) 2 / 0.5 + (0.307 - 0.5) 2 / 0.5 = 0.148

観測値が 2 つしかないため、自由度は 1 つだけです。1 df のみを使用したカイ 2 乗検定は非常に信頼性が低いため、これはお勧めしませんが、この例を参考にすれば、カイ 2 乗がこれほど大きくなる確率またはそれ以上になる確率を R で次のように計算できます。

pchisq(0.148, df=1, lower.tail=F)
# [1] 0.700454

これは、対立遺伝子 A と対立遺伝子 B が同量存在すると仮定すると、対立遺伝子 A が 69%、対立遺伝子 B が 31% 存在するサンプルを取得できる可能性が 70% あることを意味します。したがって、帰無仮説 (対立遺伝子 A と B が等しく存在するという仮説) を棄却することは絶対にできません。

すべての行に対してこのテストを実行するのは簡単です。

df           <- na.omit(df)          # remove rows with missing values
colnames(df) <- c("A.obs","B.obs","A.exp","B.exp")  # because I'm lazy
df$chisq     <- with(df,(A.obs-A.exp)^2/A.exp + (B.obs-B.exp)^2/B.exp)
df$p.value   <- pchisq(df$chisq,df=1, lower.tail=F)
df
#       A.obs     B.obs A.exp B.exp    chisq   p.value
# 1 0.6923077 0.3076923   0.5   0.5 0.147929 0.7005224
# 4 0.6250000 0.3750000   0.5   0.5 0.062500 0.8025873
# 5 0.6250000 0.3750000   0.5   0.5 0.062500 0.8025873

実際には関数を使用chisq.test(...)してこれを行うことができますが、あなたの場合、それが改善されているかどうかはわかりません:

t(apply(df,1,function(x)
        with(chisq.test(x[1:2],p=x[3:4]),c(statistic,p.value=p.value))))
#   X-squared   p.value
# 1  0.147929 0.7005224
# 4  0.062500 0.8025873
# 5  0.062500 0.8025873
于 2014-03-29T20:54:25.747 に答える
0

彼らが意味したことは、2 つのグループのそれぞれに対してカイ 2 乗検定を実行することだと思います。

chisq.test(df[is.finite(df[, 'alleleA_obs_prob']), c('alleleA_obs_prob', 'alleleA_exp_prob')])
# X-squared = 0.002, df = 2, p-value = 0.999

chisq.test(df[is.finite(df[, 'alleleB_obs_prob']), c('alleleB_obs_prob', 'alleleB_exp_prob')])
# X-squared = 0.0052, df = 2, p-value = 0.9974
于 2014-03-29T18:51:22.840 に答える