web-dev-qa-db-ja.com

Rのcor()の相関分析からP値と標準誤差を計算する方法

data があり、条件(xとy)ごとに54個のサンプルが含まれています。私は次の方法で相関を計算しました:

> dat <- read.table("http://dpaste.com/1064360/plain/",header=TRUE)
> cor(dat$x,dat$y)
[1] 0.2870823

上記のRのcor()関数とT検定からのp値の相関のSEを生成するネイティブな方法はありますか?

これで説明されているように web (14.6ページ)

14
neversaint

あなたが探しているのは単にcor.test()関数だと思います。これは、相関の標準誤差を除いて、探しているすべてのものを返します。ただし、ご覧のとおり、その式は非常に単純であり、cor.testを使用すると、計算に必要なすべての入力が得られます。

例のデータを使用して(14.6ページの結果と自分で比較できるように):

> cor.test(mydf$X, mydf$Y)

    Pearson's product-moment correlation

data:  mydf$X and mydf$Y
t = -5.0867, df = 10, p-value = 0.0004731
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 -0.9568189 -0.5371871
sample estimates:
       cor 
-0.8492663 

必要に応じて、次のような関数を作成して、相関係数の標準誤差を含めることもできます。

便宜上、次の式があります。

enter image description here

r =相関推定およびn --2 =自由度。どちらも、上記の出力ですぐに利用できます。したがって、単純な関数は次のようになります。

cor.test.plus <- function(x) {
  list(x, 
       Standard.Error = unname(sqrt((1 - x$estimate^2)/x$parameter)))
}

そしてそれを次のように使用します:

cor.test.plus(cor.test(mydf$X, mydf$Y))

ここで、「mydf」は次のように定義されます。

mydf <- structure(list(Neighborhood = c("Fair Oaks", "Strandwood", "Walnut Acres",
  "Discov. Bay", "Belshaw", "Kennedy", "Cassell", "Miner", "Sedgewick", 
  "Sakamoto", "Toyon", "Lietz"), X = c(50L, 11L, 2L, 19L, 26L, 
  73L, 81L, 51L, 11L, 2L, 19L, 25L), Y = c(22.1, 35.9, 57.9, 22.2, 
  42.4, 5.8, 3.6, 21.4, 55.2, 33.3, 32.4, 38.4)), .Names = c("Neighborhood", 
  "X", "Y"), class = "data.frame", row.names = c(NA, -12L))
22

戻り値から検定統計量を単純に取得することはできませんか?もちろん、検定統計量は推定値/ seであるため、推定値をtstatで除算するだけでseを計算できます。

上記の回答でmydfを使用する:

r = cor.test(mydf$X, mydf$Y)
tstat = r$statistic
estimate = r$estimate
estimate; tstat

       cor 
-0.8492663 
        t 
-5.086732 
3
Alex