---
title: "The Bivariate Poisson Conditionals Distribution (BPCD)"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{The Bivariate Poisson Conditionals Distribution (BPCD)}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
library(BCD)
```

# Introduction

This vignette introduces the Bivariate Poisson Conditionals Distribution (BPCD), defined via conditional specifications, as proposed by  Ghosh, Marques, and Chakraborty (2021). The `BCD` package provides functions to evaluate the joint and cumulative distributions, perform random sampling, and estimate parameters via maximum likelihood.

# Joint Probability: `dpoisBCD()`

The joint probability mass function (p.m.f.) of the BBCD is given by:

\[
P(X = x, Y = y) = K \frac{\lambda_1^x \lambda_2^y \lambda_3^{xy}}{x! y!},
\]

where \( K \) is a normalizing constant ensuring the probabilities sum to 1 and 
\eqn{ x, y = 0, 1, 2, \ldots }.

## Example

```{r}
dpoisBCD(x = 1, y = 2, lambda1 = 0.5, lambda2 =  0.5, lambda3 =  0.5)
dpoisBCD(x = 0, y = 1, lambda1 = 0.5, lambda2 =  0.5, lambda3 =  1)
```

# Cumulative Distribution: `ppoisBCD()`

The function `ppoisBCD()` computes the cumulative distribution:

\[
P(X \leq x, Y \leq y)
\]

## Example

```{r}
ppoisBCD(x = 1, y = 1, lambda1 = 0.5, lambda2 = 0.5, lambda3 = 0.5)
ppoisBCD(x = 2, y = 2, lambda1 = 1.0, lambda2 = 1.0, lambda3 = 0.8)
```

# Random Sampling: `rpoisBCD()`

Generate samples from the BPCD using:

```r
rpoisBCD(n, lambda1, lambda2, lambda3)
```

## Example

```{r}
set.seed(123)
samples <- rpoisBCD(n = 100, lambda1 = 0.5, lambda2 = 0.5, lambda3 = 0.5)
head(samples)
cor(samples$X, samples$Y) # Should be negative
```

# Maximum Likelihood Estimation: `MLEpoisBCD()`

Estimate the parameters of the distribution from data.

## Example

```{r}
data <- rpoisBCD(n = 100, lambda1 = 0.5, lambda2 = 0.5, lambda3 = 0.5)
fit <- MLEpoisBCD(data)
fit
```


# Real Data Example 
The dataset `lensfaults` records counts of surface faults $X$ and interior faults $Y$ observed in 100 optical lenses.

```{r}
data(lensfaults)
head(lensfaults)
plot(lensfaults$X, lensfaults$Y, xlab = "X", ylab = "Y")
```

```{r}
fit <- MLEpoisBCD(lensfaults)
FTtest(lensfaults, "BPCD", params = fit, num_params = 3)
```

The dataset `eplSeasonGoals` is a list of data frames for five consecutive seasons (2014/15 to 2018/19) from the English Premier League. Each data frame contains the
number of full-time home ($X$) and away ($Y$) goals scored in each match of the 
season.

```{r}
data(eplSeasonGoals)
plot(eplSeasonGoals[["1415"]]$X, eplSeasonGoals[["1415"]]$Y, xlab = "X", ylab = "Y")
plot(eplSeasonGoals[["2425"]]$X, eplSeasonGoals[["2425"]]$Y, xlab = "X", ylab = "Y")
```

```{r}
fit <- MLEpoisBCD(eplSeasonGoals[["1415"]])
FTtest(eplSeasonGoals[["1415"]], "BPCD", params = fit, num_params = 3)
```

```{r}
fit <- MLEpoisBCD(eplSeasonGoals[["2425"]])
FTtest(eplSeasonGoals[["2425"]], "BPCD", params = fit, num_params = 3)
```

**Reference:**
Ghosh, I., Marques, F., and Chakraborty, S. (2021). A new bivariate Poisson distribution via conditional specification: properties and applications. \emph{Journal of Applied Statistics}, 48(16), 3025-3047.
