基于投资组合随时间变化的概率数据矩阵

probability data matrix based on portfolio change over period

我有一个像这样的大面板数据的数据框

Date        Firms   Portfolio
2007-02-01    A      1
2007-02-01    B      1
2007-02-01    C      2
2007-02-01    D      2
2007-02-01    E      3
2007-02-01    F      3

2007-03-01    C      1
2007-03-01    B      1
2007-03-01    A      2
2007-03-01    F      2
2007-03-01    E      3
2007-03-01    D      3

这里每个时期都有固定数量的投资组合(在上面的例子中是三个)。现在我想创建一个这样的逻辑概率矩阵。

            port1   port2   port3
port1        0.5    0.5      0
port2        0.5    0       0.5
port3        0      0.5     0.5

如果你考虑第 1 期的投资组合 1,组合是 A 和 B。但是在第 2 期,投资组合 1 有 B 和 C,这意味着 50% 的股票(只有 B)在下一个投资组合 1 中时期。投资组合 1 的其他 50% 的股票进入投资组合 2,因为股票 A 在 2007-03-01 期间在投资组合 2 中。投资组合 3 在第二个时期 (2007-03-01) 有 E 和 D,这意味着没有股票来自投资组合 1。所以我们分配 port1-port3 单元格 0。类似的方式我喜欢在其他两个投资组合列中分配概率.

现在如果这个过程持续 100 个周期,我们将有 99 个这样的矩阵。但是我需要一个矩阵来表示这 99 个矩阵的平均值。

这是使用 dplyrtidyr 的方法:

library(dplyr); library(tidyr)
a <- data %>%

  # First get long-format listing of all Date-Firms shifts
  arrange(Date, Firms) %>%
  group_by(Firms) %>% 
  mutate(to = lead(Portfolio)) %>%
  rename(from = Portfolio) %>%
  ungroup() %>%

  # What share of that month's moves with that to & from?
  group_by(Date, from, to) %>%
  tally() %>%
  mutate(share = n / sum(n)) %>%
  ungroup() 

a table 将以 "long" 格式保存所有概率矩阵,其中 Dateto 和 [= 的每个现有组合18=] 得到一行。要获得所有矩阵的平均值(每个矩阵都是共享一个日期的 a 的所有行),我们可以取所有 to/from 组合的平均值。

a_summary <- a %>%
  group_by(from, to) %>%
  summarize(avg = mean(share, na.rm = T)) %>%
  ungroup() %>%
  spread(from, avg, fill = 0)

> a_summary
# A tibble: 4 x 4
     to   `1`   `2`   `3`
  <int> <dbl> <dbl> <dbl>
1     1   0.5  0.75   0  
2     2   0.5  0      0.5
3     3   0    0.5    0.5
4    NA   1    1      1  

样本数据(添加第三期):

data <- read.table(header = T, text = "
  Date        Firms   Portfolio
  2007-02-01    A      1
  2007-02-01    B      1
  2007-02-01    C      2
  2007-02-01    D      2
  2007-02-01    E      3
  2007-02-01    F      3

  2007-03-01    C      1
  2007-03-01    B      1
  2007-03-01    A      2
  2007-03-01    F      2
  2007-03-01    E      3
  2007-03-01    D      3

  2007-04-01    A      1
  2007-04-01    B      1
  2007-04-01    C      2
  2007-04-01    D      2
  2007-04-01    E      3
  2007-04-01    F      1")