人口流动与迁移,作为人类产生以来就存在的一种社会现象,伴随着人类文明的不断进步从未间断(点击文末“阅读原文”获取完整代码数据)。
相关视频
人力资源是社会文明进步、人民富裕幸福、国家繁荣昌盛的核心推动力量。当前,我国经济正处于从以政府主导的投资驱动型的经济“旧常态”向以市场需求为主导的经济“新常态”转型过渡期。
本文帮助客户综合运用R语言灰色预测模型和logistic逻辑回归模型,以及综合运用ARIMA模型和logistic模型,得到武汉市外省流入人口规模(查看文末了解数据免费获取方式)的预测。
国内关于流动人口的定量预测模型有很多,如马尔萨斯模型[1]、马尔可夫链模型[2]、指数平滑预测模型[3]、宋健模型、BP神经网络模型、单变量的双曲模型[4]、系统动力学模型、Leslie人口预测模型[5]、年龄移算法[6-8]以及CPPS 软件预测等。然而,在经济学和管理学范畴内﹐最为主要的有三种,分别是:
第一,灰色预测模型。1982年,我国学者邓聚龙教授创立了灰色系统理论﹐灰色系统理论的研究对象是“部分信息已知,部分信息未知”的“小样本”、“贫信息”不确定性系统。GM(1,1)模型是最常用的一种灰色模型,由一个只含单变量的一阶微分方程构成的模型。国内不少学者运用灰色预测模型对我国总人口规模的发展趋势进行预测[9-11]。还有一部分学者从区域发展的角度出发,构建了一系列城市人口或区域流动人口的灰色预测模型[12一14]。为了减少预测的误差,学者们进一步修正了GM(1,1)灰色预测模型,构建了“等维灰数递补动态预测”模型对人口进行定量预测[15] 。
第二,Logistic曲线模型。Logistic曲线呈S形,称为生长曲线。Logistic方程最早由比利时数学家P. F. Verhult于1838年提出。但长期埋没﹐直到20世纪20年代被生物学家与人口统计学家R.Pearl和L.J. Reed重新发现。经不断完善和发展,现广泛用于人口和商业分析中。我国学者多运用Logistic模型预测我国某地区的人口数量、流动人口规模等[16—20]
第三,时间序列模型。时间序列分析方法是伯克斯和詹金斯(Box-Jenkins)1976年提出的。
将武汉市外省流入人口的时间序列记为{Yt}。
点击标题查阅往期内容
01
02
03
04
为降低原始数据随机波动的影响,先要对原始数据进行平滑处理,本文采用常用的三点移动平均法。计算公式如下:
首端点数据进行移动平均时,Yt-1取Yt,末端点数据进行移动平均时,Yt+1取Yt。
另外,由于取对数,不会改变数据的性质和关系,且得到的数据易消除异方差。
acf(dy)
然后用自相关图检查序列的平稳性,最后发现一阶差分后的序列是平稳的。 下面对平稳性序列 建立 模型 ,偏相关系数在滞后1期后很快地趋向于0,所以取p=1 ,自相关系数图形具有拖尾性,所以初步判断为ar(1)模型。
arima(dy,order=c(p,0,q) )
which.min(aiclist$AIC)
尝试不同的p和q的值,得出最优AIC的模型。
从AIC的结果来看,arima(2,1,1)模型拥有最小的AIC值,因此为最优模型,因此将arima(2,1,1)模型作为最优模型。
对残差序列进行白噪声检验,通常考虑残差序列的随机性,即用伯克斯.皮尔斯 提出的I统计量进行检验,用修正的I统计量:
Box.test(model$residuals,type="Ljung")
在这里X-squared的值就是0.21927,概率值为0.6396,说明拒绝原假设。 犯第一类错误的概率为0.6396,这说明残差序列相互独立即为白噪声序列的概率很大,故不能拒绝残差序列是一个白噪声序列,检验通过。
pred=predict(model, 15)$pred
plot( pred,type="b" ,main="ARIMA模型预测")
而arima模型预测的数据开始波动较大,到后面有逐渐平稳的趋势。
GM11<-function(x0,t,x){ #x0为输入训练数据序列列,t为预测个数,x为原始数据(训练数据+测试集)
x1<-cumsum(x0) #一次累加生成序列1-AG0序列
b<-numeric(length(x0)-1)
n<-length(x0)-1
for(i in 1:n){ #生成x1的紧邻均值生成序列
b[i]<--(x1[i]+x1[i+1])/2
b} #得序列b,即为x1的紧邻均值生成序列
D<-numeric(length(x0)-1)
D[]<-1
B<-cbind(b,D)
BT<-t(B)#做逆矩阵
e2<-numeric(length(x0))
for(s in 1:length(x0)){
e2[s]<-(abs(e[s])/x0[s]) #得相对误差
}
cat("相对残差:",'\n',e2,'\n','\n')
cat("残差平方和=",sum(e^2),'\n')
cat("平均相对误差=",sum(e2)/(length(e2)-1)*100,"%",'\n')
cat("相对精度=",(1-(sum(e2)/(length(e2)-1)))*100,"%",'\n','\n')
avge<-mean(abs(e));esum<-sum((abs(e)-avge)^2);evar=esum/(length(e)-1);se=sqrt(evar) #计算残差的方差
plot(xy,col='blue',type='b',pch=16,xlab='时间序列',ylab='值')
points(x,col='red',type='b',pch=4)
GM11(train,length(mynx),mynx)
GM11(train,length(myn
glm(as.numeric(yy[1:lengt
predict(model,newd