Простое моделирование в R: среднее значение стохастического моделирования не соответствует усеченному нормальному ожиданию - PullRequest
0 голосов
/ 05 февраля 2019

Я составляю проект финансового прогнозирования для школы.Я запускаю стохастическое моделирование гипотетической «справедливости» страховой компании на будущее:

Взять начальный резерв, добавить проценты и доход, а затем вычесть годовые убытки, чтобы получить капитал следующего года.Повторите это в будущем, но вместо резерва используйте капитал предыдущего года.Если капитал когда-либо достигнет 0 или ниже, он застрянет на 0 навсегда (банкротство как поглощающее состояние).

Потери распределяются по усеченному нормальному распределению с усечением слева @ 0. Кто-нибудь знает, почему ожидаемый путь является настолько неточным для определенных симуляций?Я использую формулы условного ожидания из этой страницы википедии.

Я пытался создать ожидаемый путь для симуляции, но, похоже, я не могу получить этот путь, чтобы соответствовать среднемуиз моих симуляций!Моя стратегия до сих пор (я считаю) сродни E (X) = E (X | x> 0) * Pr (x> 0).Извиняюсь, я не знаю, латекс.

Любые идеи относительно того, где это идет не так?

Вот мой код:

# This is just for looking at the exp_path vs. mean path

library(crch)
library(tidyr)
library(ggplot2)
library(matrixStats)

num_sim = 100000
rev = 100
reserve = 10
exp_loss = 100
st_dv_loss = 20
real_return = 0.03
plan_horzn = 30

# Simulated forecast
sim_data = matrix(data = NA, nrow = plan_horzn, ncol = num_sim)
sim_data[1,1:num_sim] = as.vector(rep(reserve, num_sim))

for (i in 2:plan_horzn){
  equity_vec <- sim_data[i-1,]*(1+real_return) + rev - rtnorm(num_sim, mean = exp_loss, sd = st_dv_loss, left = 0, right = Inf)
  equity_vec[equity_vec < 0] <- 0
  equity_vec[sim_data[i-1,]==0] <- 0
  sim_data[i,] <- equity_vec
}

# My expected forecast path
exp_path = vector(length = plan_horzn)
exp_path[1] = reserve

for (i in 2:plan_horzn){
  cash = exp_path[i-1]*(1+real_return) + rev
  prob = ptnorm(cash, mean = exp_loss, sd = st_dv_loss, left = 0)
  cond_loss = exp_loss + st_dv_loss*(dnorm((0 - exp_loss)/st_dv_loss, mean = 0, sd = 1)-dnorm((cash - exp_loss)/st_dv_loss, mean = 0, sd = 1))/(pnorm((cash - exp_loss)/st_dv_loss, mean = 0, sd = 1) - pnorm((0 - exp_loss)/st_dv_loss, mean = exp_loss, sd = st_dv_loss))
  exp_path[i] = (cash - cond_loss)*prob
}

#Plotting a comparison between the mean and expected path
mean <- rowMeans(sim_data)
sim_summary<- data.frame(mean)
sim_summary$med_pc = rowQuantiles(sim_data, probs = .50)
sim_summary$yr <- seq(1,plan_horzn)
sim_summary$expected <- exp_path
sim_summary_adj <- reshape2::melt(sim_summary, id.var = "yr")

g1 <- ggplot(data = sim_summary_adj, aes(x = yr, y = value, colour = variable)) + 
  geom_line() +
  labs( x = "Time (Yrs)",
        y = "Equity ($) ",
        title = "Company Equity Over Time",
        color = "Legend") +
  scale_color_manual(labels = c("Mean", "Median", "Exp"), values = c("blue", "purple", "green"))+
  theme_minimal()

plot(g1)
...