-
Notifications
You must be signed in to change notification settings - Fork 0
/
80-haskins-financials.Rmd
403 lines (245 loc) · 28.2 KB
/
80-haskins-financials.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
---
title: NPOs through the lens of IRS 990 \& NIH Grant Data
subtitle: |
A Case Study
author: David Braze
date: |
September 6, 2021
# `r format(Sys.time(), '%B %d, %Y')`
abstract: |
This document is an example of information about non-profit organizations that can be found in two distinct federal data sources. The first is the Internal Revenue Service form 990, "Return of Organization Exempt from Income Tax." The second is details of individual grants from National Institutes of Health. Haskins Laboratories serves as a case study. Why this NPO? Because both IRS 990 data and NIH grant data available for the Labs. Haskins is a 501(c)(3) non-profit organization, so must file a return with the IRS each year. It is also a research organization that has been continuously funded by the NIH since at least 1970.
All NPOs must file with the IRS, but very few get direct NIH funding. Of the few that do, most are large, complicated, organizations (e.g., Yale University). On the other hand, Haskins is small enough that one can use information about it contained in these public data sources to understand something about its financial history (e.g., revenue, expenses, assets, number of employees, senior management, board members, etc), without too much effort.
I also have a personal reason for focusing on Haskins. A big part of my professional career was spent at there. I was employed as a member its research staff from 2002 until 2019. So, I have some curiosity about what nuggets of historical interest can be found in these public databases. My connection to the labs is a source of inspiration for exploring these federal databases.
The real point of the exercise is to pick the lowest hanging fruit from all that might be gathered from these two pools of data. I am not trying for a comprehensive account of what might be found there, just a rough and simple overview. This summary is not tailored to any particular purpose. One can easily imagine projects based on either of these data sources that involve in-depth examinations of how individual organizations change over time, or comparisons of groups of similar organizations, or both.
\vspace{1cm}
**Keywords**: public data, non-profit organizations, Internal Revenue Service, IRS form 990, Propublica Nonprofit Explorer, National Institutes of Health, NIH Exporter, NIH grants
\pagebreak
draft: true
always_allow_html: false
bibliography: ["hl-fin.bib"]
biblio-style: "apalike"
link-citations: true
fontsize: 11pt
geometry: margin=1in
header-includes:
- \renewcommand{\abstractname}{Executive Summary}
- \usepackage{booktabs}
- \usepackage[labelfont={bf}]{caption}
- \usepackage{fancyhdr}
- \renewcommand{\fancypagestyle}{}
- \pagestyle{fancy}
- \fancyhead{}
- \fancyhead[L]{\textbf{IRS 990 \& NIH Grant Data}}
- \fancyhead[R]{\textbf{D. Braze}}
- \addtolength{\headheight}{2.0pt}
- \addtolength{\topmargin}{-2.0pt}
- \fancyfoot{}
- \renewcommand{\footrulewidth}{0.4pt}
- \fancyfoot[L]{\textbf{`r format(Sys.time(), '%b %d, %Y')` `r if(FDBpub::is_draft()) "(DRAFT)" else ""`}}
- \fancyfoot[R]{\textbf{Page \thepage}}
output:
bookdown::pdf_document2:
highlight: tango
latex_engine: pdflatex
toc: yes
toc_depth: 3
number_sections: no
pandoc_args:
- --lua-filter
- "C:/Users/daveb/R/win-library/4.1/rmarkdown/rmarkdown/lua/pagebreak.lua"
rmdformats::readthedown:
highlight: tango
use_bookdown: true
toc_float: true
toc_depth: 3
number_sections: no
---
```{r init, echo=FALSE, include=FALSE}
## Use the makefile to build this document
library(fs)
library(here)
library(readr)
library(purrr)
library(dplyr)
library(tidyr)
library(stringr)
library(lubridate)
library(forcats)
library(ParseIRS990) ## https://github.com/p3lab/ParseIRS990
library(knitr)
library(kableExtra)
library(ggplot2)
library(ggrepel)
library(cowplot)
library(FDBpub)
out_type <- doc_type()
knitr::opts_chunk$set(fig.width=7,
fig.height=7*9/16,
fig.align = "center", ## horz center figs on page
out.width="95%",
out.height="95%",
dpi=if(out_type=="pdf") 300 else 72,
dev=if(out_type=="pdf") "cairo_pdf" else "png",
dev.args=if(out_type=="pdf") NULL else list(type="cairo-png"),
eval=TRUE,
echo=FALSE,
include=FALSE,
results='asis',
purl=TRUE,
cache=FALSE,
warning=FALSE,
message=FALSE
## fig.pos="htbp", ## help control latex figure floating
## out.extra=""
)
options(knitr.kable.NA = "--")
```
```{r locals}
size <- 12 # make this conditional on output type
## load convenience functions
## source(here("50-locals.R"))
source(here("59-xml2-convenience.R"))
```
```{r source}
## load data
source(here("01-load-data.R"))
## build figures and tables
source(here("02-outputs.R"))
```
```{r html-exec-summ, eval=doc_type()=="html", include=TRUE}
cat("\\pagebreak\n# Executive Summary\n")
cat(rmarkdown::metadata$abstract)
```
\pagebreak
# Introduction
This document is an example of what can be learned about non-profit organizations from two distinct US government data sources. The first is Internal Revenue Service form 990, "Return of Organization Exempt from Income Tax." The 990 is an informational form that US-based NPOs must file with the IRS each year [@i990_instructions]. The completed forms are publicly available records as a matter of federal law and policy. A convenient place to get IRS 990s is from the [ProPublica Nonprofit Explorer](https://projects.propublica.org/nonprofits/) [@roberts_nonprofit_2013]. It is necessary to search for the particular NPOs you are interested in, and individually download the forms for each tax year. The form for a specific NPO/tax-year will be available either as a scanned PDF, if it was filed as a paper document, or as an XML file, if it was filed electronically. All NPOs are required to file electronically since 2019.
The second source of information used here is details of individual grants available from the National Institutes of Health. The NIH Exporter is a tool that gives access to information about all individual grants made by the NIH [@nih_exporter]. That information includes the direct and indirect moneys paid to grantees each year for each grant. NIH grant data can be downloaded using the [NIH Exporter web tool](https://exporter.nih.gov/) [@nih_exporter]. The data files are available for each fiscal year since 1985 in either CSV or XML format.
<!-- In addition to these two primary sources, I also make use of consumer price index (CPI) data from the Bureau of Labor Statistics. Dollar values in some figures and tables are normalized such that the relative value of money in years _n_+1..._m_ is consistent with the purchasing power a dollar base year _n_ (dollar figures are _not_ adjusted unless declared as such). -->
In showcasing what can be learned from these data sources, I use Haskins Laboratories as a case study for two reasons. First, because there is both IRS data and NIH grant data available for the Labs. It is a 501(c)(3) non-profit organization, so must file a form 990 with the IRS each year, and it has been filing those documents electronically since 2014. Electronic filing is significant because it means that the data is available in XML format, making it easy to access programmatically. Form 990s that have been filed as paper documents are only available as scanned PDF files, sometimes not of very good quality. This makes automated data extraction error prone and tedious (but not impossible!). With regard to grant data, Haskins is a research organization and has received NIH grant money each year since at least 1970.
There are certainly other NPOs that get significant NIH funding. But, most of them are large and complicated organizations (e.g., Yale University). Haskins, on the other hand, is small enough that it is possible to use these data sources to understand something about its financial history without too much effort. That said, I'm really just scratching the surface of what is available in its 990s and NIH grant history.
A second reason for using Haskins records in this exercise is more personal. I was a senior scientist on the lab's research staff from 2002 until 2019. So, I have some curiosity about what nuggets of historical interest can be found in these public data sources. Certainly, there are other accounts of the lab's history which are more detailed and more human than what can be gleaned from these federal databases [cf. @fowler_language_2021; @fowler_oral_history]. I'm simply using my connection to the labs as one source of motivation for exploring these databases.
The initial work on this project was done in late summer of 2021. At that time, the most recent IRS 990 available was for the 2019 tax year. NIH data is both more up to date and goes back further in time. Together, the IRS and NIH records might provide an interesting complement to other views of Haskins' history, but constructing an overview of that history is not my goal.
The real point of the exercise is simply to pick the lowest hanging fruit out of all that might be gathered from these two federal sources, as an example of what might be done for any non-profit organization. I am not trying for a comprehensive account of what might be found there. The summary that I provide here is best thought of as a rough and simple overview of the source data. It is not tailored to any particular purpose. One can easily imagine projects based on either of these data sources that involve in-depth examinations of how individual organizations change over time, or comparisons of groups of organizations, or both.
This document is, and is likely to remain, a work-in-progress. I returned to it briefly in spring of 2022 to do some minor cleanup and prepare a public release of the project and blog post introducing it. I hope to return to it again later in 2022, once the IRS releases form 990s for 2020 (public release tends to lag submission to the IRS by about 18 months). Regardless, the most current version of the report will 'always' be available as a web page at [https://davebraze.github.io/i990-and-nih-exporter/](https://davebraze.github.io/i990-and-nih-exporter/) and as a pdf file at [https://davebraze.github.io/i990-and-nih-exporter/irs990-NIHgrant-case.pdf](https://davebraze.github.io/i990-and-nih-exporter/irs990-NIHgrant-case.pdf). The github repository containing the ***R*** code used to create the report is at [https://github.com/davebraze/i990-and-nih-exporter](https://github.com/davebraze/i990-and-nih-exporter).
# Summary of IRS 990s
Figure \@ref(fig:revenue-expenses-assets) shows annualized revenue, expenses, and net assets over the six year period where IRS data is available in the easily parsable XML format. Figure \@ref(fig:revenue-expenses-assets-adj) shows those same values, with the addition of curves reflecting the decline in purchasing power of the dollar over time (dashed lines).
```{r revenue-expenses-assets, include=TRUE, fig.cap=rea.cap}
## revenue, expenses, and assets by year
watermark(rea.fig, do=is_draft())
```
```{r revenue-expenses-assets-adj, include=TRUE, fig.cap=reacpi.cap}
## revenue, expenses, and assets: adjusted for CPI inflation and unadjusted in one figure
watermark(reacpi.fig, do=is_draft())
```
In Figure \@ref(fig:revenue-expenses-assets-nihfunding), I've added a line to Figure \@ref(fig:revenue-expenses-assets) representing NIH grant money received by the labs. I've done this even though, as best I can determine, IRS annual data and NIH annual data use slightly different fiscal years. IRS 990 data corresponds to the calendar year; the IRS allows other options, but Haskins uses a calendar year for its filings. The NIH fiscal year runs from October through September and fiscal years are labeled according the year in which they end. Nonetheless, it is a useful comparison. Figure \@ref(fig:revenue-expenses-assets-nihfunding) also includes NIH data one year forward and and one year back from IRS data. Keep in mind that the amounts represented by *NIH Total Costs* are already included in the *Revenue* curve. NIH Total Costs is the sum of direct and indirect funds for all NIH grants where Haskins is the primary grantee; subawards to the labs, where the primary grant goes to another organization and Haskins is a sub-contractor, are not included in this quantity. It is clear that NIH Total Costs are a significant proportion of total revenue in each year, but the proportion varies considerably, and declines rather dramatically over the most recent 3 years.
```{r revenue-expenses-assets-nihfunding, include=TRUE, fig.cap=reanih.cap}
## revenue, expenses, and assets plus NIH total costs
watermark(reanih.fig, do=is_draft())
```
\pagebreak
## Revenue
IRS 990s identify revenue as belonging to any one of more than a dozen categories. Most of these are not used by Haskins. Figure \@ref(fig:revenue-breakdown) shows the breakdown of the lab's revenue by category as reported in the labs' 990s. The maximum at each time-point in Figure \@ref(fig:revenue-breakdown) is equal to the *Revenue* quantities depicted in green in figures \@ref(fig:revenue-expenses-assets), \@ref(fig:revenue-expenses-assets-adj), and \@ref(fig:revenue-expenses-assets-nihfunding).
I've also subdivided the IRS *government grants* category from the IRS 990 into two parts: NIH grant money that goes directly to Haskins as primary performance site, derived from NIH ExPORTER data, and 'other' grant money. NIH Total Cost in figure \@ref(fig:revenue-breakdown) is the same quantity shown in blue in Figure \@ref(fig:revenue-expenses-assets-nihfunding). The quantities shown in \@ref(fig:revenue-breakdown) as *Other Gov. Grants* is the difference between the *Revenue* and *NIH Total Costs* curves in Figure \@ref(fig:revenue-expenses-assets-nihfunding). Keep in mind the previously noted asynchrony in fiscal years for NIH vs. IRS sourced data.
```{r revenue-breakdown, include=TRUE, fig.cap=revenue.cap}
watermark(revenue.fig, do=is_draft())
```
\pagebreak
## Expenses
Figure \@ref(fig:expense-breakdown) shows the partitioning of Haskins expenses into several IRS defined categories. The figure makes clear that salaries are the single largest expense over the period under consideration. 'Other Expenses' is second largest. Grants from Haskins to others are a smaller but still non-trivial expense in each year. These are divided into two categories: Grants to Organizations, and 'Other Grants'. The first category seems fairly straightforward, but it is not clear to me what would fall into the second. Regardless, more information on the organization's grant-making activities can be found in Schedule I, for grants to US based organizations, and in Schedule F, for international grants [@i990_schedf; @i990_schedi]. Read on.
```{r expense-breakdown, include=TRUE, fig.cap=expense.cap}
watermark(expense.fig, do=is_draft())
```
### Grantees
#### US Grantees
Information about an organization's outgoing grants (AKA subawards) to US-based organizations can be found in Schedule I [@i990_schedi]. Figure \@ref(fig:us-grantees) shows the yearly total of grants made by Haskins to US-based organizations each year, further broken down by recipient organization. Three of 10 grant recipients received money in all six years from 2014 through 2019 (CUNY, UCSF, Yale). Three received money in three of six years (NYU, UConn, USC). The remaining four organizations each got money from Haskins in just one of the six years.
```{r us-grantees, include=TRUE, fig.cap=us.grantee.cap}
us.grantee.cap <- "Yearly total of grants made by Haskins to US-based organizations, by recipient. Organization key: YALE = Yale University; UCSF = University of California at San Francisco; CUNY = Research Foundation of CUNY; NYU = New York University; USC = University of Southern California; UCONN = University of Connecticut; ELF = Endangered Language Fund; DUPONT HOSP = Dupont Hospital for Children; COLUMBIA U = Teachers College at Columbia University; U OF IOWA = University of Iowa."
watermark(us.grantees.fig, do=is_draft())
```
#### International Grants
Schedule F provides some information about grants going outside the United States [@i990_schedf]. Sadly, the information provided is less detailed than that for US-based grantees. It does not include information about grantees as such, but only about the amount of each grant and the general geographic region where the grantee is located.
```{r international-grants, include=TRUE, fig.cap=intl.grants.cap}
intl.grants.cap <- "Yearly total of grants made by Haskins outside the USA, by region."
watermark(intl.grants.fig, do=is_draft())
```
\pagebreak
## Directors, Officers, & Key Employees
Tables in this section are based on information from i990 Part VII, which identifies several categories of individuals having particularly significant roles within each NPO. These categories include: members of the board of directors, officers of the corporation, key employees, and highly compensated employees.
One of the challenges in dealing with named individuals in form 990s, of whatever category, is that when the same individual is mentioned across multiple years, their name is not always rendered consistently. One common issue is to do with middle names. Sometimes these are included in full, sometimes as initial only, sometimes they will be omitted altogether. Other variations do crop up as well. A similar problem exists for titles/roles. In the case either of names or of roles, if you want to make use of these as *data*, then there is a certain amount of work that must be done up-front to ensure that they are properly normalized.
### Directors
Table \@ref(tab:directors) shows board members (Directors) over time and their roles on the board as listed on each year's IRS form 990. Note that, as is usual in non-profit organizations, the President/CEO of the organization is an *ex officio* member of the Board of Directors. So, Dr. Pugh is listed on both Table \@ref(tab:directors) and Table \@ref(tab:corporate-officers). P. Rubin and A. Abramson also appear in both tables. They each served terms as corporate officers and as members of the board, but their terms as directors and as officers did not overlap.
```{r directors, include=TRUE}
director.tbl.cap <- "Board members over time and their roles on the board as listed on each year's form 990. CHAIR = chairperson; DIR = director; PCH = past chairperson; SEC = secretary of the board; TRE = treasurer."
format_table(caption = director.tbl.cap, director.tbl, out_type=out_type)
```
### Corporate Officers
Table \@ref(tab:corporate-officers) shows Haskins Laboratories' corporate officers over time, and their roles, as listed on each year's IRS form 990. Note that Arthur Abramson passed away in December of 2017 [@abramson_obit], although he is still listed as an officer (Corporate Secretary) in subsequent years.
Office of the Connecticut Secretary of the State (HL is registered in CT) makes business filings publicly available on its website (e.g., <https://service.ct.gov/business/s/onlinebusinesssearch?businessName=haskins%20laboratories>). So with a little work, it will be possible to link and compare information from IRS 990s with information, including details about officers, from a business's filings with the SotS. Unfortunately, not all states are similarly transparent in making corporate filings so easily accessible.
Another possible source of linking information, one that may be more peculiar to Haskins Labs than it is of general utility, is the [Open Payrolls](https://openpayrolls.com/) website [@openpayrolls_2021]. Open Payrolls aggregates payroll information for public employees at the local, state, and federal level. At least some of the lab's corporate officers serve in their roll there as a side hustle, whereas their day jobs are as faculty members at public colleges or universities. So if an officer's Haskins salary, as reported on its IRS 990s, seems low, there may be more to see at Open Payrolls.
```{r corporate-officers, include=TRUE}
officers.tbl.cap <- "Corporate officers (not officers of the board) over time. CEO = Chief Executive Officer; PRES = President; SEC = Corporate Secretary; VP = Vice President; VPF = VP of Finance \\& Administration; VPR = VP of Research; VPSO = VP of Scientific Operations. Note that Arthur Abramson passed away in December of 2017."
format_table(caption = officers.tbl.cap, officers.tbl, out_type=out_type)
```
### Highly Compensated Employees
In IRS terms, *highly compensated employees* (HCE) are those who are not officers of the corporation, but who received reportable compensation (i.e. regular salary, not including deferred or non-salary compensation) of at least \$100,000 in a given year. Note that several officers of the corporation also received salaries of more than \$100,000. Table \@ref(tab:highly-compensated) lists non-officer HCEs.
```{r highly-compensated, include=TRUE}
hce.tbl.cap <- "Highly compensated employees over time. A '1' indicates the person was listed as an HCE on that year's i990. Zeros (0) should not be interpreted as an indicator of employment status."
format_table(caption = hce.tbl.cap, hce.tbl, out_type=out_type)
```
TODO: Plot total salary reported for officers and HCEs by year as percentages of total salary paid by HL each year (cf. Figure \@ref(fig:expense-breakdown)).
\pagebreak
# Summary of NIH Grant Activity
This data set includes a total of `r length(unique(D0_nih$grant))` National Institutes of Health grants awarded to Haskins Laboratories due to the efforts of `r length(unique(D0_nih$pi_ids))` PIs in the period spanning fiscal years `r min(D0_nih$fy)` to `r max(D0_nih$fy)`. Note that NIH actually provides weekly data releases during the active fiscal year (i.e., ), but I have not included those "up to the minute" data here, mostly because it would be a little tedious to go that extra step and aggregate the weekly reports into a single partial data set for the current year [@nih_exporter].
## Lifespans and Types of Grants
Figure \@ref(fig:grant-activity) shows the lifespans of grants to Haskins within the analyzed period, while also highlighting the type of grant in each case. For each grant, activity codes run from the first active fiscal year to the last, with a point (letter) at each intermediate active year. Grants are sorted by last year of activity so that grants with more recent funding are closer to the bottom.
There are some oddities here. Notice that for some grants(e.g., DC000183) there seem to be intermediate years without activity. I speculate that these are periods of unfunded extension. Also, for most grants the 'activity' code does not change, but for a few it does (e.g., DC000183, DC000121). I don't know what to make of that.
```{r grant-activity, include=TRUE, fig.height=8.5, fig.cap=grant.activity.cap}
grant.activity.cap <- "Lifespans of Grants. Grants are sorted by final year of activity within depicted span. I surmise that lacunae within a grant's span (missing activity codes) are likely due to 'no cost extensions.'"
watermark(grant.activity, do=is_draft())
```
\pagebreak
## Primary Investigators
### Years of Grant Activity per PI
Figure \@ref(fig:pi-activity) shows the years in which each primary investigator has grant income. The figure shows grant activity at Haskins Laboratories only. Any grant activity at other organizations is not included here. Two instances of Co-PIs are indicated as composite individuals. Note years in which a PI has grant income only through unfunded extensions are not included included here. Grants are sorted by last year of activity so that grants with more recent funding are closer to the bottom.
As with IRS form 990 data, PI names are sometimes not consistently rendered in the NIH grants database. That is, when the same individual is mentioned across multiple grants/years, their name is not always rendered consistently. Middle names are a common source of problems. Sometimes these are included in full, sometimes as initial only, sometimes they will be omitted altogether. Married names are another common source of discrepancies. Unlike the IRS, the NIH has included a unique numerical ID for PIs, `pi_ids`, which *should* be consistent across name variations. If the goal is to combine data using names of individuals across IRS and NIH sourced data, there is even more work to be done. For example, names from IRS 990s are typically in first_name last_name order, but the NIH database lists PI names as last_name, first_name.
TODO: Another useful view would be to sort grants by **first** year of activity. This would highlight the number of grant starts in each fiscal year.
```{r pi-activity, include=TRUE, fig.height=8.5, fig.cap=pi.activity.cap}
pi.activity.cap <- "Years in which each primary investigator generated revenue to Haskins through one or more NIH grants are indicated with solid points. PIs are sorted by final year of activity within depicted time span. This chart indicates only NIH grant activity at Haskins; possible funding from sources is not included, nor is a PI's grant activity at other organizations. Co-PIs are shown as composite individuals. Note that a year in which a PI has grant income only through unfunded extensions will be blank (no point)."
watermark(pi.activity, do=is_draft())
```
### Total Number of Grants & Grant Income per PI
TODO: insert table of grant count and grant income by PI and year
\pagebreak
## NIH Grant Income and Effective Indirect Rates
Figure \@ref(fig:nih-total-costs) shows NIH Total Costs per year since 2000 to Haskins in blue. Total Costs are the sum of Direct Costs and Facilities and Administrative Costs [@nih_costs]. NIH Direct Costs, which are only provided as disaggregated from total costs since 2012, are shown in grey. The blue curve here corresponds to the blue curve in Figure \@ref(fig:revenue-expenses-assets-nihfunding), but extends backward in time.
```{r nih-total-costs, include=TRUE, fig.cap=totalcosts.cap}
totalcosts.cap <- "NIH Total Costs per year to Haskins in blue. Note that the NIH database only includes total cost numbers for grant activity from FY 2000 forward. NIH Direct Costs per year are in grey, which are only provided as disaggregated from total costs beginning in 2012."
watermark(totalcosts.fig, do=is_draft())
```
TODO: Show direct costs by year as a stacked barchart with fill=activity_code.
TODO: Show direct costs by year as a stacked barchart with fill=pi_names.
TODO: Show effective F&A rate as a percentage of Total Costs. Although, grantee negotiated F&A rate is normally presented as a percentage of Direct Costs. Maybe show it both ways?
\pagebreak
# Appendix A: Analysis Software {#r-packages}
All data summaries and analyses in this report were carried out using the ***R*** statistical environment, version `r paste(version$major, version$minor, sep=".")` [@cite_R]. The report itself was produced using an Rmarkdown workflow. The following table lists the non-base ***R*** packages used in building the report. To see a full citation for a specific package, assuming you have both ***R*** and the particular package installed, call (e.g.) *citation(dplyr)* from the ***R*** prompt.
```{r r-package-tab, include=TRUE}
package_tab <-
sessioninfo::package_info() %>%
unclass() %>%
as_tibble() %>%
filter(attached == TRUE) %>%
select(package, ondiskversion, date) %>%
rename(version = ondiskversion)
caption <- "R packages used in this report."
package_tab %>%
format_table(caption=caption, out_type=out_type)
```
\pagebreak
# Appendix B: About the Author {#about}
David Braze, Ph.D., is a researcher and consultant with a background in linguistics and reading research. He has more than 25 years experience investigating the cognitive and social foundations of language, literacy, and educational achievement, including 17 years as a Research Scientist at Haskins Laboratories. His research at Haskins, funded by the National Institutes of Health, emphasized the neurobiology of language and reading, and applications to education. Dr. Braze has broad experience consulting in the business, government, and non-profit sectors.
| email: [davebraze\@gmail.com](mailto:[email protected]){.email}
| website: [davebraze.org](https://davebraze.org/ "D. Braze's website")
\pagebreak
# References {.unnumbered}
::: {.refs}
:::