获取具有两个变量和多个行名的 p 值
Posted
技术标签:
【中文标题】获取具有两个变量和多个行名的 p 值【英文标题】:Get p-value with two variables and multiple row names 【发布时间】:2020-08-24 21:49:47 【问题描述】:如果你能帮助我从这个简单的 data.frame 中测量 p 值,我会徘徊。我的数据框称为(my_data)。通过查看它,您可以看到我正在比较的相似值:
my_data <- read.csv("densityleftOK.csv", stringsAsFactors = FALSE [c(1,2,3),]
P1 P2 P3 P4 P5 T1 T2 T3 T4 T5 T6
A 1008 1425 869 1205 954 797 722 471 435 628 925
B 550 443 317 477 337 383 54 111 27 239 379
C 483 574 597 375 593 553 249 325 238 354 411
因此,我想通过比较安慰剂与处理过的样本来为每一行获得一个 pvalue。如果您不介意,我还想获得安慰剂 (P) 和治疗 (T) 之间的标准差。
感谢您的帮助。 谢谢
【问题讨论】:
抱歉,您只给了我们 A:E 五个组的方法。对于 p 值和标准差,需要完整的数据。如果你向我们展示数据结构,有人可以给你 R 代码来自己计算。 感谢@Jan 的回复。我通过添加完整的数据来编辑数据。我认为现在可以了。谢谢:) 你想要做什么样的测试来得到 p 值? p 只不过是在特定假设下,您的数据看起来与它完全一样的概率。根据您的数据,我假设您想确定治疗和安慰剂值来自不同的人群。用简单的英语,你想表明它们是不同的。如果是这种情况,我需要知道治疗和安慰剂样本是否是重复测量。我认为它们是独立样本,对吗?最后,了解治疗是否应该增加或降低测量值会很有用。 是的,我确实想证明它们是不同的。列是单个组织样本,行是不同的组织区域。治疗应该降低测量值。 【参考方案1】:您可以尝试以下方法,将数据转换为长格式,按 id 分组,引入分组向量(“P”或“T”)并在 t.test 上使用 tidy 将其包装在表格格式:
library(broom)
library(tidyr)
library(dplyr)
library(tibble)
data = read.table(text="P1 P2 P3 P4 P5 T1 T2 T3 T4 T5 T6
A 1008 1425 869 1205 954 797 722 471 435 628 925
B 550 443 317 477 337 383 54 111 27 239 379
C 483 574 597 375 593 553 249 325 238 354 411",header=TRUE,row.names=1)
res = data %>%
rownames_to_column("id") %>%
pivot_longer(-id) %>%
mutate(grp=sub("[0-9]","",name)) %>%
group_by(id) %>%
do(tidy(t.test(value ~ grp,data=.))) %>%
select(c(id,estimate,estimate1,estimate2,statistic,p.value)) %>%
mutate(stderr = estimate/statistic)
# A tibble: 3 x 7
# Groups: id [3]
id estimate estimate1 estimate2 statistic p.value stderr
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 A 429. 1092. 663 3.40 0.00950 126.
2 B 226. 425. 199. 2.89 0.0192 78.2
3 C 169. 524. 355 2.65 0.0266 64.0
如果你不使用包..那么这是一个使用apply的问题,我想预先声明组更容易:
grp = gsub("[0-9]","",colnames(data))
res = apply(data,1,function(i)
data.frame(t.test(i~grp)[c("statistic","p.value","stderr")])
)
res = do.call(rbind,res)
statistic p.value stderr
A 3.395303 0.009498631 126.40994
B 2.890838 0.019173060 78.16650
C 2.646953 0.026608838 63.99812
【讨论】:
那行得通。几厘米。首先,看看你的数据。使用您拥有的少数样本,很难确定您的数据是正态分布的。如果我们可以假设,t 检验只会给你下降结果。我看了一下,你的数据很分散。您可能需要寻找非参数检验或抽样方法。 还要考虑组织区域。您是否需要所有项来显示改善,或者当只有一个区域这样做时,您会认为您的治疗有效吗?在前一种情况下,你很好。在后者中,您必须更正进行多次测试。最简单的方法是 Bonferroni 校正。这基本上意味着您将 p 值乘以组织区域的数量。在这种情况下,只有第一个区域出现 最后,我们可以假设一个单方面的测试,因为只有通过治疗才能有所改善。默认情况下,R 中的 t 检验假定双边比较。将其添加到命令中,结果将对您更有利。 @Jan.对 OP 来说似乎是很好的统计建议,你当然可以创建一个聊天室,在他的问题下留下更多的 cmets,或者自己发布一个答案。这种性质的问题或讨论更适合stats.stackexchange.com/questions以上是关于获取具有两个变量和多个行名的 p 值的主要内容,如果未能解决你的问题,请参考以下文章