4

次のデータフレームでRを使用してt検定を実行しようとしました。

df <- structure(list(freq = c(9, 11, 14, 12, 10, 9, 16, 10, 11, 15, 
13, 12, 12, 13, 13, 9, 16, 14, 12, 15, 16, 10, 11, 13, 14, 14, 
14, 16, 8, 10, 14, 14, 11, 11, 11, 11, 13, 7, 12, 13, 14, 11, 
11, 13, 10, 14, 10, 10, 12, 8, 9, 12, 14, 11, 12, 12, 14, 14, 
14, 15, 12, 13, 14, 8, 9, 11, 10, 14, 12, 12, 9, 10, 8, 14, 11, 
14, 9, 13, 13, 13, 10, 9, 13, 10, 13, 10, 13, 12, 11, 12, 10, 
12, 8, 11, 12, 15, 12, 12, 11, 13, 12, 10, 13, 9, 11, 9, 11, 
8, 12, 12, 12, 10, 11, 12, 9, 13, 14, 11, 11, 14, 13, 12, 14, 
15, 12, 12, 12, 14), class = structure(c(3L, 3L, 2L, 2L, 2L, 
2L, 2L, 3L, 2L, 3L, 4L, 4L, 4L, 4L, 3L, 2L, 3L, 2L, 1L, 4L, 1L, 
4L, 1L, 4L, 2L, 2L, 3L, 3L, 2L, 4L, 1L, 4L, 4L, 4L, 3L, 3L, 3L, 
2L, 1L, 4L, 3L, 3L, 1L, 4L, 1L, 2L, 2L, 3L, 3L, 4L, 2L, 2L, 3L, 
3L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 1L, 4L, 1L, 1L, 1L, 2L, 2L, 3L, 
2L, 3L, 2L, 3L, 3L, 4L, 2L, 1L, 4L, 1L, 1L, 3L, 2L, 2L, 2L, 3L, 
1L, 1L, 1L, 1L, 3L, 4L, 4L, 4L, 4L, 4L, 1L, 1L, 1L, 3L, 3L, 4L, 
4L, 3L, 4L, 4L, 4L, 4L, 3L, 3L, 1L, 4L, 4L, 1L, 4L, 4L, 1L, 3L, 
1L, 2L, 2L, 1L, 2L, 1L, 1L, 3L, 3L, 2L, 1L), .Label = c("ending", 
"mobile", "stem.first", "stem.second"), class = "factor")), .Names = c("freq", 
"class"), row.names = c(NA, -128L), class = "data.frame")

以前の投稿で読んだように、Rでこれを行う方法は複数あります。 t.test-functionと-functionの両方を使用してみましたpairwise.t.test

使用t.testするために、比較するクラスごとにデータフレームをサブセット化し、サブセットに対して後続のt検定を実行しました。

ending.vs.mobile <- df[df$class=="ending"|df$class=="mobile",]
ending.vs.first <- df[df$class=="ending"|df$class=="stem.first",]
ending.vs.second <- df[df$class=="ending"|df$class=="stem.second",]
mobile.vs.first <- df[df$class=="mobile"|df$class=="stem.first",]
mobile.vs.second <- df[df$class=="mobile"|df$class=="stem.second",]
first.vs.second <- df[df$class=="stem.first"|df$class=="stem.second",]

t.test(ending.vs.mobile$freq ~ ending.vs.mobile$class, var.equal=T) 
t.test(ending.vs.first$freq ~ ending.vs.first$class, var.equal=T) 
t.test(ending.vs.second$freq ~ ending.vs.second$class, var.equal=T) 
t.test(mobile.vs.first$freq ~ mobile.vs.first$class, var.equal=T) 
t.test(mobile.vs.second$freq ~ mobile.vs.second$class, var.equal=T) 
t.test(first.vs.second$freq ~ first.vs.second$class, var.equal=T)

私が理解している限り(ここでは間違っているかもしれませんが)、pairwise.t.testすべてのサブセットを作成する必要はなく、元のデータフレーム上で実行できるため、ここの方が便利です。

pairwise.t.test(df$freq, df$class, p.adjust.method="none", paired=FALSE, pooled.sd=FALSE)

ただし、ここでは異なる結果が得られます。これは、stem.secondとの比較で最も顕著です。p= 0.7を使用しt.test、p=0.1を使用しpairwise.t.testます。

ここで何が問題になっていますか?私はどこでsthをしましたか。間違い?


問題自体は解決しましたが、それが発生した理由は、私を少しパラノイアにしていると思います(もう自分自身を信頼していません):入力するpooled.sd代わりに入力するだけでpool.sdは、期待する結果が得られません。これはエラーが発生しやすいのではないですか?

他の多くの場合、たとえば、、、、などのバリアントを入力できbonfます。ただし、「pooled sd」は実際には意図されていますが、ここでは完全に無視されます。わかりました。出力の見出しをよく読むと、「プールされたSDでテストします」と表示されているため、認識されなかったと推測できますが、出力を自己にパイプする場合など、これを印刷しないとどうなりますか。書かれた関数?このエラーが認識されない可能性があります。bonferronifa()factor()pooled.sdpooled.sd

Rの一部の開発者に手紙を書く必要があります。これは、Rの将来のリリースでは、両方のスペルのバリエーションが有効になるはずです。

4

3 に答える 3

6

問題は、p値の補正ではなく、分散の仮定(の宣言)にあります。あなたはvar.equal=Tあなたのt.test電話とpooled.sd=FALSEあなたの電話で使用しましたpairwise.t.test。ただし、の引数pairwise.t.testpool.sd、ではなく、pooled.sdです。これを変更すると、への個々の呼び出しと同等のp値が得られます。t.test

pairwise.t.test(df$freq, df$class, p.adjust.method="none", 
                paired=FALSE, pool.sd=FALSE)
于 2012-07-12T18:03:51.600 に答える
2

ここには何も問題はありません。pairwise.t.test複数の比較を行っているという事実を調整するために、p値を修正するため、さまざまなテストを行っています。

(簡単に言えば、複数の比較を行っている場合は、誤った結果が見つかる可能性が高くなります。修正により、これが調整されます。)

のヘルプは?pairwise.t.test?p.adjust詳細を見つけることができる を示します。

(または、間違いのない知恵のフォントを読むことができます: http://en.wikipedia.org/wiki/Multiple_comparisons )

于 2012-07-12T15:17:31.100 に答える
1

重要な結果に続いて、多重比較手順を備えた一元配置分散分析が必要です。さらに、あなたのデータライキーにはペアリングがありません。たとえば、テスト前、テスト後の1人の測定値で、データは各人の中でペアになっています。

于 2012-07-12T18:27:26.480 に答える