Создание функции для вычисления вероятностей частичной кредитной модели в R


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

Значения, с которыми я работаю, приведены ниже.

      [1]    [2]     [3]   
 Q1   -0.5   -0.2    0.7
 Q2   -1     -0.5    1.5 
 Q3   -2      0.1    1.9  

Идея заключается в том, что для Q1 я хочу, чтобы функция выводила 3 вероятности, т. е.

exp(-0.5)/exp(-0.5)+exp(-0.5-0.2)+exp(-0.5-0.2+0.7)
exp(-0.5-0.2)/exp(-0.5)+exp(-0.5-0.2)+exp(-0.5-0.2+0.7)
exp(-0.5-0.2+0.7)/exp(-0.5)+exp(-0.5-0.2)+exp(-0.5-0.2+0.7)

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

Поскольку я новичок в R, я не уверен, что делать дальше или как это сделать?

1 2

1 ответ:

Можно использовать apply для применения функции к каждой строке.

myfun <- function(x) {
  denom <- exp(x[1])+exp(x[1]+x[2])+exp(x[1]+x[2]+x[3])
  c(exp(x[1]) / denom,
    exp(x[1]+x[2]) / denom,
    exp(x[1]+x[2]+x[3]) / denom)
}

apply(dat, 1, myfun)

           Q1        Q2        Q3
[1,] 0.2883962 0.2312239 0.1053272
[2,] 0.2361188 0.1402444 0.1164045
[3,] 0.4754850 0.6285317 0.7782683

Где dat - имя вашей матрицы.

Если вы хотите получить матрицу с той же ориентацией, что и исходная матрица, вы можете использовать t:

t(apply(dat, 1, myfun))

        [,1]      [,2]      [,3]
Q1 0.2883962 0.2361188 0.4754850
Q2 0.2312239 0.1402444 0.6285317
Q3 0.1053272 0.1164045 0.7782683