Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.75 KB | None | 0 0
  1. ## ryzyko kredytowe - wyznaczenie oczekiwanej straty przy spadku cen nieruchomosci ##
  2.  
  3.  
  4. # wczytaj pakiet dplyr i ggplot2
  5. library(dplyr)
  6. library(ggplot2)
  7.  
  8. # zdefiniuj katalog roboczy
  9. setwd('C:/Users/Ola/Desktop/R/AGH-R-workshops-master (1)/AGH-R-workshops-master/3_modelling')
  10.  
  11. # wczytaj plik mortgages.csv i zapisz jako mortgages (wykorzystujac funkcje read.csv)
  12. mortgages <- read.csv('mortgages.csv')
  13.  
  14. # ocen wartosci zmiennych wykorzystujac funkcje summary na obiekcie mortgages
  15. View(mortgages)
  16. summary(mortgages)
  17.  
  18. # a) wyznacz srednia dla zmiennych: loan_size, LTV, PD dla każdego miasta
  19. mortgages %>% group_by(city) %>% summarise(mean_loan_size = mean(loan_size),
  20. mean_LTV = mean(LTV),
  21. mean_PD = mean(PD))
  22. # b) stworz histogramy dla tych trzech zmiennych wykorzystujac funkcje hist
  23. hist(mortgages$loan_size, col='blue')
  24. hist(mortgages$LTV, col='green')
  25. hist(mortgages$PD, col='red')
  26. mortgages %>% select(loan_size) %>% as.matrix %>% hist
  27. # c) stworz rozklad funkcji gestosci dla loan_size (inny kolor dla kazdego miasta)
  28. # wykorzystujac funkcje ggplot i geom_density
  29. ggplot(mortgages, aes(loan_size, colour=city))+geom_density()
  30. ggplot(mortgages, aes(loan_size, fill=city))+geom_density(alpha=0.5)
  31. #alpha jest od przezroczystosci im mniejsza liczba tym bardziej przezroczysty
  32. #fill wypelnia wykres
  33. # d) wyznacz oczekiwana strate dla kazdego klienta wypelniajac luki w kodzie:
  34. # zakladajc spadek wartosci nieruchomosci zgodnie z spadkiem indeksu
  35. # cen nieruchomosci w USA o 18%
  36. mortgages_results <-
  37. mortgages %>% mutate(collateral_stress = collateral*(1-0.18),
  38. LTV_stress = loan_size/collateral_stress,
  39. LGD = pnorm(-2.2+1.3*LTV_stress),
  40. EAD = loan_size,
  41. EL = PD * LGD * EAD)
  42. #mutate tworzy nowe zmienne
  43. # e) policz kwantyle 0.25, 0.5, 0.75, 0.99 dla zmiennych LGD i EL
  44. # funkcja quantile
  45. quantile(mortgages_results$LGD, c(0.25, 0.5, 0.75, 0.99))
  46. quantile(mortgages_results$EL, c(0.25, 0.5, 0.75, 0.99))
  47. # f) stworz histogram dla zmiennych LGD i EL (funkcja hist)
  48.  
  49. # regionalizacja indexu
  50.  
  51. # wczytanie danych
  52. HPI <- read.csv("HPI.csv")
  53.  
  54. # przejrzenie danych
  55. str(HPI)
  56. head(HPI)
  57.  
  58. # wczytanie pakietow
  59. install.packages('tidyr')
  60. library(tidyr)
  61.  
  62. # zamiana typu zmiennej Date
  63. HPI$Date <- HPI$Date %>% as.Date()
  64.  
  65. as.Date(HPI$Date) %>% head
  66.  
  67. # dodajmy zmienna miesi¹c
  68. HPI2 <- HPI %>% mutate(month = substr(Date,6,7))
  69. #substr skraca zmienna
  70. # przejscie na dlugi format tabeli
  71. HPI_long <- HPI2 %>% gather('Index','Value', AZ.Phoenix:National.US)
  72. #gather zamienia szeroki format na dlugi
  73.  
  74. # wizualizacja danych
  75. HPI_long %>% ggplot() + geom_line(aes(x = Date, y = Value, group = Index, colour = Index))
  76.  
  77. # tylko kilka wybranych miast i index dla US
  78. HPI_long %>% filter(Index %in% c('CA.Los.Angeles','MI.Detroit','IL.Chicago','National.US')) %>%
  79. ggplot() + geom_line(aes(x = Date, y = Value, Group = Index, colour = Index))
  80.  
  81. # policzenie stop zwrotu
  82. HPI_long_2<- HPI_long %>% group_by(Index) %>% mutate(simple_quarterly_return = (Value-lag(Value,3))/lag(Value,3)) %>%
  83. filter(month %in% c('03','06','09','12'))
  84. #group_by grupuje po wybranej funkcji
  85. #lag odwoluje sie do tej samej zmiennej
  86. #filter wybiera konkretne pozycje
  87. # dla ggpolt jest lepszy format dlugi a dla modelowania szeroki
  88.  
  89. # przejscie z dlugiego na szeroki format
  90. HPI_wide <- HPI_long_2 %>% select(-Value) %>% spread(key = Index, value = simple_quarterly_return)
  91.  
  92. # model dla trzech wybranych stanow (w naszym przykladzie to w tych stanach mamy skoncentrowany nasz portfel)
  93. HPI_wide <- HPI_wide %>% select(Date,National.US,CA.Los.Angeles,MI.Detroit,IL.Chicago)
  94. HPI_wide <- HPI_wide[complete.cases(HPI_wide),]
  95.  
  96. model_Los_Angeles <- lm(CA.Los.Angeles ~ National.US,data = HPI_wide)
  97. model_Detroit <- lm(MI.Detroit ~ National.US,data = HPI_wide)
  98. model_Chicago <- lm(IL.Chicago ~ National.US,data = HPI_wide)
  99.  
  100. summary(model_Los_Angeles)
  101. plot(y = HPI_wide$CA.Los.Angeles, x = HPI_wide$National.US,
  102. xlim = c(-0.1,0.1), ylim = c(-0.1,0.1),pch = 19,
  103. main = "Los Angeles")
  104. abline(model_Los_Angeles$coefficients, lwd = 2)
  105. grid()
  106.  
  107. # cwiczenie
  108.  
  109. # a) stworzyc analogiczny wykres dla Detroit
  110. summary(model_Detroit)
  111. plot(y=HPI_wide$MI.Detroit, x=HPI_wide$National.US,
  112. xlim = c(-0.1,0.1), ylim = c(-0.1,0.1),pch = 19,
  113. main = "Detroit")
  114. abline(model_Detroit$coefficients, lwd = 2)
  115. grid()
  116. # b) zaaplikowac parametry beta do wyznaczania wartosci zabezpieczenia w stresie
  117. # oraz wyznaczy EL po tej zmianie
  118. betas_df <- data.frame(beta = c(model_Los_Angeles$coefficients[2],
  119. model_Detroit$coefficients[2],
  120. model_Chicago$coefficients[2]),
  121. city = c('CA.Los.Angeles','MI.Detroit','IL.Chicago'))
  122. mortgages_results_2 <-
  123. mortgages %>% left_join(betas_df) %>%
  124. mutate(collateral_stress = collateral * (1 - beta * 0.18),
  125. LTV_stress = loan_size/collateral_stress,
  126. LGD = pnorm(-2.2+1.3*LTV_stress),
  127. EAD = loan_size,
  128. EL = PD * LGD * loan_size)
  129.  
  130. mortgages_results$LGD %>% quantile(c(0.25, 0.5, 0.75, 0.99))
  131. mortgages_results_2$LGD %>% quantile(c(0.25, 0.5, 0.75, 0.99))
  132.  
  133. mortgages_results$EL %>% quantile(c(0.25, 0.5, 0.75, 0.99))
  134. mortgages_results_2$EL %>% quantile(c(0.25, 0.5, 0.75, 0.99))
  135.  
  136. # c) ograniczyc probkê, na ktorej jest zbudowany model do danych po 2003 i podac wp³yw na model
  137. # mozna na przyklad wyznaczyc rok dla ka¿dej obserwacji i wyfiltrowac obserwaje po 2003
  138. # mozna rowniez wyfiltrowac po dacie porownujac siê na przyklad z as.Date('2003-01-01')
  139.  
  140. model_Los_Angeles_new <-
  141. lm())
  142.  
  143.  
  144. summary(model_Los_Angeles)
  145. summary(model_Los_Angeles_new)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement