\[P_t = \dfrac{1}{k + h\cdot c^t}\] En la ecuación \(k,h\) y \(c\) son los parámetros del modelo, y \(t\) es una medida del tiempo. Para este modelo, \(\frac{1}{k}\) es la asíntota.
Debido a que el crecimiento de una población a una tasa constante es poco probable en poblaciones humanas, varios modelos matemáticos que consideran un límite superior (asíntota) al tamaño de la población son considerados más apropiados. Uno de los modelos asintóticos comunmente usados es el modelo logístico.
La asíntota es una constante matemática para un conjunto dado de datos de población, siempre que las tendencias pasadas continúen prevaleciendo en el futuro. Bajo estas condiciones, indica el tamaño máximo posible de una población en el futuro si continúa siguiendo el modelo.
Existen varios procedimientos para ajustar el modelo a partir de datos. Uno de esos procedimientos es el método de totales parciales.
Si el número de observaciones no es múltiplo de 3, entonces se deben descartar una o dos observaciones.
Si el residuo es 1, entonces se debe descartar una observación al principio o al final.
Cuando el residuo es 2, entonces una observación al principio y una al final, o ambas al principio o ambas al final, deben descartarse.
Nota: En este caso se descartan la primera (Residuo igual a 1 o 2) y la última (2) observación.
logmodel <- function(training, date_col = "date", pop_col = "pop"){
data <- as.data.frame(training)
nr <- nrow(data)
n <- nr %/% 3
if (nr %% 3 == 1) {
data <- data[-1,]
} else if (nr %% 3 == 2) {
data <- data[-c(1,nr),]
}
fd <- data[1, date_col]
dd <- diff(data[1:2, date_col])
s <- map_dbl(0:2, ~sum(1/data[1:n + .x*n, pop_col]))
c <- ((s[3]-s[2])/(s[2]-s[1]))**(1/n)
h <- (s[2]-s[1])*(c-1)/(c**n-1)**2
k <- 1/n*(s[1]-(c**n-1)/(c-1)*h)
function(date) 1/(k+h*c**((date-fd)/dd))
}
Como primer ejercicio se proyecta la población, según datos del INEGI, del estado de Durango (10).
mexico10_pop <- tibble(
date = seq(1950, 2010, 10),
pop = c(629874, 760836, 939208, 1182320, 1349378, 1448661, 1632934)
)
model1 <- logmodel(mexico10_pop[1:6,])
mexico10_growth <-
mexico10_pop %>%
mutate(
.pophat = model1(date),
.resid = pop - .pophat
)
Según el modelo ajustado, la población en el año 2010 sería de 1.614 millones, menor al verdadero tamaño reportado en el censo del mismo año. Al observar el gráfico de las poblaciones ajustadas podríamos tomar como válido el resultado para poder afirmar que esta entidad mantuvo el modelo de crecimiento en el siguiente censo.
| Entidad | Año | Población | Población proyectada | Residuo |
|---|---|---|---|---|
| 10 Durango | 1950 | 629,874 | 615,958.23 | 13,915.77 |
| 10 Durango | 1960 | 760,836 | 782,181.22 | -21,345.22 |
| 10 Durango | 1970 | 939,208 | 962,807.07 | -23,599.07 |
| 10 Durango | 1980 | 1,182,320 | 1,146,931.18 | 35,388.82 |
| 10 Durango | 1990 | 1,349,378 | 1,322,789.50 | 26,588.50 |
| 10 Durango | 2000 | 1,448,661 | 1,480,611.48 | -31,950.48 |
| 10 Durango | 2010 | 1,632,934 | 1,614,524.29 | 18,409.71 |
El siguiente modelo se ajustará para el país de Iraq con la información correspondiente a los años de 1960, 1965, …, 2005, proporcionada por el Banco Mundial.
Una forma que simplifica la consulta y análisis de los datos es por medio de la API proporcionada por el mismo sitio y que actualmente, el paquete wbstats integra su uso en R. Véase Piburn (2020)Piburn, J. 2020. Wbstats: Programmatic Access to Data and Statistics from the World Bank API. https://github.com/nset-ornl/wbstats. para más información.
iraq_pop_raw <- wbstats::wb_data(
indicator = "SP.POP.TOTL",
country = "Iraq",
start_date = 1960,
end_date = 2015
)
iraq_pop <-
iraq_pop_raw %>%
select(3:5) %>%
rename(pop = SP.POP.TOTL) %>%
filter(date %% 5 == 0)
model2 <- logmodel(training = filter(iraq_pop, date <= 2005))
iraq_growth <-
iraq_pop %>%
mutate(
.pophat = model2(date),
.resid = pop - .pophat
)
El modelo proyecta una población para el 2010 de 29.825 millones, superior a la reportada en los datos, sin embargo la diferencia no es muy grande comparada con la proyección del año 2015, que tiene un residuo de más de 2 millones, resultado que indica un cambio en la tendencia poblacional.
| País | Año | Población | Población proyectada | Residuo |
|---|---|---|---|---|
| Iraq | 2010 | 29,741,976 | 29,825,169.02 | -83,193.02 |
| Iraq | 2015 | 35,572,261 | 33,355,163.02 | 2,217,097.98 |
Lo curioso es que, Iraq es un país que a inicios del siglo XXI fue el centro de atención y conflicto bélico internacional, mismo que concluyó a finales del 2011, dejando un desastre social, económico y humano en la nación iraquí. Como consecuencia la destrucción, la corrupción y la inseguridad condujeron al país a tener elevadas tasas de desempleo.
Lo anterior da pie a entender que el crecimiento poblacional no pudo haberse dado por un incremento en las tasas de natalidad, pues la situación social no lo sustentaría, además, debido al número de bajas de guerra estas deberían ser muy superiores a los años anteriores para apoyar el aumento de la población.
Al mismo tiempo que concluía la guerra de Iraq, otro conflicto estaba iniciando en la nación vecina, Siria. Esto obligó a los miles de iraquíes que habían huido de la guerra en su país a volver a casa junto a miles de sirios que huían de los nuevos combates. Así, el motivo más lógico en el crecimiento poblacional no explicado por el modelo logístico se daría por el incremento en el saldo migratorio del país.