age+GDP参数估计

#调用美国女性数据
library(demography)
USA <- hmd.mx("USA", "alkaid139@163.com", "19970618", "USA")
#
USA2<-lifetable(USA,years=1950:2012,age=0:99,type="period")#生命表
USA3<-hmd.pop("USA", "alkaid139@163.com", "19970618", "USA")#总人数
USA.death<-read.csv("//HN/HPCUserFile$/liuqing/User/Desktop/美国死亡人数1950-2017.csv",header=TRUE)#1960-2018
#death 
d_all<-matrix(rep(0,100*68),100,68) 
#女性1950-2017年的所有数据
for (t in 1:68){
  for(x in 1:100){
    d_all[x,t]<-USA.death[x+100*(t-1),3] #实际观测的死亡人数
  }
}
d<-d_all[,11:63]#1960-2012
E_female<-((USA3$pop)[1])#
E_female$female
E<-(E_female$female)[1:100,28:80]

USA.gdp<-read.csv("//HN/HPCUserFile$/liuqing/User/Desktop/美国人均gdp的副本.csv",header=TRUE)#1960-2018
summary(USA.gdp)
g_all<-log(USA.gdp$USA人均.GDP.2010年不变价美元.)
g<-g_all[1:53]#1960-2012
#普通最小二乘估计
lnm<-log((USA2$mx)[,11:63]) #100*53 1960-2012
for(x in 1:100){
  a_hat[x]<-(sum(lnm[x,]))/53
}
RSS<-function(b,r,k){
  for(x in 1:100){
    for(t in 1:53){
      L<-(lnm[x,t]-a_hat[x]-b[x]*k[t]-r[x]*g[t])^2
    }
  }
  RSS<-sum(L)
  return(RSS)
}
bb<-function(b,r,k){
  for(x in 1:100){
    b[x]<-sum((lnm[x,]-a_hat[x]-r[x]*g)*k)/(sum(k^2))
  }
  return(b)
}
rr<-function(b,r,k){
  for(x in 1:100){
    r[x]<-sum((lnm[x,]-a_hat[x]-b[x]*k)*g)/(sum(g^2))
  }
  return(r)
}
kk<-function(b,r,k){
  for(t in 1:53){
    k[t]<-sum((lnm[,t]-a_hat-r*g[t])*b)/(sum(b^2))
  }
  return(k)
}
b<-c(rep(1,100))
k<-c(rep(0,53))
r<-c(rep(0,100))
diff_L<-RSS(b,r,k)
diff_L
while(abs(diff_L)>10^(-10))
{
  logL0<-RSS(b,r,k)
  k<-kk(b,r,k)
  r<-rr(b,r,k)
  b<-bb(b,r,k)
  logL1<-RSS(b,r,k)
  diff_L<-logL1-logL0 #对数似然函数新的估计值与它的前一个估计值的偏差足够小
}
d<-sum(b)
e<-cov(k,g)/var(g)
c<-(-sum(k-e*g)/53)
a_hat<-a_hat-b*c
b_hat<-b/d
k_hat<- d*(k-e*g+c)
r_hat<- r+e*b

plot(a_hat)
plot(b_hat)
plot(r_hat)
plot(k_hat)
age<-as.data.frame(0:99)
result1<-as.data.frame(cbind(age,a_hat,b_hat,r_hat))
result2<-cbind(1960:2012,k_hat)
write.table(result1,"//HN/HPCUserFile$/liuqing/User/Desktop/abr11估计参数.csv",append=T,sep="  ",col.names = c("age","a_hat","b_hat","r_hat"),row.names = F)
write.table(result2,"//HN/HPCUserFile$/liuqing/User/Desktop/k估计参数.csv",append=T,sep="  ",col.names = c("year","k_hat"),row.names = F)

#加权估计
RSS1<-function(a,b,r,k){
  for(x in 1:100){
    for(t in 1:53){
      L<-(d[x,t]*(lnm[x,t]-a[x]-b[x]*k[t]-r[x]*g[t]))^2
    }
  }
  RSS1<-sum(L)
  return(RSS1)
}
aa1<-function(a,b,r,k){
  for(x in 1:100){
    a[x]<-sum(d[x,]*(lnm[x,]-b[x]*k-r[x]*g))/sum(d[x,])
  }
  return(a)
}
bb1<-function(a,b,r,k){
  for(x in 1:100){
    b[x]<-sum(d[x,]*k*(lnm[x,]-a[x]-r[x]*g))/(sum(d[x,]*(k^2)))
  }
  return(b)
}
rr1<-function(a,b,r,k){
  for(x in 1:100){
    r[x]<-sum(d[x,]*(lnm[x,]-a[x]-b[x]*k)*g)/(sum(d[x,]*(g^2)))
  }
  return(r)
}
kk1<-function(a,b,r,k){
  for(t in 1:53){
    k[t]<-sum(d[,t]*(lnm[,t]-a-r*g[t])*b)/(sum(d[,t]*(b^2)))
  }
  return(k)
}
a<-c(rep(1,100))
b<-c(rep(1,100))
k<-c(rep(0,53))
r<-c(rep(0,100))
diff_L<-RSS1(a,b,r,k)
diff_L
while(abs(diff_L)>10^(-10))
{
  logL0<-RSS1(a,b,r,k)
  k<-kk1(a,b,r,k)
  r<-rr1(a,b,r,k)
  b<-bb1(a,b,r,k)
  logL1<-RSS1(a,b,r,k)
  diff_L<-logL1-logL0 #对数似然函数新的估计值与它的前一个估计值的偏差足够小
}
d<-sum(b)
e<-cov(k,g)/var(g)
c<-(-sum(k-e*g)/53)


a_hat<-a-b*c
b_hat<-b/d
k_hat<- d*(k-e*g+c)
r_hat<- r+e*b

plot(b_hat)
plot(r_hat)
plot(k_hat)
age<-as.data.frame(0:99)
result1<-as.data.frame(cbind(age,a_hat,b_hat,r_hat))
result2<-cbind(1960:2012,k_hat)
write.table(result1,"//HN/HPCUserFile$/liuqing/User/Desktop/abr1估计参数.csv",append=T,sep="  ",col.names = c("age","a_hat","b_hat","r_hat"),row.names = F)
write.table(result2,"//HN/HPCUserFile$/liuqing/User/Desktop/k1估计参数.csv",append=T,sep="  ",col.names = c("year","k_hat"),row.names = F)

#热度图
canshu<-read.csv("/Users/liuqing/Downloads/远程桌面文件/abr估计参数.csv",header=TRUE)
kkkk<-read.csv("/Users/liuqing/Downloads/远程桌面文件/k估计参数.csv",header=TRUE)
a<-canshu$a_hat
b<-canshu$b_hat
r<-canshu$r_hat
k<-kkkk$k_hat

a1<-canshu$a_hat.weight
b1<-canshu$b_hat.Weight
r1<-canshu$r_hat.weight
k1<-kkkk$k_hat.weight


e<-matrix(rep(0,100*53),100,53)
lnm1<-lnm[,11:63]
for(x in 1:100){
  for(t in 1:53){
    e[x,t]<-lnm1[x,t]-a[x]-b[x]*k[t]-r[x]*g[t]
  }
}

e1<-matrix(rep(0,100*53),100,53)
lnm1<-lnm[,11:63]
for(x in 1:100){
  for(t in 1:53){
    e1[x,t]<-sqrt(D[x,t])*(lnm1[x,t]-a1[x]-b1[x]*k1[t]-r1[x]*g[t])
  }
}

#画热度图
library(pheatmap)
library(RColorBrewer)
colnames(e)=c(1960:2012)
rownames(e)=c(0:99)
pheatmap(e,
         color=brewer.pal(11,"PRGn"),
         cellwidth = 3,#每个单元格的宽度
         cellheight = 3,#每个单元格的高度
         cluster_rows = FALSE,
         cluster_cols = FALSE,
         labels_row=c(0:99),
         fontsize = 3,#热图中字体显示的大小
         #display_numbers = TRUE,
         number_color = "black"
)
#画热度图
colnames(e1)=c(1960:2012)
rownames(e1)=c(0:99)
pheatmap(e1,
         color=brewer.pal(11,"PRGn"),
         cellwidth = 3,#每个单元格的宽度
         cellheight = 3,#每个单元格的高度
         cluster_rows = FALSE,
         cluster_cols = FALSE,
         labels_row=c(0:99),
         fontsize = 2,#热图中字体显示的大小
         #display_numbers = TRUE,
         number_color = "black"
)

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值