---
title: "Entregable 3 - Estadística"
subtitle: "Grau de Matemàtiques, Curs 2020-21"
author: "Vilanova Martínez, Adrià"
output: html_document
---

```{r message=FALSE}
# Libraries
library(EnvStats)

# Decimal separator (we have to fill in the results with commas :( )
options(OutDec=",")
```

## Configuració
Aquí es pot configurar la pràctica depenent del que es pregunti:

```{r}
# APARTAT A
# Esperança de l'estadístic T(X):
a_alpha = 3.01
a_beta = 0.07

# APARTAT B
# Mitjana dels log(X)
b_logx_mean = 2.97913
# Mitjana dels 1/X
b_invx_mean = 0.06817
# Mida de la mostra
b_n = 300

# APARTAT C
# 1 - alpha (sobre 1) de l'interval de confiança asimptòtic
c_int = 0.9
```

Altres dades:

```
# == PAULA ==
a_alpha = 2.02
a_beta = 0.16
b_logx_mean = 1.99872
b_invx_mean = 0.16025
b_n = 376
c_int = 0.9

# == PEDRO ==
a_alpha = 1.67
a_beta = 0.21
b_logx_mean = 1.69553
b_invx_mean = 0.20009
b_n = 338
c_int = 0.9
```


## Introducció

**Considerem la variable aleatòria biparamètrica $X$ amb funció de densitat:**

$$f(x; \lambda, \eta) = \frac{\eta^\lambda}{\Gamma(\lambda)} x^{-\lambda - 1} e^{-\frac{\eta}{x}}$$

**Comproveu que és una família exponencial amb els estadístics $T(x) = (\log(x), \frac{1}{x})$, trobeu-ne el paràmetre canònic $\theta = (\theta_1, \theta_2)$ i la constant $C(\theta)$. En algut apartat caldrà fer servir la funció digamma $\psi(x)$ que correspon a la derivada del logaritme de la funció Gamma.**

$$f(x; \lambda, \eta) = \frac{\eta^\lambda}{\Gamma(\lambda)} x^{-\lambda - 1} e^{-\frac{\eta}{x}} = \frac{\eta^\lambda}{\Gamma(\lambda)} x^{-\lambda - 1} e^{-\frac{\eta}{x}}$$

## Apartat a)
**En el cas que sabéssim que <ch>$\mathbb{E}[T(X)] = (`r a_alpha`, `r a_beta`) = (\alpha, \beta)$</ch>, contesteu les preguntes següents:**

### Pregunta 1
Quin seria el valor de $\lambda$?

$$\log\left(\frac{\lambda}{\beta}\right) - \psi(\lambda) - \alpha = 0$$

```{r}
a_eq = function (lambda) {
  return(log(lambda/a_beta) - digamma(lambda) - a_alpha)
}

a_lambda_result = uniroot(a_eq, lower=0.01, upper=1e5, tol=1e-10)
a_lambda = a_lambda_result$root
a_lambda
```

### Pregunta 2
Quin seria el valor de $\eta$?

$$\eta = \frac{\lambda}{\beta}$$

```{r}
a_eta = a_lambda/a_beta
a_eta
```

### Pregunta 3
Quin seria el valor de $Var(\log(X))$?

$$Var(\log(X)) = \psi'(\lambda)$$

```{r}
r3 = trigamma(a_lambda)
r3
```

### Pregunta 4
Quin seria el valor de $Var\left(\frac{1}{X}\right)$?

$$Var\left(\frac{1}{X}\right) = \frac{\lambda}{\eta^2}$$

```{r}
r4 = a_lambda/(a_eta**2)
r4
```

### Pregunta 5
Quin seria el valor de $Cov\left(\log(X), \frac{1}{X}\right)$?

$$Cov\left(\log(X), \frac{1}{X}\right) = - \frac{1}{\eta}$$

```{r}
r5 = -1/a_eta
r5
```

## Apartat b)
**En la situació habitual en què no coneixem el valor dels paràmetres, però tenim una mostra: si la grandària és <ch>`r b_n`</ch>, la mitjana dels logaritmes de les $X$ ha donat <ch>`r b_logx_mean`</ch> i la de les inverses $\frac{1}{X}$ ha donat <ch>`r b_invx_mean`</ch>, estimeu per màxima versemblança els paràmetres de la distribució $\lambda$ i $\eta$. Calculeu la matriu d'Informació en els paràmetres canònics, avalueu la matriu en el màxim versemblant, i contesteu:**

Primer trobem els estimadors de $\alpha$, $\beta$:

```{r}
b_alpha = b_logx_mean
b_beta = b_invx_mean
```

Aleshores, ara hem de resoldre les mateixes equacions de les preguntes 1 i 2 per transformar els estimadors de $\alpha$, $\beta$ en els estimadors de $\lambda$, $\eta$ pel principi de la invariància.

```{r}
b_eq = function (lambda) {
  return(log(lambda/b_beta) - digamma(lambda) - b_alpha)
}

b_lambda_result = uniroot(b_eq, lower=0.01, upper=1e5, tol=1e-10)
b_lambda = b_lambda_result$root
b_eta = b_lambda/b_beta
```

### Pregunta 6
L'estimador m.v. de $\lambda$ ha donat:

```{r}
b_lambda
```


### Pregunta 7
L'estimador m.v. d'$\eta$ ha donat:

```{r}
b_eta
```

### Pregunta 8
El terme $[1, 1]$ de la matriu d'informació obtinguda és:

```{r}
b_IX11 = b_n*trigamma(b_lambda)
b_IX11
```

### Pregunta 9
El terme $[2, 2]$ de la matriu d'informació obtinguda és:

```{r}
b_IX22 = b_n*b_lambda/(b_eta**2)
b_IX22
```

### Pregunta 10
El terme $[1, 2]$ de la matriu d'informació obtinguda és:

```{r}
b_IX12 = b_n*(-1/b_eta)
b_IX12
```

## Apartat c)
**En la mateixa situació de l'apartat b), calculeu la fita de Cramer-Rao de l'estimador màxim versemblant de $T(X) = \left( \mathbb{E}[\log(X)], \mathbb{E}\left[ \frac{1}{X} \right] \right)$. Utilitzant el teorema central del límit, calculeu l'interval de confiança asimptòtic (<ch>`r c_int`</ch> dues cues) del paràmetre $\lambda$, i també el de $\eta$. Contesteu:**

### Pregunta 11
La fita de Cramer-Rao de l'estimador m.v. de $\mathbb{E}[\log(x)]$ és:

```{r}
r11 = 1/b_n*trigamma(b_lambda)
r11
```

### Pregunta 12
La fita de Cramer-Rao de l'estimador m.v. de $\mathbb{E}\left[ \frac{1}{X} \right]$ és:

```{r}
r12 = 1/b_n*(b_lambda/(b_eta**2))
r12
```

## Pregunta 13
L'interval de confiança de $\lambda$ és:

```{r}
alpha = 1 - c_int
cota1 = b_lambda/(b_n*(b_lambda*trigamma(b_lambda) - 1))
c_13_a = qnorm(alpha/2)*sqrt(cota1) + b_lambda
c_13_b = qnorm(1 - alpha/2)*sqrt(cota1) + b_lambda
```

$[`r c_13_a`, `r c_13_b`]$

## Pregunta 14
L'interval de confiança de $\eta$ és:

```{r}
cota2 = (b_eta**2)*trigamma(b_lambda)/(b_n*(b_lambda*trigamma(b_lambda) - 1))
c_14_a = qnorm(alpha/2)*sqrt(cota2) + b_eta
c_14_b = qnorm(1 - alpha/2)*sqrt(cota2) + b_eta
```

$[`r c_14_a`, `r c_14_b`]$

## Resum
1. `r a_lambda`
2. `r a_eta`
3. `r r3`
4. `r r4`
5. `r r5`
6. `r b_lambda`
7. `r b_eta`
8. `r b_IX11`
9. `r b_IX22`
10. `r b_IX12`
11. `r r11`
12. `r r12`
13. `r c_13_a`
14. `r c_14_b`

<!-- Custom styles -->
<style>
/* ch element (|ch| stands for check) */
ch {
  color: red;
}
</style>
