benford检验数据是否造假?
【问题】看到高小hong和Funman童鞋有关Benford’s Law的围脖。
话说,咱们会计方面有提过可以利用这个检验是否存在“伪造”。
Benford's Law就是数据首位出现1-9的概率分布,从1到9出现的概率依次下降,算法为:
log10(1 + 1/`s'),s=1…9
当然,Benford有适用范围,不可能所有数据都服从这种分布,比如:
1、数据不能有明确的最大值和最小值,范围要够宽,而且不能存在断点之类;
2、数据本身不能有意义,学生证编码就不行的。。。
3、数据不能本身随机生成,如果我按照某种分布直接生成一串数据,这个不靠谱。
4、。。。。。
【方法】
stata直接有这个程序:benford
其算法很简单:
1、提取数据的首位
程序:gen byte `d' = real(substr(string(`varlist'), 1, 1))
2、再把提取首位的数一数
forval s = 1/9 {
qui count if `d' == `s'
di as res %5.0f `s' .0f r(N) .3f 100 * r(N)/`N' ///
.3f 100 * log10(1 + 1/`s')
}
end
【例子】
ssc install benford
use auto.dta,clear
benford auto
Digit Count Percent Benford
-----------------------------------------
1 10 13.514 30.103
2 0 0.000 17.609
3 11 14.865 12.494
4 26 35.135 9.691
5 14 18.919 7.918
6 7 9.459 6.695
7 2 2.703 5.799
8 2 2.703 5.115
9 2 2.703 4.576
这个数据样本量比较小,不大符合。
感兴趣,就试试自己手头的Data吧
forvalues循环语句
substr提取字符
页:
[1]