创建一个函数来计算R中的部分信用模型概率

时间:2014-01-18 09:06:04

标签: r function probability

我正在使用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 个答案:

答案 0 :(得分: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