Как выполнить итерацию при использовании функции pchip в R для расширения сокращенной таблицы жизни до ее завершения? - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь использовать функцию pchip (Piecewise Cubic Hermite Interpolating Polynomial) в R, чтобы расширить сокращенную таблицу продолжительности жизни, чтобы заполнить одну в возрасте от 5 до 89 лет. Я взял 1- (1-5qx) ^ (1/5) в качестве начального значения вероятности смерти для данной возрастной группы (x + 2,5) и интерполировал вероятности смерти для каждого года 1qx, используя функцию pchip. А затем пересчитал 5qx 'через интерполированный 1qx и сравнил их с исходным 5qx, чтобы увидеть, меньше ли разница между ними, чем указанный допуск (10E-6). Конечно, в первом вычислении указанный допуск не может быть соблюден, поэтому он требует итерации. Итак, моя проблема: как обновить начальное значение для проведения последней итерации?

Я пробовал несколько методов, таких как прямая замена 5qx на 5qx 'и итерация дихотомии, но они не работали, и результаты не показали сходимости.

library(pracma)
x<-c(seq(5,89,5))
qx<-data.frame(age=x,qx=0)
qx$qx<-c(0.004932256,0.003830182,0.005361885,0.007037384,
0.008048729,0.009432151,0.012446146,0.018325698,0.028762825,0.046290573,
0.074888731,0.120306557,0.190086799,0.291948621,0.429340330,0.593503019,
0.752210246)
qx_inti<-data.frame(age=seq(7.5,87.5,5),qx=0) ## initial value
qx_com<-data.frame(age=seq(5,89,1),qx=0)## store interpolated 1qx

## store the recalculated 5qx' by interpolated 1qx
qx_abr<-data.frame(age=seq(5,85,5),qx=0)

for (i in 1:nrow(qx_inti)){
  qx_inti$qx[i]=1-(1-qx$qx[i])^(1/5)
}

repeat {

  fp<-pchipfun(xi=qx_inti$age,yi=qx_inti$qx)
  qx_com$qx<-fp(seq(5,89,1))
  qx_com$px=1-qx_com$qx
  for (i in 1:nrow(qx_abr)){
    product=1
    for (j in (5*i-4):(5*i)){
      product=product*qx_com$px[j]
    }
    qx_abr$qx[i]=1-product 
  }
  if (max(abs(qx_abr$qx-qx$qx))<10e-6){
    break
  }
  ##updating qx_inti is needed
}

Я ожидаю, что подробный метод обновления начального значения будет соответствовать указанному допуску.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...