admin 发表于 2015-11-19 17:57:43

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]
查看完整版本: benford检验数据是否造假?