Как применить к моим данным парный t.test или критерий Уилкоксона

Начнем с данных:

structure(list(Group = c("Mark", "Matt", "Tim", "Tom"), `1` = c(0.749552072382562, 
1.06820497349356, 1.00116263663573, 0.864987635002866), `2` = c(1.00839505250436, 
0.796306651704629, 1.02603677593328, 1.00321936833133), `3` = c(0.736638669191169, 
0.973483626272054, 1.14805519301778, 0.899272693725192), `4` = c(0.728882841159455, 
0.871211836418332, 1.0442119745299, 0.859935708928745), `5` = c(0.749552072382562, 
1.06820497349356, 1.00116263663573, 0.864987635002866), `6` = c(1.00839505250436, 
0.796306651704629, 1.02603677593328, 1.00321936833133), `7` = c(0.736638669191169, 
0.973483626272054, 1.14805519301778, 0.899272693725192), `8` = c(0.728882841159455, 
0.871211836418332, 1.0442119745299, 0.859935708928745), `9` = c(0.749552072382562, 
1.06820497349356, 1.00116263663573, 0.864987635002866), `10` = c(1.00839505250436, 
0.796306651704629, 1.02603677593328, 1.00321936833133), `11` = c(0.736638669191169, 
0.973483626272054, 1.14805519301778, 0.899272693725192), `12` = c(0.728882841159455, 
0.871211836418332, 1.0442119745299, 0.859935708928745), `13` = c(0.749552072382562, 
1.06820497349356, 1.00116263663573, 0.864987635002866), `14` = c(1.00839505250436, 
0.796306651704629, 1.02603677593328, 1.00321936833133), `15` = c(0.736638669191169, 
0.973483626272054, 1.14805519301778, 0.899272693725192), `16` = c(0.728882841159455, 
0.871211836418332, 1.0442119745299, 0.859935708928745), `17` = c(0.766036811789943, 
0.871085862829362, 1.02210371210681, 0.937452345474458), `18` = c(1.0357237385154, 
1.02805558505417, 0.946794300033338, 1.04688545274238), `19` = c(0.763210436944137, 
0.801397021884422, 0.952553568039278, 0.990226493248718), `20` = c(0.789338028300063, 
0.822815644347233, 0.958462750269733, 1.04183361434861), `21` = c(0.766036811789943, 
0.871085862829362, 1.02210371210681, 0.937452345474458), `22` = c(1.0357237385154, 
1.02805558505417, 0.946794300033338, 1.04688545274238), `23` = c(0.763210436944137, 
0.801397021884422, 0.952553568039278, 0.990226493248718), `24` = c(0.789338028300063, 
0.822815644347233, 0.958462750269733, 1.04183361434861), `25` = c(0.766036811789943, 
0.871085862829362, 1.02210371210681, 0.937452345474458), `26` = c(1.0357237385154, 
1.02805558505417, 0.946794300033338, 1.04688545274238), `27` = c(0.763210436944137, 
0.801397021884422, 0.952553568039278, 0.990226493248718), `28` = c(0.789338028300063, 
0.822815644347233, 0.958462750269733, 1.04183361434861), `29` = c(0.766036811789943, 
0.871085862829362, 1.02210371210681, 0.937452345474458), `30` = c(1.0357237385154, 
1.02805558505417, 0.946794300033338, 1.04688545274238), `31` = c(0.763210436944137, 
0.801397021884422, 0.952553568039278, 0.990226493248718), `32` = c(0.789338028300063, 
0.822815644347233, 0.958462750269733, 1.04183361434861), `33` = c(0.937894856206067, 
NA, 1.00383773624603, 1.04181193834546), `34` = c(1.03944921519508, 
NA, 0.983868286249464, 1.10409633668759), `35` = c(0.949802513948967, 
NA, 1.06522152108054, 1.04376827636719), `36` = c(0.965871712940006, 
NA, 1.18437146805406, 1.01355356488254), `37` = c(0.937894856206067, 
NA, 1.00383773624603, 1.04181193834546), `38` = c(1.03944921519508, 
NA, 0.983868286249464, 1.10409633668759), `39` = c(0.949802513948967, 
NA, 1.06522152108054, 1.04376827636719), `40` = c(0.965871712940006, 
NA, 1.18437146805406, 1.01355356488254), `41` = c(0.937894856206067, 
NA, 1.00383773624603, 1.04181193834546), `42` = c(1.03944921519508, 
NA, 0.983868286249464, 1.10409633668759), `43` = c(0.949802513948967, 
NA, 1.06522152108054, 1.04376827636719), `44` = c(0.965871712940006, 
NA, 1.18437146805406, 1.01355356488254), `45` = c(0.937894856206067, 
NA, 1.00383773624603, 1.04181193834546), `46` = c(1.03944921519508, 
NA, 0.983868286249464, 1.10409633668759), `47` = c(0.949802513948967, 
NA, 1.06522152108054, 1.04376827636719)), .Names = c("Group", 
"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", 
"13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", 
"24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", 
"35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", 
"46", "47"), row.names = c(NA, 4L), class = "data.frame")

Каждая строка представляет собой набор соотношений, которые я получил в результате сравнения двух групп. Я хотел бы знать, значительно ли отношения отличаются от 1. Итак, я хотел бы проверить, отличается ли каждая строка (вектор) от 1, используя два теста, упомянутых в заголовке. Как применить эти тесты к моим данным? Учтите, что каждая строка может иметь разную длину. NAs следует игнорировать. Как и вывод, я хотел бы иметь таблицу с 3 столбцами: Group name, p-value t-test, p.value Wilcoxon.

Может ли кто-нибудь помочь мне с этим?


person Shaxi Liver    schedule 03.02.2017    source источник


Ответы (1)


Может быть способ использовать строки исходного фрейма данных, который у вас есть, но я настоятельно рекомендую работать со столбцами (аккуратный фрейм данных).

library(dplyr)
library(tidyr)

# assuming this is the name of your original dataset
dt

# reshape to create a column for each name
dt2 = data.frame(t(dt), stringsAsFactors = F)
names(dt2) = dt2[1,]
dt2 = dt2[-1,]
dt2[,names(dt2)] = sapply(dt2[,names(dt2)], as.numeric)

# reshape to create a column of names and values
dt3 = dt2 %>% 
  gather(name,value,Mark:Tom) %>%
  filter(!is.na(value))   # remove NAs

dt3 %>%
  group_by(name) %>%     # for each name
  summarise(pval_ttest = t.test(value, mu=1, data=.)$p.value,      # calculate t test p value
            pval_wilc = wilcox.test(value, mu=1, data=.)$p.value)  # calculate Wilcoxon p value


# # A tibble: 4 × 3
#    name   pval_ttest    pval_wilc
#   <chr>        <dbl>        <dbl>
# 1  Mark 4.408038e-09 1.020895e-06
# 2  Matt 6.679416e-06 2.502045e-04
# 3   Tim 1.777060e-02 6.932590e-02
# 4   Tom 2.433548e-01 5.148382e-01

Некоторая дополнительная информация о том, как парный t-тест «понимает» измерения, которые вы ему даете, и почему различия и соотношения могут давать разные результаты. Рассмотрим следующие примеры:

# paired t test of 2 vectors of same size (before and after treatment)
# it compares the means of those vectors
t.test(1:10, 13:4, paired = T)

# Paired t-test
# 
# data:  1:10 and 13:4
# t = -1.5667, df = 9, p-value = 0.1516
# alternative hypothesis: true difference in means is not equal to 0
# 95 percent confidence interval:
#   -7.331701  1.331701
# sample estimates:
#   mean of the differences 
# -3 


# t test that compares one vector's mean to 0
# that vector is the differences of the two initial vectors
t.test(1:10 - 13:4, mu=0)

# One Sample t-test
# 
# data:  1:10 - 13:4
# t = -1.5667, df = 9, p-value = 0.1516
# alternative hypothesis: true mean is not equal to 0
# 95 percent confidence interval:
#   -7.331701  1.331701
# sample estimates:
#   mean of x 
# -3 


# t test that compares one vector's mean to 1
# that vector is the ratios of the two initial vectors
t.test(1:10 / 13:4, mu=1)

# One Sample t-test
# 
# data:  1:10/13:4
# t = -0.46036, df = 9, p-value = 0.6562
# alternative hypothesis: true mean is not equal to 1
# 95 percent confidence interval:
#   0.3229789 1.4480623
# sample estimates:
#   mean of x 
# 0.8855206 

Вы можете видеть, что парный t-тест — это простой t-тест вектора различий, который возможен, если у вас есть 2 вектора одинаковой длины (до и после обработки). Это не то же самое с простым тестом t вектора отношений.

Таким образом, разумно иметь разные результаты, но в некоторых приложениях тест отношения лучше. Проверьте свою библиографию по этому поводу.

person AntoniosK    schedule 03.02.2017
comment
Статистический тест, который мы здесь используем, не является парным t-критерием или критерием Уилкоксона, поскольку оба теста сравнивают набор значений с 1 (заранее определенное значение). Парный тест требует прямого сравнения набора измерений человека X с другим набором измерений того же человека X. Возможно, в библиографии это упоминается как парный тест, но это не так. Статистические тесты не имеют представления о том, что представляют собой эти (соотношения) значения. - person AntoniosK; 03.02.2017
comment
Можем ли мы создать вектор 1 с той же длиной, что и каждая строка, чтобы сравнить результаты с помощью парных тестов? - person Shaxi Liver; 03.02.2017
comment
Практически вы можете сравнить значения каждого пользователя с вектором из 1 с. Но теоретически, что представляет собой этот вектор? Вы никогда не измеряли эти единицы. Кроме того, до сих пор не парный тест. Подробнее о парных t-тестах см. здесь: biostathandbook.com/pairedttest.html. Мне кажется, что вы можете сделать парный t-тест, прежде чем делить свои измерения и сравнивать отношения с 1. - person AntoniosK; 03.02.2017
comment
Я объяснил свой эксперимент по этой ссылке: заголовок ="соотношение между контролем и лечением значительно отличается от 1">stats.stackexchange.com/questions/258295/ . КСТАТИ. как красивее прикреплять ссылки? - person Shaxi Liver; 03.02.2017
comment
Также взгляните на это: graphpad.com/support/ faq/the-ratio-paired-t-test, чтобы узнать, что лучше учитывать: различия или соотношения. Я уверен, что если библиография рассматривает соотношения, то для этого должна быть веская причина. - person AntoniosK; 03.02.2017
comment
Только последний вопрос, если не возражаете. Я прочитаю прикрепленные документы. Могу ли я использовать парный t-критерий перед расчетом отношения, если у меня есть, скажем, пара генов, которые в первую очередь выполняются в четырех повторах, и в целом я хотел бы знать, как конкретная группа генов изменяется при лечении. - person Shaxi Liver; 03.02.2017
comment
Ну, теперь я еще больше запутался, так как в присланной вами ссылке вы упоминаете две группы людей. Одна - контрольная группа, другая лечилась препаратом. Это определенно не парный тест, если только я что-то не упустил в плане эксперимента. В парном тесте вам потребуется одно измерение или человек X до приема препарата и один после приема препарата (один и тот же человек). Тогда другое дело, будете ли вы исследовать разницу этих значений или соотношение. Одна история — это план эксперимента, а другая — метод сравнения. - person AntoniosK; 03.02.2017
comment
Я использовал группу людей в качестве примера. Явно не хороший. Я бы отнес клеточные культуры, которые были разделены на две группы, одна из которых использовалась в качестве контроля, а вторая использовалась для лечения. Можно сказать, что обе группы представляют одного и того же человека. В этом случае я думаю, что следует использовать парный тест. - person Shaxi Liver; 03.02.2017
comment
Если они представляют одного и того же человека (перепроверьте это с кем-то, кто имеет опыт работы с биологическими приложениями), то правильно использовать парный t-критерий для сравнения различий этих измерений. Или вы можете получить коэффициенты и сравнить их с 1. - person AntoniosK; 03.02.2017
comment
Я добавил практический пример того, как все работает с тестом t, парным тестом t и тестом отношения t. Надеюсь, это поможет еще немного! :-) - person AntoniosK; 03.02.2017
comment
Спасибо, я очень ценю вашу помощь! - person Shaxi Liver; 03.02.2017
comment
как мне включить имя строки, такое как каждое наблюдение, в моем случае имя гена, если у меня есть три сравнения, то каково вычисленное значение p между этими сравнениями? есть способ сообщить об этом - person krushnach Chandra; 04.06.2019