Está en la página 1de 20

I N S T I T U T O T E C N O L Ó G I C O

A U T Ó N O M O D E M É X I C O

Tarea 2

Modelos lineales Generalizados

Emilio Camargo Espinosa


Claudia Ximena Paz Cendejas
Diego Villegas Juarez

Ciudad de México. 2024


Tarea 2
2024-02-03

Tarea 2
1. Estimando una media Poisson usando una inicial discreta. Supongan que son dueños de una compañía
de transporte con una flota grande de camiones. Las descomposturas ocurren aleatoriamente en el
tiempo y supóngase que el número de descomposturas durante un intervalo de t días sigue un distribu-
ción Poisson con media 𝜆𝑡. El parámetro 𝜆 es la tasa de descompostura diaria. Los posibles valores
para � son 0.5, 1, 1.5, 2,2.5 y 3, con respectivas probabilidades 0.1, 0.2, 0.3, 0.2, 0.15 y 0.05. Si uno
observa y descomposturas, entonces la probabilidad posterior de 𝜆 es proporcional a

𝑔(𝜆) ⋅ exp(−𝑡𝜆) ⋅ (𝑡𝜆)𝑦


,
donde g es la distribución inicial.

lambda <- c(0.5, 1, 1.5, 2, 2.5, 3)


p <- c(0.1, 0.2, 0.3, 0.2, 0.15, 0.05)
t <- 6
y <- 12

# Función exponencial de Poisson


poisson_exp <- lambda * t

# Probabilidad posterior
posterior_p <- p * exp(-poisson_exp) * (poisson_exp^y)

# Normalización
posterior_p_norm <- posterior_p / sum(posterior_p)

# Resultados
for (i in seq_along(lambda)) {
cat(sprintf('P(lambda=%.1f | y=%d, t=%d) = %.5f\n', lambda[i], y, t, posterior_p_norm[i]))
}

## P(lambda=0.5 | y=12, t=6) = 0.00009


## P(lambda=1.0 | y=12, t=6) = 0.03679
## P(lambda=1.5 | y=12, t=6) = 0.35652
## P(lambda=2.0 | y=12, t=6) = 0.37357
## P(lambda=2.5 | y=12, t=6) = 0.20299
## P(lambda=3.0 | y=12, t=6) = 0.03004

b. Encontrar la probabilidad de que no haya descomposturas durante la siguiente semana. Hint: Si la


tasa es 𝜆, la probabilidad condicional de no descomposturas durante un periodo de 7 días está dado
por exp(−7𝜆). Se puede calcular esta probabilidad predictiva multiplicando la lista de probabilidades
condicionales por las probabilidades posteriores de 𝜆 y encontrando la suma de los productos

1
days <- 7

# Probabilidad condicional de no descomposturas durante 7 días


conditional_p <- exp(-days * lambda)

# Probabilidad predictiva
predictive_p <- sum(posterior_p_norm * conditional_p)

# Resultado
cat(sprintf('Probabilidad de no descomposturas durante la siguiente semana: %.5f\n', predictive_p))

## Probabilidad de no descomposturas durante la siguiente semana: 0.00005

2. Estimando una proporción y predicción de una muestra futura. Un estudio reporta sobre los efectos de
largo plazo de exposición a bajas dosis de plomo en niños. Los investigadores analizaron el contenido
de plomo en la caída de los dientes de leche. De los niños cuyos dientes tienen un contenido de plomo
mayor que 22.22 ppm, 22 eventualmente se graduaron de la preparatoria y 7 no. Supongan que su
densidad inicial para p, la proporción de todos tales niños que se graduaron de preparatoria es beta(1,
1), y posterior es beta(23, 8).

a. Encontrar un intervalo estimado de 90 % para p.

# Parámetros posteriores
alpha <- 23
beta <- 8

# Nivel de confianza
intervalo_90 <- 0.90

# Cuantiles
inf <- qbeta((1 - intervalo_90) / 2, alpha, beta)
sup <- qbeta((1 + intervalo_90) / 2, alpha, beta)

# Resultado
cat(sprintf('Intervalo de confianza del %.2f%% para p: [%.4f, %.4f]\n', intervalo_90 * 100, inf, sup))

## Intervalo de confianza del 90.00% para p: [0.6061, 0.8598]

b. Encontrar la probabilidad de que p exceda 0.6.

# Valor límite para calcular la probabilidad


p_6 <- 0.6

# Probabilidad de que p exceda 0.6


prob <- 1 - pbeta(p_6, alpha, beta)

# Resultado
cat(sprintf('Probabilidad de que p exceda %.2f: %.4f\n', p_6, prob))

## Probabilidad de que p exceda 0.60: 0.9565

2
3. Estimando una media normal posterior con una inicial discreta. Supongamos que están interesados
en estimar el promedio de caida de lluvia por año 𝜇 en (cm) para una ciudad grande del Centro de
México. Supongan que la caída anual individual y1, . . . , yn son obtenidas de una población que se
supone N (𝜇, 100). Antes de recolectar los datos, supongan que creen que la lluvia media puede estar
en los siguiente valores con respectivas probabilidades 𝜇 20 30 40 50 60 70 g(𝜇) 0.1 0.15 0.25 0.25 0.15
0.1

a. Supongan que se observan los totales de caída de lluvia 38.6, 42.4, 57.5, 40.5, 51.7, 67.1, 33.4, 60.9,
64.1, 40.1, 40.7 y 6.4. Calcular la media.

# Datos
y_observed <- c(38.6, 42.4, 57.5, 40.5, 51.7, 67.1, 33.4, 60.9, 64.1, 40.1, 40.7, 6.4)

# Distribución inicial
mu <- c(20, 30, 40, 50, 60, 70)
prior_p <- c(0.1, 0.15, 0.25, 0.25, 0.15, 0.1)

# Función de densidad
likelihood <- function(y, mu) {
exp(-(y - mu)^2 / 200)
}

# Calcular la media posterior


media_posterior_numerador <- sum(outer(y_observed, prior_p, "*") * matrix(likelihood(y_observed, mu), nr
media_posterior_denominador <- sum(outer(prior_p, likelihood(y_observed, mu), "*"))

media_posterior <- media_posterior_numerador / media_posterior_denominador

cat("La media posterior estimada es:", media_posterior, "\n")

## La media posterior estimada es: 48.68635

b. Calcular la función de verosimilitud utilizando como estadística suficiente la media 𝑦̄.̄ -Calcular las
probabilidades posteriores para 𝜇 -Encontrar un intervalo de probabilidad de 80 % para 𝜇.

# Función de verosimilitud
likelihood_mu <- function(mu, y_bar, sigma_squared = 100) {
exp(-sum((y_bar - mu)^2) / (2 * sigma_squared))
}

# Calculo de la función de verosimilitud para cada valor de mu


likelihood_values <- sapply(mu, function(m) likelihood_mu(m, mean(y_observed)))

# Normalización
posterior_probabilities <- likelihood_values / sum(likelihood_values)

cat("Probabilidades posteriores para mu:\n")

## Probabilidades posteriores para mu:

3
print(posterior_probabilities)

## [1] 0.01635231 0.12430058 0.34759429 0.35758365 0.13532816 0.01884101

cumulative_probabilities <- cumsum(posterior_probabilities)


lower_bound <- min(mu[cumulative_probabilities >= 0.1])
upper_bound <- max(mu[cumulative_probabilities <= 0.9])

cat("Intervalo de probabilidad del 80% para mu:", c(lower_bound, upper_bound), "\n")

## Intervalo de probabilidad del 80% para mu: 30 50

posterior_data <- data.frame(mu = mu, posterior_prob = posterior_probabilities)

ggplot(posterior_data, aes(x = mu, y = posterior_prob)) +


geom_bar(stat = "identity", fill = "skyblue", color = "black") +
labs(title = "Distribución Posterior",
x = "mu",
y = "Probabilidad Posterior") +
theme_minimal()

Distribución Posterior

0.3
Probabilidad Posterior

0.2

0.1

0.0

20 40 60
mu

4
Supongan que se observa una muestra aleatoria y1, . . . , yn de una densidad Cauchy con
parámetro de localización theta y parámetro de escala 1. Si una inicial uniforme se considera
para theta, entonces la densidad posterior, ¿cuál es? Supongan que se observan los datos
0,10,9,8,11,3,3,8,8,11.

La densidad posterior es
Y 1
P (θ|y(n) α )
(yi − θ)2 + 1

a. Calcula un grid para theta de -2 a 12 en pasos de 0.1

mi_secuencia <- seq(from=-2, to=12, by=.1)

print(mi_secuencia)

## [1] -2.0 -1.9 -1.8 -1.7 -1.6 -1.5 -1.4 -1.3 -1.2 -1.1 -1.0 -0.9 -0.8 -0.7 -0.6
## [16] -0.5 -0.4 -0.3 -0.2 -0.1 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
## [31] 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4
## [46] 2.5 2.6 2.7 2.8 2.9 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9
## [61] 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5.0 5.1 5.2 5.3 5.4
## [76] 5.5 5.6 5.7 5.8 5.9 6.0 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9
## [91] 7.0 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 8.0 8.1 8.2 8.3 8.4
## [106] 8.5 8.6 8.7 8.8 8.9 9.0 9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 9.9
## [121] 10.0 10.1 10.2 10.3 10.4 10.5 10.6 10.7 10.8 10.9 11.0 11.1 11.2 11.3 11.4
## [136] 11.5 11.6 11.7 11.8 11.9 12.0

b. Calcula la densidad posterior en este grid.

datos<-c(0,10,9,8,11,3,3,8,8,11)

funcion1 <- function(theta, datos) {


m <- 1
for (i in datos) {
denominador <- (i - theta)ˆ2 + 1
m <- m / denominador
}
return(m)
}
densidad_posterior<-list()

for (k in mi_secuencia) {

1
resultado <- funcion1(k, datos)
densidad_posterior <- append(densidad_posterior, resultado)
}

densidad_posterior <- sapply(mi_secuencia, function(k) funcion1(k, datos))


densidad_posterior

## [1] 5.616859e-19 7.461543e-19 9.962325e-19 1.337018e-18 1.803826e-18


## [6] 2.446536e-18 3.335828e-18 4.572064e-18 6.297869e-18 8.715705e-18
## [11] 1.211193e-17 1.688876e-17 2.360474e-17 3.302244e-17 4.615822e-17
## [16] 6.432326e-17 8.913899e-17 1.225089e-16 1.665393e-16 2.234299e-16
## [21] 2.953963e-16 3.847091e-16 4.939185e-16 6.262767e-16 7.863112e-16
## [26] 9.804986e-16 1.218032e-15 1.511756e-15 1.879390e-15 2.345255e-15
## [31] 2.942727e-15 3.717788e-15 4.734130e-15 6.080519e-15 7.881383e-15
## [36] 1.031200e-14 1.362011e-14 1.815645e-14 2.441679e-14 3.309822e-14
## [41] 4.517038e-14 6.195726e-14 8.521406e-14 1.171630e-13 1.604220e-13
## [46] 2.177284e-13 2.913596e-13 3.822291e-13 4.888429e-13 6.065832e-13
## [51] 7.279164e-13 8.438307e-13 9.460997e-13 1.029365e-12 1.092114e-12
## [56] 1.136319e-12 1.166248e-12 1.187132e-12 1.204167e-12 1.222000e-12
## [61] 1.244598e-12 1.275361e-12 1.317348e-12 1.373545e-12 1.447151e-12
## [66] 1.541862e-12 1.662192e-12 1.813846e-12 2.004182e-12 2.242827e-12
## [71] 2.542500e-12 2.920160e-12 3.398615e-12 4.008809e-12 4.793116e-12
## [76] 5.810120e-12 7.141639e-12 8.903130e-12 1.125928e-11 1.444762e-11
## [81] 1.881450e-11 2.487078e-11 3.337832e-11 4.548578e-11 6.294317e-11
## [86] 8.844235e-11 1.261586e-10 1.826103e-10 2.680125e-10 3.983740e-10
## [91] 5.986518e-10 9.072610e-10 1.381978e-09 2.106444e-09 3.194644e-09
## [96] 4.787662e-09 7.033752e-09 1.004294e-08 1.381740e-08 1.818153e-08
## [101] 2.275831e-08 2.703264e-08 3.049234e-08 3.277729e-08 3.375831e-08
## [106] 3.351914e-08 3.227703e-08 3.029647e-08 2.783084e-08 2.509683e-08
## [111] 2.227013e-08 1.948819e-08 1.685276e-08 1.443103e-08 1.225784e-08
## [116] 1.034089e-08 8.668618e-09 7.218765e-09 5.965887e-09 4.886326e-09
## [121] 3.960396e-09 3.172216e-09 2.508247e-09 1.955727e-09 1.501839e-09
## [126] 1.133761e-09 8.392407e-10 6.071732e-10 4.278316e-10 2.926849e-10
## [131] 1.940052e-10 1.245622e-10 7.760133e-11 4.707861e-11 2.795100e-11
## [136] 1.633159e-11 9.444163e-12 5.433100e-12 3.123239e-12 1.800513e-12
## [141] 1.043825e-12

c. Grafica la densidad y comenten sobre sus características principales.

df <- data.frame(theta = mi_secuencia, densidad = densidad_posterior)

ggplot(df, aes(x = theta, y = densidad)) +


geom_line() +
labs(title = "Densidad Posterior",
x = "Theta",
y = "Densidad")

2
Densidad Posterior

3e−08

2e−08
Densidad

1e−08

0e+00

0 4 8 12
Theta

Cómo podemos observar, la mayoría de la densidad esta a la derecha de la distribución. Asimismo, la altura
en realidad es pequeña. Tiene una gran concentración en pocos valores de theta
d. Calcula la media posterior y desviación estándar posterior.
Media de la posterior

df$producto<-df$theta*df$densidad

mean(df$producto)

## [1] 3.051009e-08

Desviación estandar de la posterior

desviación<-sqrt(var(df$producto))
desviación

## [1] 7.101748e-08

Robustez Bayesiana. Supongan que están a punto de lanzar una moneda que creen que es
honesta. Si p denota la probabilidad de obtener sol, entonces su mejor creencia es que p =
0.5 Adicionalmente, creen que es altamente probable que la moneda sea cercana a honesta, lo
que cuantifican como P(0.44 < p < 0.56) = 0.9. Consideren las siguientes dos iniciales para
p: P1 p -> beta(100, 100) P2 p -> 0.9beta(500, 500) + 0.1beta(1, 1)

3
a. Simular 1000 valores de cada densidad inicial P1 y P2. Resumiendo las muestras simuladas,
mostrar que ambas iniciales concuerdan con las creencias iniciales acerca de la probabilidad p
del lanzamiento de moneda.
Para P1

shape1 <- 100


shape2 <- 100

num_simulaciones <- 1000

valores_convergentes <- numeric(num_simulaciones)

for (i in 1:num_simulaciones) {
simulacion <- rbeta(i, shape1, shape2)
valores_convergentes[i] <- mean(simulacion)
}

plot(1:num_simulaciones, valores_convergentes, type = "l",


xlab = "Número de simulaciones", ylab = "Valor convergente",
main = "Convergencia Distribución Beta")

Convergencia Distribución Beta


0.52
0.51
Valor convergente

0.50
0.49
0.48

0 200 400 600 800 1000

Número de simulaciones

Para P2

4
shape3 <- 500
shape4 <- 500
#
shape5 <- 1
shape6 <- 1
num_simulaciones <- 1000

simulaciones <- .9*rbeta(num_simulaciones, shape3, shape4)+.1*rbeta(num_simulaciones, shape5, shape6)


# Definir el rango de interés
rango_interes <- c(0.44, 0.56)
# Calcular la probabilidad acumulada para el tramo de interés
prob_acumulada_tramo <- mean(simulaciones > rango_interes[1] & simulaciones < rango_interes[2])
# Imprimir el resultado
print(prob_acumulada_tramo)

## [1] 0.961

Como podemos ver, la simulación arroja un valor muy cercano a .9


b. Supongan que lanzan la moneda 100 veces y obtienen 45 soles. Simular 1000 valores de las
distribuciones posteriores P1 y P2, y calcular intervalos de probabilidad del 90 %.
Para P1

shape1 <- 145


shape2 <- 155

num_simulaciones <- 1000

simulaciones <- rbeta(num_simulaciones, shape1, shape2)

intervalo_prob_90 <- quantile(simulaciones, c(0.05, 0.95))

cat("Intervalo de probabilidad del 90%:", intervalo_prob_90[1], "a", intervalo_prob_90[2], "\n")

## Intervalo de probabilidad del 90%: 0.4408658 a 0.5286124

hist(simulaciones, breaks = 30, main = "Histograma de Simulaciones",


xlab = "Valores Simulados", ylab = "Frecuencia", col = "lightblue", border = "black")

abline(v = intervalo_prob_90[1], col = "red", lty = 2, lwd = 2)


abline(v = intervalo_prob_90[2], col = "red", lty = 2, lwd = 2)

legend("topright", legend = c("Intervalo 90%"), col = c("red"), lty = 2, lwd = 2)

5
Histograma de Simulaciones

Intervalo 90%
80
60
Frecuencia

40
20
0

0.40 0.45 0.50 0.55

Valores Simulados

par(mfrow=c(1,1))

Para P2

shape3 <- 545


shape4 <- 555
shape5 <- 46
shape6 <- 56

num_simulaciones <- 1000

simulaciones <- (.9*rbeta(num_simulaciones, shape3, shape4)+.1*rbeta(num_simulaciones, shape5, shape6))

intervalo_prob_90 <- quantile(simulaciones, c(0.05, 0.95))

cat("Intervalo de probabilidad del 90%:", intervalo_prob_90[1], "a", intervalo_prob_90[2], "\n")

## Intervalo de probabilidad del 90%: 0.4678714 a 0.5158658

6
hist(simulaciones, breaks = 30, main = "Histograma de Simulaciones",
xlab = "Valores Simulados", ylab = "Frecuencia", col = "lightblue", border = "black")

abline(v = intervalo_prob_90[1], col = "red", lty = 2, lwd = 2)


abline(v = intervalo_prob_90[2], col = "red", lty = 2, lwd = 2)

legend("topright", legend = c("Intervalo 90%"), col = c("red"), lty = 2, lwd = 2)

Histograma de Simulaciones

Intervalo 90%
120
Frecuencia

20 40 60 80
0

0.46 0.48 0.50 0.52 0.54

Valores Simulados

par(mfrow=c(1,1))

c. Supongan que sólo observan 30 soles de los 100 lanzamientos. Nuevamente simular 1000
valores de las dos posteriores y calcular intervalos de probabilidad del 90 %.
P1

shape1 <- 130


shape2 <- 170

num_simulaciones <- 1000

simulaciones <- rbeta(num_simulaciones, shape1, shape2)

7
intervalo_prob_90 <- quantile(simulaciones, c(0.05, 0.95))

cat("Intervalo de probabilidad del 90%:", intervalo_prob_90[1], "a", intervalo_prob_90[2], "\n")

## Intervalo de probabilidad del 90%: 0.3891258 a 0.482351

hist(simulaciones, breaks = 30, main = "Histograma de Simulaciones",


xlab = "Valores Simulados", ylab = "Frecuencia", col = "lightblue", border = "black")

abline(v = intervalo_prob_90[1], col = "red", lty = 2, lwd = 2)


abline(v = intervalo_prob_90[2], col = "red", lty = 2, lwd = 2)

legend("topright", legend = c("Intervalo 90%"), col = c("red"), lty = 2, lwd = 2)

Histograma de Simulaciones
80

Intervalo 90%
60
Frecuencia

40
20
0

0.35 0.40 0.45 0.50

Valores Simulados

par(mfrow=c(1,1))

P2

8
shape3 <- 530
shape4 <- 570
shape5 <- 31
shape6 <- 71

num_simulaciones <- 1000

simulaciones <- (.9*rbeta(num_simulaciones, shape3, shape4)+.1*rbeta(num_simulaciones, shape5, shape6))

intervalo_prob_90 <- quantile(simulaciones, c(0.05, 0.95))

cat("Intervalo de probabilidad del 90%:", intervalo_prob_90[1], "a", intervalo_prob_90[2], "\n")

## Intervalo de probabilidad del 90%: 0.4407288 a 0.4874487

hist(simulaciones, breaks = 30, main = "Histograma de Simulaciones",


xlab = "Valores Simulados", ylab = "Frecuencia", col = "lightblue", border = "black")

abline(v = intervalo_prob_90[1], col = "red", lty = 2, lwd = 2)


abline(v = intervalo_prob_90[2], col = "red", lty = 2, lwd = 2)

legend("topright", legend = c("Intervalo 90%"), col = c("red"), lty = 2, lwd = 2)

9
Histograma de Simulaciones
150

Intervalo 90%
100
Frecuencia

50
0

0.42 0.44 0.46 0.48 0.50

Valores Simulados

par(mfrow=c(1,1))

d. Viendo los resultados de (b) y (c), comentar sobre la robustez de la inferencia con respecto
a la elección de la densidad inicial en cada caso.
Como podemos observar, existe robustez respecto a la elección de la densidad inicial pues en el inciso b, la
moneda, a pesar de los cambios muestra, una idea razonable de que sigue siendo justa en ambos casos, por
el contrario en el caso C, ambas inciales ya no muestran que la moneda sea justa.
6. Aprendiendo de datos agrupados. Supongan que manejan en carretera y típicamente
manejan a una velocidad constante de 70km/h. Un día, rebasan un carro y son rebasados por
17 carros. Supongan que las velocidades son distribuídas N (µ, 100). Si rebasan s carros y son
rebasados por f,
a. ¿Cuál es la verosimilitud de µ?

L(µ) α Φ(70, µ, σ)s (1 − Φ(70, µ, σ))f

b. Asignando una densidad inicial plana para µ, si s = 1 y f = 17, graficar la densidad posterior
de µ.

s=1
f=17
sigma=10

x = seq(0,1,length=200)

10
prior = dbeta(x,1 ,1)
mu=1:200
verosimilitud = pnorm(70, mu, sigma)ˆs * (1 - pnorm(70, mu, sigma))ˆf
posterior = prior*verosimilitud/sum(prior*verosimilitud)

plot(mu, posterior, type = 'l', ylab = "posterior", main = "la densidad posterior de µ")

la densidad posterior de µ
0.08
0.06
posterior

0.04
0.02
0.00

0 50 100 150 200

mu

c. Usando la densidad encontrada en (b), encontrar la media posterior de µ


La media posterior se encuentra al utilizar lo anterior y multiplicarlo por mu

sum(mu * posterior)

## [1] 87.11109

d. Encontrar la probabilidad de que la velocidad promedio de los carros exceda 80 km/h.


probabilidad que el promedio exceda 80 km/h

sum(posterior[80:200])

## [1] 0.9468573

11

También podría gustarte