Статьи

R для актуарной науки

Как упомянуто в Приложении  Современной Актуарной Теории Риска , « R (и S) — это« лингва франка »анализа данных и статистических вычислений, используемых в академических кругах, исследованиях климата, информатике, биоинформатике, фармацевтической промышленности, аналитике клиентов, анализе данных. , финансами и некоторыми страховщиками. Помимо того, что R, стабильный, быстрый, всегда актуальный и универсальный, главное преимущество R в том, что он доступен всем бесплатно. Он обладает обширными и мощными графическими возможностями и быстро развивается, являясь предпочтительным статистическим инструментом во многих научных средах. »

R основан на статистическом языке программирования S, разработанном Джо Чамберсом в лаборатории Bell в 80-х годах. Чтобы быть более конкретным, R — это реализация языка S с открытым исходным кодом, разработанная Робертом Джентлемном и Россом Ихакой. Это векторный язык, который делает его чрезвычайно интересным для актуарных вычислений. Например, рассмотрим некоторые таблицы жизни,

> TD[39:52,]       > TV[39:52,]
     Age    Lx         Age    Lx
  39  38 95237          38 97753
  40  39 94997          39 97648
  41  40 94746          40 97534
  42  41 94476          41 97413
  43  42 94182          42 97282
  44  43 93868          43 97138
  45  44 93515          44 96981
  46  45 93133          45 96810
  47  46 92727          46 96622
  48  47 92295          47 96424
  49  48 91833          48 96218
  50  49 91332          49 95995
  51  50 90778          50 95752
  52  51 90171          51 95488

Эти (французские) таблицы жизни можно найти здесь

> TD <- read.table(
+ "http://perso.univ-rennes1.fr/arthur.charpentier/TD8890.csv",sep=";",header=TRUE)
> TV <- read.table(
+ "http://perso.univ-rennes1.fr/arthur.charpentier/TV8890.csv",sep=";",header=TRUE)

Из этих векторов можно построить матрицу вероятностей смерти, http://latex.codecogs.com/gif.latex?\boldsymbol{P}=[\text{%20}_{k}p_x]

>  Lx <- TD$Lx
>  m <- length(Lx)
>  p <- matrix(0,m,m); d <- p
>  for(i in 1:(m-1)){
+  p[1:(m-i),i] <- Lx[1+(i+1):m]/Lx[i+1]
+  d[1:(m-i),i] <- (Lx[(1+i):(m)]-Lx[(1+i):(m)+1])/Lx[i+1]}
>  diag(d[(m-1):1,]) <- 0
>  diag(p[(m-1):1,]) <- 0
>  q <- 1-p

Можно легко вычислить, например, (текущее) ожидание жизни, определяемое как

http://latex.codecogs.com/gif.latex?e_x%20=\mathbb{E}(K_x)=\sum_{k=1}^\infty%20k\cdot%20\text{%20}_ {к | 1} q_x% 20 =% 20 \ sum_ {к = 1} ^ \ infty% 20 \ текст {% 20} _ {k} p_x

и можно рассчитать вектор ожидаемой продолжительности жизни в разных возрастах http://latex.codecogs.com/gif.latex?\boldsymbol{e}=[e_x]

> life.exp = function(x){sum(p[1:nrow(p),x])}
> e = Vectorize(life.exp)(1:m)

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

http://latex.codecogs.com/gif.latex?\ddot{a}_{x:\overline{n}|}=\sum_{k=0}^{n-1}%20\nu^k % 20 \ CDOT% 20 {} _ {K} P_x% 20 = \ гидроразрыва {1-A_ {х: \ Overline {N} |}} {1- \ Nu}

Код для вычисления этих функций находится здесь

> for(j in 1:(m-1)){ adots[,j]<-cumsum(1/(1+i)^(0:(m-1))*c(1,p[1:(m-1),j])) }

или рассмотрите ожидаемую текущую стоимость термина страхования

http://latex.codecogs.com/gif.latex?%20A^1_ {х: \ Overline {п} |}% 20 = \ sum_ {к = 0} ^ {N-1}% 20 \ Nu ^ { к + 1}% 20 \ CDOT% 20 \ текст {% 20} _ {к |} q_x

со следующим кодом

> for(j in 1:(m-1)){ A[,j]<-cumsum(1/(1+i)^(1:m)*d[,j]) }

Еще некоторые подробности можно найти в первой части  заметок  об ускоренных курсах прошлого лета в Мейелисальпе. С вектором — или матрицами — чрезвычайно удобно работать, когда имеешь дело с непредвиденными обстоятельствами жизни. Также возможно моделировать предполагаемую смертность. Здесь смертность является не только функцией возраста  http://latex.codecogs.com/gif.latex?x, но и времени  http://latex.codecogs.com/gif.latex?t,

> t(DTF)[1:10,1:10]
    1899  1900  1901  1902  1903  1904  1905  1906  1907  1908
0  64039 61635 56421 53321 52573 54947 50720 53734 47255 46997
1  12119 11293 10293 10616 10251 10514  9340 10262 10104  9517
2   6983  6091  5853  5734  5673  5494  5028  5232  4477  4094
3   4329  3953  3748  3654  3382  3283  3294  3262  2912  2721
4   3220  3063  2936  2710  2500  2360  2381  2505  2213  2078
5   2284  2149  2172  2020  1932  1770  1788  1782  1789  1751
6   1834  1836  1761  1651  1664  1433  1448  1517  1428  1328
7   1475  1534  1493  1420  1353  1228  1259  1250  1204  1108
8   1353  1358  1255  1229  1251  1169  1132  1134  1083   961
9   1175  1225  1154  1008  1089   981  1027  1025   957   885

Таким образом, теперь у нас есть матрица силы смертности http://latex.codecogs.com/gif.latex?\boldsymbol{\mu}=[\mu_{x,t}]

http://f.hypotheses.org/wp-content/blogs.dir/253/files/2013/01/Capture-d%E2%80%99e%CC%81cran-2013-01-10-a%CC% 80-14.29.04.png

Также можно использовать пакеты R для оценки модели смертности Ли-Картера,

http://latex.codecogs.com/gif.latex?\log%20\mu%20_ {х,}% 20 = \% альфа-20_ {х}% 20 + \% бета-20_ {х}% 20 \ CDOT% 20 \ kappa_ {т}% 20 + \ varepsilon% 20_ {х,}

> library(demography)
> MUH =matrix(DEATH$Male/EXPOSURE$Male,nL,nC)
> POPH=matrix(EXPOSURE$Male,nL,nC)
> BASEH <- demogdata(data=MUH, pop=POPH, ages=AGE, years=YEAR, type="mortality",
+ label="France", name="Hommes", lambda=1)
> RES=residuals(LCH,"pearson")

Можно легко изучить остатки, например, в зависимости от возраста,

http://f.hypotheses.org/wp-content/blogs.dir/253/files/2013/01/Capture-d%E2%80%99e%CC%81cran-2013-01-10-a%CC% 80-14.29.15.png

или функция года,

http://f.hypotheses.org/wp-content/blogs.dir/253/files/2013/01/Capture-d%E2%80%99e%CC%81cran-2013-01-10-a%CC% 80-14.29.22.png

Еще некоторые подробности можно найти во второй части  заметок  об ускоренных курсах прошлого лета в Мейелисальпе.

R также интересен огромным количеством библиотек, которые можно использовать для прогнозного моделирования. Можно легко использовать функции сглаживания в регрессии или деревья регрессии,

> TREE = tree((nbr>0)~ageconducteur,data=sinistres,split="gini",mincut = 1)
> age = data.frame(ageconducteur=18:90)
> y1 = predict(TREE,age)
> reg = glm((nbr>0)~bs(ageconducteur),data=sinistres,family="binomial")
> y = predict(reg,age,type="response")

http://f.hypotheses.org/wp-content/blogs.dir/253/files/2013/01/predictive-gam-tree.png

Некоторые практики могут быть напуганы, потому что легенда утверждает, что R не так хорош, как SAS, для обработки больших баз данных. На самом деле, для импорта наборов данных можно использовать множество функций. Наиболее удобный, вероятно,

> baseCOUT = read.table("http://freakonometrics.free.fr/baseCOUT.csv",
+  sep=";",header=TRUE,encoding="latin1")
>  tail(baseCOUT,4)
     numeropol  debut_pol    fin_pol freq_paiement langue  type_prof alimentation type_territoire
6512     87291 2002-10-16 2003-01-22       mensuel      A Professeur   Vegetarien          Urbain
6513     87301 2002-10-01 2003-09-30       mensuel      A Technicien   Vegetarien          Urbain
6514     87417 2002-10-24 2003-10-21       mensuel      F Technicien   Vegetalien     Semi-urbain
6515     88128 2003-01-17 2004-01-16       mensuel      F     Avocat   Vegetarien     Semi-urbain
             utilisation presence_alarme marque_voiture sexe exposition age duree_permis age_vehicule i   coutsin
6512 Travail-occasionnel             oui           FORD    M  0.2684932  47           29           28 1 1274.5901
6513              Loisir             oui          HONDA    M  0.9972603  44           24           25 1  278.0745
6514 Travail-occasionnel             non     VOLKSWAGEN    F  0.9917808  23            3           11 1  403.1242
6515              Loisir             non           FIAT    F  0.9972603  23            4           11 1  230.9565

Но если набор данных слишком велик, можно также указать, какие переменные могут быть интересны, используя

> mycols = rep("NULL", 18)
> mycols[c(1,4,5,12,13,14,18)] <- NA
> baseCOUTsubC = read.table("http://freakonometrics.free.fr/baseCOUT.csv",
+  colClasses = mycols,sep=";",header=TRUE,encoding="latin1")
> head(baseCOUTsubC,4)
  numeropol freq_paiement langue sexe exposition age    coutsin
1         6        annuel      A    M  0.9945205  42   279.5839
2        27       mensuel      F    M  0.2438356  51   814.1677
3        27       mensuel      F    M  1.0000000  53   136.8634
4        76       mensuel      F    F  1.0000000  42   608.7267

Также возможно (до запуска кода для всего набора данных) импортировать только первые строки набора данных.

> baseCOUTsubCR = read.table("http://freakonometrics.free.fr/baseCOUT.csv",
+  colClasses = mycols,sep=";",header=TRUE,encoding="latin1",nrows=100)
> tail(baseCOUTsubCR,4)
    numeropol freq_paiement langue sexe exposition age   coutsin
97       1193       mensuel      F    F  0.9972603  55  265.0621
98       1204       mensuel      F    F  0.9972603  38 9547.7267
99       1231       mensuel      F    M  1.0000000  40  442.7267
100      1245        annuel      F    F  0.6767123  48  179.1925

Также возможно импортировать заархивированный файл. Сам файл имеет меньший размер, и его обычно можно импортировать быстрее.

> import.zip = function(file){
+ temp = tempfile()
+ download.file(file,temp);
+ read.table(unz(temp, "baseFREQ.csv"),sep=";",header=TRUE,encoding="latin1")}
> system.time(import.zip("http://freakonometrics.free.fr/baseFREQ.csv.zip"))
trying URL 'http://freakonometrics.free.fr/baseFREQ.csv.zip'
Content type 'application/zip' length 692655 bytes (676 Kb)
opened URL
==================================================
downloaded 676 Kb
   user  system elapsed 
      0.762       0.029       4.578 
> system.time(read.table("http://freakonometrics.free.fr/baseFREQ.csv", 
+ sep=";",header=TRUE,encoding="latin1"))
   user  system elapsed 
      0.591       0.072       9.277

Наконец, обратите внимание, что можно импортировать любой набор данных, а не только текстовый файл. Даже папка Microsoft Excel. На компьютере с Windows можно использовать SQL-запросы

> sheet = "c:\\Documents and Settings\\user\\excelsheet.xls"
> connection = odbcConnectExcel(sheet)
> spreadsheet = sqlTables(connection)
> query = paste("SELECT * FROM",spreadsheet$TABLE_NAME[1],sep=" ")
> result = sqlQuery(connection,query)

Затем после импорта набора данных можно использовать несколько функций:

> cost = aggregate(coutsin~ AgeSex,mean, data=baseCOUT)
> frequency = merge(aggregate(nbsin~ AgeSex,sum, data=baseFREQ),
+ aggregate(exposition~ AgeSex,sum, data=baseFREQ))
> frequency$freq = frequency$nbsin/frequency$exposition
> base.freq.cost = merge(frequency, cost)

http://f.hypotheses.org/wp-content/blogs.dir/253/files/2013/01/cost-freq-qc.png

Наконец, R интересен своим графическим интерфейсом. « Если вы можете изобразить это в своей голове, велика вероятность, что вы сможете заставить его работать в R. R позволяет легко читать данные, генерировать линии и точки и размещать их там, где вы хотите. Это очень гибкий и супер быстрый. Когда у вас есть только два или три часа до крайнего срока, R может быть великолепным », — сказала Аманда Кокс, графический редактор New York Times. « R особенно ценен в крайних сроках, когда данные скудны, а время драгоценно ».
Несколько дел были рассмотрены в блоге  http: //chartsnthings.tumblr.com/… . Во-первых, мы начнем с простого графика, здесь контроль правительства штата в США.

http://f.hypotheses.org/wp-content/blogs.dir/253/files/2013/01/nyt-chartsnthings-1.png

Затем попробуйте найти хорошее визуальное представление, например,

http://f.hypotheses.org/wp-content/blogs.dir/253/files/2013/01/nyt-chartsnehings-2.png

И, наконец, вы можете просто распечатать его в своей любимой газете,

http://f.hypotheses.org/wp-content/blogs.dir/253/files/2013/01/nyt-chartsnthings-3.jpg

И вы можете получить любой вид графиков,

http://f.hypotheses.org/wp-content/blogs.dir/253/files/2013/01/nyt-6.png

И не только о политике,

http://f.hypotheses.org/wp-content/blogs.dir/253/files/2013/01/nyt-7-b.jpgГрафики важны. « Речь идет не только о создании графики для публикации. Речь идет об игре и создании набора графики, которая поможет вам изучить ваши данные. Этот вид графического анализа — действительно полезный способ помочь вам понять, с чем вы имеете дело, потому что, если вы не видите его, вы не можете его понять. Но когда вы начнете разбираться в этом, вы действительно сможете увидеть, что у вас есть », — сказал Питер Олдхоус, руководитель бюро в Сан-Франциско журнала New Scientist. Даже для актуариев. «Коммерческий страховой процесс был строгим, но также довольно субъективным и основанным на интуиции. R позволяет нам передавать наши аналитические результаты привлекательными и инновационными способами нетехнической аудитории через быстрые жизненные циклы разработки. R помогает нам показать нашим клиентам, как они могут улучшить свои процессы и эффективность, позволяя нашим консультантам эффективно проводить анализ », — объяснил Джон Лакер, команда опытных аналитиков из Deloitte Consulting Principal, на http://blog.revolutionanalytics.com. / r-is-hot / . См. Также мнение Эндрю Гельмана на графиках http://www.stat.columbia.edu/…

Так что да, актуариям может быть интересно использовать R для актуарной связи, как упоминалось в  http: //www.londonr.org/…

http://f.hypotheses.org/wp-content/blogs.dir/253/files/2013/01/mango-R-4.png

Actuarial Toolkit (см.  Http: //www.actuaries.org.uk/… ) подчеркивает интерес R: « Сила языка R заключается в его функциях для статистического моделирования, анализа данных и графики; его способность читать и записывать данные из различных источников данных; а также возможность встраивать R в Excel или другие языки, такие как VBA. Благодаря тому, что SAS хорош для манипулирования данными, R — для моделирования и графического вывода ».

С 2011 года Asia Capital Reinsurance Group (ACR) использует R для решения проблем с большими данными (см  . Http://www.reuters.com/… ). И Lloyd’s использует графики движения, созданные с помощью R, чтобы предоставить анализ инвесторам (как обсуждалось на  http://blog.revolutionanalytics.com/… )

Много информации можно найти на  http: //jeffreybreen.wordpress.com/…

http://f.hypotheses.org/wp-content/blogs.dir/253/files/2013/01/6a010534b1db25970b01538fea1796970b-800wi.png

Маркус Гесманн упомянул в своем блоге много интересных графиков, используемых для актуарной отчетности,  http: //lamages.blogspot.ca/…

http://f.hypotheses.org/wp-content/blogs.dir/253/files/2013/01/Capture-d%E2%80%99e%CC%81cran-2013-01-10-a%CC% 80-15.37.33.png

Кроме того, R свободен. Это можно сравнить с SAS, 6000 долл. За ПК или 28 000 долл. За процессор на сервере (как указано на сайте  http://en.wikipedia.org/… )

Он также становится все более и более популярным, как язык программирования. Как упоминалось в этом месяце по популярности прозрачного языка (см.  Http: //lang-index.sourceforge.net/ ), R занимает 12 место. Далеко после C или Java, но до Matlab (22) или SAS (27). На StackOverFlow (см.  Http: //stackoverflow.com/ ) также далеко C ++ (399 232 вхождения) или Java (348 418), но с 21 818 вхождениями он появляется до Matlab (14 580) и SAS (899). Как уже упоминалось на  http: //r4stats.com/articles/popularity/,  R становится все более и более популярным, на трафике обсуждения listserv.

http://f.hypotheses.org/wp-content/blogs.dir/253/files/2013/01/fig_1_listserv.png

Это, безусловно, самое популярное программное обеспечение для анализа данных, как отмечалось в опросе Rexer Analytics, в 2009 году.

http://f.hypotheses.org/wp-content/blogs.dir/253/files/2013/01/fig_3_rexersurvey.png

Как насчет актуариев? В опросе (см.  Http: //palisade.com/… ) R не был чрезвычайно популярен.

http://f.hypotheses.org/wp-content/blogs.dir/253/files/2013/01/mango-R-1.png

Если рассматривать только статистическое программное обеспечение, то SAS все еще далеко впереди, среди актуариев Великобритании и CAS.

http://f.hypotheses.org/wp-content/blogs.dir/253/files/2013/01/mango-R-2.png

Но, как отметил Майк Кинг, аналитик по количественным анализам, Bank of America, « я не могу представить себе ни одного языка программирования, в котором есть такое невероятное сообщество пользователей. Если у вас есть вопрос, вы можете быстро ответить на него лидерам в этой области. Это означает очень небольшое время простоя ». Об этом также упоминал Гленн Мейерс в «Актуарном обзоре» «Самая мощная причина использования R — это сообщество » (на  http: //nytimes.com/… ). Например,  http: //r-bloggers.com/  имеет вклад более 425 пользователей R.

По словам Бо Каугилла из Google « Лучшее в R — это то, что он был разработан статистиками. Хуже всего то, что R был разработан статистиками. »