信用リスクモデリング -測定と管理ー 森平爽一郎先生
#p.32 2.2.2 実績デフォルト相関
data(anscombe)
Y=as.matrix(round(anscombe[,!(colnames(anscombe) %in% c("x1","x2","x3","x4"))]))
rownames(Y)=paste0("t",c(1:nrow(Y)))
N=apply(Y,1,max)+1;FD=Y/N
cor_mat=array(0,dim=c(ncol(Y),ncol(Y)))
for(i in 1:ncol(cor_mat)){
for(j in 1:nrow(cor_mat)){
cor_mat[i,j]=(mean(FD[,i]*FD[,j])-mean(FD[,i])*mean(FD[,j]))/(sqrt(mean(FD[,i])*(1-mean(FD[,i])))*sqrt(mean(FD[,j])*(1-mean(FD[,j]))))
}}
#信用リスクモデリング -測定と管理ー 森平爽一郎著
#p.40 2.4.2 「非線形実績デフォルト率」推定モデル
#重み付き最小二乗法による反復解法
data(airquality)
airquality[is.na(airquality)>0]=0
x=round(airquality[,colnames(airquality) %in% c("Ozone")])
N=max(x)+10
D=x;FD=D/N+1/(2*N)
y=as.matrix(cbind(rep(1,nrow(airquality)),airquality[,!(colnames(airquality) %in% c("Ozone"))]))
odds=log(FD/(1-FD))
V_ep=rep(0,nrow(y))
ite=20
for(l in 1:ite){
V_ep_pre=V_ep
beta=solve(t(y)%*%y)%*%t(y)%*%odds
pre=y%*%beta
ep=pre-log(FD/(1-FD))
prob=1/(1+exp(-pre))
#taylor展開での近似
ep_approx=(prob-FD)/(FD*(1-FD))
V_ep=1/(N*prob*(1-prob))
#重みを計算
w=sqrt(V_ep)
odds=odds*w;y=y*c(w)
print(sum(abs(V_ep_pre-V_ep)))
}
#p.48 3.1.2
#倒産・非倒産
Y=c(rep(1,7),rep(0,7))
#負債比率
X=c(1.932,0.993,1.053,0.881,0.896,0.693,0.588,0.403,0.617,0.563,0.264,0.55,0.72,0.67)
a=cov(X,Y)/var(X)
b=mean(Y)-mean(X)*a
PD_hat=b+a*X
#誤差項の分散はベルヌーイ分布のため、異なる(不均一分散)
V_ep=PD_hat*(1-PD_hat)
#加重最小二乗法(均一分散にするため) 微妙な出来。
X=X[-1];Y=Y[-1]
PD_hat_pre=rep(0,length(X))
ite=10
for(l in 1:ite){
a=cov(X,Y)/var(X)
b=mean(Y)-mean(X)*a
PD_hat=b+a*X
sd_ep=sqrt(PD_hat*(1-PD_hat))
sd_ep[is.na(sd_ep)>0]=1
X=X/sd_ep
Y=Y/sd_ep
print(sum(abs(PD_hat-PD_hat_pre)))
PD_hat_pre=PD_hat
}
#倒産・非倒産
Y=c(rep(1,7),rep(0,7))
#負債比率
X=c(1.932,0.993,1.053,0.881,0.896,0.693,0.588,0.403,0.617,0.563,0.264,0.55,0.72,0.67)
X=as.matrix(cbind(rep(1,length(Y)),X))
#bernoulli-logistic regression p.105
#one dimension
alpha=1;beta=1
ite=10^2
eta=0.1
for(j in 1:ite){
prob=1/(1+exp(-(X%*%c(alpha,beta))))
V=diag(c(prob*(1-prob)))
mat=solve(t(X)%*%V%*%(X))%*%t(X)%*%(Y-prob)
alpha=alpha+eta*mat[1];beta=beta+eta*mat[2]
loglik=sum(Y*log(prob)+(1-Y)*log(1-prob))
print(loglik)
}
PD=prob
#p.57
#オッズ比に対する感応度
beta
#k番目のリスクファクター(特徴量)が微小変化した際の影響
delta=beta*PD*(1-PD)
#デルタの信用リスクファクターの変化に対する影響(ガンマ)
gamma=beta*PD*(1-PD)*(1-2*PD)
#6.4.4 最尤法による推定 p.128
data("airmiles")
Et=airmiles
len=length(airmiles)
ts=50
t=len
Dt=3000
n=15
times=c(1:n)
A=Et[1:n]+Dt
A_vec=c()
for(j in 1:(len-n)){
A_pre=A
while(sum(abs(A-A_pre))>10^(-3))({
A_pre=A
rA=A[2:length(A)]/A[1:(length(A)-1)]-1
mu_A=mean(rA);sig_A=sd(rA)
d1=(log(A/Dt)+(mu_A+sig_A^2/2)*(t-times))/(sig_A*sqrt(t-times))
d2=d1-sig_A*sqrt(t-times)
A=(Et[1:n]-Dt*exp(-mu_A*(t-times))*pnorm(d2))/pnorm(d1)
PD=1-pnorm(d2)
print(sum(abs(A-A_pre)))
})
Dt=A[1]/exp(sig_A*sqrt(ts-times[1])*d2[1]-(mu_A-sig_A^2/2)*(ts-times[1]))
A=c(A,Et[n+j]+Dt)
times=c(times,max(times)+1)
}
rA=A[2:length(A)]/A[1:(length(A)-1)]-1
mu_A=mean(rA);sig_A=sd(rA)
d1=(log(A/Dt)+(mu_A+sig_A^2/2)*(t-times))/(sig_A*sqrt(t-times))
d2=d1-sig_A*sqrt(t-times)
PD=1-pnorm(d2)
Author And Source
この問題について(信用リスクモデリング -測定と管理ー 森平爽一郎先生), 我々は、より多くの情報をここで見つけました https://qiita.com/kozakai-ryouta/items/35d7b92a2d56f8e34f89著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .