我正在使用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的新手,我不确定下一步该尝试什么或如何解决这个问题?
答案 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