R에서 행렬의 각 행에 대한 가중 합계를 얻는 방법

Lebelinoz

저는 가중치가있는 주식 포트폴리오와 일일 수익 기록이 있습니다. 가중치가 움직이지 않는다고 가정하고 누락 된 데이터를 0으로 대체한다고 가정하고 역사적 날마다 포트폴리오 수익률을 계산하려고합니다 (역사적 VaR 또는 Value at Risk 를 계산하려고합니다 ).

다음은 단순화 된 버전입니다.

# portfolio
pfolio = data.frame(ticker = c("stock_a", "stock_b", "stock_noob"), weight = c(0.25, 0.6, 0.15))

# Daily stock returns (with some NA values for one stock):
m = matrix(c(0.0016, 0.0037, -0.0042, -0.0096, -0.0006, -0.0043, -0.0292, -0.0158, 0.0128, 0.0113, 0.0016, 0.0042, NA, NA, 0.0168, -0.0293, 0.0037, -0.0083),
    nrow = 6,
    ncol = 3,
    dimnames = list(c("2017-03-01", "2017-03-02", "2017-03-03", "2017-03-06", "2017-03-07", "2017-03-08"), c("stock_a", "stock_b", "stock_noob"))
)

영리한 방법 apply이나 mapply방법 을 사용하려고하는데 최선의 방법은 먼저 데이터를 정리 한 다음 for 루프를 적용하는 것입니다 (yuck).

m_clean = apply(m, c(1, 2), function(x) if (is.na(x)) 0 else x)
answer = numeric(0)
for (i in 1:nrow(m_clean)) {
    answer = c(answer, sum(m_clean[i, pfolio$ticker] * pfolio$weight))
}

그래서 주요 질문은 :이 작업을 수행하는 깔끔한 한 줄 방법은 무엇입니까?

경기

넌 할 수있어:

m_clean <- ifelse(is.na(m), 0, m) # or 
m_clean <- m; m_clean[is.na(m_clean)] <- 0

그리고 

answer <- apply(m_clean, 1, weighted.mean, w=pfolio$weight) # or
answer <- colSums(t(m_clean) * pfolio$weight) # or
answer <- tcrossprod(pfolio$weight, m_clean)

마지막은 행렬을 제공하는 것입니다.

#> tcrossprod(pfolio$weight, m_clean)
#     2017-03-01 2017-03-02 2017-03-03 2017-03-06 2017-03-07 2017-03-08
#[1,]   -0.01712  -0.008555    0.00915   -1.5e-05   0.001365      2e-04

다른 솔루션은 명명 된 벡터를 제공합니다.

벤치 마크 :

library("microbenchmark")
microbenchmark(
  a= apply(m_clean, 1, weighted.mean, w=pfolio$weight),
  c= colSums(t(m_clean) * pfolio$weight),
  p= tcrossprod(pfolio$weight, m_clean),
  m= m_clean %*% pfolio$weight
)
# Unit: microseconds
# expr    min      lq     mean  median      uq    max neval cld
#    a 49.115 51.0590 54.46379 52.3685 53.9815 99.023   100   c
#    c 12.688 13.8385 15.02912 14.8460 15.7560 32.366   100  b 
#    p  5.978  6.8955  7.75998  7.4170  7.8770 30.771   100 a  
#    m  5.438  6.4330  6.95056  6.8615  7.2710 17.109   100 a  

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

RecyclerView-각 행의 뷰에 대한 참조를 얻는 방법

분류에서Dev

R에서 한 행렬의 각 행을 다른 행렬로 다중화하는 방법은 무엇입니까?

분류에서Dev

각 요소에 대해 mxn 행렬에서 가장 가까운 r 요소를 얻는 방법

분류에서Dev

R에서 가능한 모든 조합을 얻기 위해 행렬 M2의 각 행을 행렬 M1의 각 행에 "붙여 넣기"하는 효율적인 방법이 있습니까?

분류에서Dev

다른 행렬의 열 (또는 행)을 사용하여 행렬의 각 열 (또는 행)에 대한 가중 평균을 계산하는 방법은 무엇입니까?

분류에서Dev

Magento 2에서 주문한 각 제품의 행 합계를 얻는 방법은 무엇입니까?

분류에서Dev

SQL의 각 행에 대해 동일한 값을 가진 열 수를 얻는 방법

분류에서Dev

파이썬에서 거대한 대각 행렬의 의사 역을 얻는 방법은 무엇입니까?

분류에서Dev

행렬의 각 요소에 대한 가장 가까운 이웃의 표준 편차를 계산하는 효율적인 방법

분류에서Dev

각 행에서 주어진 조건에 대한 합계를 계산하는 방법은 무엇입니까?

분류에서Dev

하나의 SQL에서 각 고유 매개 변수에 대한 행을 가져오고 행 수를 얻는 방법은 무엇입니까?

분류에서Dev

awk를 사용하여 행렬의 각 행에 대한 문자열의 합계

분류에서Dev

double 행렬의 각 행에 대한 특정 열 합계

분류에서Dev

전이 행렬 합계의 각 행에 대한 증명 1

분류에서Dev

R의 두 행렬에서 두 열의 가능한 모든 조합에 함수를 적용하는 방법

분류에서Dev

n * m 행렬 행의 가능한 모든 합계 목록을 얻는 방법

분류에서Dev

벡터 a가 주어 졌을 때 행렬 F (a [i], a [j])에 대해 .sum을 사용하여 삼각 합계를 수행하는 효율적인 방법

분류에서Dev

그룹에 대한 가중치 평균 롤링 합계를 수행하는 방법이 있습니까?

분류에서Dev

R에서 데이터 테이블의 각 행에 대한 하위 범주를 만드는 방법

분류에서Dev

C ++를 사용하여 행렬에서 부분 직사각형의 최대 합을 얻는 최적화 된 방법

분류에서Dev

R에서 for 루프를 사용하여 행렬의 각 행에 Wilcoxon 테스트를 적용하는 방법

분류에서Dev

TensorFlow : Tensor의 각 행에 대한 하위 배열을 얻는 방법

분류에서Dev

Pandas (python)의 각 행에 대한 배열 길이를 얻는 방법은 무엇입니까?

분류에서Dev

각 행에 대한 R은 특수 조건을 충족하기 전에 행에서 열 중 하나의 값을 사용하여 합계를 계산합니다.

분류에서Dev

행렬의 각 행에 대한 벡터 발생 횟수 계산

분류에서Dev

df의 열에 각 그룹에 대한 '합계'행 추가

분류에서Dev

행렬에 의한 각 행의 제품 합계

분류에서Dev

nxn 행렬에 대한 사용자의 numpy 행렬에서 사용자의 요소를 추가하는 방법은 무엇입니까?

분류에서Dev

ArrayFormula 내에서 각 행에 대해 마지막 7 개 행의 합계를 계산하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    RecyclerView-각 행의 뷰에 대한 참조를 얻는 방법

  2. 2

    R에서 한 행렬의 각 행을 다른 행렬로 다중화하는 방법은 무엇입니까?

  3. 3

    각 요소에 대해 mxn 행렬에서 가장 가까운 r 요소를 얻는 방법

  4. 4

    R에서 가능한 모든 조합을 얻기 위해 행렬 M2의 각 행을 행렬 M1의 각 행에 "붙여 넣기"하는 효율적인 방법이 있습니까?

  5. 5

    다른 행렬의 열 (또는 행)을 사용하여 행렬의 각 열 (또는 행)에 대한 가중 평균을 계산하는 방법은 무엇입니까?

  6. 6

    Magento 2에서 주문한 각 제품의 행 합계를 얻는 방법은 무엇입니까?

  7. 7

    SQL의 각 행에 대해 동일한 값을 가진 열 수를 얻는 방법

  8. 8

    파이썬에서 거대한 대각 행렬의 의사 역을 얻는 방법은 무엇입니까?

  9. 9

    행렬의 각 요소에 대한 가장 가까운 이웃의 표준 편차를 계산하는 효율적인 방법

  10. 10

    각 행에서 주어진 조건에 대한 합계를 계산하는 방법은 무엇입니까?

  11. 11

    하나의 SQL에서 각 고유 매개 변수에 대한 행을 가져오고 행 수를 얻는 방법은 무엇입니까?

  12. 12

    awk를 사용하여 행렬의 각 행에 대한 문자열의 합계

  13. 13

    double 행렬의 각 행에 대한 특정 열 합계

  14. 14

    전이 행렬 합계의 각 행에 대한 증명 1

  15. 15

    R의 두 행렬에서 두 열의 가능한 모든 조합에 함수를 적용하는 방법

  16. 16

    n * m 행렬 행의 가능한 모든 합계 목록을 얻는 방법

  17. 17

    벡터 a가 주어 졌을 때 행렬 F (a [i], a [j])에 대해 .sum을 사용하여 삼각 합계를 수행하는 효율적인 방법

  18. 18

    그룹에 대한 가중치 평균 롤링 합계를 수행하는 방법이 있습니까?

  19. 19

    R에서 데이터 테이블의 각 행에 대한 하위 범주를 만드는 방법

  20. 20

    C ++를 사용하여 행렬에서 부분 직사각형의 최대 합을 얻는 최적화 된 방법

  21. 21

    R에서 for 루프를 사용하여 행렬의 각 행에 Wilcoxon 테스트를 적용하는 방법

  22. 22

    TensorFlow : Tensor의 각 행에 대한 하위 배열을 얻는 방법

  23. 23

    Pandas (python)의 각 행에 대한 배열 길이를 얻는 방법은 무엇입니까?

  24. 24

    각 행에 대한 R은 특수 조건을 충족하기 전에 행에서 열 중 하나의 값을 사용하여 합계를 계산합니다.

  25. 25

    행렬의 각 행에 대한 벡터 발생 횟수 계산

  26. 26

    df의 열에 각 그룹에 대한 '합계'행 추가

  27. 27

    행렬에 의한 각 행의 제품 합계

  28. 28

    nxn 행렬에 대한 사용자의 numpy 행렬에서 사용자의 요소를 추가하는 방법은 무엇입니까?

  29. 29

    ArrayFormula 내에서 각 행에 대해 마지막 7 개 행의 합계를 계산하는 방법은 무엇입니까?

뜨겁다태그

보관