You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为事件序列计算P值?R语言重复样本数据处理求助

为数据集添加P值的技术方案

你的数据中每个Accession对应Rep1、Rep2两个重复样本,针对First、Condition1、Condition2这三个指标,可通过以下步骤计算并添加P值,同时整合你已有的中位数、统计量结果:

核心思路

按Accession分组,对每个数值指标做两样本统计检验(根据数据分布选t检验或Wilcoxon秩和检验)得到P值,再将P值与你已有的统计量结果合并。

具体代码实现

1. 计算每个指标的P值

# 加载必要包
library(dplyr)
library(tidyr)

# 方式1:参数检验(t检验,适用于数据符合正态分布的情况)
p_value_df <- df %>%
  group_by(Accession) %>%
  summarise(
    across(where(is.numeric), ~ t.test(.x ~ grp)$p.value, .names = "{col}_pval"),
    .groups = "drop"
  )

# 方式2:非参数检验(Wilcoxon秩和检验,适用于数据偏态/不符合正态的情况)
# p_value_df <- df %>%
#   group_by(Accession) %>%
#   summarise(
#     across(where(is.numeric), ~ wilcox.test(.x ~ grp)$p.value, .names = "{col}_pval"),
#     .groups = "drop"
#   )

2. 修正原有统计量计算逻辑(避免冗余)

你原代码用mutate会生成重复的中位数/SD值,改用summarise按Accession分组计算更合理:

# 计算每个Accession下各指标的中位数、SD
summary_stats <- df %>%
  group_by(Accession) %>%
  summarise(
    across(where(is.numeric), list(median = ~median(.x), SD = ~sd(.x)), .names = "{col}_{.fn}"),
    .groups = "drop"
  )

# 若需保留Rep1/Rep2各自的统计量(与原代码逻辑一致),用这段:
summary_stats_by_rep <- df %>%
  group_by(Accession, grp) %>%
  summarise(
    across(where(is.numeric), list(median = ~median(.x), SD = ~sd(.x)), .names = "{col}_{.fn}"),
    .groups = "drop"
  ) %>%
  pivot_wider(names_from = grp, values_from = matches("First|Condition1|Condition2"))

3. 合并统计量与P值

# 合并汇总型统计量与P值
final_df <- summary_stats %>%
  left_join(p_value_df, by = "Accession")

# 合并分Rep的统计量与P值
final_df_by_rep <- summary_stats_by_rep %>%
  left_join(p_value_df, by = "Accession")

关键说明

  • 检验方法选择:可先通过shapiro.test()验证数据正态性,符合正态分布则用t检验,否则用Wilcoxon检验。
  • 列名规则:代码中.names参数自动生成如First_pval、Condition1_median的列名,清晰对应各指标的统计量。

内容的提问来源于stack exchange,提问作者nik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 07:33:16