Hi everyone,
I have learned that the pm.Binomial
function can take a tensor as an argument for n
, and the observed data can also be a tensor. Below is an example code and a graph of my model. After the inference was completed, I generated posterior predictive samples, resulting in an x-array with shape (chain, draw, len(ad_ar)). Each draw was obtained from a posterior sample, and an array with shape (len(ad_ar),)… My question is whether the first element of this array was sampled from a Binomial distribution with parameters Binom(dp_ar[0], p)
. In other words, I want to know whether the posterior predictive samples were generated from multiple binomial distributions with different values for n
(in this case, n
was kept in the array ‘dp_ar’) when calculating the log-likelihood or posterior predictive samples.
ad_ar = np.array([229., 226., 403., 105., 295., 147., 486., 231., 330., 208., 246.,
302., 104., 447., 161., 181., 210., 224., 288., 222., 172., 328.,
342., 474., 300., 411., 337., 341., 250., 454., 506., 495., 156.,
234., 261., 435., 252., 378., 309., 376., 374., 370., 277., 375.,
327., 356., 454., 216., 286., 147., 177., 233., 152., 426., 399.,
338., 280., 166., 113., 385., 271., 360., 283., 116., 243., 164.,
311., 148., 208., 346., 224., 402., 436., 408., 199., 414., 323.,
172., 234., 116., 183., 125., 385., 452., 218., 290., 173., 380.,
459., 387., 289., 156., 518., 248., 185., 373., 301., 296., 356.,
245., 165., 310., 215., 477., 517., 334., 636., 177., 241., 472.,
201., 193., 332., 535., 306., 229., 433., 282., 353., 179., 322.,
436., 292., 185., 485., 362., 228., 208., 310., 293., 358., 189.,
105., 383., 195., 457., 433., 355., 221., 144., 197., 287., 420.,
362., 327., 195., 430., 284., 174., 319., 411., 289., 295., 448.,
183., 393., 458., 132., 183., 196., 508., 124., 343., 221., 365.,
195., 100., 338., 207., 286., 282., 214., 168., 411., 169., 348.,
150., 337., 354., 404., 398., 353., 127., 320., 395., 341., 271.,
258., 234., 335., 453., 364., 202.])
dp_ar = np.array([433., 396., 403., 195., 295., 267., 486., 398., 330., 366., 452.,
302., 191., 447., 293., 319., 378., 414., 288., 382., 370., 330.,
342., 474., 300., 412., 337., 341., 250., 454., 506., 495., 263.,
405., 261., 435., 252., 378., 309., 376., 374., 371., 278., 375.,
328., 356., 455., 414., 289., 235., 306., 233., 261., 426., 399.,
338., 280., 304., 224., 385., 271., 360., 283., 237., 420., 306.,
311., 272., 369., 347., 387., 402., 437., 408., 366., 414., 323.,
330., 430., 221., 358., 238., 385., 452., 218., 290., 288., 381.,
459., 387., 290., 311., 518., 248., 357., 373., 301., 297., 356.,
246., 300., 310., 370., 478., 517., 334., 637., 340., 241., 472.,
375., 393., 332., 535., 306., 408., 433., 282., 353., 302., 322.,
437., 293., 329., 485., 362., 421., 387., 311., 294., 358., 353.,
232., 383., 373., 457., 433., 355., 385., 290., 340., 287., 420.,
362., 327., 363., 431., 284., 296., 319., 411., 289., 296., 449.,
184., 393., 458., 216., 320., 394., 508., 223., 343., 425., 365.,
393., 217., 338., 371., 286., 282., 413., 296., 411., 304., 349.,
297., 339., 354., 404., 399., 353., 230., 322., 395., 345., 271.,
259., 235., 335., 454., 365., 370.])
beta_binom = pm.Model()
with beta_binom:
p = pm.Beta("p", alpha=1, beta=1)
ad = pm.Binomial("ad", n= dp_ar , p=p, observed=ad_ar)
trace_beta_binom = pm.sample(2000,chains=4)
pm.compute_log_likelihood(trace_beta_binom)
pm.sample_posterior_predictive(trace_beta_binom,extend_inferencedata=True,random_seed=2023)