立即注册找回密码

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

手机动态码快速登录

手机号快速注册登录

搜索

图文播报

查看: 141|回复: 0

[分享] 如何理解p-value

[复制链接]
发表于 2025-5-10 16:37 | 显示全部楼层 |阅读模式

登陆有奖并可浏览互动!

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录 手机动态码快速登录

×
这还是我第一次因为“学术讨论”在知乎上被拉黑。
事情是这样的,有人在我一个回答里面抛出了这么一个问题:
说实话,你对p-value的定义作为学统计的我都不能理解。来做个测试吧,这个是Jim Berger 课件里的一个example,来测试一下“学了很多年的经济学家”到底懂不懂p-value。Example: A survey 30 years ago asked
“What would you conclude if a properly conducted, randomized
clinical trial of a treatment was reported to have resulted in a
beneficial response (p < 0.05)?
1. Having obtained the observed response, the chances are less than 5% that
the therapy is not effective.
2. The chances are less than 5% of not having obtained the observed response
if the therapy is effective.
3. The chances are less than 5% of having obtained the observed response if
the therapy is not effective.
4. None of the above.(cite from Berger lecture note)
我觉着,动不动给人出题目,还拿自己的老师出来的,似乎不是那么“友善”。潜台词无非是,我老师是牛逼的统计学家,给你出道题你做做,你不一定能做对!
然后,我就乖乖的做了,我跟她说选3,然后,她非常顾及我面子的,私信告诉了我正确答案:
Actual correct answer: The chances are less than 5% of having obtained the observed response or any more extreme response if the therapy is not effective. Thus even the survey designers did not know the meaning of a p-value! p-value的理解的确很蹩脚。
卧槽,居然答错了!看来对p-value的理解的确蹩脚的很!
不过仔细一想,不对啊,抠字眼有意思?当然了,错的就是错的,这点我还是服吧。
然后等我再想私信她跟她讨论的时候,我发现我已经被拉黑了。
这是多么玻璃心啊!
本来这件事就这么过去了,不过前几天看到这个题目:置信区间和T检测的关系? - 统计学,要不就顺便一起解释一下吧。
其实置信区间和t-test是不同的两个东西。比如我们要test:
H0: b=0
我们估计出来的值:
b_hat=0.3
两者的区别在于,置信区间是以b_hat为中心,左右扩充多少个标准差。比如95%置信区间可能是(-0.1,0.7),注意这里我们肯定有(-0.1+0.7)/2=0.3,因为是我们是把b_hat=0.3放在中间的。
而假设检验不同。假设检验是假设b=0,中心在0处,得到的不拒绝的区域应该以0为中心,左右扩充多少个标准差。比如可能是(-0.4,0.4),然后再来看b_hat是落在了哪个区域,如果在(-0.4,0.4),那么不能拒绝原假设,否则,如果在(-0.4,0.4)之外,就拒绝原假设。

什么意思呢?假设检验的第一步是假设,假设b=0,然后我们看看估计出b_hat这个数字,或者更大的数字的概率是多少,也就是p-value。如果这个概率很小,那么b=0这个假设可能是错的,所以拒绝原假设。
为了说清这个概念,我们来做一个bootstrap的t-test。但是这个做法跟一般的做法有点区别。怎么做呢?
首先假设我们有N个样本y_i\sim N(\mu,\sigma^2),我们的原假设是\mu=0。我想这个检验应该是很简单的,直接使用t-test就可以了。
现在为了讲上面的思想,我们来搞一个新的基于bootstrap的方法。怎么做呢?

  • 计算\bar{y},\hat{\sigma}^2,\frac{\bar{y}}{\hat{\sigma}}
  • 对于每个样本,计算“残差”e_i=y_i-\bar{y}
  • 对残差进行重新有放回抽样,计算y_{i}^*=0+e_i^*,计算\frac{\bar{y^*}(b)}{\hat{\sigma}^*(b)},b=1...B,B为bootstrap的次数
  • 计算|\frac{\bar{y^*}(b)}{\hat{\sigma}^*(b)}|的(1-\alpha)\%的分位数,与|\frac{\bar{y}}{\hat{\sigma}}|进行比较,如果后者大,则拒绝原假设。
这里的关键步骤是第三步。注意这里我并没有使用最常用的有放回的对y进行抽样,而是对“残差”进行抽样,然后假设真值为0,得到新的样本,然后计算检验统计量。这也就是我们“假设检验”的思路:先假设真值为0,然后再看是不是能够拒绝原假设。
这个步骤的julia程序如下:

#!/usr/bin/julia

N=100
NBoot=500
Iter=1000

for delta=0:0.1:1
        ## bootstrap variable
        reject_1=0
        reject_5=0
        reject_10=0
        for iter=1:Iter
                yhat_Boot=Array(Float64,NBoot)
                # generate data
                y=randn(N)+delta
                # test statistics and residuals
                yhat=mean(y)/std(y)
                resid=y-yhat
                ## bootstrap
                for i=1:NBoot
                        y_new=resid[iceil(rand(N)*N)]
                        @inbounds yhat_Boot=abs(mean(y_new))/std(y_new)
                end
                critical_value=quantile(yhat_Boot,1-[0.01,0.05,0.1])
                if abs(yhat)>critical_value[1]
                        reject_1+=1
                end
                if abs(yhat)>critical_value[2]
                        reject_5+=1
                end
                if abs(yhat)>critical_value[3]
                        reject_10+=1
                end
        end
        p_1=reject_1/Iter
        p_5=reject_5/Iter
        p_10=reject_10/Iter

        println(&#34;delta=$(delta), p1=$(p_1), p5=$(p_5), p10=$(p_10)&#34;)
end
程序中最关键的两步我已经加黑了,看结果:
delta=0.0, p1=0.012, p5=0.055, p10=0.099
delta=0.1, p1=0.068, p5=0.174, p10=0.267
delta=0.2, p1=0.269, p5=0.5, p10=0.654
delta=0.3, p1=0.649, p5=0.844, p10=0.9
delta=0.4, p1=0.904, p5=0.98, p10=0.989
delta=0.5, p1=0.987, p5=0.998, p10=0.999
delta=0.6, p1=0.998, p5=0.999, p10=1.0
delta=0.7, p1=1.0, p5=1.0, p10=1.0
delta=0.8, p1=1.0, p5=1.0, p10=1.0
delta=0.9, p1=1.0, p5=1.0, p10=1.0
delta=1.0, p1=1.0, p5=1.0, p10=1.0
先看加粗的第一行,delta=0的时候,代表真实的DGP原假设是成立的,在1%, 5%, 10%的显著性水平下得到的size与理论值相当。
从第二行开始,原假设不成立了,我们可以看这个检验的power。随着delta越来越大,power也越来越大,最终到delta=0.7的时候,几乎会完全拒绝原假设。
以上的程序说明,以上的test过程是工作的,而且看起来效果不错。
当然,这不是最关键的,关键的是希望能通过这个小程序,说明假设检验的思想。
最后,还是呼吁友善的讨论。动不动给人出题,完了还要恼羞成怒拉黑别人,不是什么好的讨论态度。

原文地址:https://zhuanlan.zhihu.com/p/20031836
楼主热帖
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册 微信登录 手机动态码快速登录

本版积分规则

关闭

官方推荐 上一条 /3 下一条

快速回复 返回列表 客服中心 搜索 官方QQ群 洽谈合作
快速回复返回顶部 返回列表