【问题标题】:How to calculate pro rata portfolio weights based on values within groups?如何根据组内的值计算按比例的投资组合权重?
【发布时间】:2016-09-27 09:49:13
【问题描述】:

我想根据其基金价值相对于每个投资组合中的总基金价值来计算投资组合权重。

我有一个 50,000 x 4 的数据框。基金价值栏应确定每次抽奖中每个基金的权重。

 draw Fund.ID Fund.Value..mn.USD. Net.Multiple..X.
   (int)   (int)               (dbl)            (dbl)
1      1   10678              1963.8             1.29
2      1    8812              9400.0             1.61
3      1    7236              7525.0             1.58
4      1   12702              5979.7             1.40
5      1   13715              3510.0             1.70
6      2    2060               334.8             1.42
7      2    2059               250.0             1.47
8      2    1151               202.0             2.12
9      2    1812               500.0             0.11
10     2    6822               151.2             2.09

对于第 1 期,第 2 行中的基金应具有最高权重 (33.12%),第 3 行中的基金应具有次高权重 (26.52%),第 1 行中的基金应具有最低权重 (6.92%) .第 1-5 行的权重总和应等于 100%。

如何为 1,000 次绘制创建这样的权重向量?然后我想将每个权重与各自的 Net Multiple (weight(fund1)*Net Multiple(fund1)) 相乘。

【问题讨论】:

    标签: r portfolio


    【解决方案1】:

    我们可以用dplyr来获取基金权重,也可以叫你的data.framedf,列名单字,这样处理起来更方便。

    library(dplyr)
    head(df)
      Draw  Fund  Value Multiple
    1    1 10678 1963.8     1.29
    2    1  8812 9400.0     1.61
    3    1  7236 7525.0     1.58
    4    1 12702 5979.7     1.40
    5    1 13715 3510.0     1.70
    6    2  2060  334.8     1.42
    
    df <- df %>% group_by(Draw) %>% mutate(FundWeight = Value / sum(Value))
    head(df)
    
    Source: local data frame [6 x 5]
    Groups: Draw [2]
    
       Draw  Fund  Value Multiple FundWeight
      (int) (int)  (dbl)    (dbl)      (dbl)
    1     1 10678 1963.8     1.29 0.06920027
    2     1  8812 9400.0     1.61 0.33123668
    3     1  7236 7525.0     1.58 0.26516553
    4     1 12702 5979.7     1.40 0.21071234
    5     1 13715 3510.0     1.70 0.12368518
    6     2  2060  334.8     1.42 0.23282337
    
    #multiply columns
    df$WeightMultiple <- df$FundWeight * df$Multiple
    df
    
    Source: local data frame [10 x 6]
    Groups: Draw [2]
    
        Draw  Fund  Value Multiple FundWeight WeightMultiple
       (int) (int)  (dbl)    (dbl)      (dbl)          (dbl)
    1      1 10678 1963.8     1.29 0.06920027     0.08926835
    2      1  8812 9400.0     1.61 0.33123668     0.53329105
    3      1  7236 7525.0     1.58 0.26516553     0.41896154
    4      1 12702 5979.7     1.40 0.21071234     0.29499727
    5      1 13715 3510.0     1.70 0.12368518     0.21026481
    6      2  2060  334.8     1.42 0.23282337     0.33060918
    7      2  2059  250.0     1.47 0.17385257     0.25556328
    8      2  1151  202.0     2.12 0.14047288     0.29780250
    9      2  1812  500.0     0.11 0.34770515     0.03824757
    10     2  6822  151.2     2.09 0.10514604     0.21975522
    

    【讨论】:

      【解决方案2】:

      你可以使用data.table

      library(data.table) 
      setDT(df)[, weight := prop.table(Fund.Value), by = draw]
      df
      #    draw Fund.ID Fund.Value Net.Multiple..X.     weight
      # 1:    1   10678     1963.8             1.29 0.06920027
      # 2:    1    8812     9400.0             1.61 0.33123668
      # 3:    1    7236     7525.0             1.58 0.26516553
      # 4:    1   12702     5979.7             1.40 0.21071234
      # 5:    1   13715     3510.0             1.70 0.12368518
      # 6:    2    2060      334.8             1.42 0.23282337
      # 7:    2    2059      250.0             1.47 0.17385257
      # 8:    2    1151      202.0             2.12 0.14047288
      # 9:    2    1812      500.0             0.11 0.34770515
      #10:    2    6822      151.2             2.09 0.10514604
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-09-27
        • 1970-01-01
        • 1970-01-01
        • 2021-05-23
        • 2021-04-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多