DealScan Renegotiation Data

Author

Hongyi Xu

Published

June 13, 2024

Modified

June 20, 2024

> Back to research

S1. Objective

This file follows the creation of the link table update the end of 2023. The file is called Link_table_2024.RData. The manual document can be found in file “DealScan_Link_Table_Compustat.html”.

The purpose of this document is to document the flow of logic in identifying amendaments/renegotiations/refinancing of exiting syndicated loan contracts in the LPC DealScan data.

S2. Examples

An updated manual about DealScan in WRDS. - updated Nov 2021

  • Example 1: Starwood Hotels & Resorts Worldwide (Borrower_Id=‘9514’)
    • Apr 20, 2010: 8-K for the new credit agreement

    • November 30, 2012: 8-K for the refinancing deal

    • The deal is identified as a “refinancing” deal because in the “Item 1.01 Entry into a Material Definitive Agreement”, it says:

      … The Credit Agreement is a $1.75 billion revolving credit facility, which refinanced the existing $1.50 billion Credit Agreement dated April 20, 2010, as amended (the “2010 Credit Facility”), that would have matured in November 2013.

    • Note that the firm is acquired by Marriott International Inc (Borrower_Id=‘18487’) in 2016.

    • LPC_Deal_ID andLPC_Tranche_ID are kept even after refinancing.

    • To track changes/amendments: Deal_Amended, Tranche_Amended, and Tranche_O_A.

      • Trance_O_A: Origination, Amendment 1, etc.
    • To track refinancing: Deal_Refinancing and Tranche_Refinancing.

S2. Data sources

LPC DealScan from WRDS.

S3. DealScan Data Preview

s3.1 Deal Purposes

Show the code
## build up and clean the dataset 
# DealScan <- fread("hi0yvqzhxowsqnpf.csv") 
# save(DealScan, file = "DealScan.Rdata")
# DealScan_borrower <- DealScan %>%
#   select(- grep(pattern = "Lend|Role", x = names(.), value = T) ) %>% 
#   unique()
# save(DealScan_borrower, file = "DealScan_borrower.Rdata")

# load("DealScan.Rdata") 
load("DealScan_borrower.Rdata") # for data only with 

names(DealScan_borrower)

# ## Here is one example: 
# b_9514 <- DealScan_borrower %>% 
#   filter(Borrower_Id == 9514)
# 
# b_9514 %>% 
#   select(LPC_Deal_ID, LPC_Tranche_ID, 
#          Deal_Active, Deal_Active_Date, Deal_Amended, Deal_Refinancing, Deal_Amount,
#          Tranche_Amended, Tranche_O_A, Tranche_Active_Date, Tranche_Refinancing, Tranche_Amount) %>% 
#   unique() %>% 
#   arrange(Deal_Active_Date, Tranche_Active_Date) %>% 
#   View("b_9514") 
# 
# DealScan_borrower %>% 
#   filter(LPC_Tranche_ID == 52511)
# 
# ## Summary stats for the deals: 
# Deal_summary <- DealScan_borrower %>% 
#   group_by(LPC_Deal_ID, LPC_Tranche_ID) %>% 
#   summarise(LPC_Tranche_Num = n(), 
#             Tranche_First = min(Tranche_Active_Date), 
#             Tranche_Last = max(Tranche_Active_Date),
#             ) %>% 
#   ungroup() 
# Deal_summary %>% head(20)

### Look into the deal purpose. 
dt.Deal_Purpose <- DealScan_borrower %>% 
  select(grep(pattern = "Purpose", x = names(.), value = T)) %>% 
  unique() %>% 
  lapply(X = ., FUN = function(x) unique(x)) %>% 
  as.data.table(.)
dt.Deal_Purpose$Deal_Purpose %>% unique()
### Look into the number of deals under each purpose
Deal_Purpose_Type <- DealScan_borrower %>% 
  group_by(Deal_Purpose) %>% 
  summarise(Deal_Purpose_Type_Num = length(unique(LPC_Deal_ID))) %>% 
  ungroup() %>% 
  arrange(-Deal_Purpose_Type_Num) %>% 
  mutate(Deal_Purpose = paste(format(1:length(Deal_Purpose), width = 2), Deal_Purpose, sep = "-"), 
         Deal_Purpose_Type_Prc = Deal_Purpose_Type_Num / sum(Deal_Purpose_Type_Num)
         )

plt.deal_purpose <- ggplot(Deal_Purpose_Type) +
  geom_col(aes(y = reorder(Deal_Purpose, Deal_Purpose_Type_Num), x = log10(Deal_Purpose_Type_Num)), fill = "#076fa2",
           width = 0.9, position = position_dodge(width = 0.9)) + 
  scale_x_continuous(
    limits = c(0, 5.3),
    breaks = seq(0, 6, by = 1), 
    expand = c(0.01, 0), # The horizontal axis does not extend to either side
    position = "top"  # Labels are located on the top
  ) + 
  # The vertical axis only extends upwards
  scale_y_discrete(expand = expansion(add = c(0, 0.5))) + 
  theme(
    # Set background color to white
    panel.background = element_rect(fill = "white"),
    # Set the color and the width of the grid lines for the horizontal axis
    panel.grid.major.x = element_line(color = "#A8BAC4", linewidth = 0.3),
    # Remove tick marks by setting their length to 0
    axis.ticks.length = unit(0, "mm"),
    # Remove the title for both axes
    axis.title = element_blank(),
    # Only left line of the vertical axis is painted in black
    axis.line.y.left = element_line(color = "black"),
    # Remove labels from the vertical axis
    axis.text.y = element_blank(),
    # But customize labels for the horizontal axis
    axis.text.x = element_text(family = "Courier", size = 10) # "Econ Sans Cnd";  "Comic Sans MS"
  ) + geom_shadowtext(
    data = subset(Deal_Purpose_Type, log10(Deal_Purpose_Type_Num) < 3),
    aes(log10(Deal_Purpose_Type_Num), y = Deal_Purpose, label = Deal_Purpose),
    fontface = "bold", 
    hjust = 0,
    nudge_x = 0.1,
    colour = "#076fa2",
    bg.colour = "white",
    bg.r = 0.2,
    family = "Courier",
    size = 3
  )  + geom_text(
    data = Deal_Purpose_Type,
    aes(log10(Deal_Purpose_Type_Num), y = Deal_Purpose, label = sapply(X = Deal_Purpose_Type_Prc*100, FUN = function(x) {paste(ifelse(round(x, digits = 2) == 0, round(x, digits = 3), round(x, digits = 2)), "%" , sep = "")}) ), 
    fontface = "bold", 
    hjust = 0,
    nudge_x = -0.3,
    colour = "white",
    family = "Courier",
    size = 3
  )  + 
  geom_text(
    data = subset(Deal_Purpose_Type, log10(Deal_Purpose_Type_Num) >= 3), 
    aes(0, y = Deal_Purpose, label = Deal_Purpose),  # paste("<b>", Deal_Purpose, "</b>", sep = "")), 
    fontface = "bold", 
    hjust = 0,
    nudge_x = 0.3,
    colour = "white",
    family = "Courier",
    size = 3
  )

plt.deal_purpose + labs(
    title = paste("Deal Purpose: activated between", paste(range(DealScan_borrower$Tranche_Active_Date), collapse = " and ")),
    subtitle = "Number of Deals for Each Deal Purpose (from WRDS DealScan)"
  ) + 
  theme(
    plot.title = element_text(
      family = "Comic Sans MS", 
      face = "bold",
      size = 15
    ), 
    plot.subtitle = element_text(
      family = "Comic Sans MS",
      size = 10
    )
  ) + 
  annotate(
    geom = "text", 
    label = paste("Sample Size: ", format(sum(Deal_Purpose_Type$Deal_Purpose_Type_Num), big.mark = ","), sep = ""), # , "\n updated: ", date()
    x = 4.5, y = 2, 
    color = "#076fa2", 
    family = "Courier",
    size = 2.5
  )

In the above codes, I first use LPC_Deal_ID to identify each unique deal and then group by variable Deal_Purpose to calculate the number of deals for each purpose. I store the number of deals for each purpose in the dataset Deal_Purpose_Type and the above plot. The total number of deal observations is 261007.

  1. The most frequent purpose is named under the General Purpose and the second and third most frequent purposes are Working Capital and Refinancing. Deals under these three purposes collectively account for around 63% percentage of all the deals in the sample.
  2. Another big chunk is in the capital investments: real estate, equipment, construction, aircraft & ship, telecom, hardware, etc.
  3. Another part is the trade finance - no. 11, 13, 21.
  4. SPV (Project Finance), M&A, LBO (all different buyouts), Takeover.
  5. Recapitalization (dividend, share repurchase, cash distribution).
  6. Takeover defense is there but not frequent.

s3.2 Amendaments and Refinancing

The name of each variable is defined in Loan Connector FTP User Guide and Fact Sheet. Through the fuzzy matching, I can match most of the variables in DealScan_borrower to that file.

In the next code block, I will look into amendments/refinancing for firms operating in US. The date for each step in the syndication process is crucial.

Definition of Variables:

  • Deal/Tranche Identifier: LPC_Deal_ID, LPC_Tranche_ID;
  • Size of Deal/Tranche: Deal_Amount, Tranche_Amount
  • Amend/Refinancing Flag: Deal_Amended, Tranche_Amended, Tranche_O_A, Deal_Refinancing, Tranche_Refinancing, Amend_Extend_Flag;
    • Amend_Extend_Flag: For analytic purposes, LPC defines an amend and extend during instances when a portion of the lending group wishes not to extend out their commitments. Thus only a percentage of the original overall commitment amount would get extended and that portion would get flagged as amend & extend volume (Yes/No).
  • Maturity Time: Tranche_Maturity_Date, Tenor_Maturity;
  • Deal (re-)Starting Time: Deal_Active_Date, Deal_Input_Date, Tranche_Active_Date.
Show the code
## construct the dataset for the deal/tranche amendments or refinancing. 
dt.Deal_Amend_Refin <- DealScan_borrower %>% 
  filter(Country == "United States") %>% 
  select(grep(x = names(.), pattern = "LPC", value = T), 
         grep(x = names(.), pattern = "Amend", value = T), 
         grep(x = names(.), pattern = "Refinanc|Tranche_O_A", value = T), 
         grep(x = names(.), pattern = "Matur", ignore.case = T, value = T), 
         "Deal_Amount", "Tranche_Amount", 
         "Deal_Active_Date", "Deal_Input_Date", "Tranche_Active_Date"
         )
cat("Variable names: \n")
Variable names: 
Show the code
names(dt.Deal_Amend_Refin) # check the selected variables 
 [1] "LPC_Deal_ID"           "LPC_Tranche_ID"        "Deal_Amended"         
 [4] "Amend_Extend_Flag"     "Tranche_Amended"       "Deal_Refinancing"     
 [7] "Tranche_O_A"           "Tranche_Refinancing"   "Tranche_Maturity_Date"
[10] "Tenor_Maturity"        "Deal_Amount"           "Tranche_Amount"       
[13] "Deal_Active_Date"      "Deal_Input_Date"       "Tranche_Active_Date"  
Show the code
## some examples: 
# dt.Deal_Amend_Refin %>% head(30) %>% View("dt.Deal_Amend_Refin")
# dt.Deal_Amend_Refin %>% 
#   arrange(LPC_Tranche_ID) %>% 
#   filter(LPC_Deal_ID == 21561) %>% View("dt.Deal_Amend_Refin")

## calculate the frequency of deal amend/refinancing in the dataset - ex. "Origination"
dt.Deal_Amend_Refin.freq <- dt.Deal_Amend_Refin %>% 
  group_by(LPC_Deal_ID, LPC_Tranche_ID) %>% ## for each deal-tranche IDs over its life-cycle. 
  summarise(
    ### frequency of tranche amendments - ex. "Origination" 
    Tranche_Change_Freq = length(grep(pattern = "Orig", x = unique(Tranche_O_A), value = T, invert = T )), 
    ### number of different deal size / tranche size 
    Tranche_Size = mean(Tranche_Amount, na.rm = T),  
    ### deal origination year  
    Deal_Start_ym = as.yearmon(unique(Deal_Active_Date))
  ) %>% 
  ungroup() %>% 
  mutate(Change_Freq_Positive = ifelse(Tranche_Change_Freq > 0, Tranche_Change_Freq, NA), # keep only observations with deal/tranche modifications 
         Year_groups = cut(as.numeric(Deal_Start_ym), breaks = c(1950, 2000, 2010, 2020, 2030),
                           labels = c("Pre-2000", "2000-2010", "2010-2020", "Post-2020") ) # create decade groups 
         )
`summarise()` has grouped output by 'LPC_Deal_ID', 'LPC_Tranche_ID'. You can
override using the `.groups` argument.
Show the code
cat("Data preview: \n")
Data preview: 
Show the code
dt.Deal_Amend_Refin.freq %>% head(20) 
# A tibble: 20 × 7
   LPC_Deal_ID LPC_Tranche_ID Tranche_Change_Freq Tranche_Size Deal_Start_ym
         <int>          <int>               <int>        <dbl> <yearmon>    
 1           2              3                   2          450 Oct 1996     
 2           2              5                   2          300 Oct 1996     
 3           2            594                   2          750 Oct 1996     
 4           2            595                   2          500 Oct 1996     
 5           3          52511                   6          100 Jun 1997     
 6           3          53306                   6          100 Jun 1997     
 7           4          52015                   2          560 Nov 1998     
 8           4          52145                   2          300 Nov 1998     
 9           4          52955                   2          400 Nov 1998     
10           4          53307                   2          200 Nov 1998     
11           4          54154                   2          190 Nov 1998     
12           5          52249                   2          100 May 2000     
13           5          52616                   2          450 May 2000     
14           5          53308                   2          500 May 2000     
15           6          52250                   0          700 Nov 1997     
16           6          53086                   0          550 Nov 1997     
17           7          52146                   0           80 Sep 1997     
18           7          52512                   0           45 Sep 1997     
19           7          52834                   0          110 Sep 1997     
20           8          52147                   4          500 Oct 1997     
# ℹ 2 more variables: Change_Freq_Positive <int>, Year_groups <fct>
Show the code
### double check
# dt.Deal_Amend_Refin %>% filter(LPC_Deal_ID == 7)
# DealScan_borrower %>% filter(LPC_Deal_ID == 7)
# DealScan_borrower %>% filter(Borrower_Id == 228)

### visualization 
names(dt.Deal_Amend_Refin.freq)
[1] "LPC_Deal_ID"          "LPC_Tranche_ID"       "Tranche_Change_Freq" 
[4] "Tranche_Size"         "Deal_Start_ym"        "Change_Freq_Positive"
[7] "Year_groups"         
Show the code
#### number of unique deal / deal-tranche 
apply(dt.Deal_Amend_Refin.freq[1:2], MARGIN = 2, FUN = function(x) length(unique(x)) )
   LPC_Deal_ID LPC_Tranche_ID 
        110448         173570 
Show the code
nrow(names(dt.Deal_Amend_Refin.freq))
NULL
Show the code
#### frequency
dt.Deal_Amend_Refin.plot <- dt.Deal_Amend_Refin.freq %>%
  na.omit() %>% 
  group_by(Change_Freq_Positive, Year_groups) %>%
  summarise(n = n()) %>%
  ungroup() %>% 
  group_by(Year_groups) %>% 
  mutate(share_in_yeargroup = n / sum(n, na.rm = T) * 100) %>% 
  ungroup()
`summarise()` has grouped output by 'Change_Freq_Positive'. You can override
using the `.groups` argument.
Show the code
ggplot(data = na.omit(dt.Deal_Amend_Refin.plot), aes(fill = Year_groups, x = Change_Freq_Positive, y = n) ) + 
  geom_bar(position="stack", stat="identity") # + 

Show the code
  # scale_y_continuous(name = "Number of Deal-Tranche", trans='log10')
  
ggplot(na.omit(dt.Deal_Amend_Refin.plot), aes(fill=Year_groups, y=n, x=Change_Freq_Positive)) + 
  geom_bar(position="dodge", stat="identity") + 
  scale_y_continuous(name = "Number of Deal-Tranche w/ Amendments") + 
  scale_x_continuous(name = "Frequency of Amendments")

Show the code
ggplot(na.omit(dt.Deal_Amend_Refin.plot), aes(fill=Year_groups, y=share_in_yeargroup, x=Change_Freq_Positive)) + 
  geom_bar(position="dodge", stat="identity") + 
  scale_y_continuous(name = "Number of Deal-Tranche w/ Amendments") + 
  scale_x_continuous(name = "Frequency of Amendments")

Show the code
#### number of deal-tranche (1 to 10)
fig_amend_count <- ggplot(na.omit(filter(dt.Deal_Amend_Refin.plot, Change_Freq_Positive <= 10)), aes(fill=Year_groups, y=n, x=Change_Freq_Positive)) + 
  geom_bar(position="dodge", stat="identity") + 
  # scale_y_continuous(name = "Number of Deal-Tranche w/ Amendments") + 
  scale_x_continuous(name = "Frequency of Amendments", breaks = 1:10) + 
  labs(title = "Number of Deal-Tranches w/ Amendments", 
       subtitle = "Number of Deal-Tranche w/ Amendments", 
       fill = "Origination Year Groups") + 
  theme_economist(
    base_size = 10,
    base_family = "Courier",
    horizontal = TRUE,
    dkpanel = FALSE
  ) +
  theme(
    # Remove labels from the vertical axis
    axis.title.y = element_blank(), 
    axis.text.x = element_text(vjust=3),
    axis.text.y = element_text(hjust=1),
    axis.ticks = element_blank(), 
    # Title format
    plot.title = element_text(
      family = "Comic Sans MS", 
      face = "bold",
      size = 13.5, hjust = 0 # shift the 
    ), 
    # Subtitle format 
    plot.subtitle = element_text(
      family = "Comic Sans MS",
      size = 12, hjust = 0
    ), 
    # plot.title.position = "plot",
    legend.text = element_text(size=10), #change font size of legend text
    legend.title = element_text(size=10), #change font size of legend title   
    legend.position = "top", 
    legend.key.size = unit(0.3, 'cm') # change the size of the legend key - the blocks
  )

#### share of deal-tranche within each year group (1 to 10)
fig_amend_share <- ggplot(na.omit(filter(dt.Deal_Amend_Refin.plot, Change_Freq_Positive <= 10)), aes(fill=Year_groups, y=share_in_yeargroup, x=Change_Freq_Positive)) + 
  geom_bar(position="dodge", stat="identity") + 
  # scale_y_continuous(name = ) + 
  scale_x_continuous(name = "Frequency of Amendments", breaks = 1:10) + 
  labs(title = "Share of Deal-Tranches w/ Amendments within Origination-year Group", 
       subtitle = "Percentage of Deal-Tranche w/ Amendments (%)", 
       fill = "Origination Year Groups") + 
  theme_economist(
    base_size = 10,
    base_family = "Courier",
    horizontal = TRUE,
    dkpanel = FALSE
  ) +
  theme(
    # Remove labels from the vertical axis
    axis.title.y = element_blank(), 
    axis.text.x = element_text(vjust=3),
    axis.text.y = element_text(hjust=1),
    axis.ticks = element_blank(), 
    # Title format
    plot.title = element_text(
      family = "Comic Sans MS", 
      face = "bold",
      size = 13.5, hjust = 0 # shift the 
    ), 
    # Subtitle format 
    plot.subtitle = element_text(
      family = "Comic Sans MS",
      size = 12, hjust = 0
    ), 
    # plot.title.position = "plot",
    legend.text = element_text(size=10), #change font size of legend text
    legend.title = element_text(size=10), #change font size of legend title   
    legend.position = "top", 
    legend.key.size = unit(0.3, 'cm') # change the size of the legend key - the blocks
  )


cowplot::plot_grid(fig_amend_count, fig_amend_share, ncol = 1)

Show the code
# ggplot(na.omit(dt.Deal_Amend_Refin.plot), aes(fill=Year_groups, y=n, x=Change_Freq_Positive)) + 
#   geom_bar(position="dodge", stat="identity") + 
#   scale_y_continuous(name = "Number of Deal-Tranche w/ Amendments") + 
#   scale_x_continuous(name = "Frequency of Amendments")


quantile(dt.Deal_Amend_Refin.freq$Change_Freq_Positive, na.rm = T)
  0%  25%  50%  75% 100% 
   1    1    1    3   36 
Show the code
quantile(dt.Deal_Amend_Refin.freq$Tranche_Size, na.rm = T)
     0%     25%     50%     75%    100% 
      0      25      75     210 1450000 
Show the code
plot(x = log10(dt.Deal_Amend_Refin.freq$Tranche_Size), y = dt.Deal_Amend_Refin.freq$Change_Freq_Positive, col = dt.Deal_Amend_Refin.freq$Year_groups)

Show the code
# legend("topright", col = dt.Deal_Amend_Refin.freq$Year_groups, legend = dt.Deal_Amend_Refin.freq$Year_groups, lty = 1:4, cex = 1)

describe(dt.Deal_Amend_Refin.freq %>% select("Tranche_Change_Freq", "Change_Freq_Positive"), IQR = T) 
                     vars      n mean   sd median trimmed mad min max range
Tranche_Change_Freq     1 173999 0.53 1.29      0    0.21   0   0  36    36
Change_Freq_Positive    2  43870 2.10 1.81      1    1.72   0   1  36    35
                     skew kurtosis   se IQR
Tranche_Change_Freq  4.84    48.64 0.00   1
Change_Freq_Positive 3.72    31.21 0.01   2
Show the code
describe(dt.Deal_Amend_Refin.freq %>% filter(Year_groups != "Post-2020") %>% select("Tranche_Change_Freq", "Change_Freq_Positive"), IQR = T) 
                     vars      n mean   sd median trimmed mad min max range
Tranche_Change_Freq     1 155457 0.54 1.33      0    0.21   0   0  36    36
Change_Freq_Positive    2  38101 2.19 1.90      1    1.79   0   1  36    35
                     skew kurtosis   se IQR
Tranche_Change_Freq  4.83    47.43 0.00   0
Change_Freq_Positive 3.58    29.07 0.01   2
Show the code
dt.Deal_Amend_Refin.freq %>% 
  group_by(LPC_Deal_ID) %>% 
  summarise(Deal_Change_Freq = max(Tranche_Change_Freq)) %>% 
  ungroup() %>% describe() 
                 vars      n      mean       sd median  trimmed      mad min
LPC_Deal_ID         1 110448 129520.46 79671.48 121980 124537.1 84471.88   2
Deal_Change_Freq    2 110448      0.41     1.21      0      0.1     0.00   0
                    max  range skew kurtosis     se
LPC_Deal_ID      323649 323647 0.45    -0.60 239.73
Deal_Change_Freq     36     36 5.24    47.79   0.00

Among all 173,999 unique Deal-Tranche observations, 43,870 of those have recorded amendments to their Deal-Tranches. Among deals experienced amendments, each Deal-Tranche is amended on average 2.1 times and this seems to be quite stable to the origination time of the Deal-Tranche. This is somewhat consistent with the idea that the renegotiation is not rare.

Heads up! However, one thing to be noted is the renegotiation with the good or bad news are not distinguished in the above statistics..

s3.3 Follow Roberts (2015)

For Table B1, I extract the loan information and path for Aeroflex Inc. (Borrower_Id = 8532) from the dataset DealScan_borrower. Company SEC Filings

Show the code
DealScan_Aeroflex <- DealScan_borrower %>% 
  filter(Borrower_Id == 8532)

DealScan_Aeroflex %>% 
  select(names(dt.Deal_Amend_Refin), Deal_Input_Date, Tranche_Type, Deal_Purpose) %>% 
  as_tibble() %>% 
  filter(grepl(pattern = "Orig", x = Tranche_O_A, ignore.case = F)) %>% # keep only observations at origination 
  arrange(Deal_Active_Date, Tranche_Active_Date, Tranche_Maturity_Date) %>% 
  rename_with(~ str_replace(string = .x, pattern = "_", replacement = "\n")) %>%
  gt(id = 'table_id') %>% 
  # cols_label(fn = ~ str_replace(string = ., pattern = "_", replacement = "\n") ) %>% 
  tab_header(title = "Table 1. Panel A: Aeroflex Inc. Deal Originations") %>% 
  tab_options(table.font.size = 10, heading.align = 'left' ) %>% 
  tab_style( # update the font size for table cells. 
    style = cell_text(size = px(10) ),
    locations = cells_body()
  )
Table 1. Panel A: Aeroflex Inc. Deal Originations
LPC Deal_ID LPC Tranche_ID Deal Amended Amend Extend_Flag Tranche Amended Deal Refinancing Tranche O_A Tranche Refinancing Tranche Maturity_Date Tenor Maturity Deal Amount Tranche Amount Deal Active_Date Deal Input_Date Tranche Active_Date Tranche Type Deal Purpose
128721 273100 No No No Yes Origination 1999-03-31 36 20.00 16.00 1996-03-15 1998-09-09 1996-03-15 Revolver/Line >= 1 Yr. General Purpose/Refinance
128721 224767 No No No Yes Origination 2000-09-30 54 20.00 4.00 1996-03-15 1998-09-09 1996-03-15 Term Loan General Purpose/Refinance
143473 185023 No No No Yes Origination 2002-12-31 46 47.48 20.00 1999-02-25 1999-03-10 1999-02-25 Term Loan General Purpose/Refinance
143473 186036 No No No Yes Origination 2002-12-31 46 47.48 23.00 1999-02-25 1999-03-10 1999-02-25 Revolver/Line >= 1 Yr. General Purpose/Refinance
143473 278055 No No No Yes Origination 2008-04-30 110 47.48 4.48 1999-02-25 1999-03-10 1999-02-25 Revolver/Line >= 1 Yr. General Purpose/Refinance
42818 98794 No No No Yes Origination 2007-02-14 48 53.23 50.00 2003-02-14 2003-02-28 2003-02-14 Revolver/Line >= 1 Yr. Working capital
42818 83949 No No No Yes Origination 2008-04-30 62 53.23 3.23 2003-02-14 2003-02-28 2003-02-14 Term Loan Working capital
151556 197238 Yes No Yes Yes Origination 2011-03-21 60 100.00 100.00 2006-03-21 2006-03-22 2006-03-21 Revolver/Line >= 1 Yr. Working capital
57853 108980 No No No No Origination NA NA 780.00 245.00 2007-04-13 2007-03-30 2007-04-13 Term Loan Leveraged Buyout
57853 230824 No No No No Origination NA NA 780.00 475.00 2007-04-13 2007-03-30 2007-04-13 Term Loan B Leveraged Buyout
57853 98546 No No No No Origination NA NA 780.00 60.00 2007-04-13 2007-03-30 2007-04-13 Revolver/Line >= 1 Yr. Leveraged Buyout
16163 35910 No No No Yes Origination 2013-08-15 72 575.00 50.00 2007-08-15 2007-06-25 2007-08-15 Revolver/Line >= 1 Yr. Leveraged Buyout
16163 35911 No No No Yes Origination 2014-08-15 84 575.00 400.00 2007-08-15 2007-06-25 2007-08-15 Term Loan B Leveraged Buyout
16163 36226 No No No Yes Origination 2014-08-15 84 575.00 125.00 2007-08-15 2007-06-25 2007-08-15 Term Loan C Leveraged Buyout
16164 43063 Yes No Yes Yes Origination Yes 2016-12-31 67 669.12 75.00 2011-05-09 2011-04-27 2011-05-09 Revolver/Line >= 1 Yr. General Purpose
16164 43064 Yes No Yes Yes Origination Yes 2018-12-31 91 669.12 725.00 2011-05-09 2011-04-27 2011-05-09 Term Loan B General Purpose

This table is consistent with Table B1 Panel A in Roberts (2015):

  • The identifier (LPC_Deal_ID, LPC_Tranche_ID) maps to (Package ID, Facility ID).
  • The identifier Tranche_Type maps to Loan type.
  • The date information - Deal_Active_Date maps to Event date.
  • Tranche_Maturity_Date maps to Maturity date.
  • Tranche_Amount maps to Amount (millions).
  • Tranche_O_A maps to Event.

s3.3a Example from borrower (Borrower_Id = 8532)

The next step is to construct the life-cycle / loan path as in Table B1 Panel B.

E.g. This deal (LPC_Deal_ID = 151556, LPC_Tranche_ID = 197238) can be found in this filing.

  • This deal is originated at March 21, 2006.

  • The amendment is made at August 28, 2006. The amended document says that

    … WHEREAS, the Borrowers has requested an amendment to the Credit Agreement; and WHEREAS, the Lenders are willing to agree to such amendments, subject to the terms and conditions set forth herein; …

    • This seems that if the borrower request an amendment, it can be approved by the syndicate.

    • This amendment happened in around 5 months after the loan origination.

    Important 1: Who initiates the renegotiation process?

    I only observe the successful renegotiations and potentially can also identify who initiates this process. This may create selection bias in your analysis. Need to think about how will this issue create upward/downward bias in your results.

    • The syndicte has four banks and the cost of renegotiation might be small? & What is usually the fees/expenses for renegotiations?
Tip 1: How to detect the relationship lending?

One tip to detect such lending relationship might be a scrap and search for the person and his/her title along the loan path and also for a single firm’s loan pool.

Different types of term loans:

  • Term loan (also Term Loan A): This layer of debt is typically amortized evenly over 5 to 7 years. Just like a mortgage.
  • Term loan B (also TLB): This layer of debt usually involves nominal amortization (repayment) over 5 to 8 years, with a large bullet payment in the last year. Term Loan B allows borrowers to defer repayment of a large portion of the loan, but is more costly to borrowers than Term Loan A.
    • TLB proceeds can be used in various ways, including for refinancing, acquisitions and general corporate use.
    • The first two types generally are secured loans.
    • Repayment can be made and is generally required at a premium to face value.
  • Term loan C (also TLC): TLC proceeds are used to fund cash collateral accounts that support letters of credit—a letter from a bank guaranteeing that a seller of goods or services will receive payment in full and on time, even if the buyer defaults.
    • TLC debt, however, may only be used to provide collateral for letters of credit.
    • Since TLCs are specifically raised to provide cash collateral, which must be available in an account to support letters of credit, they also do not amortize.
    • TLB is senior than TLC debt.
    • The idea is to use long-term debt to hedge the short-term liquidity/cash needs. TLC plays such a role for this specific purpose. It is a risky debt; however, very strict covenants and purposes are imposed to mitigate risk-shifting by the manager.
    • A nice article about TLC debt.
  • Revolver/Line: Revolving Credit Facility, which is basically a credit card for the borrower. There are two costs associated with revolving lines of credit: (1) the interest rate charged on the revolver’s drawn balance, and (2) an undrawn commitment fee.

s3.3b Q: What happens to the loan path?

Show the code
DealScan_Aeroflex %>% 
  select(names(dt.Deal_Amend_Refin), Deal_Input_Date, Tranche_Type, Deal_Purpose) %>% 
  as_tibble() %>% 
  mutate(Tranche_O_A_round = replace_na(as.numeric(str_extract(string = Tranche_O_A, pattern = "\\d+$")) , replace = 0 ), 
         LPC_Deal_ID = paste("Deal: ", LPC_Deal_ID, sep = "")
         ) %>% 
  group_by(LPC_Deal_ID, LPC_Tranche_ID) %>% 
  arrange(Deal_Active_Date) %>% 
  # check whether there exists tranche amendment in the dataset 
  mutate(Amend_Flag_check = max(Tranche_O_A_round) > 0) %>% 
  ungroup() %>% 
  rename_with(~ str_replace(string = .x, pattern = "_", replacement = "\n")) %>%
  gt(id = 'table_id', groupname_col = "LPC\nDeal_ID") %>% 
  # cols_label(fn = ~ str_replace(string = ., pattern = "_", replacement = "\n") ) %>% 
  tab_header(title = "Table 1. Panel B: Aeroflex Inc. Deal-Tranche Level Loan Path") %>% 
  tab_options(table.font.size = 10, heading.align = 'left' ) %>% 
  tab_style( # update the font size for table cells. 
    style = cell_text(size = px(10)),
    locations = cells_body()
  ) %>% 
  tab_style(
    style = cell_text(style = "italic", color = 'red'), 
    locations = cells_body(
      columns = "LPC\nTranche_ID", 
      rows =  `Amend\nFlag_check` > 0
    )
  ) %>% 
  cols_hide(columns = c("Tranche\nO_A_round", "Amend\nFlag_check") ) # hide columns 
Table 1. Panel B: Aeroflex Inc. Deal-Tranche Level Loan Path
LPC Tranche_ID Deal Amended Amend Extend_Flag Tranche Amended Deal Refinancing Tranche O_A Tranche Refinancing Tranche Maturity_Date Tenor Maturity Deal Amount Tranche Amount Deal Active_Date Deal Input_Date Tranche Active_Date Tranche Type Deal Purpose
Deal: 128721
224767 No No No Yes Origination 2000-09-30 54 20.00 4.00 1996-03-15 1998-09-09 1996-03-15 Term Loan General Purpose/Refinance
273100 No No No Yes Origination 1999-03-31 36 20.00 16.00 1996-03-15 1998-09-09 1996-03-15 Revolver/Line >= 1 Yr. General Purpose/Refinance
Deal: 143473
185023 No No No Yes Origination 2002-12-31 46 47.48 20.00 1999-02-25 1999-03-10 1999-02-25 Term Loan General Purpose/Refinance
186036 No No No Yes Origination 2002-12-31 46 47.48 23.00 1999-02-25 1999-03-10 1999-02-25 Revolver/Line >= 1 Yr. General Purpose/Refinance
278055 No No No Yes Origination 2008-04-30 110 47.48 4.48 1999-02-25 1999-03-10 1999-02-25 Revolver/Line >= 1 Yr. General Purpose/Refinance
Deal: 42818
83949 No No No Yes Origination 2008-04-30 62 53.23 3.23 2003-02-14 2003-02-28 2003-02-14 Term Loan Working capital
98794 No No No Yes Origination 2007-02-14 48 53.23 50.00 2003-02-14 2003-02-28 2003-02-14 Revolver/Line >= 1 Yr. Working capital
Deal: 151556
197238 Yes No Yes Yes Origination 2011-03-21 60 100.00 100.00 2006-03-21 2006-03-22 2006-03-21 Revolver/Line >= 1 Yr. Working capital
197238 Yes No Yes Yes Amendment 1 2011-03-21 55 100.00 100.00 2006-03-21 2006-08-28 2006-08-28 Revolver/Line >= 1 Yr. Working capital
Deal: 57853
108980 No No No No Origination NA NA 780.00 245.00 2007-04-13 2007-03-30 2007-04-13 Term Loan Leveraged Buyout
230824 No No No No Origination NA NA 780.00 475.00 2007-04-13 2007-03-30 2007-04-13 Term Loan B Leveraged Buyout
98546 No No No No Origination NA NA 780.00 60.00 2007-04-13 2007-03-30 2007-04-13 Revolver/Line >= 1 Yr. Leveraged Buyout
Deal: 16163
35910 No No No Yes Origination 2013-08-15 72 575.00 50.00 2007-08-15 2007-06-25 2007-08-15 Revolver/Line >= 1 Yr. Leveraged Buyout
35911 No No No Yes Origination 2014-08-15 84 575.00 400.00 2007-08-15 2007-06-25 2007-08-15 Term Loan B Leveraged Buyout
36226 No No No Yes Origination 2014-08-15 84 575.00 125.00 2007-08-15 2007-06-25 2007-08-15 Term Loan C Leveraged Buyout
Deal: 16164
43063 Yes No Yes Yes Origination Yes 2016-12-31 67 669.12 75.00 2011-05-09 2011-04-27 2011-05-09 Revolver/Line >= 1 Yr. General Purpose
43063 Yes No Yes Yes Amendment 1 Yes 2016-12-31 55 669.12 75.00 2011-05-09 2012-05-25 2012-05-25 Revolver/Line >= 1 Yr. General Purpose
43063 Yes No Yes Yes Amendment 2 Yes 2017-11-28 54 669.12 57.12 2011-05-09 2013-05-14 2013-05-28 Revolver/Line >= 1 Yr. General Purpose
43064 Yes No Yes Yes Origination Yes 2018-12-31 91 669.12 725.00 2011-05-09 2011-04-27 2011-05-09 Term Loan B General Purpose
43064 Yes No Yes Yes Amendment 1 Yes 2018-12-31 79 669.12 725.00 2011-05-09 2012-05-25 2012-05-25 Term Loan B General Purpose
43064 Yes No Yes Yes Amendment 2 Yes 2019-11-28 78 669.12 612.00 2011-05-09 2013-05-14 2013-05-28 Term Loan B General Purpose

Consistent with Roberts (2015), most of deal-tranche observations in DealScan are not consistent with their SEC filings. In other words, the loan path in the DealScan data is rather incomplete. For instance, the tranche (LPC_Deal_ID = 128721, LPC_Tranche_ID = 224767) only appears once in DealScan and is classified as an “Origination” + “Refinancing” deal. However, the SEC filings from Table B1 Panel B in Roberts (2015) shows a total 8 observations along the loan path. The observation recorded in DealScan is not an origination and is classified as an “Amended/Restate” event in Roberts dataset. Therefore, the renegotiation frequency is significantly different from the actual ones and the full dataset may not be granular enough.

Another way to better identify the connection between different deals, and tranches in particular, is to look into variable Deal_Remark. Some examples below:

Show the code
DealScan_Aeroflex %>% 
  select(names(dt.Deal_Amend_Refin), Deal_Input_Date, Tranche_Type, Deal_Purpose, 
         grep(pattern = "Remark", x = names(.), value = T)
         ) %>% 
  as_tibble() %>% 
  mutate(Tranche_O_A_round = replace_na(as.numeric(str_extract(string = Tranche_O_A, pattern = "\\d+$")) , replace = 0 ), 
         LPC_Deal_ID = paste("Deal: ", LPC_Deal_ID, sep = "")
         ) %>% 
  group_by(LPC_Deal_ID, LPC_Tranche_ID) %>% 
  arrange(Deal_Active_Date) %>% 
  # check whether there exists tranche amendment in the dataset 
  mutate(Amend_Flag_check = max(Tranche_O_A_round) > 0) %>% 
  ungroup() %>% 
  filter(LPC_Deal_ID == "Deal: 128721") %>% 
  rename_with(~ str_replace(string = .x, pattern = "_", replacement = "\n")) %>%
  gt(id = 'table_id', groupname_col = "LPC\nDeal_ID") %>% 
  # cols_label(fn = ~ str_replace(string = ., pattern = "_", replacement = "\n") ) %>% 
  tab_header(title = "Table 1. Panel C: Aeroflex Inc. Deal-Tranche Level Loan Path", 
             subtitle = "w/ additional information in remarks"
             ) %>% 
  tab_options(table.font.size = 10, heading.align = 'left' ) %>% 
  tab_style( # update the font size for table cells. 
    style = cell_text(size = px(10)),
    locations = cells_body()
  ) %>% 
  tab_style(
    style = cell_text(style = "italic", color = 'red'), 
    locations = cells_body(
      columns = "LPC\nTranche_ID", 
      rows =  `Amend\nFlag_check` > 0
    )
  ) %>% 
  cols_width(ends_with("Remark") ~ px(800)) %>% 
  cols_hide(columns = c("Tranche\nO_A_round", "Amend\nFlag_check") ) # hide columns 
Table 1. Panel C: Aeroflex Inc. Deal-Tranche Level Loan Path
w/ additional information in remarks
LPC Tranche_ID Deal Amended Amend Extend_Flag Tranche Amended Deal Refinancing Tranche O_A Tranche Refinancing Tranche Maturity_Date Tenor Maturity Deal Amount Tranche Amount Deal Active_Date Deal Input_Date Tranche Active_Date Tranche Type Deal Purpose Purpose Remark Deal Remark Tranche Remark Performance Pricing_Remark
Deal: 128721
224767 No No No Yes Origination 2000-09-30 54 20 4 1996-03-15 1998-09-09 1996-03-15 Term Loan General Purpose/Refinance Background: Credit amends and restates a $8M agreement dated 4/11/94. Co. was formerly known as ARX Inc. Credit is also arranged for a number of subsids and backs the acquisition of MIC Technology. Pricing: (See grid). Pricing is as indicated thru 6/30/96, tied to co.'s debt to EBITDA ratio thereafter.
273100 No No No Yes Origination 1999-03-31 36 20 16 1996-03-15 1998-09-09 1996-03-15 Revolver/Line >= 1 Yr. General Purpose/Refinance Background: Credit amends and restates a $8M agreement dated 4/11/94. Co. was formerly known as ARX Inc. Credit is also arranged for a number of subsids and backs the acquisition of MIC Technology. Pricing: (See grid). Option: $2M LC sublimit. Security: Borrow. base = 80% of elig. receivs. plus 40% of elig. invent. Pricing is as indicated thru 6/30/96, tied to co.'s debt to EBITDA ratio thereafter.

You can see the ample information covered in the Deal_Remark and Tranche_Remark section.

To connect to loan contracts preceding these ones, I recovered the loans originated under the same entity but under a different name. These are loans from ARX Inc. (Borrower_Id = 31224):

Show the code
DealScan_borrower %>% 
  filter(Borrower_Id == 31224) %>% ## now is the DealScan_ARX 
  select(names(dt.Deal_Amend_Refin), Deal_Input_Date, Tranche_Type, Deal_Purpose, 
         grep(pattern = "Remark", x = names(.), value = T)
         ) %>% 
  as_tibble() %>% 
  mutate(Tranche_O_A_round = replace_na(as.numeric(str_extract(string = Tranche_O_A, pattern = "\\d+$")) , replace = 0 ), 
         LPC_Deal_ID = paste("Deal: ", LPC_Deal_ID, sep = "")
         ) %>% 
  group_by(LPC_Deal_ID, LPC_Tranche_ID) %>% 
  arrange(Deal_Active_Date) %>% 
  # check whether there exists tranche amendment in the dataset 
  mutate(Amend_Flag_check = max(Tranche_O_A_round) > 0) %>% 
  ungroup() %>% 
  rename_with(~ str_replace(string = .x, pattern = "_", replacement = "\n")) %>%
  gt(id = 'table_id', groupname_col = "LPC\nDeal_ID") %>% 
  # cols_label(fn = ~ str_replace(string = ., pattern = "_", replacement = "\n") ) %>% 
  tab_header(title = "Table 1. Panel D: ARX Inc. Deal-Tranche Level Loan Path") %>% 
  tab_options(table.font.size = 10, heading.align = 'left' ) %>% 
  tab_style( # update the font size for table cells. 
    style = cell_text(size = px(10)),
    locations = cells_body()
  ) %>% 
  tab_style(
    style = cell_text(style = "italic", color = 'red'), 
    locations = cells_body(
      columns = "LPC\nTranche_ID", 
      rows =  `Amend\nFlag_check` > 0
    )
  ) %>% 
  cols_width(ends_with("Remark") ~ px(800)) %>% 
  cols_hide(columns = c("Tranche\nO_A_round", "Amend\nFlag_check") ) # hide columns 
Table 1. Panel D: ARX Inc. Deal-Tranche Level Loan Path
LPC Tranche_ID Deal Amended Amend Extend_Flag Tranche Amended Deal Refinancing Tranche O_A Tranche Refinancing Tranche Maturity_Date Tenor Maturity Deal Amount Tranche Amount Deal Active_Date Deal Input_Date Tranche Active_Date Tranche Type Deal Purpose Purpose Remark Deal Remark Tranche Remark Performance Pricing_Remark
Deal: 91747
171206 No No No Yes Origination 1996-03-31 83 40.0 40.0 1989-04-24 1989-11-02 1989-04-24 Revolver/Term Loan General Purpose/Refinance Commit. was reduced from $50M and pricing increased from P, LIB+75 in an amendment dated11/27/90. The credit reduces further to $33.5M. Indicated LIB pricing is for interest periods of less than 6 mos., LIB+250 for interest periods > 6 mos. Key Financial Ratios: min. current ratio of 3:1; min. quick ratio of 1.5:1; min. interest coverage ratio of 1.5:1. Credit converts to a 4-yr. term loan.
Deal: 78408
141738 No No No No Origination 1994-07-31 33 38.5 23.5 1991-10-10 1991-10-23 1991-10-10 Revolver/Line >= 1 Yr. Working capital Credit is also for several of the co.'s affiliates. Credit amends and restates a prior agreement. Revolver commit. was reduced from $38.5M and $15M of outstands. were converted to term loans. Overdue pricing is P+300. Credit is prepaid with 100% of the net proceeds of any lease or disposition of assets > $250K, 25% used to reduce the revolver and 75% to reduce the term loan to $6M. Credit is prepaid with 75% of securities sales. Agent collects unspecified fees. Indicated upfr. fee is a restructuring fee. Banks may make assigns. Elig. assignees: banks having total assets > or = $1B, and S&Ls and financial institutions with total assets > or = $500M. Assign. min.: $5M. Key Financial Ratios: max. total consol. liab. to tang. net worth ratio decreasing from 4.45:1 thru 9/30/91 to 2.6:1 after 6/29/94; min. consol. operating income to gross interest expense ratio of 1:1 thru 6/30/93, 1.5:1 thereafter.
245103 No No No No Origination 1994-07-31 33 38.5 15.0 1991-10-10 1991-10-23 1991-10-10 Term Loan Working capital Credit is also for several of the co.'s affiliates. Credit amends and restates a prior agreement. Revolver commit. was reduced from $38.5M and $15M of outstands. were converted to term loans. Overdue pricing is P+300. Credit is prepaid with 100% of the net proceeds of any lease or disposition of assets > $250K, 25% used to reduce the revolver and 75% to reduce the term loan to $6M. Credit is prepaid with 75% of securities sales. Agent collects unspecified fees. Indicated upfr. fee is a restructuring fee. Banks may make assigns. Elig. assignees: banks having total assets > or = $1B, and S&Ls and financial institutions with total assets > or = $500M. Assign. min.: $5M. Key Financial Ratios: max. total consol. liab. to tang. net worth ratio decreasing from 4.45:1 thru 9/30/91 to 2.6:1 after 6/29/94; min. consol. operating income to gross interest expense ratio of 1:1 thru 6/30/93, 1.5:1 thereafter. Credit is repaid in qtrly. installs. of $500K ea. beg. 9/30/91 to reduce the term loan to $6M; thereafter, installs. will be used to reduce revolver, with the excess again used to reduce the term loan.
Deal: 53953
105809 No No No No Origination 1997-03-31 35 20.0 16.0 1994-04-11 1994-10-12 1994-04-11 Revolver/Line >= 1 Yr. Working capital Background: Credit amends and restates a $38.5M agreement dated 10/10/91 and is also arranged for various affiliates. Pricing: (See grid). Overdue fee = 300 bps. Prepayments: Asset sales > $100,000, 100%. Assignments: Banks consent required. Assign. min. = $4M. Key Financial Ratios: Max. consol. effective leverage ratio decreasing from 1.5:1 to 1.4:1; min. consol. interest coverage ratio of 1.75:1; min. consol. debt service coverage ratio of 1.25:1. Pricing: As indicated thru 6/30/94; tied to above grid thereafter.
83591 No No No No Origination 1997-03-31 35 20.0 4.0 1994-04-11 1994-10-12 1994-04-11 Term Loan Working capital Background: Credit amends and restates a $38.5M agreement dated 10/10/91 and is also arranged for various affiliates. Pricing: (See grid). Overdue fee = 300 bps. Prepayments: Asset sales > $100,000, 100%. Assignments: Banks consent required. Assign. min. = $4M. Key Financial Ratios: Max. consol. effective leverage ratio decreasing from 1.5:1 to 1.4:1; min. consol. interest coverage ratio of 1.75:1; min. consol. debt service coverage ratio of 1.25:1. Pricing: As indicated thru 6/30/94; tied to above grid thereafter.

Although this is far from perfect in recording the life-cycle of the loan, it is not as sparse as I thought previously. Also, the frequency of renegotiation needs to be recalculated, with around 25% of the “Origination”s to be reclassified as “Amend/Restate”.

Tip 2: The correct way to recover loan path for a unique firm!

A thorough look into the DealScan dataset shows that the issue of incomplete loan path presented in Roberts (2015) may not be as severe as what he suggested. The huge amount of missing observations comes from the ignoring that the company has a different name, and so a different Borrower_Id, in the dataset. The Aeroflex Inc. is previously known as ARX Inc. (gvkey = 1056).

We can recover past observations from Borrower_Id = 31224 (rather than 8532). However, in order to recover the exact loan path and connects the evolution of each tranche under the same deal, we need to use variable Deal_Remark and extract textual information and match previous deals.

In addition, all observations after 2010 are under the name AEROFLEX HOLDING CORP. and you can access their 8-K filings.

s3.3c Will this affect my project?

However, this should not be an issue for my project.

  1. First, my focus is on the firm-level observations and the dependent variable in the first step is whether a renegotiation happens.

  2. Second, to identify an amendment/restatement/refinancing, I should use the Deal_Refinancing rather than the Origination variable. While the majority (60%) of tranche observations classified as Origination has “No” for all other identifiers, around 25% of tranche observations in those has “Yes” for Deal_Refinancing. This is exactly the case we saw in the example above. > updated

Show the code
# to identify different types of contracts which are defined as "Origination". 
DealScan_borrower %>% 
  filter(grepl(pattern = "Orig", x = Tranche_O_A)) %>% # only keep tranches classified as "Origination"
  group_by(Deal_Amended, Tranche_Amended, Deal_Refinancing, Tranche_Refinancing) %>% 
  summarise(n = n()) %>% # count the number of each types 
  ungroup() %>% 
  mutate(percentage = (n / sum(n))) %>% 
  gt() %>% 
  tab_header(title = "Table 2: WRDS DealScan Deal-Tranche Level Loan Events", 
             subtitle = "Subgroup: `Tranche_O_A` = Origination"
             ) %>% 
  tab_options(table.font.size = 11, heading.align = 'left' ) %>% 
  tab_style( # update the font size for table cells. 
    style = cell_text(size = px(11)),
    locations = cells_body()
  ) %>% 
  fmt_percent(columns = percentage, decimals = 2)
Table 2: WRDS DealScan Deal-Tranche Level Loan Events
Subgroup: `Tranche_O_A` = Origination
Deal_Amended Tranche_Amended Deal_Refinancing Tranche_Refinancing n percentage
No No No 240423 62.95%
No No No No 2573 0.67%
No No No Yes 2079 0.54%
No No Yes 68556 17.95%
No No Yes No 72 0.02%
No No Yes Yes 27318 7.15%
Yes No No 568 0.15%
Yes No No No 11 0.00%
Yes No No Yes 3 0.00%
Yes No Yes 450 0.12%
Yes No Yes Yes 82 0.02%
Yes Yes No 19375 5.07%
Yes Yes No No 544 0.14%
Yes Yes No Yes 233 0.06%
Yes Yes Yes 15319 4.01%
Yes Yes Yes No 28 0.01%
Yes Yes Yes Yes 4304 1.13%
Show the code
# to identify different types of contracts which are defined as "Amendment 1". 
DealScan_borrower %>% 
  filter(grepl(pattern = "Amendment", x = Tranche_O_A)) %>% # only keep tranches classified as "Origination"
  group_by(Deal_Amended, Tranche_Amended, Deal_Refinancing, Tranche_Refinancing) %>% 
  summarise(n = n()) %>% # count the number of each types 
  ungroup() %>% 
  mutate(percentage = (n / sum(n))) %>% 
  gt() %>% 
  tab_header(title = "Table 2b: WRDS DealScan Deal-Tranche Level Loan Events", 
             subtitle = "Subgroup: `Tranche_O_A` = Amendment(s)"
             ) %>% 
  tab_options(table.font.size = 11, heading.align = 'left' ) %>% 
  tab_style( # update the font size for table cells. 
    style = cell_text(size = px(11)),
    locations = cells_body()
  ) %>% 
  fmt_percent(columns = percentage, decimals = 2)
Table 2b: WRDS DealScan Deal-Tranche Level Loan Events
Subgroup: `Tranche_O_A` = Amendment(s)
Deal_Amended Tranche_Amended Deal_Refinancing Tranche_Refinancing n percentage
Yes No 4173 3.47%
Yes No No 24 0.02%
Yes No Yes 47 0.04%
Yes Yes 2507 2.09%
Yes Yes No 3 0.00%
Yes Yes Yes 826 0.69%
Yes Yes No 34180 28.44%
Yes Yes No No 911 0.76%
Yes Yes No Yes 2247 1.87%
Yes Yes Yes 52319 43.53%
Yes Yes Yes No 652 0.54%
Yes Yes Yes Yes 22294 18.55%
  1. Third, I won’t expect that renegotiations happen extremely frequency, not at each month. Thus, if some terms are changed, e.g. spreads and deal/tranche amounts, I can validate these changes from the balance sheet.
Show the code
dt.DealScan_Aeroflex <- DealScan_Aeroflex %>% 
    select(names(dt.Deal_Amend_Refin), Deal_Input_Date, Tranche_Type, Deal_Purpose) %>% 
    as_tibble() %>% 
    mutate(Tranche_O_A_round = replace_na(as.numeric(str_extract(string = Tranche_O_A, pattern = "\\d+$")) , replace = 0 ), 
           LPC_Deal_ID = paste("Deal: ", LPC_Deal_ID, sep = "")
    ) %>% 
    group_by(LPC_Deal_ID, LPC_Tranche_ID) %>% 
    arrange(Deal_Active_Date) %>% 
    # check whether there exists tranche amendment in the dataset 
    mutate(Amend_Flag_check = max(Tranche_O_A_round) > 0) %>% 
    ungroup() %>% 
  select(LPC_Deal_ID, LPC_Tranche_ID, Deal_Refinancing, Tranche_Amount, Tranche_Active_Date, Tranche_Type)  

ggplot(dt.DealScan_Aeroflex, aes(x = Tranche_Active_Date)) + 
  geom_bar(aes(fill = LPC_Deal_ID)) 

Show the code
DiagrammeR::grViz("digraph {
  graph [layout = dot, rankdir = TB]
  
  node [shape = rectangle]        
  rec1 [label = 'Deal: 128721'] 
  rec2 [label = 'Deal: 143473']
  rec3 [label = 'Deal: 42818']
  rec4 [label = 'Deal: 151556']
  
  # edge definitions with the node IDs
  rec1 -> rec2 -> rec3 -> rec4 
  
  }",
  height = 300)

A List for the following tasks: June 7, 2024


s3.4 Classify variable names

Here maps the group header id to names:
Variable Name Groups
header header_id
Borrower 1
Lender 3
Deal 6
Tranche 9
Secondary Pricing 12
Spread/Fee 14
Covenants 16
Financial 17
General 19
Dividends : 20
Voting Rights : 21
Borrowing Base 23
Option 25
Law Firm 27

This section aims to classify different variables into groups. This is used to prepare the subsequent analyses regarding covenants and terms in the contract.

Show the code
# LPC_def %>% head(30) %>% View()
LPC_def_class <- LPC_def %>% # the list of variables under each class. 
  filter(header_true == T) %>% 
  select(header = V1, header_id) %>% 
  left_join(LPC_def, by = "header_id") %>% 
  select(header, header_id, variable = V1) %>% 
  filter(header != variable) %>% 
  mutate(variable = clean_strings(variable, remove_char = "&|$") %>% # remove the "and" words in the variable. 
           str_replace(pattern = "sr", replacement = "senior"), # replace the word 'sr' to 'senior'.  
         unique_key_2 = 1:nrow(.)
         ) 

all_names <- as.data.table(str_replace_all(names(DealScan_borrower), pattern = "_", replacement = " ") %>% clean_strings() %>% str_replace(pattern = "sr", replacement = "senior")) 
all_names$unique_key_1 <- 1:length(names(DealScan_borrower))

## fuzzy matching for the non-matching items with constrained bars.  
fuzzy_result <- merge_plus(data1 = all_names, 
                          data2 = LPC_def_class,
                          by.x = "V1",
                          by.y = "variable", 
                          match_type = "fuzzy",  
                          fuzzy_settings = build_fuzzy_settings(maxDist = .1, nthread = 20),
                          unique_key_1 = "unique_key_1",
                          unique_key_2 = "unique_key_2")

cat("Results from fuzzy matching the names from LPC DealScan and WRDS DealScan: \n")

Results from fuzzy matching the names from LPC DealScan and WRDS DealScan:

Show the code
# fuzzy_result$match_evaluation
# fuzzy_result$matches
# fuzzy_result$matches %>% arrange(unique_key_1) %>% filter(grepl(pattern = "percentage", ignore.case = T, x = V1))
# fuzzy_result$data1_nomatch
# fuzzy_result$data2_nomatch # %>% filter(grepl(pattern = "deal", ignore.case = T, x = variable))

## fuzzy matching for the non-matching items with relaxed bars. 
fuzzy_result2 <- merge_plus(data1 = fuzzy_result$data1_nomatch, 
                          data2 = fuzzy_result$data2_nomatch,
                          by.x = "V1",
                          by.y = "variable", 
                          match_type = "fuzzy",  
                          fuzzy_settings = build_fuzzy_settings(maxDist = .25, nthread = 20),
                          unique_key_1 = "unique_key_1",
                          unique_key_2 = "unique_key_2")
# fuzzy_result2$matches
# fuzzy_result2$data1_nomatch
# fuzzy_result2$data2_nomatch %>% filter(header != "Lender ")

## hand match the remaining ones: 
manual_results <- fuzzy_result2$data1_nomatch %>% 
  mutate(header = c(rep("ID",3), "Spread/Fee"),
         header_id = c(rep(0, 3), 14) 
         )

## merge into one file > variable name ~ header class: 
dt.name_match <- rbind.data.frame(
  select(fuzzy_result$matches, unique_key_1, V1, header, header_id), 
  select(fuzzy_result2$matches, unique_key_1, V1, header, header_id), 
  select(manual_results, unique_key_1, V1, header, header_id)
) %>% arrange(unique_key_1) %>% 
  left_join(y = data.frame(orig_name = names(DealScan_borrower), unique_key_1 = 1:length(names(DealScan_borrower))), by = "unique_key_1") %>% 
  mutate(group_header = paste(header_id, header, sep = ": ")) %>% 
  select(unique_key_1, orig_name, group_header) 

dt.name_match %>% 
  group_by(group_header) %>% 
  summarise(Variables = paste(orig_name, collapse = ", "), 
            Num_Vars = length(orig_name) # number of variables in the group 
            ) %>%
  ungroup() %>% 
  arrange(str_extract(group_header, pattern = "\\d+") %>% as.numeric()) %>% 
  gt() %>% 
  # tab_options(table.font.size = 10, heading.align = 'left' ) %>%
  tab_style( # update the font size for table cells. 
    style = cell_text(size = px(13)),
    locations = cells_body()
  ) %>% 
  cols_width(ends_with("Variables") ~ px(1000)) 
group_header Variables Num_Vars
0: ID Legal_Entity_ID_LEI, LPC_Deal_ID, LPC_Tranche_ID 3
1: Borrower Borrower_Name, Borrower_Id, Additional_Borrowers, Ticker, Perm_ID, City, State_Province, Zip, Country, Region, Sales_Size, Broad_Industry_Group, Major_Industry_Group, SIC_Code, NAIC, Borrower_Type, Parent, Parent_Ticker, Sponsor, Guarantor, Target, Organization_Type, Senior_Debt_to_EBITDA, Total_Debt_to_EBITDA, Company_Url, Sponsored 26
3: Lender Lead_Arranger, Number_of_Lead_Arrangers, Bookrunner, Number_of_Bookrunners, Top_Tier_Arranger, Number_of_Top_Tier_Arrangers, Lead_Left, Number_of_Lead_Left, Arranger, Number_of_Arrangers, Co_Arranger, Number_of_Co_Arrangers, Agent, Number_of_Agents, Lead_Manager, Number_of_Lead_Managers 16
6: Deal Deal_PermID, Deal_Amount, Deal_Amount_Converted, Deal_Active_Date, Deal_Currency, Deal_Input_Date, Deal_Purpose, Project_Finance, Phase, Deal_Active, Deal_Refinancing, Purpose_Remark, Deal_Remark, Deal_Amended, Sales_Size_at_Close 15
9: Tranche Tranche_PermID, Tranche_Type, Tranche_Active_Date, Tranche_Maturity_Date, Tranche_Amount, League_Table_Amount, League_Table_Amount_Converted, _100_percent_Vote, Tranche_O_A, Tranche_Amount_Converted, Tranche_Currency, Tranche_CUSIP, Market_Segment, Market_Of_Syndication, Country_Of_Syndication, League_Table_Credit, League_Table_Tranche_Date, Seniority_Type, Secured, Repayment_Type, Repayment_Schedule, Collateral_Security_Type, Distribution_Method, Tranche_Remark, Primary_Purpose, Secondary_Purpose, Tertiary_Purpose, Tranche_Refinancing, Project_Finance_Sponsor, Tranche_Active, Tenor_Maturity, Closed_Date, Completion_Date, Mandated_Date, Launch_Date, Average_Life, Multi_Currency_Tranche, Borrower_Consent, Agent_Consent, Assignment_Minimum, Assignment_Fee, New_Money, New_Money_Converted, Amend_Extend_Flag, Tranche_Amended, Currency_Onshore_Offshore, Pro_Rata 47
12: Secondary Pricing LIN 1
14: Spread/Fee Margin_bps 1
14: Spread/Fee Base_Reference_Rate, All_Base_Rate_Spread_Margin, Base_Rate_Margin_bps, Floor_bps, Original_Issue_Discount, Call_Protection, Call_Protection_Text, All_In_Spread_Drawn_bps, All_in_Spread_Undrawn_bps, Annual_Fee_bps, Commitment_Fee_bps, Letter_Of_Credit_Fee_bps, Upfront_Fee_bps, All_in_Fee_Asia_only, Base_Rate_Comment, Repayment_Comment, Performance_Pricing, Performance_Pricing_Grid, Performance_Pricing_Remark, Cancellation_Fee_bps, Documentary_Issuing_Fee_bps, Documentary_LC_Fee_bps, Tiered_Upfront_Fee, Utilization_Fee_bps, All_Fees 25
17: Financial Covenants, Max_Leverage_Ratio, Max_Debt_to_Cash_Flow, Max_Sr_Debt_to_Cash_Flow, Tangible_Net_Worth, Net_Worth, Min_Fixed_Charge_Coverage_Ratio, Min_Debt_Service_Coverage_Ratio, Min_Interest_Coverage_Ratio, Min_Cash_Interest_Coverage_Ratio, Max_Debt_to_Tangible_Net_Worth, Max_Debt_to_Equity_Ratio, Min_Current_Ratio, Max_Loan_to_Value_Ratio, All_Covenants_Financial, Covenant_Comment 16
19: General Excess_CF_Sweep, Asset_Sales_Sweep, Material_Restriction, Debt_Issue_Sweep, Equity_Issue_Sweep, Insurance_Proceeds_Sweep 6
20: Dividends : Percentage_of_Net_Income 1
21: Voting Rights : Collateral_Release, Terms_Changes, EBITDA_Initial_Amount_USD, EBITDA_Final_Amount_USD, CAPEX_Initial_USD, CAPEX_Final_USD, All_Covenants_General 7
23: Borrowing Base Accounts_Receivable, Oil_Gas_Reserves, Acc_Rec_Domestic, Acc_Rec_Foreign, Inventory, Inv_Raw_Material, Inv_Finished_Goods, Inv_Work_in_Progress, Cash_Cash_Equivalents, Property_Plant_Equipment, Marketable_Securities, Eligible_Property_Value 12
25: Option Letter_Of_Credit, Swingline, Multi_Currency, Bid_Option, Bankers_Acceptance, Foreign_Exchange 6
27: Law Firm Law_Firm_Name, Law_Firm_Borrower_Primary, Law_Firm_Borrower_Other 3
Show the code
save(dt.name_match, file = "DealScan_name_match.RData")

All variables containing ID are classified into the "ID" group.

The majority of the covenants are in group 17:Financial and it records the changes in the financial covenants. The group 19: General also includes many restrictions on loan repayment policy.

Show the code
name_covenants_17 <- dt.name_match %>% 
  filter(grepl(pattern = "17", x = group_header)) %>% 
  select(unique_key_1) %>% unlist()

name_covenants_19 <- dt.name_match %>% 
  filter(grepl(pattern = "19", x = group_header)) %>% 
  select(unique_key_1) %>% unlist()

as_tibble(DealScan_borrower) %>% 
  select(names(DealScan_borrower)[c(grep(pattern = "LPC|_O_A", x = names(DealScan_borrower), value = F), 
                                    grep(pattern = "Amended|Refinan", x = names(DealScan_borrower), value = F), 
                                    name_covenants_17, name_covenants_19)]) %>% 
  filter(nchar(Covenant_Comment) > 0) %>% 
  head(30) %>% 
  gt() %>% 
  tab_header(title = "Sample Preview for Financial Covenants") %>% 
  tab_options(table.font.size = 13, heading.align = 'left' ) %>% 
  tab_style( # update the font size for table cells. 
    style = cell_text(size = px(12)),
    locations = cells_body()
  ) %>% 
  tab_style(
    style = list(
      cell_fill(color = "#F9E3D6"),
      cell_text(style = "normal", align = "center")
      ),
    locations = cells_body(
      columns = starts_with("LPC_")
    )
  ) %>% 
  tab_style(
    style = list(
      cell_fill(color = "lightcyan"),
      cell_text(style = "normal", align = "center")
      ),
    locations = cells_body(
      columns = starts_with(c("Tranche", "Deal", "Amend"))
    )
  ) %>% 
  tab_style(
    style = list(
      cell_fill(color = "lightyellow"),
      cell_text(style = "normal", align = "center", color = "red")
      ),
    locations = cells_body(
      columns = contains(c("Coven"))
    )
  ) %>% 
  as_raw_html() %>% 
  htmltools::HTML() %>% 
  htmltools::div(style = "height: 1000px; overflow-y: auto;") %>% 
  htmltools::browsable() 
Sample Preview for Financial Covenants
LPC_Deal_ID LPC_Tranche_ID Tranche_O_A Deal_Refinancing Deal_Amended Tranche_Refinancing Tranche_Amended Covenants Max_Leverage_Ratio Max_Debt_to_Cash_Flow Max_Sr_Debt_to_Cash_Flow Tangible_Net_Worth Net_Worth Min_Fixed_Charge_Coverage_Ratio Min_Debt_Service_Coverage_Ratio Min_Interest_Coverage_Ratio Min_Cash_Interest_Coverage_Ratio Max_Debt_to_Tangible_Net_Worth Max_Debt_to_Equity_Ratio Min_Current_Ratio Max_Loan_to_Value_Ratio All_Covenants_Financial Covenant_Comment Excess_CF_Sweep Asset_Sales_Sweep Material_Restriction Debt_Issue_Sweep Equity_Issue_Sweep Insurance_Proceeds_Sweep
88945 134697 Origination No No No No NA NA Standard financial covenants including cross default, negative pledge NA NA No NA NA NA
45832 211755 Origination No No No Yes 6.0e+08 NA Tangible Net Worth: 6e+008 Total borrowings to tangible net worth shall not exceed 1.5 times; total liabilities to tangible net worth shall not exceed 2 times; tangible net worth shall be not less than M$600m NA NA No NA NA NA
179048 215589 Origination Yes No No Yes 0.65:1 4.5e+08 NA 2.5:1 Max. Leverage Ratio: Value is 0.65, Tangible Net Worth: 4.5e+008, Min. Interest Coverage Ratio: Value is 2.50 Minimum liquidity = $25M; required if > 50% of vessels are subject to time charters with remaining term <= one year. Minimum interest and principal coverage ratio of 1.1:1. NA 100 Yes NA NA 100
64153 117680 Origination Yes No No No NA NA Covenants: Rolling 12 months ICR > 1.50x NA NA No NA NA NA
64153 95407 Origination Yes No No No NA NA Covenants: Rolling 12 months ICR > 1.50x NA NA No NA NA NA
155394 183441 Origination Yes No No No NA NA Covenants include max. debt to EBITDA, interest cover and tangible net worth. NA NA No NA NA NA
155394 242738 Origination Yes No No No NA NA Covenants include max. debt to EBITDA, interest cover and tangible net worth. NA NA No NA NA NA
2987 54057 Origination Yes No No Yes 0.68:1 NA 1.5e+09 2:1 Max. Leverage Ratio: Value is 0.68, Net Worth: 1.5e+009, Min. Interest Coverage Ratio: Value is 2.00 Min. net worth = $1.5B plus 25% of consol. net income as of 01/01/2002. NA NA No NA NA NA
17943 12625 Origination Yes No No Yes NA 8.0e+08 1.8:1 Net Worth: 8e+008, Min. Interest Coverage Ratio: Value is 1.80 Indicated consolidated net worth applies thru 3/31/03, decreases to EUR 500M thru 3/31/04. NA NA Yes NA NA NA
4946 16223 Origination Yes No No Yes Decreasing from 8:1 to 3.6:1 NA NA Increasing from 1.2:1 to 2.5:1 Max. Debt to Cash Flow: Decreasing from 8.00 to 3.60, Min. Interest Coverage Ratio: Increasing from 1.20 to 2.50 Min. consolidated net worth = EUR1.4B at 3/31/04, fluctuating between EUR850M to EUR1.15B thereafter. NA NA No NA NA NA
4946 56194 Origination Yes No No Yes Decreasing from 8:1 to 3.6:1 NA NA Increasing from 1.2:1 to 2.5:1 Max. Debt to Cash Flow: Decreasing from 8.00 to 3.60, Min. Interest Coverage Ratio: Increasing from 1.20 to 2.50 Min. consolidated net worth = EUR1.4B at 3/31/04, fluctuating between EUR850M to EUR1.15B thereafter. NA NA No NA NA NA
5296 56208 Origination No No No Yes NA 8.0e+08 Increasing from 1.8:1 to 6:1 Net Worth: 8e+008, Min. Interest Coverage Ratio: Increasing from 1.80 to 6.00 Indicated consolidated net worth fluctuates between EUR 800M and EUR 500M. NA NA Yes NA NA NA
5296 56335 Origination No No No Yes NA 8.0e+08 Increasing from 1.8:1 to 6:1 Net Worth: 8e+008, Min. Interest Coverage Ratio: Increasing from 1.80 to 6.00 Indicated consolidated net worth fluctuates between EUR 800M and EUR 500M. NA NA Yes NA NA NA
5260 14653 Origination No No No Yes NA NA Decreasing from 3.5:1 to 2.5:1 Increasing from 3:1 to 4:1 Min. Debt Service Coverage Ratio: Decreasing from 3.50 to 2.50, Min. Interest Coverage Ratio: Increasing from 3.00 to 4.00 Carries two covenants: The interest coverage ratio must be three times until December 31 2004, from June 30, 2005 until December 31, 2005 it must be 3.5 times, after which time it must be four times. Total net debt coverage ratio must be no higher 3.5 times, until June 30, 2005. From December 31, 2005 until June 39, 2007 it must be three times. After December 31, 2007 it must be four times. NA NA No NA NA NA
5260 14654 Origination No No No Yes NA NA Decreasing from 3.5:1 to 2.5:1 Increasing from 3:1 to 4:1 Min. Debt Service Coverage Ratio: Decreasing from 3.50 to 2.50, Min. Interest Coverage Ratio: Increasing from 3.00 to 4.00 Carries two covenants: The interest coverage ratio must be three times until December 31 2004, from June 30, 2005 until December 31, 2005 it must be 3.5 times, after which time it must be four times. Total net debt coverage ratio must be no higher 3.5 times, until June 30, 2005. From December 31, 2005 until June 39, 2007 it must be three times. After December 31, 2007 it must be four times. NA NA No NA NA NA
5261 14650 Origination No No No Yes NA NA Decreasing from 2.75:1 to 2.25:1 Increasing from 3:1 to 4:1 Min. Debt Service Coverage Ratio: Decreasing from 2.75 to 2.25, Min. Interest Coverage Ratio: Increasing from 3.00 to 4.00 Carries two covenants: The interest coverage ratio must be three times until June 2005, and four times after December 2005. The total net debt coverage ratio must be no higher than 2.75 times until June 2004, must be down to 2.5 times by December 2004, and down further to 2.25 times by December 2005. NA NA No NA NA NA
5261 14651 Origination No No No Yes NA NA Decreasing from 2.75:1 to 2.25:1 Increasing from 3:1 to 4:1 Min. Debt Service Coverage Ratio: Decreasing from 2.75 to 2.25, Min. Interest Coverage Ratio: Increasing from 3.00 to 4.00 Carries two covenants: The interest coverage ratio must be three times until June 2005, and four times after December 2005. The total net debt coverage ratio must be no higher than 2.75 times until June 2004, must be down to 2.5 times by December 2004, and down further to 2.25 times by December 2005. NA NA No NA NA NA
4229 14638 Origination Yes No No No NA NA Net Debt: Annualised EBITDA not exceeding 4x. NA NA No NA NA NA
4229 14639 Origination Yes No No No NA NA Net Debt: Annualised EBITDA not exceeding 4x. NA NA No NA NA NA
4229 14640 Origination Yes No No No NA NA Net Debt: Annualised EBITDA not exceeding 4x. NA NA No NA NA NA
4290 14755 Origination Yes No No No NA NA Deal has no covenants. NA NA No NA NA NA
5686 59146 Origination Yes No No No NA NA A minimum net worth of EUR5.5B, a maximum gearing of 1.2:1 or 120%. NA NA No NA NA NA
162655 248891 Origination No No No Yes Decreasing from 0.75:1 to 0.7:1 NA NA Increasing from 1.6:1 to 1.8:1 Max. Leverage Ratio: Decreasing from 0.75 to 0.70, Min. Interest Coverage Ratio: Increasing from 1.60 to 1.80 If extension option applies, min. initial EBITDA = $2.7B and min. final EBITDA = $3.2B. NA NA Yes 100 100 NA
16522 40264 Origination Yes No No No NA NA Covenants: Rolling 12 month ICR > 1.20x NA NA No NA NA NA
16522 40265 Origination Yes No No No NA NA Covenants: Rolling 12 month ICR > 1.20x NA NA No NA NA NA
166621 252405 Origination No No No No NA NA Negative pledge, restriction of sale of material assets, shareholders covenants NA NA No NA NA NA
76957 111400 Origination No No No No NA NA Put option if government ceases to own more than 50% of the issuer NA NA No NA NA NA
89765 168065 Origination No No No No NA NA Joint and several guarantee from Evergreen International SA and personal guarantee of Chang Yung Fa, president of Evergreen NA NA No NA NA NA
211 52290 Origination Yes No No Yes 0.95:1 NA NA Increasing from 0.65:1 to 2:1 1.5:1 Max. Leverage Ratio: Value is 0.95, Min. Interest Coverage Ratio: Increasing from 0.65 to 2.00, Min. Current Ratio: Value is 1.50 Indicated leverage ratio is debt to equity + sub. debt. 70 100 Yes 0 100 0
211 52488 Origination Yes No No Yes 0.95:1 NA NA Increasing from 0.65:1 to 2:1 1.5:1 Max. Leverage Ratio: Value is 0.95, Min. Interest Coverage Ratio: Increasing from 0.65 to 2.00, Min. Current Ratio: Value is 1.50 Indicated leverage ratio is debt to equity + sub. debt. 70 100 Yes 0 100 0

Some remarks:

  1. The variable Covenants is a flag indicator for whether financial covenants are included in the contract.
  2. Relating to Section s3.2/s3.3c, a renegotiation can be identified as having either Tranche_O_A \not= Origination OR Deal_Refinancing = Yes.
  3. 6-K rather than 8-K filing is an SEC filing submitted to the U.S. Securities and Exchange Commission used by certain foreign private issuers to provide information that is: Required to be made public in the country of its domicile. Filed with and made public by a foreign stock exchange on which its securities are traded.
  4. Use LPC_Tranche_ID = 215589 as an example: its 6-K filing can be found here.
    • an interesting point is that at the start of the document, it states “… AS AMENDED AND RESTATED …”. Thus, this loan is renegotiated.
    • item 5 “REPAYMENT” and sub-item 5.1: repayment and the conditions for rolling over the loan.
    • item 6 “PREPAYMENT AND CANCELLATION”: voluntary pre-payment is allowed.
    • sub-item 17.8 “Testing of Financial Covenants”: specify the testing frequencies of each covenant.

s3.5 Covenants Preview

Look into the type of covenants and still use the Aeroflex Inc. as the example. I can also compare to the information presented in Roberts (2015) to cross-validate.

Show the code
# DealScan_Aeroflex %>% names()

DealScan_Aeroflex %>% 
  select(names(dt.Deal_Amend_Refin), Deal_Input_Date, Tranche_Type, Deal_Purpose, Phase, grep(pattern = "Remark", x = names(.), value = T)) %>%
  as_tibble() %>% 
  mutate(Tranche_O_A_round = replace_na(as.numeric(str_extract(string = Tranche_O_A, pattern = "\\d+$")) , replace = 0 ), 
         LPC_Deal_ID = paste("Deal: ", LPC_Deal_ID, sep = "")
         ) %>% 
  group_by(LPC_Deal_ID, LPC_Tranche_ID) %>% 
  arrange(Deal_Active_Date) %>% 
  # check whether there exists tranche amendment in the dataset 
  mutate(Amend_Flag_check = max(Tranche_O_A_round) > 0) %>% 
  ungroup() %>% 
  rename_with(~ str_replace(string = .x, pattern = "_", replacement = "\n")) %>%
  gt(id = 'table_id', groupname_col = "LPC\nDeal_ID") %>% 
  # cols_label(fn = ~ str_replace(string = ., pattern = "_", replacement = "\n") ) %>% 
  tab_header(title = "Table 2. Panel B: Aeroflex Inc. Deal-Tranche Level Loan Path") %>% 
  tab_options(table.font.size = 10, heading.align = 'left' ) %>% 
  tab_style( # update the font size for table cells. 
    style = cell_text(size = px(10)),
    locations = cells_body()
  ) %>% 
  tab_style(
    style = cell_text(style = "italic", color = 'red'), 
    locations = cells_body(
      columns = "LPC\nTranche_ID", 
      rows =  `Amend\nFlag_check` > 0
    )
  ) %>% 
  tab_style(
    style = cell_text(color = "red"), 
    locations = cells_column_labels(
      columns = contains("Remark") 
    )
  ) %>% 
  cols_width(ends_with("Remark") ~ px(300)) %>% 
  cols_hide(columns = c("Tranche\nO_A_round", "Amend\nFlag_check") ) %>%  # hide columns 
  as_raw_html() %>% 
  htmltools::HTML() %>% 
  htmltools::div(style = "height: 1000px; overflow-y: auto;") %>% 
  htmltools::browsable() 
DealScan_Aeroflex %>% 
  select(grep(pattern = "LPC_", x = names(.)),
         grep(pattern = "Amended|Refin", x = names(.)), 
         grep(pattern = "O_A", x = names(.)), 
         Deal_Amount, Tranche_Amount, 
         Deal_Active_Date, Tranche_Active_Date,
         names(.)[name_covenants_17] # covenants-related names 
         ) %>%
  as_tibble() %>% 
  mutate(Tranche_O_A_round = replace_na(as.numeric(str_extract(string = Tranche_O_A, pattern = "\\d+$")) , replace = 0 ), 
         LPC_Deal_ID = paste("Deal: ", LPC_Deal_ID, sep = "")
         ) %>% 
  group_by(LPC_Deal_ID, LPC_Tranche_ID) %>% 
  arrange(Deal_Active_Date) %>% 
  # check whether there exists tranche amendment in the dataset 
  mutate(Amend_Flag_check = max(Tranche_O_A_round) > 0) %>% 
  ungroup() %>% 
  rename_with(~ str_replace(string = .x, pattern = "_", replacement = "\n")) %>%
  gt(id = 'table_id', groupname_col = "LPC\nDeal_ID") %>% 
  # cols_label(fn = ~ str_replace(string = ., pattern = "_", replacement = "\n") ) %>% 
  tab_header(title = "Table 2. Panel B: Aeroflex Inc. Covenants - Financial and General") %>% 
  tab_options(table.font.size = 10, heading.align = 'left' ) %>% 
  tab_style( # update the font size for table cells. 
    style = cell_text(size = px(10)),
    locations = cells_body()
  ) %>% 
  tab_style(
    style = cell_text(style = "italic", color = 'red'), 
    locations = cells_body(
      columns = "LPC\nTranche_ID", 
      rows =  `Amend\nFlag_check` > 0
    )
  ) %>% 
  cols_hide(columns = c("Tranche\nO_A_round", "Amend\nFlag_check") ) %>%  # hide columns 
  tab_style(
    style = list(
      cell_fill(color = "lightyellow"),
      cell_text(style = "normal", align = "center", color = "red")
      ),
    locations = cells_body(
      columns = contains(c("Coven"))
    )
  ) %>% 
  tab_style(
    style = cell_text(color = "red"), 
    locations = cells_column_labels(
      columns = contains("Coven") 
    )
  ) %>% 
  as_raw_html() %>% # code for "vertical scroller"
  htmltools::HTML() %>% 
  htmltools::div(style = "height: 1000px; overflow-y: auto;") %>% 
  htmltools::browsable() 
Table 2. Panel B: Aeroflex Inc. Deal-Tranche Level Loan Path
LPC Tranche_ID Deal Amended Amend Extend_Flag Tranche Amended Deal Refinancing Tranche O_A Tranche Refinancing Tranche Maturity_Date Tenor Maturity Deal Amount Tranche Amount Deal Active_Date Deal Input_Date Tranche Active_Date Tranche Type Deal Purpose Phase Purpose Remark Deal Remark Tranche Remark Performance Pricing_Remark
Deal: 128721
224767 No No No Yes Origination 2000-09-30 54 20.00 4.00 1996-03-15 1998-09-09 1996-03-15 Term Loan General Purpose/Refinance Closed Background: Credit amends and restates a $8M agreement dated 4/11/94. Co. was formerly known as ARX Inc. Credit is also arranged for a number of subsids and backs the acquisition of MIC Technology. Pricing: (See grid). Pricing is as indicated thru 6/30/96, tied to co.'s debt to EBITDA ratio thereafter.
273100 No No No Yes Origination 1999-03-31 36 20.00 16.00 1996-03-15 1998-09-09 1996-03-15 Revolver/Line >= 1 Yr. General Purpose/Refinance Closed Background: Credit amends and restates a $8M agreement dated 4/11/94. Co. was formerly known as ARX Inc. Credit is also arranged for a number of subsids and backs the acquisition of MIC Technology. Pricing: (See grid). Option: $2M LC sublimit. Security: Borrow. base = 80% of elig. receivs. plus 40% of elig. invent. Pricing is as indicated thru 6/30/96, tied to co.'s debt to EBITDA ratio thereafter.
Deal: 143473
185023 No No No Yes Origination 2002-12-31 46 47.48 20.00 1999-02-25 1999-03-10 1999-02-25 Term Loan General Purpose/Refinance Closed Background: Credit amends and restates a $20M agreement dated 3/15/96. Credit is also arranged for several subsids. Pricing: (See grid). Default rate = +300 bps. Key Financial Ratios: Max. consol. sr. funded debt to EBITDA ratio of 2.75:1; max. consol. unsub. debt to consol. effective net worth ratio of 1.5:1; min. debt service ratio of 1:1; min. quick ratio of 1:1. Pricing is as indicated thru. 9/30/99, tied to co.'s consol. sr. funded debt to EBITDA ratio thereafter.
186036 No No No Yes Origination 2002-12-31 46 47.48 23.00 1999-02-25 1999-03-10 1999-02-25 Revolver/Line >= 1 Yr. General Purpose/Refinance Closed Background: Credit amends and restates a $20M agreement dated 3/15/96. Credit is also arranged for several subsids. Pricing: (See grid). Default rate = +300 bps. Key Financial Ratios: Max. consol. sr. funded debt to EBITDA ratio of 2.75:1; max. consol. unsub. debt to consol. effective net worth ratio of 1.5:1; min. debt service ratio of 1:1; min. quick ratio of 1:1. Min. SBLC fee = the greater of 50 bps and $1K. Option: $3M LC sublimit. Security: Borrow. base = 85% of elig. receivs. plus 25-85% of elig. invent. Pricing is as indicated thru. 9/30/99, tied to co.'s consol. sr. funded debt to EBITDA ratio thereafter.
278055 No No No Yes Origination 2008-04-30 110 47.48 4.48 1999-02-25 1999-03-10 1999-02-25 Revolver/Line >= 1 Yr. General Purpose/Refinance Closed Background: Credit amends and restates a $20M agreement dated 3/15/96. Credit is also arranged for several subsids. Pricing: (See grid). Default rate = +300 bps. Key Financial Ratios: Max. consol. sr. funded debt to EBITDA ratio of 2.75:1; max. consol. unsub. debt to consol. effective net worth ratio of 1.5:1; min. debt service ratio of 1:1; min. quick ratio of 1:1. Reductions: 109 mthly. reductions of $26,222.22 beg. 2/26/99; with a final payment of $1.626M at maturity.
Deal: 42818
83949 No No No Yes Origination 2008-04-30 62 53.23 3.23 2003-02-14 2003-02-28 2003-02-14 Term Loan Working capital Closed Background: Credit amends and restates a $47.484M agreement dated 02/25/99 and is also arranged for several subsids. Pricing: (See grid). Default rate = applic. P+200. Security: Credit includes a springing lien. Key Financial Ratios: Max. consolidated senior funded debt to consolidated adjusted EBITDA ratio of 2.75:1; min. consolidated fixed charged coverage ratio of 1.5:1; min. quick ratio of 1:1 anytime obligations are not secured by the springing collateral, 0.85:1 otherwise. Facility is a mortgage facility. Pricing: Is not grid-based.
98794 No No No Yes Origination 2007-02-14 48 53.23 50.00 2003-02-14 2003-02-28 2003-02-14 Revolver/Line >= 1 Yr. Working capital Closed Background: Credit amends and restates a $47.484M agreement dated 02/25/99 and is also arranged for several subsids. Pricing: (See grid). Default rate = applic. P+200. Security: Credit includes a springing lien. Key Financial Ratios: Max. consolidated senior funded debt to consolidated adjusted EBITDA ratio of 2.75:1; min. consolidated fixed charged coverage ratio of 1.5:1; min. quick ratio of 1:1 anytime obligations are not secured by the springing collateral, 0.85:1 otherwise. Option: $10M LC sublimit. Pricing is as indicated initially, tied to co.'s consolidated senior funded debt to consolidated adjusted EBITDA ratio thereafter. Min. SBLC fee = the greater of $1K or 50% of SBLC face value.
Deal: 151556
197238 Yes No Yes Yes Origination 2011-03-21 60 100.00 100.00 2006-03-21 2006-03-22 2006-03-21 Revolver/Line >= 1 Yr. Working capital Closed Credit refinances company's $53.23M agreement dated 2/14/03. Credit may be denominated in Euros and British Pounds and may be increased up to $150M. J.P. Morgan Securities Inc. acted as lead arranger and sole bookrunner. Law Firm: Kramer Wactlar & Liberman PC (for borrowers). Pricing: (See grid). Overdue rate = +200 bps. Pricing is tied to company's consolidated total debt to consolidated EBITDA ratio thereafter. Company pays a SBLC fee = applicable LIBOR margin and an issuance fee of 25 bps.
197238 Yes No Yes Yes Amendment 1 2011-03-21 55 100.00 100.00 2006-03-21 2006-08-28 2006-08-28 Revolver/Line >= 1 Yr. Working capital Closed Pricing is tied to company's consolidated total debt to consolidated EBITDA ratio thereafter. Company pays a SBLC fee = applicable LIBOR margin and an issuance fee of 25 bps.
Deal: 57853
108980 No No No No Origination NA NA 780.00 245.00 2007-04-13 2007-03-30 2007-04-13 Term Loan Leveraged Buyout Cancelled Credit backs buyout of co. by General Atlantic and Francisco Partners. JP Morgan and Lehman Brothers are leading the deal. This is a second-lien facility.
230824 No No No No Origination NA NA 780.00 475.00 2007-04-13 2007-03-30 2007-04-13 Term Loan B Leveraged Buyout Cancelled Credit backs buyout of co. by General Atlantic and Francisco Partners. JP Morgan and Lehman Brothers are leading the deal.
98546 No No No No Origination NA NA 780.00 60.00 2007-04-13 2007-03-30 2007-04-13 Revolver/Line >= 1 Yr. Leveraged Buyout Cancelled Credit backs buyout of co. by General Atlantic and Francisco Partners. JP Morgan and Lehman Brothers are leading the deal.
Deal: 16163
35910 No No No Yes Origination 2013-08-15 72 575.00 50.00 2007-08-15 2007-06-25 2007-08-15 Revolver/Line >= 1 Yr. Leveraged Buyout Closed Credit backs company's LBO by Veritas Capital's and refinances company's 5-year RC facility agreement dated 3/21/06 and its fifth amended and restated loan dated 2/14/03. Credit is arranged for AX Acquisition Corp. Credit may be increased up to $650M by increasing RC facility or thru additional TL facilities, if company's consolidated senior secured debt to consolidated adjusted EBITDA ratio <= 3.75:1. Credit comes in conjunction with $225M senior unsecured TL loan agreement and $120M subordinated unsecured TL agreement (which were cancelled 8/16/07) and $272M of equity ($172M by Golden Gate Capital and $100M by GS Direct). Goldman Sachs Credit Partners LP also acted as sole lead arranger and sole bookrunner. Law Firms: Schulte, Roth & Zabel LLP (for borrower); Latham & Watkins LLP (for lender). Pricing: (See grid). Default rate = +200 bps. Interest Rate Protection: Company must enter, within 60 days of closing, into agreements hedging >= 50% of the aggregate principal amount of the total debt outstanding for at least three years. Pricing is as indicated initially, tied to company's consolidated senior secured debt to consolidated adjusted EBITDA ratio thereafter. Company pays a SBLC fee = applicable LIBOR margin and an issuance fee of 25 bps. Co. pays a 50 bps commitment fee when ratio > 3:1, 37.5 bps when ratio >2:1 but < 3:1, and 25 bps when ratio <2:1.
35911 No No No Yes Origination 2014-08-15 84 575.00 400.00 2007-08-15 2007-06-25 2007-08-15 Term Loan B Leveraged Buyout Closed Credit backs company's LBO by Veritas Capital's and refinances company's 5-year RC facility agreement dated 3/21/06 and its fifth amended and restated loan dated 2/14/03. Credit is arranged for AX Acquisition Corp. Credit may be increased up to $650M by increasing RC facility or thru additional TL facilities, if company's consolidated senior secured debt to consolidated adjusted EBITDA ratio <= 3.75:1. Credit comes in conjunction with $225M senior unsecured TL loan agreement and $120M subordinated unsecured TL agreement (which were cancelled 8/16/07) and $272M of equity ($172M by Golden Gate Capital and $100M by GS Direct). Goldman Sachs Credit Partners LP also acted as sole lead arranger and sole bookrunner. Law Firms: Schulte, Roth & Zabel LLP (for borrower); Latham & Watkins LLP (for lender). Pricing: (See grid). Default rate = +200 bps. Interest Rate Protection: Company must enter, within 60 days of closing, into agreements hedging >= 50% of the aggregate principal amount of the total debt outstanding for at least three years. Facility is a first-out loan which carries a call protection of 101. Pricing is as indicated initially, tied to company's consolidated senior secured debt to consolidated adjusted EBITDA ratio thereafter.
36226 No No No Yes Origination 2014-08-15 84 575.00 125.00 2007-08-15 2007-06-25 2007-08-15 Term Loan C Leveraged Buyout Closed Credit backs company's LBO by Veritas Capital's and refinances company's 5-year RC facility agreement dated 3/21/06 and its fifth amended and restated loan dated 2/14/03. Credit is arranged for AX Acquisition Corp. Credit may be increased up to $650M by increasing RC facility or thru additional TL facilities, if company's consolidated senior secured debt to consolidated adjusted EBITDA ratio <= 3.75:1. Credit comes in conjunction with $225M senior unsecured TL loan agreement and $120M subordinated unsecured TL agreement (which were cancelled 8/16/07) and $272M of equity ($172M by Golden Gate Capital and $100M by GS Direct). Goldman Sachs Credit Partners LP also acted as sole lead arranger and sole bookrunner. Law Firms: Schulte, Roth & Zabel LLP (for borrower); Latham & Watkins LLP (for lender). Pricing: (See grid). Default rate = +200 bps. Interest Rate Protection: Company must enter, within 60 days of closing, into agreements hedging >= 50% of the aggregate principal amount of the total debt outstanding for at least three years. Facility is a first-loss loan which carries a call protection of 102 and 101. Pricing is as indicated initially, tied to company's consolidated senior secured debt to consolidated adjusted EBITDA ratio thereafter.
Deal: 16164
43063 Yes No Yes Yes Origination Yes 2016-12-31 67 669.12 75.00 2011-05-09 2011-04-27 2011-05-09 Revolver/Line >= 1 Yr. General Purpose Closed JP Morgan is leading the deal. LIBOR floor = 1.25%. OID = 99.5. Price talk: LIB+325-350.
43063 Yes No Yes Yes Amendment 1 Yes 2016-12-31 55 669.12 75.00 2011-05-09 2012-05-25 2012-05-25 Revolver/Line >= 1 Yr. General Purpose Closed
43063 Yes No Yes Yes Amendment 2 Yes 2017-11-28 54 669.12 57.12 2011-05-09 2013-05-14 2013-05-28 Revolver/Line >= 1 Yr. General Purpose Closed Credit will be used to refinance co.'s existing loan. JP Morgan led the deal. Prior to close, facility was decreased from $75M.
43064 Yes No Yes Yes Origination Yes 2018-12-31 91 669.12 725.00 2011-05-09 2011-04-27 2011-05-09 Term Loan B General Purpose Closed JP Morgan is leading the deal. LIBOR floor = 1.25%. OID = 99.5. Pricing: LIB+300 (from initial talk of LIB+325-350). Facility has 101 soft call protection.
43064 Yes No Yes Yes Amendment 1 Yes 2018-12-31 79 669.12 725.00 2011-05-09 2012-05-25 2012-05-25 Term Loan B General Purpose Closed Pricing is as indicated initially, tied to the co.'s total debt to EBITDA ratio thereafter.
43064 Yes No Yes Yes Amendment 2 Yes 2019-11-28 78 669.12 612.00 2011-05-09 2013-05-14 2013-05-28 Term Loan B General Purpose Closed Credit will be used to refinance co.'s existing loan. JP Morgan led the deal. Prior to close, facility was increased by $6M to $612M. Pricing: LIB+350 (tighter end of LIB+350-375 talk). LIBOR floor = 1%. OID = 99.75 (tightened from 99.5). Facility will include 101 soft call protection for one year.
Table 2. Panel B: Aeroflex Inc. Covenants - Financial and General
LPC Tranche_ID Deal Refinancing Deal Amended Tranche Refinancing Tranche Amended Tranche O_A Deal Amount Tranche Amount Deal Active_Date Tranche Active_Date Covenants Max Leverage_Ratio Max Debt_to_Cash_Flow Max Sr_Debt_to_Cash_Flow Tangible Net_Worth Net Worth Min Fixed_Charge_Coverage_Ratio Min Debt_Service_Coverage_Ratio Min Interest_Coverage_Ratio Min Cash_Interest_Coverage_Ratio Max Debt_to_Tangible_Net_Worth Max Debt_to_Equity_Ratio Min Current_Ratio Max Loan_to_Value_Ratio All Covenants_Financial Covenant Comment
Deal: 128721
224767 Yes No No Origination 20.00 4.00 1996-03-15 1996-03-15 No NA NA
273100 Yes No No Origination 20.00 16.00 1996-03-15 1996-03-15 No NA NA
Deal: 143473
185023 Yes No No Origination 47.48 20.00 1999-02-25 1999-02-25 Yes 2.75:1 NA 6.00e+07 1:1 Max. Sr. Debt to Cash Flow: Value is 2.75, Net Worth: 6e+007, Min. Debt Service Coverage Ratio: Value is 1.00
186036 Yes No No Origination 47.48 23.00 1999-02-25 1999-02-25 Yes 2.75:1 NA 6.00e+07 1:1 Max. Sr. Debt to Cash Flow: Value is 2.75, Net Worth: 6e+007, Min. Debt Service Coverage Ratio: Value is 1.00
278055 Yes No No Origination 47.48 4.48 1999-02-25 1999-02-25 Yes 2.75:1 NA 6.00e+07 1:1 Max. Sr. Debt to Cash Flow: Value is 2.75, Net Worth: 6e+007, Min. Debt Service Coverage Ratio: Value is 1.00
Deal: 42818
83949 Yes No No Origination 53.23 3.23 2003-02-14 2003-02-14 Yes 2.75:1 NA 1.65e+08 1.5:1 Max. Debt to Cash Flow: Value is 2.75, Net Worth: 1.65e+008, Min. Fixed Charge Coverage Ratio: Value is 1.50
98794 Yes No No Origination 53.23 50.00 2003-02-14 2003-02-14 Yes 2.75:1 NA 1.65e+08 1.5:1 Max. Debt to Cash Flow: Value is 2.75, Net Worth: 1.65e+008, Min. Fixed Charge Coverage Ratio: Value is 1.50
Deal: 151556
197238 Yes Yes Yes Origination 100.00 100.00 2006-03-21 2006-03-21 Yes 2.75:1 NA NA 3:1 Max. Debt to Cash Flow: Value is 2.75, Min. Interest Coverage Ratio: Value is 3.00
197238 Yes Yes Yes Amendment 1 100.00 100.00 2006-03-21 2006-08-28 Yes NA NA Max. Debt to Cash Flow: Value is 2.75, Min. Interest Coverage Ratio: Value is 3.00
Deal: 57853
108980 No No No Origination 780.00 245.00 2007-04-13 2007-04-13 No NA NA
230824 No No No Origination 780.00 475.00 2007-04-13 2007-04-13 No NA NA
98546 No No No Origination 780.00 60.00 2007-04-13 2007-04-13 No NA NA
Deal: 16163
35910 Yes No No Origination 575.00 50.00 2007-08-15 2007-08-15 Yes Decreasing from 9:1 to 5.2:1 NA NA Max. Debt to Cash Flow: Decreasing from 9.00 to 5.20
35911 Yes No No Origination 575.00 400.00 2007-08-15 2007-08-15 Yes Decreasing from 9:1 to 5.2:1 NA NA Max. Debt to Cash Flow: Decreasing from 9.00 to 5.20
36226 Yes No No Origination 575.00 125.00 2007-08-15 2007-08-15 Yes Decreasing from 9:1 to 5.2:1 NA NA Max. Debt to Cash Flow: Decreasing from 9.00 to 5.20
Deal: 16164
43063 Yes Yes Yes Yes Origination 669.12 75.00 2011-05-09 2011-05-09 No NA NA
43063 Yes Yes Yes Yes Amendment 1 669.12 75.00 2011-05-09 2012-05-25 Yes NA NA Max. Debt to Cash Flow: Value is 5.75
43063 Yes Yes Yes Yes Amendment 2 669.12 57.12 2011-05-09 2013-05-28 Yes NA NA Max. Debt to Cash Flow: Value is 5.75
43064 Yes Yes Yes Yes Origination 669.12 725.00 2011-05-09 2011-05-09 No NA NA
43064 Yes Yes Yes Yes Amendment 1 669.12 725.00 2011-05-09 2012-05-25 Yes NA NA Max. Debt to Cash Flow: Value is 5.75
43064 Yes Yes Yes Yes Amendment 2 669.12 612.00 2011-05-09 2013-05-28 Yes NA NA Max. Debt to Cash Flow: Value is 5.75

Some related questions:

Definitions

S4. Future Notes

The next step is to follow the procedure in Roberts (2015) to first identify whether the contract terms are changed. In particular, I need to identify whether covenants are changed and what type of covenants is updated, which the changing direction. Then, summarize the changing frequencies and get summary statistics. The most important one is Table 5.

Reference

To-do list: