r语言如何计算t分布临界值_[统计]从p-value到q-value的计算(附代码)

fa768650831c02bed7426eeb6e844970.png

看到群里有老师在问“如何从p-value计算获得q-value”。今天简单进行下讨论,并附送一份可在命令行下独立运行的代码。首先,关于“P值”我们昨天讨论了“计算个“P值”,咱也不太懂,咱也不敢信”。大家或许还对下面的这张PPT还有印象:对于来自相同分布的两组样本,如果很多次采集数据并进行假设检验,“本不应显著的”两组样本也会出现P值很小的“显著结果”(“P-hacking”)

7183717f910c9f7613da646c53b0ba63.png

​上图中,我们对来自相同正态分布n(5,5)的x和y进行仿真,每次模拟三个重复,并进行t检验;假设我们有这么一个“劳模”进行了1000次(x轴)独立实验,并各自计算出p值(y轴);其中,红线为p=0.05的阈值线。从图上看出,1000次实验中,有很多次已经出现p<0.05的情况了。实际上,这种情况下“P-value”服从[0,1]区间的“均匀分布”;在随机情况下,1000次实验出现也能出现大约50次“P<0.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是你所需的 R 语言代码: ```R two_sample_t_test <- function(data, alpha=0.05) { group1 <- data[, 1] group2 <- data[, 2] n1 <- length(group1) n2 <- length(group2) mean1 <- mean(group1) mean2 <- mean(group2) var1 <- var(group1) var2 <- var(group2) pooled_var <- ((n1 - 1) * var1 + (n2 - 1) * var2) / (n1 + n2 - 2) t_stat <- (mean1 - mean2) / sqrt(pooled_var * (1/n1 + 1/n2)) t_crit <- qt(1 - alpha/2, n1 + n2 - 2) p_value <- 2 * pt(abs(t_stat), n1 + n2 - 2, lower.tail=FALSE) if(t_stat > t_crit) { conclusion <- "Reject null hypothesis" } else { conclusion <- "Fail to reject null hypothesis" } mean_error <- abs((mean1 - mean2) - t_crit * sqrt(pooled_var * (1/n1 + 1/n2))) cat("Group 1 mean:", round(mean1, 4), "\n") cat("Group 2 mean:", round(mean2, 4), "\n") cat("Group 1 variance:", round(var1, 4), "\n") cat("Group 2 variance:", round(var2, 4), "\n") cat("Pooled variance:", round(pooled_var, 4), "\n") cat("T statistic:", round(t_stat, 4), "\n") cat("T critical value:", round(t_crit, 4), "\n") cat("P value:", round(p_value, 4), "\n") cat("Conclusion:", conclusion, "\n") cat("Average error:", round(mean_error, 4), "\n") } h <- function(x, n) { integrate(function(t) t^(n-1), 0, x)$value + 1 } ``` 其中 `data` 参数为一个包含两列数据的数据框,表示两个样本的观测。`alpha` 参数表示显著性水平,默认为 0.05。该函数会输出样本均、样本方差、合并方差、检验统计量、t 分布临界、结论、计算的平均误差等信息。 另外,`h(x, n)` 函数可以计算 $h(x, n) = 1 + x + x^2 + \dots + x^{n-1}$ 在区间 $[5, 9]$ 上的积分,其中 `x` 参数为积分上限,`n` 参数为幂次数。该函数使用了 `integrate` 函数来进行数积分计算

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值