Создание функции для вычисления вероятностей частичной кредитной модели в 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 ответ:
Можно использовать
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