IREC, 13/05/2024
Javier Fernández-López, Valentin Lauret
\[~\] \[~\] \[~\] \[~\] \[~\] \[~\]
2024-05-12
Valentin Lauret & Javier Fernández-López
Dominio: \(X \in (-\infty,\infty)\); \(parametro_1 \in (-\infty,\infty)\); \(parametro_2 > 0\) (real)
En R/NIMBLE: dnombre(parametro1, parametro2)
Dominio: \(X \in (-\infty,\infty)\); \(\mu \in (-\infty,\infty)\); \(\sigma > 0\) (real)
En R/NIMBLE: dnorm(mean, sd)
Dominio: \(X \in (-\infty,\infty)\); \(\mu \in (-\infty,\infty)\); \(\sigma > 0\) (real)
En R/NIMBLE: dnorm(mean, sd)
Dominio: \(X \in (0,1)\); \(\alpha > 0\) (real); \(\beta > 0\) (real)
En R/NIMBLE: dbeta(alpha, beta)
Dominio: \(X \in (0,1)\); \(\alpha > 0\) (real); \(\beta > 0\) (real)
En R/NIMBLE: dbeta(alpha, beta)
Dominio: \(X \in (0,\infty)\); \(\alpha > 0\) (real); \(\beta > 0\) (real)
En R/NIMBLE: dgamma(shape, rate)
Dominio: \(X \in (0,\infty)\); \(\alpha > 0\) (real); \(\beta > 0\) (real)
En R/NIMBLE: dgamma(shape, rate)
Dominio: \(X \in (-\infty,\infty)\); \(min \in (-\infty,\infty)\) (real); \(max \in (-\infty,\infty)\) (real)
En R/NIMBLE: dunif(min, max)
Dominio: \(X \in (0,\infty)\) (natural); \(\lambda \in (0,\infty)\) (real)
En R/NIMBLE: dpois(lambda)
Dominio: \(X = \{0,1\}\); \(p \in (0,1)\)
En R/NIMBLE: dbinom(1, prob)
/ dbern(prob)
Dominio: \(X = \{0,1\}\);\(n \in (0,\infty)\) (natural) \(p \in (0,1)\)
En R/NIMBLE: dbinom(size, prob)
/ dbinom(prob, size)
Distribución | Links | Fórmula | Inversa |
---|---|---|---|
Gaussiana(\(\mu,\sigma\)) | Identidad | \(\mu = \beta X\) | \(\mu = \beta X\) |
Poisson(\(\lambda\)) | Log | \(log(\lambda) = \beta X\) | \(\lambda = e^{(\beta X)}\) |
Bernoulli(p) | Logit, probit, cloglog | \(log(\frac{p}{1-p}) = \beta X\) | \(p = \frac{e^{(\beta X)}}{1 + e^{(\beta X)}}\) |
Binomial(n,p) | Logit, probit, cloglog | \(log(\frac{p}{1-p}) = \beta X\) | \(p = \frac{e^{(\beta X)}}{1 + e^{(\beta X)}}\) |
Hemos muestreado 100 cuadrículas contando excrementos de corzo y anotando la temperatura media: \[~\]
conteo temp
1 6 1.2
2 8 2.5
3 28 4.9
4 220 8.9
5 6 0.4
6 225 8.8
7 294 9.3
8 50 5.9
9 46 5.5
10 1 -1.3
11 2 0.5
12 4 0.1
13 59 6.2
14 7 2.6
15 92 7.2
16 13 4.0
17 86 6.6
18 386 9.9
19 17 2.6
20 104 7.3
21 274 9.2
22 2 0.5
23 53 5.8
24 1 -0.5
25 6 1.2
26 6 2.6
27 2 -1.8
28 11 2.6
29 183 8.4
30 7 2.1
31 18 3.8
32 37 5.2
33 16 3.9
34 5 0.2
35 139 7.9
36 52 6.0
37 121 7.5
38 2 -0.7
39 86 6.7
40 10 2.9
41 156 7.9
42 53 5.8
43 123 7.4
44 22 4.6
45 30 4.4
46 123 7.5
47 3 -1.7
48 17 3.7
49 78 6.8
50 58 6.3
51 21 3.7
52 182 8.3
53 11 3.3
54 2 0.9
55 1 -1.2
56 2 -0.8
57 4 1.8
58 19 4.2
59 42 5.9
60 14 2.9
61 250 9.0
62 10 1.5
63 14 3.5
64 5 2.0
65 46 5.8
66 5 1.1
67 14 3.7
68 109 7.2
69 0 -1.0
70 186 8.5
71 9 2.1
72 162 8.1
73 7 2.2
74 7 2.0
75 15 3.7
76 195 8.7
77 178 8.4
78 15 2.7
79 119 7.3
80 318 9.5
81 8 3.2
82 70 6.6
83 9 2.8
84 9 1.9
85 99 7.1
86 1 0.4
87 75 6.5
88 1 -0.5
89 1 0.9
90 1 -0.3
91 3 0.9
92 0 -1.3
93 43 5.7
94 177 8.5
95 85 7.3
96 117 7.6
97 13 3.5
98 8 2.9
99 151 7.7
100 38 5.3
\[~\] Podemos crear un modelo para relacionar el número de excrementos de corzo con la temperatura en cada cuadrícula. ¿Qué distribución podría utilizar?
conteo temp
1 6 1.2
2 8 2.5
3 28 4.9
4 220 8.9
5 6 0.4
6 225 8.8
7 294 9.3
8 50 5.9
9 46 5.5
10 1 -1.3
11 2 0.5
12 4 0.1
13 59 6.2
14 7 2.6
15 92 7.2
16 13 4.0
17 86 6.6
18 386 9.9
19 17 2.6
20 104 7.3
21 274 9.2
22 2 0.5
23 53 5.8
24 1 -0.5
25 6 1.2
26 6 2.6
27 2 -1.8
28 11 2.6
29 183 8.4
30 7 2.1
31 18 3.8
32 37 5.2
33 16 3.9
34 5 0.2
35 139 7.9
36 52 6.0
37 121 7.5
38 2 -0.7
39 86 6.7
40 10 2.9
41 156 7.9
42 53 5.8
43 123 7.4
44 22 4.6
45 30 4.4
46 123 7.5
47 3 -1.7
48 17 3.7
49 78 6.8
50 58 6.3
51 21 3.7
52 182 8.3
53 11 3.3
54 2 0.9
55 1 -1.2
56 2 -0.8
57 4 1.8
58 19 4.2
59 42 5.9
60 14 2.9
61 250 9.0
62 10 1.5
63 14 3.5
64 5 2.0
65 46 5.8
66 5 1.1
67 14 3.7
68 109 7.2
69 0 -1.0
70 186 8.5
71 9 2.1
72 162 8.1
73 7 2.2
74 7 2.0
75 15 3.7
76 195 8.7
77 178 8.4
78 15 2.7
79 119 7.3
80 318 9.5
81 8 3.2
82 70 6.6
83 9 2.8
84 9 1.9
85 99 7.1
86 1 0.4
87 75 6.5
88 1 -0.5
89 1 0.9
90 1 -0.3
91 3 0.9
92 0 -1.3
93 43 5.7
94 177 8.5
95 85 7.3
96 117 7.6
97 13 3.5
98 8 2.9
99 151 7.7
100 38 5.3
Dominio: \(X \in (0,\infty)\) (natural); \(\lambda \in (0,\infty)\) (real)
En R/NIMBLE: dpois(lambda)
datos <- read.csv("1_poisson_datos.csv")
m1 <- glm(conteo ~ temp, family = poisson(link = "log"))
summary(m1)
Call:
glm(formula = conteo ~ temp, family = poisson(link = "log"))
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.930115 0.055375 16.80 <2e-16 ***
temp 0.509376 0.007002 72.75 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for poisson family taken to be 1)
Null deviance: 9052.170 on 99 degrees of freedom
Residual deviance: 79.327 on 98 degrees of freedom
AIC: 568.48
Number of Fisher Scoring iterations: 4
R nos ofrece la posibilidad de simular números aleatorios obtenidos a partir de una distribución de probabilidad dada. Por ejemplo, podemos pedirle 20 números aleatorios obtenidos a partir de una distribución normal de media=0 y sd=1
Podemos graficar un histograma de frecuencias de estos números, para comprobar cómo se distribuyen realmente los números simulados
Cuanto mayor sea la muestra de números aleatorios, más se parecerá el histograma a su distribución real
Cuanto mayor sea la muestra de números aleatorios, más se parecerá el histograma a su distribución real
Podemos generar números aleatorios sacados de una distribución cuyos parametros varían. Queremos 1000 números aleatorios de los cuales 500 provengan de una distribución normal media=-2 y sd=1 y otros 500 provengan de una distribución normal media=2 y sd=1
Son secuencias de instrucciones de código que se ejecuta repetidas veces, hasta que una condición deja de cumplirse. Uno de los bucles más utilizados es el denominado “for”. Podemos pedirle que nos imprima en pantalla las 5 primeras cifras de una serie de 100 números obtenidos a partir de una distribución normal de media=0 y sd=1
numeros <- rnorm(n = 100, mean = 0, sd = 1)
for (i in 1:5){
print(paste("El número",i, "es el", numeros[i]))
}
[1] "El número 1 es el -0.131220053875131"
[1] "El número 2 es el 0.955595821361478"
[1] "El número 3 es el 0.358458885309875"
[1] "El número 4 es el 1.16006162387297"
[1] "El número 5 es el -0.320703067252054"
Podemos consultar todas las distribuciones disponibles en R base en utilizando help("distribution")
. Vamos a simular 1000 números obtenidos a partir de una distribución de Poisson con parámetro lambda=4
Vamos a simular 1000 números a partir de una distribución de Poisson cuyo parámetro \(\lambda\) va a variar en función a una variable aleatoria \(x_1 \sim Uniforme(-2,10)\), con coeficientes \(b_0=1\) (intercepto) y \(b_1=0.5\) (pendiente).
Podemos ver la relación de nuestra variable predictora con los números aleatorios generados
Ahora podemos aplicar la maquinaria de los modelos lineales generalizados para ver si somos capaces de recuperar los parámetros simulados (\(b_0=1\) y \(b_1=0.5\))
Las simulaciones permiten recrear condiciones controladas (laboratorio). En palabras de Michael Schaub y Marc Kéry:
En las simulaciones la verdad es conocida, permite estudiar si el modelo produce estimas no sesgadas, investigar la violación de asunciones…
Útiles para hacer análisis de potencia (power analysis)
Se puede verificar la identificabilidad de nuestros parámetros
Es una prueba de que hemos entendido el modelo
datos100 <- datos[sample(1:1000,100),]
datos50 <- datos[sample(1:1000,50),]
datos10 <- datos[sample(1:1000,10),]
datos5 <- datos[sample(1:1000,5),]
m100 <- glm(conteos ~ x1, family = poisson(link = "log"), data = datos100)
m50 <- glm(conteos ~ x1, family = poisson(link = "log"), data = datos50)
m10 <- glm(conteos ~ x1, family = poisson(link = "log"), data = datos10)
m5 <- glm(conteos ~ x1, family = poisson(link = "log"), data = datos5)
#summary(modelo)$coefficients
b0_est | b0_err | b1_est | b1_err |
---|---|---|---|
0.9839318 | 0.0169603 | 0.5022825 | 0.0020432 |
1.0419032 | 0.0494432 | 0.4977652 | 0.0058699 |
0.9076790 | 0.0881629 | 0.5106495 | 0.0109850 |
0.9719651 | 0.1439569 | 0.5145671 | 0.0180198 |
0.7805831 | 0.2522782 | 0.5274006 | 0.0291127 |
Las simulaciones son ideales para entender ciertos fenómenos que siempre hemos escuchado en torno a la modelización:
¿Qué pasa si mis datos no siguen la distribución que estoy utilizando?
¿Qué ocurre si introduzco variables predictoras correlacionadas entre sí?
¿Qué efecto puede tener la heterogeneidad no modelada?
¿Cómo afectan a mis estimas los errores en mi base de datos?
IBER - Bayesian and Nimble