Skip to content

Commit

Permalink
Completado ejemplos Tema 11
Browse files Browse the repository at this point in the history
  • Loading branch information
joanby committed Feb 7, 2019
1 parent 058dc05 commit 6f9e928
Show file tree
Hide file tree
Showing 11 changed files with 652 additions and 11 deletions.
2 changes: 1 addition & 1 deletion scripts/tema11/02-binomial.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ plt.show()
fix, ax = plt.subplots(1,1)
r = binom.rvs(n, p, size = 10000)
ax.hist(r, bins = 7)
ax.hist(r, bins = n)
plt.show()
```

56 changes: 56 additions & 0 deletions scripts/tema11/04-hgeom.Rmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
---
title: "Distribución Hipergeométrica"
author: "Curso de Estadística Descriptiva"
date: "7/2/2019"
output: pdf_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

## Distribución Hipergeométrica

Supongamos que tenemos 20 animales, de los cuales 7 son perros. Queremos medir la probabilidad de encontrar un número determinado de perros si elegimos $k=12$ animales al azar.

# En `R`

```{r}
library(Rlab)
M = 7
N = 13
k = 12
dhyper(x = 0:12, m = M, n = N, k = k)
phyper(q = 0:12, m = M, n = N, k = k)
qhyper(p = 0.5, m = M, n = N, k = k)
rhyper(nn = 1000, m = M, n = N, k = k) -> data
hist(data, breaks = 8)
```


## En `Python`
```{python}
from scipy.stats import hypergeom
import matplotlib.pyplot as plt
import numpy as np
[M, n, N] = [20, 7, 6]
rv = hypergeom(M, n, N)
x = np.arange(0, n+1)
y = rv.pmf(x)
mean, var, skew, kurt = rv.stats(moments = 'mvsk')
print("Media %f"%mean)
print("Varianza %f"%var)
print("Sesgo %f"%skew)
print("Curtosis %f"%kurt)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x, y, 'bo' )
ax.vlines(x,0,y, lw = 2, alpha = 0.5)
ax.set_xlabel("Número de perros entre los 12 elegidos al azar")
ax.set_ylabel("Distribución de probabilidad de H(13,7,12)")
plt.show()
```

Binary file added scripts/tema11/04-hgeom.pdf
Binary file not shown.
48 changes: 48 additions & 0 deletions scripts/tema11/05-poisson.Rmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
---
title: "Distribución de Poisson"
author: "Curso de Estadística Descriptiva"
date: "7/2/2019"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

## Distribución de Poisson

Supongamos que $X$ modela el número de errores por página que tiene un valor esperado $\lambda = 5$.

## En `R`
```{r}
l = 5
plot(0:20, dpois(x = 0:20, lambda = l))
ppois(0:20, l)
qpois(0.5, 5)
rpois(1000, lambda = l) -> data
hist(data)
```

## En `Python`

```{python}
import numpy as np
from scipy.stats import poisson
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1,1)
mu = 5
mean, var, skew, kurt = poisson.stats(mu, moments = 'mvsk')
print("Media %f"%mean)
print("Varianza %f"%var)
print("Sesgo %f"%skew)
print("Curtosis %f"%kurt)
x = np.arange(0, 12)
ax.plot(x, poisson.pmf(x, mu), 'bo', ms = 8, label = 'Poisson(0.8)')
ax.vlines(x,0, poisson.pmf(x,mu), colors = 'b', lw = 4, alpha = 0.5)
ax.legend(loc = "best", frameon = False)
plt.show()
```

268 changes: 268 additions & 0 deletions scripts/tema11/05-poisson.html

Large diffs are not rendered by default.

62 changes: 62 additions & 0 deletions scripts/tema11/07-uniforme.Rmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
---
title: "Distribución Uniforme"
author: "Curso de Estadística Descriptiva"
date: "7/2/2019"
output: pdf_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

## Distribución Uniforme

Supongamos que $X\sim U([0,1])$ entonces podemos estudiar sus parámetros

## En `R`
```{r}
a = 0
b = 1
x = seq(-0.1, 1.1, 0.1)
plot(x, dunif(x, min = a, max = b))
plot(x, punif(x, a, b), type = "l")
qunif(0.5, a, b)
runif(1000000, a, b) -> data
hist(data)
```

## En `Python`

```{python}
from scipy.stats import uniform
import matplotlib.pyplot as plt
import numpy as np
a = 0
b = 1
loc = a
scale = b-a
fig, ax = plt.subplots(1,1)
rv = uniform(loc = loc, scale = scale)
mean, var, skew, kurt = rv.stats(moments = 'mvsk')
print("Media %f"%mean)
print("Varianza %f"%var)
print("Sesgo %f"%skew)
print("Curtosis %f"%kurt)
x = np.linspace(-0.1, 1.1, 120)
ax.plot(x, rv.pdf(x), 'k-', lw = 2, label = "U(0,1)")
r = rv.rvs(size = 100000)
ax.hist(r, density = True, histtype = "stepfilled", alpha = 0.25)
ax.legend(loc = 'best', frameon = False)
plt.show()
```

Binary file added scripts/tema11/07-uniforme.pdf
Binary file not shown.
39 changes: 39 additions & 0 deletions scripts/tema11/08-exp.Rmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
---
title: "Distribución exponencial"
author: "Curso de Estadística Descriptiva"
date: "7/2/2019"
output: pdf_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

## En `Python`

```{python}
from scipy.stats import expon
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1,1)
lam = 3
rv = expon(scale = 1/lam)
mean, var, skew, kurt = rv.stats(moments = 'mvsk')
print("Media %f"%mean)
print("Varianza %f"%var)
print("Sesgo %f"%skew)
print("Curtosis %f"%kurt)
x = np.linspace(0, 3, 1000)
ax.plot(x, rv.pdf(x), 'r-', lw = 5, alpha = 0.6, label = "Exp(10)")
r = rv.rvs(size = 100000)
ax.hist(r, density = True, histtype = 'stepfilled', alpha = 0.2)
ax.legend(loc = "best", frameon= False)
plt.show()
```

Binary file added scripts/tema11/08-exp.pdf
Binary file not shown.
70 changes: 68 additions & 2 deletions teoria/Tema11.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,8 @@ Dada cualquier variable aleatoria, en `Python` tenemos las mismas cuatro funcion
- `ppf(p,...)`: Cuantil $p$-ésimo de la variable aleatoria (el valor de $x$ más pequeño tal que $F(x)\geq p$).
- `rvs(size,...)`: Generador de $size$ observaciones siguiendo la distribución de la variable aleatoria.

También vale la pena conocer la función `stats(moments='mvsk')` que nos devuelve cuatro valores con los estadísticos de la media `m`, la varianza `v`, el sesgo `s` y la curtosis `k` de la distribución.

# Distribuciones discretas más conocidas

## Distribuciones discretas
Expand Down Expand Up @@ -347,11 +349,19 @@ $$X\sim \text{H}(N,M,n)$$
## Distribución Hipergeométrica

```{r, echo = FALSE}
par(mfrow = c(1,2))
plot(0:30, dhyper(0:30,10,20,10),col = "purple", xlab = "", ylab = "", main = "Función de probabilidad de una H(20,10,30)")
plot(0:30, phyper(0:30,10,20,10),col = "purple", xlab = "", ylab = "", main = "Función de distribución de una H(20,10,30)", ylim = c(0,1))
par(mfrow= c(1,1))
```

## Distribución Hipergeométrica

El código de la distribución Hipergeométrica:

- En `R` tenemos las funciones del paquete `Rlab`: `dhyper(x, m, n, k), phyper(q, m, n, k), qhyper(p, m, n, k), rhyper(nn, m, n, k)` donde `m` es el número de objetos del primer tipo, `n` el número de objetos del segundo tipo y `k` el número de extracciones realizadas.
- En `Python` tenemos las funciones del paquete `scipy.stats.hypergeom`: `pmf(k,M, n, N), cdf(k,M, n, N), ppf(q,M, n, N), rvs(M, n, N, size)` donde `M` es el número de objetos del primer tipo, `N` el número de objetos del segundo tipo y `n` el número de extracciones realizadas.

## Distribución de Poisson

Si $X$ es variable aleatoria que mide el "número de eventos en un cierto intervalo de tiempo", diremos que $X$ se distribuye como una Poisson con parámetro $\lambda$
Expand Down Expand Up @@ -384,6 +394,13 @@ plot(0:20, ppois(0:20,2),col = "purple", xlab = "", ylab = "", main = "Función
par(mfrow= c(1,1))
```

## Distribución de Poisson

El código de la distribución de Poisson:

- En `R` tenemos las funciones del paquete `Rlab`: `dpois(x, lambda), ppois(q,lambda), qpois(p,lambda), rpois(n, lambda)` donde `lambda` es el número esperado de eventos por unidad de tiempo de la distribución.
- En `Python` tenemos las funciones del paquete `scipy.stats.poisson`: `pmf(k,mu), cdf(k,mu), ppf(q,mu), rvs(M,mu)` donde `mu` es el número esperado de eventos por unidad de tiempo de la distribución.

## Distribución Binomial Negativa

Si $X$ es variable aleatoria que mide el "número de repeticiones hasta observar los $r$ éxitos en ensayos de Bernoulli", diremos que $X$ se distribuye como una Binomial Negativa con parámetros $r$ y $p$, $$X\sim\text{BN}(r,p)$$ donde $p$ es la probabilidad de éxito
Expand All @@ -409,6 +426,12 @@ plot(c(rep(0,exitos),exitos:(size+exitos)), c(rep(0,exitos),pnbinom(0:size,exito
par(mfrow= c(1,1))
```

## Distribución Binomial Negativa

El código de la distribución Binomial Negativa:

- En `R` tenemos las funciones del paquete `Rlab`: `dnbinom(x, size, prop), pnbinom(q, size, prop), qnbinom(p, size, prop), rnbinom(n, size, prop)` donde `size` es el número de casos exitosos y `prob` la probabilidad del éxito.
- En `Python` tenemos las funciones del paquete `scipy.stats.nbinom`: `pmf(k,n,p), cdf(k,n,p), ppf(q,n,p), rvs(n,p)` donde `n`es el número de casos exitosos y `p` la probabilidad del éxito.

## Distribuciones discretas en R

Expand Down Expand Up @@ -519,10 +542,20 @@ Modela el elegir un elemento del intervalo $[a,b]$ de manera equiprobable
## Distribución Uniforme

```{r, echo = FALSE}
plot(punif(1:20,min = 0, max = 20),col = "purple", xlab = "", ylab = "", main = "Función de densidad de una U(0,20)", type = "o")
par(mfrow=c(1,2))
plot(c(0,1,1:4,4,5), c(0,0,dunif(1:4,min = 1, max = 4),0,0),col = "purple", xlab = "", ylab = "", main = "Función de densidad de una U(1,4)", type = "o", ylim = c(0,1))
plot(0:5, punif(0:5,min = 1, max = 4),col = "purple", xlab = "", ylab = "", main = "Función de distribución de una U(1,4)", type = "o")
par(mfrow=c(1,1))
```


## Distribución Uniforme

El código de la distribución Uniforme:

- En `R` tenemos las funciones del paquete `stats`: `dunif(x, min, max), punif(q, min, max), qunif(p, min, max), runif(n, min, max)` donde `min` y `max` són los extremos de los intervalos de la distribución uniforme.
- En `Python` tenemos las funciones del paquete `scipy.stats.uniform`: `pdf(k,loc, scale), cdf(k,loc, scale), ppf(q,loc, scale), rvs(n,loc, scaler)` donde la distribución uniforme está definida en el intervalo `[loc, loc+scale]`.

## Distribución Exponencial

Una v.a. $X$ tiene distribución exponencial de parámetro $\lambda$, $X\sim\text{Exp}(\lambda)$, si su función de densidad es $$f_X(x)=\left\{
Expand Down Expand Up @@ -553,10 +586,18 @@ Una v.a. $X$ tiene distribución exponencial de parámetro $\lambda$, $X\sim\tex
## Distribución Exponencial

```{r, echo = FALSE}
plot(pexp(1:20,0.2),col = "purple", xlab = "", ylab = "", main = "Función de densidad de una Exp(0.2)", type = "o")
plot(0:20, pexp(0:20,0.2),col = "purple", xlab = "", ylab = "", main = "Función de densidad de una Exp(0.2)", type = "o")
```


## Distribución Exponencial

El código de la distribución Exponencial:

- En `R` tenemos las funciones del paquete `stats`: `dexp(x, rate), pexp(q, rate), qexp(p, rate), rexp(n, rate)` donde `rate`$=\lambda$ es el tiempo entre dos sucesos consecutivos de la distribución.
- En `Python` tenemos las funciones del paquete `scipy.stats.expon`: `pdf(k, scale), cdf(k, scale), ppf(q, scale), rvs(n, scaler)` donde `scale`$=1/\lambda$ es la inversa del tiempo entre dos sucesos consecutivos de la distribución.


## Distribución Normal

Una v.a. $X$ tiene distribución normal o gaussiana de parámetros $\mu$ y $\sigma$, $X\sim\mathcal{N}(\mu,\sigma)$ si su función de densidad es $$f_X(x)=\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x-\mu)^2}{2\sigma^2}}\quad \forall x\in\mathbb{R}$$
Expand Down Expand Up @@ -588,6 +629,14 @@ plot(dvalues, ylab = "", xlab= "",
main = "Función de densidad de una N(0,1)")
```

## Distribución Normal

El código de la distribución Normal:

- En `R` tenemos las funciones del paquete `stats`: `dnorm(x, mean, sd), pnorm(q, mean, sd), qnorm(p, mean, sd), rnorm(n, mean, sd)` donde `mean` es la media y `sd` es la desviación estándar de la normal $N(\mu, \sigma)$.
- En `Python` tenemos las funciones del paquete `scipy.stats.expon`: `pdf(k, mu, scale), cdf(k, mu, scale), ppf(q, mu, scale), rvs(n, mu, scale)` donde `mu` es la media y `scale` es la desviación estándar de la normal $N(\mu, \sigma)$.


## Distribución Normal

<l class = "prop">Estandarización de una v.a. normal.</l> Si $X$ es una v.a. $\mathcal{N}(\mu,\sigma)$, entonces $$Z=\frac{X-\mu}{\sigma}\sim\mathcal{N}(0,1)$$
Expand All @@ -610,6 +659,23 @@ Si a la hora de llamar a alguna de las 4 funciones siguientes: `dnorm`, `pnorm`,

Es decir, R interpreta $\mu = 0$ y $\sigma = 1$

## Otras distribuciones importantes

- La distribución $\chi^2_k$, donde $k$ representa los grados de libertad de la misma y que procede de la suma de los cuadrados de $k$ distribuciones normales estándar independientes:

$$X = Z_1^2 + Z_2^2+\cdots + Z_k^2\sim \chi_k^2$$

## Otras distribuciones importantes

- La distribución $t_k$ surge del problema de estimar la media de una población normalmente distribuida cuando el tamaño de la muestra es pequeña y procede del cociente

$$T = \frac{Z}{\sqrt{\chi^2_k/k}}\sim T_k$$

## Otras distribuciones importantes

- La distribución $F_{n_1,n_2}$ aparece frecuentemente como la distribución nula de una prueba estadística, especialmente en el análisis de varianza. Viene definida como el cociente

$$F = \frac{\chi^2_{n_1}/n_1}{\chi^2_{n_2}/n_2}\sim F_{n_1,n_2}$$

## Distribuciones continuas en R

Expand Down
118 changes: 110 additions & 8 deletions teoria/Tema11.html

Large diffs are not rendered by default.

0 comments on commit 6f9e928

Please sign in to comment.