Preliminary Survey :

N <- 100
M = 900
Mbar <- M/N

f <- c(3/6, 2/6, 1/2, 1/2, 2/2, 1/2,  1/2, 0/2, 6/8, 0/2, 0/2, 8/8, 7/8, 4/4, 4/4, 4/4, 2/4, 1/6, 1/10, 2/4, 6/10, 6/10, 4/8, 8/12)


mi <- c(6, 6, 2, 2, 2, 2, 2, 2, 8, 2, 2, 8, 8, 4, 4, 4, 4,6,10,4,10, 10,8,12)
ai <- c(3, 2, 1, 1, 2, 1, 1, 0, 6, 0, 0, 8, 7, 4,4,4,2,1,1,2,6,6,4,8) 
mbar <- mean(mi)

phat_per <- ai/mi
phat <- mean(phat_per)

# est variance  :
sp2 <- sum((ai - phat*mi)^2)/(length(mi)-1)
B <- .1 # off by 10 pct : bound-of-err
D <- ((B^2)*mbar^2)/4
n_est <- (N*sp2)/(N*D + sp2)
n_est <- ceiling(n_est) #round to nxt whole 

Drawing Sample :

set.seed(123)
samp <- sample(1:100, 30) # random number generation so I know which tables to go to

samp |> as.data.frame() # True Order : Order to go to tables 
df <- samp |> 
  as.data.frame() |>
  dplyr::arrange(samp) # order by the closeness of the tables  
mi <- 
  c(10, 10, 10, 8, 8,8,4,8,8,4,4,2,2,2,8,12,12,12,14,14,10,10,2,10,2,2,2,10,10,2)

df <- cbind(df, mi)

# its easier to ct people sitting down than the empty seats so I coult that and infer based on how many total seats there are 
c <- 
  c(4,4,6,4,4,4,2,1,4,2,1,1,1,0,7,6,4,8,7,6,4,6,1,4,1,1,1,4,5,1)

df <- cbind(df, c)
p <- mean(c/mi) # amt chairs used 
phat <- 1-p # amt not used 
library(dplyr)
df <- df |> mutate(ai=mi-c) # total seats - seats taken = empty seats
df <- df |> dplyr::mutate(p=ai/mi) # prob of each
df <- df |> select(-c) |> select(samp, ai, mi, p)
df