0

これは私のデータセットであり、このデータセットのスクリプトを作成しようとしているRとiamは初めてです。

R> head(KenTau)
  Age CapReg TrSw FeelChk CanSw
1  20      1    0       0     0
2  36      1    0       0     0
3  35      1    3       2     2
4  21      0    0       2     2
5  43      0    0       2     2
6  34      1    0       0     0 

TrSwを残りのcolmn変数と比較したい

TrSw Vs Age
TrSw Vs CapReg  
TrSw Vs FeelChk 
TrSw Vs CanSw

これを使用してRで実行し、このコマンドを使用します

cor.test(KenTau$Age, KenTau$TrSw, alternative="two.sided", method="kendall")

また、50に近い変数があるので、リストを作成できるように、年齢とp値を抽出したいと思います。

dput()データの:

KenTau <- structure(list(Age = c(20L, 36L, 35L, 21L, 43L, 34L, 37L, 62L, 
54L, 47L, 48L, 45L, 2L, 2L, 2L, 54L, 52L, 40L, 58L, 29L, 27L, 
28L, 46L, 35L, 50L, 31L, 48L, 2L, 29L, 54L, 52L, 28L, 28L, 26L, 
38L, 59L, 51L, 58L, 39L, 44L, 53L, 2L, 39L, 55L, 48L, 2L, 23L, 
51L, 50L, 26L, 28L, 40L, 38L, 61L, 52L, 33L, 2L, 59L, 27L, 45L, 
45L, 57L, 66L, 52L, 58L, 34L, 28L, 39L, 48L, 53L, 39L, 46L, 57L, 
36L, 25L, 22L, 29L, 46L, 25L, 25L, 35L, 44L, 24L, 26L, 33L, 27L, 
41L, 28L, 26L, 32L, 36L, 35L, 32L, 33L, 29L, 29L, 52L, 55L, 23L, 
29L, 45L, 26L, 48L, 54L, 50L, 35L, 27L, 39L, 41L, 30L, 30L, 31L, 
27L, 28L, 27L, 25L, 34L, 23L, 30L, 34L, 52L, 20L, 31L, 2L, 45L, 
34L, 21L, 60L, 34L, 40L, 47L, 30L, 54L, 36L, 32L, 31L, 55L, 57L, 
23L, 31L, 26L, 26L, 27L, 19L, 26L, 25L, 37L, 47L, 38L, 38L, 26L, 
25L, 41L), CapReg = c(1L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 
1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 
0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 
1L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 
0L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 
1L, 0L, 1L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 
1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 
1L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 
1L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), 
    TrSw = c(0L, 0L, 3L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 
    1L, 0L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 
    0L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 
    1L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    0L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 
    1L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 
    1L, 1L, 0L, 3L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 
    1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 
    1L, 1L, 0L, 1L, 1L, 1L), FeelChk = c(0L, 0L, 2L, 2L, 2L, 
    0L, 2L, 2L, 2L, 3L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 2L, 0L, 1L, 
    0L, 1L, 2L, 2L, 1L, 1L, 0L, 2L, 2L, 1L, 2L, 2L, 0L, 1L, 2L, 
    0L, 1L, 2L, 2L, 3L, 0L, 2L, 1L, 0L, 0L, 2L, 1L, 2L, 2L, 1L, 
    1L, 0L, 1L, 2L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 3L, 1L, 2L, 1L, 
    1L, 0L, 0L, 1L, 1L, 1L, 0L, 2L, 3L, 1L, 2L, 2L, 1L, 1L, 0L, 
    2L, 1L, 0L, 1L, 1L, 0L, 2L, 1L, 1L, 0L, 0L, 0L, 2L, 1L, 2L, 
    1L, 0L, 0L, 0L, 0L, 2L, 0L, 1L, 0L, 2L, 2L, 2L, 0L, 0L, 2L, 
    3L, 2L, 0L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 0L, 0L, 1L, 2L, 2L, 
    1L, 1L, 2L, 0L, 3L, 1L, 0L, 1L, 1L, 2L, 2L, 3L, 3L, 1L, 0L, 
    0L, 2L, 0L, 2L, 2L, 3L, 0L, 1L, 1L, 2L, 0L, 0L, 0L), CanSw = c(0L, 
    0L, 2L, 2L, 2L, 0L, 2L, 2L, 2L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 
    0L, 2L, 2L, 0L, 0L, 0L, 2L, 2L, 0L, 0L, 2L, 2L, 2L, 3L, 2L, 
    2L, 0L, 0L, 2L, 0L, 0L, 2L, 2L, 1L, 1L, 2L, 0L, 0L, 2L, 2L, 
    3L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 0L, 1L, 0L, 2L, 1L, 3L, 1L, 
    0L, 0L, 2L, 0L, 0L, 0L, 2L, 0L, 1L, 1L, 1L, 2L, 0L, 1L, 2L, 
    2L, 1L, 1L, 0L, 2L, 0L, 0L, 1L, 0L, 0L, 2L, 1L, 0L, 0L, 0L, 
    0L, 2L, 1L, 2L, 0L, 2L, 2L, 0L, 1L, 2L, 0L, 1L, 0L, 2L, 2L, 
    2L, 0L, 0L, 2L, 3L, 2L, 0L, 0L, 2L, 2L, 2L, 2L, 2L, 2L, 0L, 
    0L, 0L, 2L, 2L, 1L, 1L, 2L, 1L, 0L, 0L, 2L, 0L, 1L, 2L, 2L, 
    1L, 1L, 0L, 0L, 2L, 2L, 0L, 2L, 2L, 3L, 1L, 1L, 0L, 2L, 0L, 
    2L, 0L)), .Names = c("Age", "CapReg", "TrSw", "FeelChk", 
"CanSw"), class = "data.frame", row.names = c(NA, -153L))
4

1 に答える 1

3

50 の相関の p 値を生成することの統計的メリットについては確信が持てませんが、これは非常に簡単に行うことができlapply()ます。

このために、他のすべてのものと比較したい変数ではないため、namesのインデックスを反復処理することを選択しました。最初に次を使用してこれらのインデックスを取得します。KenTau"TrSw"which()

R> inds <- which(names(KenTau) != "TrSw")
R> inds
[1] 1 2 4 5

次に、 への呼び出しを設定します。lapply()ここで、 を反復処理しindsます。ind最初の引数としてインデックスを受け取る無名関数が必要になり (これはlapply()、各反復で関数を渡すものです)、データを渡す必要があります。これは引数として行いますxcor.test()あなたの例に示すように、私の匿名関数は呼び出しますx[, ind]が、相関している現在のインデックスまたは列を参照するために がどのように使用されているかに注意してくださいTrSwlapply()呼び出しの最後の部分ではx、データを as として渡すように指示されKenTauているため、無名関数で表示されるたびxに、これは実際には のコピーを参照しますKenTau

cors <- lapply(inds,
               function(ind, x) {
                   cor.test(x[, ind], x[, "TrSw"], alternative="two.sided",
                            method="kendall")
               }, x = KenTau)

リストにいくつかの名前を追加すると、cors後で役立つので、今すぐ実行してください。

names(cors) <- names(KenTau)[inds]

見るcorsと、それがリストであることがわかります:

R> str(cors, max = 1)
List of 4
 $ Age    :List of 8
  ..- attr(*, "class")= chr "htest"
 $ CapReg :List of 8
  ..- attr(*, "class")= chr "htest"
 $ FeelChk:List of 8
  ..- attr(*, "class")= chr "htest"
 $ CanSw  :List of 8
  ..- attr(*, "class")= chr "htest"

リストの各要素は class のオブジェクトであり"htest"、これがcor.test()返されます。比較対象の変数が 4 つあったため、このようなオブジェクトは 4 つありますTrSw

p値を抽出したいので、これが"htest"オブジェクトのどこに格納されているかを確認する必要があります。

R> str(cors[[1]])
List of 8
 $ statistic  : Named num 1.57
  ..- attr(*, "names")= chr "z"
 $ parameter  : NULL
 $ p.value    : num 0.116
 $ estimate   : Named num 0.105
  ..- attr(*, "names")= chr "tau"
 $ null.value : Named num 0
  ..- attr(*, "names")= chr "tau"
 $ alternative: chr "two.sided"
 $ method     : chr "Kendall's rank correlation tau"
 $ data.name  : chr "x[, ind] and x[, \"TrSw\"]"
 - attr(*, "class")= chr "htest"

上記の出力は、p値が component に格納されていることを示していますp.value4 つのp値をすべて抽出するには、実際には次のようにします。

 res[[i]][["p.value"]]

iの各要素はどこにありcorsますか。このためlapply()に再び使用できますがsapply()、結果を単純化してベクトルにするので、この場合はより適切です。sapply()コールは毎ターン通過するのでres[[i]][[関数を適用するだけで済みます (はい、そうではないかもしれませんが、関数です; "[["())。この関数は引数を 1 つ取り (この場合、抽出するコンポーネントの名前を使用できます)、次のように渡します"p.value"

res <- sapply(cors, `[[`, "p.value")

に追加namesしたためcors、は、名前付き変数と の間の相関のpsapply()値を含む名前付きベクトルを返します。TrSw

R> res
         Age       CapReg      FeelChk        CanSw 
1.157889e-01 3.920115e-01 2.189736e-04 1.578040e-06

結果の別のコンポーネントが必要な場合は、たとえば検定統計量自体を、"p.value"必要なコンポーネントの名前に置き換えます。たとえば"statistic"、Kendall の Tau を取得します。

多くの変数に対してこれを行う場合は、複数のテストとp値の調整について読んでください。結果が 50 の相関だけで役立つとは思えないからです。

于 2012-07-16T10:46:17.100 に答える