Q1
library(readxl);library(ggplot2);library(dplyr)
## Warning: package 'ggplot2' was built under R version 3.5.1
## Warning: package 'dplyr' was built under R version 3.5.1
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
car.acc0<-read_excel("C:/Users/pj903/Documents/Assignment2/Assignment2-part1.xls",
sheet="Sheet1")
car.acc0$X<-as.numeric(car.acc0$X)
## Warning: 강제형변환에 의해 생성된 NA 입니다
colnames(car.acc0) <- c("X", "N")
car.acc<-car.acc0[1:50,]
##Q1 Histogram of X
ggplot(car.acc, aes(x=X, y=N))+geom_histogram(stat="identity")+
labs(title="자동차 사고 치료비 histogram", x="X(자동차 사고 치료비)", y="N(사고건수)")+
theme_bw()+theme(plot.title=element_text(face='bold',size=17))
## Warning: Ignoring unknown parameters: binwidth, bins, pad

Q2
##Q2 Q-Q plot
car.acc0 <- car.acc0 %>%
mutate(r=cumsum(N),
p=r/(sum(N)+1)) %>%
mutate(normal=qnorm(p),
weibull=log(-log(1-p)),
inverse.weibull=-log(-log(p)),
logistic=log(r/((sum(N)+1)-r)))
library(ggpmisc)
## Warning: package 'ggpmisc' was built under R version 3.5.1
## For news about 'ggpmisc', please, see https://www.r4photobiology.info/
## For on-line documentation see https://docs.r4photobiology.info/ggpmisc/
######
#Pareto_Method1
Pareto_m1<-function(lam){
lm<-lm(I(log(1+X/lam))~I(-log(1-p))+0, data=car.acc0)
summary(lm)$adj.r.squared
}
lambda.pa<-optim(par=5, fn=Pareto_m1, method="BFGS", control=list(fnscale=-1))$par
a.pa<-1/lm(log(1+X/lambda.pa)~I(-log(1-p))+0, data=car.acc0)$coefficients
car.acc0 <- car.acc0 %>%
mutate(pareto=-log(1-p))
#Lognormal Q-Q plot
lognormal.qq<-ggplot(car.acc0[1:50,],aes(normal,log(X)))+geom_point()+
geom_smooth(method="lm",se=F,formula = y ~ x)+
stat_poly_eq(formula = y ~ x,
aes(label = paste(..rr.label.., sep = "~~~")),
parse = TRUE,rr.digits = 4)+
labs(title="Lognormal Q-Q plot",x="inverse of G",y="X(r)")+
theme_bw()+theme(plot.title=element_text(face='bold'))
mu.lognormal<-summary( lm( log(X) ~ normal ,data=car.acc0))$coefficient[1]
sigma.lognormal<-summary( lm( log(X) ~ normal ,data=car.acc0))$coefficient[2]
#Pareto Q-Q plot
pareto.qq<-ggplot(car.acc0[1:50,],aes(pareto,log(1+X/lambda.pa)))+geom_point()+
geom_smooth(method="lm",se=F,formula = y ~ x)+
stat_poly_eq(formula = y ~ x,
aes(label = paste(..rr.label.., sep = "~~~")),
parse = TRUE,rr.digits = 4)+
labs(title="Pareto Q-Q plot",x="inverse of G",y="X(r)")+
theme_bw()+theme(plot.title=element_text(face='bold'))
#Weibull Q-Q plot
weibull.qq<-ggplot(car.acc0[1:50,],aes(weibull,log(X)))+geom_point()+geom_smooth(method="lm",se=F)+
labs(title="Weibull Q-Q plot",x="inverse of G",y="X(r)")+
stat_poly_eq(formula = y ~ x,
aes(label = paste(..rr.label.., sep = "~~~")),
parse = TRUE,rr.digits = 4)+
theme_bw()+theme(plot.title=element_text(face='bold'))
#Inverse Weibull Q-Q plot
inv.weibull.qq<-ggplot(car.acc0[1:50,],aes(inverse.weibull,log(X)))+geom_point()+geom_smooth(method="lm",se=F)+
labs(title="Frechet Q-Q plot",x="inverse of G",y="X(r)")+
stat_poly_eq(formula = y ~ x,
aes(label = paste(..rr.label.., sep = "~~~")),
parse = TRUE,rr.digits = 4)+
theme_bw()+theme(plot.title=element_text(face='bold'))
#Log-logistic Q-Q plot
loglogistic.qq<-ggplot(car.acc0[1:50,],aes(logistic,log(X)))+geom_point()+geom_smooth(method="lm",se=F)+
labs(title="Log-logistic Q-Q plot",x="inverse of G",y="X(r)")+
stat_poly_eq(formula = y ~ x,
aes(label = paste(..rr.label.., sep = "~~~")),
parse = TRUE,rr.digits = 4)+
theme_bw()+theme(plot.title=element_text(face='bold'))
#all of Q-Q plot
library(gridExtra)
##
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
##
## combine
library(grid)
grid.arrange(lognormal.qq, pareto.qq,
weibull.qq, inv.weibull.qq,loglogistic.qq, nrow=3)

Q3
##MLE
library(FAdist)
#Pareto_Method1
Pareto_m1<-function(lam){
lm<-lm(I(log(1+X/lam))~I(-log(1-p))+0, data=car.acc0)
summary(lm)$adj.r.squared
}
lam.pa<-optim(par=5, fn=Pareto_m1, method="Nelder-Mead", control=list(fnscale=-1))$par
a.pa<-1/lm(log(1+X/lam.pa)~I(-log(1-p))+0, data=car.acc0)$coefficients
#Pareto
f.pareto<-function(par){
x1<-car.acc$X-1;x2<-car.acc$X;a<-par[1];lam<-par[2]
sum(log(1-(lam/(lam+x2))^a-(1-(lam/(lam+x1))^a))*car.acc$N[1:50])
+log(1-(1-(lam/(lam+50))^a))*(car.acc0$N[51])
}
optim4<-optim(par=c(10,10), fn=f.pareto, method="Nelder-Mead", control=list(fnscale=-1))$par
#frechet
f.frechet<-function(par){
x1<-car.acc$X-1;x2<-car.acc$X;c<-par[1];tau<-par[2]
sum(log(exp(-c/(x2^tau))-exp(-c/(x1^tau)))*car.acc0$N[1:50])+
log(1-exp(-c/(50^tau)))*(car.acc0$N[51])
}
optim5<-optim(par=c(5.41,0.59), fn=f.frechet, method="Nelder-Mead", control=list(fnscale=-1))$par
c.fr<-optim5[1];tau.fr<-optim5[2]
#pareto
xf.pareto<-function(x){
x*a.pa*(lam.pa^a.pa)*(lam.pa+x)^(-a.pa-1)
}
F.pareto<-function(x){
1-(lam.pa/(lam.pa+x))^a.pa
}
#frechet
xf.frechet<-function(x){
x*(c.fr*tau.fr*exp(-c.fr/x^(tau.fr))/x^(tau.fr+1))
}
F.frechet<-function(x){
exp(-c.fr/(x^tau.fr))
}
q3<-data.frame("A"=c(rep(0,5),rep(10,5),rep(20,5)),
"B"=rep(c(50,100,200,500,1000),3),
"보험료(pareto)"=rep(0,15),
"보험료(frechet)"=rep(0,15))
E.N<-sum(car.acc0$N)/271306
for (i in 1:nrow(q3)) {
A<-q3[i,1];B<-q3[i,2]
pareto.E.Y<-integrate(xf.pareto,lower=A,upper=A+B)$value+
B*(1-F.pareto(A+B))-A*(F.pareto(A+B)-F.pareto(A))
frechet.E.Y<-integrate(xf.frechet,lower=A,upper=A+B)$value+
B*(1-F.frechet(A+B))-A*(F.frechet(A+B)-F.frechet(A))
q3[i,3]<-round(pareto.E.Y*E.N*10000,-1)
q3[i,4]<-round(frechet.E.Y*E.N*10000,-1)
}
q3
## A B 보험료.pareto. 보험료.frechet.
## 1 0 50 9540 9500
## 2 0 100 14970 15020
## 3 0 200 22310 22910
## 4 0 500 35520 38310
## 5 0 1000 48770 55090
## 6 10 50 8110 8010
## 7 10 100 13170 13200
## 8 10 200 20220 20830
## 9 10 500 33170 35980
## 10 10 1000 46290 52620
## 11 20 50 7140 7080
## 12 20 100 11890 11990
## 13 20 200 18670 19380
## 14 20 500 31380 34290
## 15 20 1000 44380 50810
Q4
loss<-car.acc[1,1]/2*car.acc[1,2]
for (i in 2:nrow(car.acc)){
loss<-loss+((car.acc[i-1,1]+car.acc[i,1])/2)*car.acc[i,2]
}
total.loss<-loss*10000+500000*3541
q4<-data.frame("총보험료"=c(271306*q3[1,3],271306*q3[1,4]),
"손해율"=c(as.matrix(total.loss/(271306*q3[1,3])*100),
as.matrix(total.loss/(271306*q3[1,4])*100)))
rownames(q4)<-c("Pareto","Frechet")
q4
## 총보험료 손해율
## Pareto 2588259240 100.3373
## Frechet 2577407000 100.7598