Вот очень простой способ сделать это.При этом используется цикл, который обычно не одобряется в R кружках.Тем не менее, это очень просто и не требует пояснений, что может быть плюсом для новых пользователей, и нет проблемы с слишком медленными циклами в такой ситуации.(Обратите внимание, что вы можете поработать над этим, чтобы использовать lapply()
, если хотите, но это все еще цикл, он просто выглядит по-другому.)
Просто создайте два новых поднабора фреймов данных с одинаковыми переменными,Затем зациклите кадры данных, вызывая ks.test
.Вывод не очень удобен для пользователя - он просто скажет j
- поэтому я добавляю вызов к ? WriteLines , чтобы напечатать имя тестируемой переменной.
# I am assuming the original data frame is called d
dc <- d[d$Group=="Control",]
dp <- d[d$Group=="Patient",]
for(j in 1:8){
writeLines(names(dc)[j])
print(ks.test(dc[,j], dp[,j]))
}
# Protein1
#
# Two-sample Kolmogorov-Smirnov test
#
# data: dc[, j] and dp[, j]
# D = 0.30769, p-value = 0.5882
# alternative hypothesis: two-sided
#
# Protein2
#
# Two-sample Kolmogorov-Smirnov test
#
# data: dc[, j] and dp[, j]
# D = 0.23077, p-value = 0.8793
# alternative hypothesis: two-sided
#
# Protein3
#
# Two-sample Kolmogorov-Smirnov test
#
# data: dc[, j] and dp[, j]
# D = 0.23077, p-value = 0.8793
# alternative hypothesis: two-sided
#
# Protein4
#
# Two-sample Kolmogorov-Smirnov test
#
# data: dc[, j] and dp[, j]
# D = 0.46154, p-value = 0.1254
# alternative hypothesis: two-sided
#
# Protein5
#
# Two-sample Kolmogorov-Smirnov test
#
# data: dc[, j] and dp[, j]
# D = 0.23077, p-value = 0.8793
# alternative hypothesis: two-sided
#
# Protein6
#
# Two-sample Kolmogorov-Smirnov test
#
# data: dc[, j] and dp[, j]
# D = 0.15385, p-value = 0.9992
# alternative hypothesis: two-sided
#
# Protein7
#
# Two-sample Kolmogorov-Smirnov test
#
# data: dc[, j] and dp[, j]
# D = 0.38462, p-value = 0.2999
# alternative hypothesis: two-sided
#
# Protein8
#
# Two-sample Kolmogorov-Smirnov test
#
# data: dc[, j] and dp[, j]
# D = 0.46154, p-value = 0.1265
# alternative hypothesis: two-sided
#
# Warning messages:
# 1: In ks.test(dc[, j], dp[, j]) : cannot compute exact p-value with ties
# 2: In ks.test(dc[, j], dp[, j]) : cannot compute exact p-value with ties
# 3: In ks.test(dc[, j], dp[, j]) : cannot compute exact p-value with ties
# 4: In ks.test(dc[, j], dp[, j]) : cannot compute exact p-value with ties
Это создаст фрейм данных для размещения результатов:
dk <- data.frame(Protein=character(8), D=numeric(8), p=numeric(8), stringsAsFactors=F)
for(j in 1:8){
k <- ks.test(dc[,j], dp[,j])
dk$Protein[j] <- names(dc)[j]
dk$D[j] <- k$statistic
dk$p[j] <- k$p.value
}
dk
# Protein D p
# 1 Protein1 0.3076923 0.5881961
# 2 Protein2 0.2307692 0.8793244
# 3 Protein3 0.2307692 0.8793244
# 4 Protein4 0.4615385 0.1253895
# 5 Protein5 0.2307692 0.8793244
# 6 Protein6 0.1538462 0.9992124
# 7 Protein7 0.3846154 0.2999202
# 8 Protein8 0.4615385 0.1264877