人口预测模型

article/2025/11/7 23:10:38

预测人口模型

利用灰色预测模型预测人口

应用

灰色预测模型(Gray Forecast Model)是通过少量的、不完全的信息,建立数学模型并做出预测的一种预测方法。是处理小样本(4个就可以)预测问题的有效工具,而对于小样本预测问题回归和神经网络的效果都不太理想。

灰色系统

我们称信息完全未确定的系统为黑色系统,称信息完全确定的系统为白色系统,灰色系统就是这介于这之间,一部分信息是已知的,另一部分信息是未知的,系统内各因素间有不确定的关系。

特点

  • 用灰色数学处理不确定量,使之量化。
  • 充分利用已知信息寻求系统的运动规律。
  • 灰色系统理论能处理贫信息系统。

灰色生成数列

灰色系统理论认为,尽管客观表象复杂,但总是有整体功能的,因此必然蕴含某种内在规律。关键在于如何选择适当的方式去挖掘和利用它。灰色系统时通过对原始数据的整理来寻求其变化规律的,这是一种就数据寻求数据的现实规律的途径,也就是灰色序列的生产。一切灰色序列都能通过某种生成弱化其随机性,显现其规律性。数据生成的常用方式有累加生成、累减生成和加权累加生成。常用的是累加生成。
设原始数据为设原始数据为 x ( 0 ) = ( x 0 ( 1 ) , x 0 ( 2 ) , … … , x 0 ( n ) ) x^{(0)}=\left(x^{0}(1), x^{0}(2), \ldots \ldots, x^{0}(n)\right) x(0)=(x0(1),x0(2),,x0(n))

1.累加生成

x 1 ( 1 ) = x 0 ( 1 ) x^{1}(1)=x^{0}(1) x1(1)=x0(1)

x 1 ( 2 ) = x 0 ( 1 ) + x 0 ( 2 ) x^{1}(2)=x^{0}(1)+x^{0}(2) x1(2)=x0(1)+x0(2)

x 1 ( 3 ) = x 0 ( 1 ) + x 0 ( 2 ) + x 0 ( 3 ) x^{1}(3)=x^{0}(1)+x^{0}(2)+x^{0}(3) x1(3)=x0(1)+x0(2)+x0(3)

x 1 ( n ) = x 0 ( 1 ) + x 0 ( 2 ) + … … + x 0 ( n ) x^{1}(n)=x^{0}(1)+x^{0}(2)+\ldots \ldots+x^{0}(n) x1(n)=x0(1)+x0(2)++x0(n)

累加的数据为 x ( 1 ) = ( x 1 ( 1 ) , x 1 ( 2 ) , … … , x 1 ( n ) ) x^{(1)}=\left(x^{1}(1), x^{1}(2), \ldots \ldots, x^{1}(n)\right) x(1)=(x1(1),x1(2),,x1(n))
例如有一组数据的的折线如下
在这里插入图片描述
此时不能看出数据有什么的规律,但经过累加生成后的结果如下
在这里插入图片描述
看起来就是一个递增的规律(这是20期某大坝变形位移的数据,顺水流方向的形变一定都是正的)

2.加权临值生成

z 0 ( 2 ) = a x 0 ( 2 ) + ( 1 − a ) x 0 ( 1 ) z^{0}(2)=a x^{0}(2)+(1-a) x^{0}(1) z0(2)=ax0(2)+(1a)x0(1)
z 0 ( 3 ) = a x 0 ( 3 ) + ( 1 − a ) x 0 ( 2 ) z^{0}(3)=a x^{0}(3)+(1-a) x^{0}(2) z0(3)=ax0(3)+(1a)x0(2)
z 0 ( 4 ) = a x 0 ( 4 ) + ( 1 − a ) x 0 ( 3 ) z^{0}(4)=a x^{0}(4)+(1-a) x^{0}(3) z0(4)=ax0(4)+(1a)x0(3)
… \ldots
z 1 ( n ) = a x 0 ( n ) + ( 1 − a ) x 0 ( n − 1 ) z^{1}(n)=a x^{0}(n)+(1-a) x^{0}(n-1) z1(n)=ax0(n)+(1a)x0(n1)

由此得到的数列称为邻值生成数,权 α \alpha α 也称为生成系数。 特别地,当生成系数 α = \alpha= α= 0.5 0.5 0.5 时,则称该数列为均值生成数,也称为等权邻值生成数。

灰色模型GM(1,1)

GM代表grey model(灰色模型),GM(1,1)是一阶微分方程模型。

1.数据检验

使用 G M ( 1 , 1 ) \mathrm{GM}(1,1) GM(1,1) 建模需要对数据进行检验,首先计算数列的级比

λ ( k ) = x 0 ( k − 1 ) x 0 ( k ) \lambda(k)=\frac{x^{0}(k-1)}{x^{0}(k)} λ(k)=x0(k)x0(k1), 其中 k = 2 , 3 , … , n k=2,3, \ldots, n k=2,3,,n

如果所有的级比都落在可容覆盖区间 X = ( e − 2 n + 1 , e 2 n + 1 ) X=\left(e^{\frac{-2}{n+1}}, e^{\frac{2}{n+1}}\right) X=(en+12,en+12) 内,则数列 x ( 0 ) \left.x^{(} 0\right) x(0) 可以建立

G M ( 1 , 1 ) \mathrm{GM}(1,1) GM(1,1) 模型进行灰色预测。否则就需要对数据做适当的变换处理,如平移等。

2.构建灰色模型

定义 x ( 1 ) x^{(1)} x(1) 的灰导数为

d ( k ) = x 0 ( k ) = x 1 ( k ) − x 1 ( k − 1 ) d(k)=x^{0}(k)=x^{1}(k)-x^{1}(k-1) d(k)=x0(k)=x1(k)x1(k1)

z 1 ( k ) z^{1}(k) z1(k) 为数列 x 1 x^{1} x1 的邻值生成数列,即

z 1 ( k ) = a x 1 ( k ) + ( 1 − a ) x 1 ( k − 1 ) z^{1}(k)=a x^{1}(k)+(1-a) x^{1}(k-1) z1(k)=ax1(k)+(1a)x1(k1)

于是定义 G M ( 1 , 1 ) G M(1,1) GM(1,1) 的灰微分方程模型为

d ( k ) + a z 1 ( k ) = b d(k)+a z^{1}(k)=b d(k)+az1(k)=b

其中, a a a 称为发展系数, z 1 ( k ) z^{1}(k) z1(k) 称为白化背景值, b b b 称为灰作用量。接下来我们得到如 下方程组

x 0 ( 2 ) + a z 1 ( 2 ) = b x^{0}(2)+a z^{1}(2)=b x0(2)+az1(2)=b

x 0 ( 3 ) + a z 1 ( 3 ) = b x^{0}(3)+a z^{1}(3)=b x0(3)+az1(3)=b

x 0 ( n ) + a z 1 ( n ) = b x^{0}(n)+a z^{1}(n)=b x0(n)+az1(n)=b

按照矩阵的方法列出

$
u=\left[\begin{array}{l}
a \
b
\end{array}\right], Y=\left[\begin{array}{c}
x^{0}(2) \
x^{0}(3) \
\ldots \
x^{0}(n)
\end{array}\right], B=\left[\begin{array}{cc}
-z^{1}(2) & 1 \
-z^{1}(3) & 1 \
\cdots & \
-z^{1}(n) & 1
\end{array}\right]
$

G M ( 1 , 1 ) \mathrm{GM}(1,1) GM(1,1) 就可以表示为 Y = B u Y=B u Y=Bu ,接下来就是求 a a a b b b 的值,可以使用线性回归或者 ( B T B ) − 1 B T Y \left(B^{T} B\right)^{-1} B^{T} Y (BTB)1BTY (正规方程) 等按眧最小二乘的原埋来求出 a a a b b b 的值 (这里在列方程时 a a a 可以随便写一个 数,比如 1 2 \frac{1}{2} 21 ,这样 a a a ( 1 − a ) (1-a) (1a) 就一样的可以提出来方便写) 。

3.预测

相应的白化模型为

d x 1 ( t ) d t + a x 1 ( t ) = b \frac{d x^{1}(t)}{d t}+a x^{1}(t)=b dtdx1(t)+ax1(t)=b

由此得到 x 1 ( t ) x^{1}(t) x1(t) 的解为

x 1 ( t ) = ( x 0 ( 1 ) − b a ) e − a ( t − 1 ) + b a x^{1}(t)=\left(x^{0}(1)-\frac{b}{a}\right) e^{-a(t-1)}+\frac{b}{a} x1(t)=(x0(1)ab)ea(t1)+ab

t + 1 = t t+1=t t+1=t

x 1 ( t + 1 ) = ( x 0 ( 1 ) − b a ) e − a + b a x^{1}(t+1)=\left(x^{0}(1)-\frac{b}{a}\right) e^{-a}+\frac{b}{a} x1(t+1)=(x0(1)ab)ea+ab, 其中 k = 1 , 2 , 3 … , n − 1 k=1,2,3 \ldots, n-1 k=1,2,3,n1

这就是我们的预测值。

4.检验

灰色模型的精度检验一般有三种方法灰色模型的精度检验一般有三种方法,相对误差大小检验法,关联度检验法和后验差检验法。常用的为后验差检验法。

  1. 将预测的 x ^ 1 \hat{x}^{1} x^1 使用累减生成得到

    x ^ 0 \hat{x}^{0} x^0 x ^ 0 ( k ) = x ^ 1 ( k ) − x ^ 1 ( k − 1 ) \hat{x}^{0}(k)=\hat{x}^{1}(k)-\hat{x}^{1}(k-1) x^0(k)=x^1(k)x^1(k1), 其中 k = 2 , 3 , … , n k=2,3, \ldots, n k=2,3,,n

  2. 计算残差
    e ( k ) = x 0 ( k ) − x ^ 0 ( k ) e(k)=x^{0}(k)-\hat{x}^{0}(k) e(k)=x0(k)x^0(k), 其中 k = 1 , 2 , … , n k=1,2, \ldots, n k=1,2,,n

  3. 计算原始序列 x 0 x^{0} x0 的方差 S 1 S_{1} S1 和残差 e e e 的方差 S 2 S_{2} S2
    S 1 = 1 n ∑ k = 1 n ( x 0 ( k ) − x ˉ ) 2 S_{1}=\frac{1}{n} \sum_{k=1}^{n}\left(x^{0}(k)-\bar{x}\right)^{2} S1=n1k=1n(x0(k)xˉ)2 S 2 = 1 n ∑ k = 1 n ( e ( k ) − e ˉ ) 2 S_{2}=\frac{1}{n} \sum_{k=1}^{n}(e(k)-\bar{e})^{2} S2=n1k=1n(e(k)eˉ)2

  4. 计算后验差比
    C = S 2 S 1 C=\frac{S_{2}}{S_{1}} C=S1S2

  5. 查表观察效果

模型精度等级均方差比值C
1 级(好)C<=0.35
2 级(合格)C<=0.5&c>0.35
3 级(勉强)C<=0.65&c>0.5
4 级(不合格)C>0.65

灰色预测模型预测人口

1.输入数据

从国家统计局获取十年的人口数据

人口数据年份
1276272011
1284532012
1292272013
1299882014
1307562015
1314482016
1321292017
1328022018
1334502019
1340912020

采用灰色预测模型预估的后十年的人口数据

人口数据(万人)年份预测数据(万人)误差率
12762720011276270.000%
1284532002128575.4160.095%
1292272003129265.65770.030%
1299882004129959.60490.022%
1307562005130657.27740.076%
1314482006131358.69540.068%
1321292007132063.87880.049%
1328022008132772.84790.022%
1334502009133485.6230.027%
1340912010134202.22450.083%
1349162011134922.67310.005%
1359222012135646.98930.202%
1367262013136375.19390.257%
1376462014137107.30770.391%
1383262015137843.35190.349%
1392322016138583.34740.466%
1400112017139327.31550.488%
1405412018140075.27740.331%
1410082019140827.25480.128%
1412122020141583.2690.263%

误差率均在1%以下,效果很好。

以2011-2020年数据预测未来十年的人口数据

年份人口数目(万人)
2021142440.9
2022143150.2
2023143863.1
2024144579.5
2025145299.5
2026146023
2027146750.2
2028147481
2029148215.5
2030148953.6

image-20211212205444623

近似为一条直线,但根据国家统计局预测,我国人口将在10年内迎来拐点。

故更换预测模型。

按自然增长率预测

自然增长率数据

年份自然增长率
20116.13
20127.43
20135.9
20146.71
20154.93
20166.53
20175.58
20183.78
20193.32
20201.45

绘制自然增长率散点图

image-20211212210015318

散点图没有呈现适合灰度模型的性质(指数型),且波动较大,尝试运用灰度模型,部分输出为(舍去了预测数据)

该数据未通过检验
a=[0.10967811]
b=[8.69394742]2级,效果合格

数据未经过检验,故不采用灰度模型预测自然生产率。

运用SPSS对自然增长率进行曲线估算分析

运用曲线估算分析,分析哪种模型适合对人口进行预测。

曲线估算分析结果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kSJ9iqM6-1639318859800)(https://s2.loli.net/2021/12/12/YcnwZG7IEJ1OzVd.png)]

image-20211212215759064

其对数、二次、三次、复合、幂、指数函数的拟合显著性都低于0.05,均可采用,且二次函数最可信。

此处选择二次函数,所得未来5年的自然增长率如下:

年份自然增长率(‰)
20210.202
2022-1.462
2023-3.318
2024-5.366
2025-7.606

根据自然增长率预估未来5年人口

年份人口及预测人口(万人)
2021141240.5
2022141034
2023140566.1
2024139811.8
2025138748.4

image-20211212213636736

人口转折点在2022年。

灰色预测模型python代码

# 灰色模型预测import numpy as np
import pandas as pd
import matplotlib.pyplot as pltdir = 'C:\\Users\\shuai\\Desktop\\工程统计学\\讨论课'data = pd.read_csv(dir+'\\test.csv')
data = np.array(data['pdata'])
lens = len(data)  # 数据量# 数据检验
## 计算级比
lambds = []
for i in range(1, lens):lambds.append(data[i-1]/data[i])
## 计算区间
X_min = np.e**(-2/(lens+1))
X_max = np.e**(2/(lens+1))
## 检验
is_ok = True
for lambd in lambds:if (lambd < X_min or lambd > X_max):is_ok = False
if (is_ok == False):print('该数据未通过检验')
else:print('该数据通过检验')# 构建灰色模型GM(1,1)
## 累加数列
data_1 = []
data_1.append(data[0])
for i in range(1, lens):data_1.append(data_1[i-1]+data[i])
## 灰导数及临值生成数列
ds = []
zs = []
for i in range(1, lens):ds.append(data[i])zs.append(-1/2*(data_1[i-1]+data_1[i]))
## 求a、b
B = np.array(zs).reshape(lens-1,1)
one = np.ones(lens-1)
B = np.c_[B, one]  # 加上一列1
Y = np.array(ds).reshape(lens-1,1)
a, b = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Y)
print('a='+str(a))
print('b='+str(b))# 预测
def func(k):c = b/areturn (data[0]-c)*(np.e**(-a*k))+c
data_1_hat = []  # 累加预测值
data_0_hat = []  # 原始预测值
data_1_hat.append(func(0))
data_0_hat.append(data_1_hat[0])
for i in range(1, lens+10):  # 多预测10次data_1_hat.append(func(i))data_0_hat.append(data_1_hat[i]-data_1_hat[i-1])
print('预测值为:')
for i in data_0_hat:print(i)# 模型检验
## 预测结果方差
data_h = np.array(data_0_hat[0:10]).T
sum_h = data_h.sum()
mean_h = sum_h/lens
S1 = np.sum((data_h-mean_h)**2)/lens
## 残差方差
e = data - data_h
sum_e = e.sum()
mean_e = sum_e/lens
S2 = np.sum((e-mean_e)**2)/lens
## 后验差比
C = S2/S1
## 结果
if (C <= 0.35):print('1级,效果好')
elif (C <= 0.5 and C >= 0.35):print('2级,效果合格')
elif (C <= 0.65 and C >= 0.5):print('3级,效果勉强')
else:print('4级,效果不合格')# 画图
plt.figure(figsize=(9, 4), dpi=100)
x1 = np.linspace(1, 10, 10)
x2 = np.linspace(1, 20, 20)
plt.subplot(121)
plt.title('x^0')
plt.plot(x2, data_0_hat, 'r--', marker='*')
plt.scatter(x1, data, marker='^')
plt.subplot(122)
plt.title('x^1')
plt.plot(x2, data_1_hat, 'r--', marker='*')
plt.scatter(x1, data_1, marker='^')
plt.show()

输出结果如下

该数据通过检验
a=[-0.00535402]
b=[127548.20761512]
预测值为:
[127627.]
[128575.41598519]
[129265.6576876]
[129959.60486981]
[130657.27742425]
[131358.69535014]
[132063.87875406]
[132772.84785051]
[133485.62296254]
[134202.22452229]
[134922.67307159]
[135646.98926251]
[136375.19385806]
[137107.30773265]
[137843.35187279]
[138583.34737763]
[139327.31545959]
[140075.277445]
[140827.25477463]
[141583.26900437]
1级,效果好


http://chatgpt.dhexx.cn/article/vdEKkmNA.shtml

相关文章

基于logistic模型,GM模型和Leslie模型全国人口预测

目录 摘要....................................................................................................................... 1 一 问题重述......................................................................................................... 1 1.1 …

数学建模——人口预测模型

人口预测模型 多项式拟合假设特点代码实现代码实现思路代码 BP神经网络特点代码实现实现思路代码 Logistic模型特点代码实现原理代码 多项式拟合 假设 把人口增长看做是一个多项式函数人口增长没有限制&#xff0c;可以一直增长 特点 已有数据拟合的很好&#xff0c;不论数…

uC/OS任务创建函数OSTaskCreate ()参数详解

要使用 uC/OS 的任务必须先声明任务控制块和创建任务&#xff0c;调用 OSTaskCreate () 函数可以创建一个任务。OSTaskCreate () 函数的信息如下表所示。

UCOSIII os_task函数

认识任务管理的函数 建立任务&#xff1a;OSTaskCreate()堆栈检验&#xff1a;OSTaskStkChk()删除任务&#xff1a;OSTaskDel()改变任务优先级&#xff1a;OSTaskChangePrio()挂起任务&#xff1a;OSTaskSuspend()恢复任务&#xff1a;OSTaskResume() 任务可以是一个无线的循…

[uCOS/RTOS]uC/OS-II中的任务堆栈大小检测

在uC/OS-II系统中&#xff0c;创建任务的时候除了需要配置任务的优先级以外&#xff0c;还需要对任务堆栈大小进行分配。而对于单片机这种RAM并不是非常大的微控制器来说&#xff0c;RAM显得格外珍贵&#xff0c;如果任务堆栈分配大了&#xff0c;会导致RAM不够用&#xff0c;分…

FreeRTOS-Task

Task FreeRTOS中Task为调度单位&#xff0c;是独立的运行实例&#xff0c;具有自己的堆栈空 间。Task通常是无限循环执行&#xff0c;不允许以任何方式退出实现函数&#xff08;return 语句或者运行结束&#xff09;。如果Task真的不需要了&#xff0c;需要显式的调用delete 函…

AUTOSAR OS Introduction -- Part 2(Task Property)

Event Event 主要用于为Extended Task 提供多个同步点,每个Event 可以关联多个Task Event Trigger condition 显示调用SetEvent通过Alarm TriggerCallback & OS API WaitEvent 只要表达式中任意一个EVENT 被收到,Task state则切换至Ready, 等待调度表按照优先级进行…

UCOS-Ⅲ查看任务堆栈空间:OSTaskStkChk()函数

UCOS-Ⅲ查看任务堆栈空间&#xff1a;OSTaskStkChk()函数 文章目录 前言一、准备工作二、使用步骤1.创建堆栈检测任务2.在头文件os_cfg.h开启宏OS_CFG_STAT_TASK_STK_CHK_EN3.在堆栈检测任务使用OSTaskStkChk()函数 三、结果 前言 硬件的RAM资源有限&#xff0c;UCOSⅢ提供了一…

【UCOSIII操作系统】任务篇(1)创建任务

UCOSIII操作系统 UCOSIII操作系统——任务篇&#xff08;1&#xff09;创建任务一、UCOSIII——任务 简介二、创建任务流程1、定义任务栈2、定义任务控制块TCB3、定义任务主体函数4、创建任务 三、任务的状态 UCOSIII其他内容导航不迷路 UCOSIII操作系统-简介 【UCOSIII操作系统…

FreeRTOS中taskENTER_CRITICAL()和taskEXIT_CRITICAL()函数运用

以下转载自安富莱电子&#xff1a; http://forum.armfly.com/forum.php 临界段 代码的临界段也称为临界区&#xff0c;一旦这部分代码开始执行&#xff0c;则不允许任何中断打断。为确保临界段代码 的执行不被中断&#xff0c;在进入临界段之前须关中断&#xff0c;而临界段代…

OSTaskCreateExt()建立任务

ucosII创建任务的硬性要求&#xff1a; 1.任务必须被创建在多任务启动前或运行的任务中 2.任务不能在ISR&#xff08;中断&#xff09;中创建 3.任务必须在死循环中&#xff0c;且不能有返回 OSTaskCreateExt()建立任务 NT8U OSTaskCreateExt (void (*task)(void *pd), …

赢在微点答案专区英语_英语u校园读写2答案unit3,u校园新标准大学英语视听说3单元测试答案搜题公众号...

英语u校园读写2答案unit3,u校园新标准大学英语视听说3单元测试答案搜题公众号,u校园大学英语读写4第一单元答案查题APP更多相关问题A&#xff0e;婴儿期 B&#xff0e;幼儿期 C&#xff0e;学龄前期 D&#xff0e;学龄期 E&#xff0e;青春期关于自我&#xff0c;正确的说法是(…

新视野大学英语视听说第三版答案

Unit 1 Unit 2 Unit 3 Unit 4 Unit 5 Unit 6 Unit 7 Unit 8

视听说教程(第三版)4 quiz 1

视听说教程&#xff08;第三版&#xff09;4 quiz 1 Reading Comprehension Section A Passage One Questions 1 to 5 are based on the following passage. We all want to raise kids who are happy and successful, but we often mistakenly think that money is the key …

welearn 视听说1-4

词汇题&#xff08;55道&#xff09; 1. You should carefully think over_____ the manager said at the meeting. A. that B. which C. what D. whose 1.选C,考察宾语从句连接词&#xff0c;主句谓语动词think over后面缺宾语&#xff0c;后面的宾语从句谓语动…

使用RemObjects Pascal Script

摘自RemObjects Wiki 本文提供RemObjects Pascal Script的整体概要并演示如何创建一些简单的脚本. Pascal Script包括两个不同部分: 编译器 (uPSCompiler.pas)运行时 (uPSRuntime.pas) 两部分彼此独立.可以分开使用,或通过TPSScript 控件使用他们,这个控件定义在uPSComponent.p…

搭建一个简单的Pascal脚本开发环境

使用innosetup进行打包&#xff0c;涉及到需要编写一些Pascal脚本&#xff0c;所以了解了下Pascal的相关语法。 这里主要介绍如何搭建一个简单的Pascal开发环境。 一、Free Pascal Free Pascal&#xff08;全称 FPK Pascal&#xff09;是一个32位和64位专业Pascal编译器。它…

pascal编程语言介绍

Pascal是一种过程式编程语言&#xff0c;由Niklaus Wirth于1968年设计并于1970年发布&#xff0c;并以法国数学家和哲学家Blaise Pascal的名字命名。Pascal可以运行在多种平台上&#xff0c;例如Windows、Mac OS和各种版本的UNIX/Linux。[3] 软件名称 Pascal 软件平台 Windows、…

Free Pascal IDE安装

1. Free Pascal IDE 安装 首先&#xff0c;去 https://www.freepascal.org/download.var 下载Free Pascal IDE。我选择的sourceforge镜像 fpc-3.0.2.i386-win32.exe&#xff0c;下载比较慢&#xff0c;请耐心等待。下载完成后&#xff0c;双击exe文件进行安装&#xf…

[pascal入门]数组

一、本节目标 本节我们将要讲述数组。本节目标&#xff1a; 一维数组二维数组字符数组 二、一维数组 我们通过一个案例来简单的理解数组。班主任要计算班级里面50个同学数学成绩的平均成绩&#xff0c;道理上讲这是一个比较简单的问题&#xff0c;只需要把每个人的成绩加起来除…