生データではなくサンプル統計を入力して、Rで2サンプルのt検定を実行する方法は?


32

以下の統計があるとしましょう

gender mean sd n
f 1.666667 0.5773503 3
m 4.500000 0.5773503 4

実際のデータではなく、このような統計を使用して、2サンプルのt検定(ある変数の男性と女性の平均に有意差があるかどうかを確認する)を実行するにはどうすればよいですか?

インターネット上でこれを行う方法を見つけることができませんでした。ほとんどのチュートリアルとマニュアルは、実際のデータセットのみを使用したテストを扱っています。


2
このウィキペディアの記事に加えて、Rのt分布関数のヘルプページ(by by ?pt)-特に参照してくださいpt()-これを自分で行うために必要なすべての情報があります。そして、もしそうすれば、統計とRについて多くを学ぶでしょう。
ジョシュオブライエン

2
ここにはすでに良い答えがあります。実際、自分で関数を書くのは非常に簡単です(そして良い習慣です)。ただし、提供するサマリーデータからt検定(2つのサンプル;ウェルチまたは等分散と1つのサンプル)を実装するtsum.testパッケージBSDAの関数を見ることができることを追加します。基本的にはバニラRのt検定のように機能しますが、要約情報に基づいています。
Glen_b -Reinstateモニカ

1
正直なところ、私がプログラムを学んでいたとき、先生はいつも「車輪を再発明しないでください」と言っていました。したがって、最も論理的な機能は次のようになりますtsum.test()からBSDA library@Nickコックスで述べたように。@macroがコード行に記述したものとまったく同じことを行います。Rでt検定統計量を計算するためのバックグラウンド計算を理解すると、質問が尋ねられた場合、マルコがより適切な答えになります。注意してください、私は誰かを怒らせるつもりはなく、私の職業的背景に関連する私の個人的な意見を述べるだけです。そして、@ marcoはちょっとしたコーディングです:)
tcratius

回答:


37

あなたは、私たちが知っている内容に基づいて独自の関数を書くことができ、二標本の力学検定t。たとえば、これは仕事をします:

# m1, m2: the sample means
# s1, s2: the sample standard deviations
# n1, n2: the same sizes
# m0: the null value for the difference in means to be tested for. Default is 0. 
# equal.variance: whether or not to assume equal variance. Default is FALSE. 
t.test2 <- function(m1,m2,s1,s2,n1,n2,m0=0,equal.variance=FALSE)
{
    if( equal.variance==FALSE ) 
    {
        se <- sqrt( (s1^2/n1) + (s2^2/n2) )
        # welch-satterthwaite df
        df <- ( (s1^2/n1 + s2^2/n2)^2 )/( (s1^2/n1)^2/(n1-1) + (s2^2/n2)^2/(n2-1) )
    } else
    {
        # pooled standard deviation, scaled by the sample sizes
        se <- sqrt( (1/n1 + 1/n2) * ((n1-1)*s1^2 + (n2-1)*s2^2)/(n1+n2-2) ) 
        df <- n1+n2-2
    }      
    t <- (m1-m2-m0)/se 
    dat <- c(m1-m2, se, t, 2*pt(-abs(t),df))    
    names(dat) <- c("Difference of means", "Std Error", "t", "p-value")
    return(dat) 
}
x1 = rnorm(100)
x2 = rnorm(200) 
# you'll find this output agrees with that of t.test when you input x1,x2
t.test2( mean(x1), mean(x2), sd(x1), sd(x2), 100, 200)
Difference of means       Std Error               t         p-value 
        -0.05692268      0.12192273     -0.46687500      0.64113442 

1
私の編集し、比較t.test拒否しまったが、ので、ここで確認するためにいくつかのコードです:(tt2 <- t.test2(mean(x1), mean(x2), sd(x1), sd(x2), length(x1), length(x2))); (tt <- t.test(x1, x2)); tt$statistic == tt2[["t"]]; tt$p.value == tt2[["p-value"]]
マックスGhenis

20

t=平均f平均m予想される差SE  SE=sdf2nf+sdm2nm  ここで、    df=nm+nf2

予想される差はおそらくゼロです。

p値が必要な場合は、次のpt()関数を使用します。

pt(t, df)

したがって、コードをまとめる:

> p = pt((((1.666667 - 4.500000) - 0)/sqrt(0.5773503/3 + 0.5773503/4)), (3 + 4 - 2))
> p
[1] 0.002272053

これは、標準偏差が同じであるため明らかな等しい分散を想定しています。


Rp

この場合に提供される自由度は間違っています!等しくない分散を仮定するプールされていない分散を使用します。したがって、自由度はScatterwaite近似を使用してより正確です。
lzstat

7

ブックの式(Webページ上)に基づいて計算を行うか、指定されたプロパティを持つランダムデータを生成し(パッケージのmvrnorm関数を参照MASSt.test、シミュレートされたデータで通常の関数を使用できます。


「指定されたプロパティを持つランダムデータを生成できます」と言うとき、母平均と標準偏差がサンプル値に等しいデータをシミュレートするか、サンプル平均と標準偏差が事前に等しいという制約の下でシミュレートすることを意味しますか指定値?
マクロ

2
シミュレートされたデータに、問題で述べられているのとまったく同じ平均値と変数を持たせる必要があります。これを行う1つの方法(他にも多くあります)はmvrnormMASSパッケージ内の関数を使用することです(経験的引数をTRUEに設定する必要があります)。
グレッグスノー

2

質問はRについて尋ねていますが、問題は他の統計ソフトウェアで発生する可能性があります。たとえば、Stataにはさまざまないわゆる即時コマンドがあり、要約統計だけから計算できます。ここで適用されるコマンドの特定のケースについては、http://www.stata.com/manuals13/rttest.pdfを参照してくださいttesti

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.