2014-01-18 2 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을 사용하여 각 행에 기능을 적용 할 수 있습니다. dat

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 

은 행렬의 이름입니다. 당신이 원래의 행렬처럼 같은 방향으로 행렬을 획득하려면

, 당신은 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은 Q2, Q3 등과 마찬가지로 1로 합계 된 확률을가집니다. 함수가 잘 작동해야하는 것처럼 확률이 반환되지 않는 이유를 모르겠습니다. – zcakh07

+0

@ zcakh07 예제 매트릭스의 예상 출력은 얼마입니까? –

+0

행 Q1에 대해 손으로 계산하면 해당 값은 각각 '0.288, 0.236, 0.475'입니다. 위의 수식을 사용하여 계산되었습니다. – zcakh07

관련 문제