2014-01-18 38 views
2

我正在使用R包eRm,並試圖創建一個函數來計算從部分信用模型給出的概率。創建一個函數來計算R中的部分信用模型概率

我正在使用的值如下。

 [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 
+0

我看到這背後的想法但是我的預期了是概率。所以Q1的概率總和爲1,就像Q2,Q3等一樣......我不明白爲什麼概率不會返回,因爲您的函數看起來好像應該運行得很好 – zcakh07

+0

@ zcakh07示例矩陣的期望輸出是多少? –

+0

手工計算,對於行Q1,相應的值分別爲'0.288,0.236,0.475'。這些已經用上面的公式計算出來了。 – zcakh07