登陆有奖并可浏览互动!
您需要 登录 才可以下载或查看,没有账号?立即注册 
 
 
 
 
×
 
这还是我第一次因为“学术讨论”在知乎上被拉黑。 
事情是这样的,有人在我一个回答里面抛出了这么一个问题: 
说实话,你对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("delta=$(delta), p1=$(p_1), p5=$(p_5), p10=$(p_10)") 
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 |