axjack's blog

### axjack is said to be an abbreviation for An eXistent JApanese Cool Klutz ###

監査サンプリングについてのメモ

単語集

単語 意味 補足
監基報530 監査基準委員会報告書530 監査サンプリングについての記載がある。
逸脱 不備や例外を表していると思われる。
n サンプルサイズ 監基報530ではサンプル数と書かれている。
k サンプル内の逸脱件数
pT 許容逸脱率 想定する母集団の逸脱率、ようするに母比率と思われる。TはTolerableの意味。
pE 予想逸脱率 これがよく分からない。EはExpectedの意味。
risk 1 - 信頼度 リスク

確率として考える

 \displaystyle X_i

  • 逸脱なら  \displaystyle X_i = 1
  • そうでないなら  X_i = 0

とする確率変数で、 \displaystyle X_i は ベルヌーイ分布(  Bin(1, p_T) )に従っている。
すると、 \displaystyle K =\sum_{i=1}^{n} X_i は 二項分布(  Bin(n, n p_T) ) に従い、
さらに、 \displaystyle \bar{X} = \frac{K}{n} = \frac{1}{n} \sum_{i=1}^{n} X_i は二項分布(  Bin(n, p_T) ) に従う。

   \displaystyle P_{p_T} (  \bar{X}  < \bar{X}' ) < risk
となるような最小の  \bar{X}'は、逸脱件数:k とサンプルサイズ: n を用いて、
 \bar{X}'  = \frac{k}{n}
と表される。

統計として考える

Rでシミュレーションを実行するのと、二項分布の分布関数・分位点関数を用いて確認。

## 関数 AuditSim ####
# 母集団の大きさ: N
# 母集団に含まれる逸脱件数: K
# サンプルサイズ: n
# シミュレーション回数: how_many_times
## ####
AuditSim <- function(N=1000,K=50,n=45,how_many_times=10000){
paste("母集団の大きさ:",N,"\n") |> cat()
paste("母集団に含まれる逸脱件数:",K,"\n") |> cat()
paste("母集団の逸脱率:", K/N,"\n") |> cat()
paste("サンプルサイズ:", n,"\n") |> cat()
paste("シミュレーション回数:", how_many_times,"\n") |> cat()
cat("\n")


# 母集団設計 ################
# 母集団のサイズ: N
# 母集団に存在する逸脱件数: K
# 母集団作成
devi <- rep(1,K)
not_devi <- rep(0, N-K)
pop <- c(devi,not_devi)

# 標本設計 ################
# サンプルサイズ: n

# シミュレーション ################
# シミュレーション回数: how_many_times

# シミュレーション実行
replicate(how_many_times,{
# 母集団から無作為抽出でサンプルサイズnの標本を取得し
draws <- sample(pop, n, replace = TRUE)
# 標本の逸脱件数をカウントする
sum(draws)
}
) -> deviation_in_sample


# 結果確認 ################
# シミュレーションで得られた標本の逸脱件数の度数
table(deviation_in_sample) |> print()
cat("\n")


# シミュレーションで得られた標本の逸脱件数の相対度数
(table(deviation_in_sample)/how_many_times) |> print()
cat("\n")

# ヒストグラムの表示[標本の逸脱件数の度数]
hist_main = paste("Histogram of # of deviation in sample","\n","N=",N,"K=",K,"n=",n)
hist(deviation_in_sample, right = FALSE, main = hist_main, );box();

}



# サンプルサイズ: 42 でシミュレーションを実施
AuditSim(N = 1000, K = 90, n = 42, how_many_times = 10000)

# 二項分布の確率質量関数から、P(X=0) + P(X=1)を計算する
sum(dbinom(0:1, 42, prob = 0.09))


# 二項分布の累積分布関数から、P(X <= 1)を計算する
pbinom(1, 42, prob = 0.09)


# リスクが10% を下回る、最小のサンプルサイズを求める
risk <- 0.1
n_max <- 1000
k <- 1
( pbinom(k, 1:n_max, prob = 0.09) < risk ) |> which() |> head(1)

実行例

f:id:axjack:20211020171321p:plain
f:id:axjack:20211020171331p:plain
f:id:axjack:20211020171341p:plain


axjack is said to be an abbreviation for An eXistent JApanese Cool Klutz.