Censored binomial models
Datamethods Discussion Forum [Unofficial]
May 15, 2026
Thanks for posting this very interesting problem, Ahmed. I made efforts toward a JAGS model for this, and have begun to think that it involves both truncation and censoring working together. (Surgeons for whom both A_i\le 10 and B_i\le 10 are truncated.)
I wonder what people think of the likelihood I’ve assembled here. This looks like a good opportunity to make subtle mistakes!
var S, # number of surgeons (S ≡ No + Na + Nb)
No, # surgeons 1:No have both A and B counts observed
Na, # surgeons No+(1:Na) have only A count observed
Nb, # surgeons No+Na+(1:Nb) have only B count observed
a[S], # a[s] = probability surgeon s chooses A
N[S], # N[s] = true (poss. unk.) count of procedures for surgeon s
L[S], # for s in (No+1):S, equal to whichever of {A,B} is observed
A[S], # left-censored count of A procedures
B[S]; # left-censored count of B procedures
# We introduce L[No+1:S] simply to avoid RUNTIME ERROR
# 'Possible directed cycle' in the truncated-N blocks
# of the model.
data {
for (s in 1:No) { L[s] = 0 }
for (s in No+(1:Na)) { L[s] = A[s] }
for (s in No+Na+(1:Nb)) { L[s] = B[s] }
}
model {
for (s in 1:S) {
a[s] ~ dbeta(0.8, 0.6) # bimodal, as if surgeons tend to be A or B 'partisans'
}
for (s in 1:No) {
N[s] ~ dnegbin(0.1, 4)
A[s] ~ dbin(a[s], N[s])
}
for (s in No+(1:Na)) {
N[s] ~ dnegbin(0.1, 4) |> T(L[s], L[s]+10)
A[s] ~ dbin(a[s], N[s])
}
for (s in No+Na+(1:Nb)) {
N[s] ~ dnegbin(0.1, 4) |> T(L[s], L[s]+10)
B[s] ~ dbin(1-a[s], N[s])
}
}
Discussion in the ATmosphere