私はRを初めて使用し、複数のグループを持つリストからデータを抽出することについて質問があります。たとえば、次のようなデータセットがあります。
data(iris)
iris$Group = rep(c("High","Low", each=5))
iris = iris[sample(nrow(iris)),]
mylist = list(iris[1:50,], iris[51:100,], iris[101:150,])
head(mylist)[[1]]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species Group
51 7.0 3.2 4.7 1.4 versicolor High
123 7.7 2.8 6.7 2.0 virginica High
147 6.3 2.5 5.0 1.9 virginica Low
23 4.6 3.6 1.0 0.2 setosa High
120 6.0 2.2 5.0 1.5 virginica Low
141 6.7 3.1 5.6 2.4 virginica High
各リスト内で、高と低の間のSpecies
P値をグループ化して計算したいと思います。たとえば、リストごとにvirginicaのHighとLowの間のP値などを取得したいと思います。t.test
Sepal.Length
Group
Group
Species
私はこれについて混乱しています。誰か助けてもらえますか?ありがとう!
ベースRでは、次のことができます
lapply(mylist, function(x)
with(x, t.test(Sepal.Length[Group == "High"], Sepal.Length[Group == "Low"])$p.value))
#[[1]]
#[1] 0.2751545
#
#[[2]]
#[1] 0.5480918
#
#[[3]]
#[1] 0.864256
またはpurrr
/tidyverse
アプローチ
library(tidyverse)
bind_rows(mylist, .id = "id") %>%
group_by(id) %>%
nest() %>%
mutate(pval = map_dbl(data, ~t.test(
.x$Sepal.Length[.x$Group == "High"],
.x$Sepal.Length[.x$Group == "Low"])$p.value))
## A tibble: 3 x 3
# id data pval
# <chr> <list> <dbl>
#1 1 <tibble [50 × 6]> 0.275
#2 2 <tibble [50 × 6]> 0.548
#3 3 <tibble [50 × 6]> 0.864
Sepal.Length
間Group = "Low"
およびGroup = "High"
内部のt検定を実行するには、Species
次のことができます。
lapply(mylist, function(x)
with(x, setNames(sapply(unique(Species), function(y)
t.test(Sepal.Length[Group == "High" & Species == y], Sepal.Length[Group == "Low" & Species == y])$p.value), unique(Species))))
#[[1]]
#versicolor virginica setosa
#0.80669755 0.07765262 0.47224383
#
#[[2]]
# setosa virginica versicolor
# 0.6620094 0.2859713 0.2427945
#
#[[3]]
#versicolor setosa virginica
# 0.5326379 0.6412661 0.5477179
多重仮説検定では、生のp値を調整する必要があることに注意してください。
多重仮説検定を説明するために、上記のコードを少し変更して、
lapply(mylist, function(x)
with(x, p.adjust(setNames(sapply(unique(Species), function(y)
t.test(Sepal.Length[Group == "High" & Species == y], Sepal.Length[Group == "Low" & Species == y])$p.value), unique(Species)))))
#[[1]]
#versicolor virginica setosa
# 0.9444877 0.2329579 0.9444877
#
#[[2]]
# setosa virginica versicolor
# 0.7283836 0.7283836 0.7283836
#
#[[3]]
#versicolor setosa virginica
# 1 1 1
ここではp.adjust
、デフォルトのホルム補正を使用します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加