First complete draft of JMP

Various adjustments, but used claude.ai to get some suggestions.
Updated the causal model graph to represent my current understanding
and try to make it colorblind friendly.
claude_rewrite
will king 1 year ago
parent da3c9c31b5
commit fb644c6c5d

@ -92,9 +92,11 @@ areas of particular interest.
\item Active, not recruiting
\item Suspended %I don't explicitly deal with this case
\end{itemize}
When a trial has ended it is in one of two states:
When a trial has ended it is in one of three states:
\begin{itemize}
\item Terminated: Trial has ended premateurly
\item Withdrawn: Trial has ended before any enrollment began.
I filtered all of these out as they do not apply to our work.
\item Terminated: Trial has ended premateurly.
\item Completed: Trial has ended after observing what they hoped to observe.
\end{itemize}
\item Start Date: The date that the first measurement was taken or that the
@ -119,16 +121,17 @@ National Drug Code (NDC).
The list of approved NDCs are released regularly in the FDA's
Orangebook (small-molecule drugs) and Purplebook (Biologicals) publications.
These two publications also contain information regarding which drugs are generics
or biosimilars. %TODO: REF
or biosimilars. %
%which drugs are originators and which are generics (there is a better word for originator).
Before a drug or drug compound is sold on the market, the FDA requires the seller
to submit a standardized label and associated information called
a Structured Product Label (SPL).
These SPLs include information about dosage, ingredients, warnings, and printed labels.
These SPLs include information about dosage, ingredients, warnings,
and the format of the printed labels.
Each NDC code can have multiple SPLs associated with it because each
drug compound may be packaged in multiple ways, e.g. boxes with different
numbers of blister packs.
numbers of blister packs, etc.
These SPLs are made available for download so that they can be integrated
into patient health systems to improve patient safety
\cite{usfda_splfactsheet_2023}.
@ -150,16 +153,18 @@ to be on the market at a given date.
% Links to data
%----------------------------------------------------
\subsubsection{Global Disease Burden Survey}
\subsubsection{Global Burdens of Disease (2019)}
The University of Washington's Institute for Health Metrics and Evaluation
published a dataset called the Global Burdens of Disease Study 2019 (GBD 2019).
This dataset provides estimates of worldwide incidence of
various diseases and classes of diseases.
%\footnote{A full list of the diseases and categories can be found in \ref{Appendix1}}
The available measures of incidence include Deaths, Disability Adjusted Life Years (DALYs),
Years of Life Lost (YLL), and Years Lived with Disability (YLD) and come with
both an estimate and 95\% confidence interval bounds.
The available measures of incidence include Deaths,
Disability Adjusted Life Years (DALYs),
Years of Life Lost (YLL),
and Years Lived with Disability (YLD) and come with
both an estimate and 90\% confidence interval bounds.
Estimates are available for national, multinational, and global
populations
\cite{vos_globalburden369_2020}.
@ -172,9 +177,6 @@ that are most important from a public health perspective.
%not quite sure how to fill this out. What I am hoping to do is to justify my use of
% the highest level (most precise categories of data. Might be better to discuss
% the nested category outline.
The IHME also provides a link between the disease/cause hierarchy and ICD10
codes
\cite{globalburdenofdiseasecollaborativenetwork_globalburdendisease_2020a}.
%----------------------------------------------------
@ -254,14 +256,14 @@ The second layer of the hierarchy consists of about 225 groupings.
%how was it used
The GBD database provided a mapping between their categories and ICD-10
codes
\cite{globalburdenofdiseasecollaborativenetwork_globalburdendisease_2020a}
.
Unfortunately it appears to use a combination of the default WHO ICD-10 codes
and the ICD-10-CM codes from the CMS.
Additionally, many diseases classified by ICD-10 codes do not correspond to
categories in the GDB database.
% The GBD database provided a mapping between their categories and ICD-10
% codes
% \cite{globalburdenofdiseasecollaborativenetwork_globalburdendisease_2020a}
% .
% Unfortunately it appears to use a combination of the default WHO ICD-10 codes
% and the ICD-10-CM codes from the CMS.
% Additionally, many diseases classified by ICD-10 codes do not correspond to
% categories in the GDB database.
%how it was obtained
As I needed a combined list of ICD-10 codes, I first obtained the 2019 version
@ -308,14 +310,9 @@ and the trial's overall status at the time.
I also extracted the anticipated enrollment closest to the actual start date
of the trial, which I will call the planned enrollment under the assumption
that the sponsor is recording their current plan for enrollment.
From these I constructed a couple of normalized values.
The first is a normalized measure of enrollment.
This was constructed by dividing the snapshot enrollment by the planned enrollment.
The purpose of this was to normalize enrollment to a scale roughly around 1
instead of the widely varying counts that raw enrollment would give.
The second was a measure of how far along the trial was
in it's planned duration, in other word a measure of elapsed duration.
I then calculated a normalized measure of how far along the trial was
in it's planned duration; in other word, a measure of elapsed duration.
This was calculated for each snapshot as:
\begin{align}
\text{Elapsed Duration} =
@ -331,14 +328,12 @@ As an initial measure of market conditions I have gathered the number of brands
that are producing drugs containing the compound(s) of interest in the trial.
This was done by extracting the RxCUIs that represented the drugs of interest,
then linking those to the RxCUIs that are brands containing those ingredients.
As a secondary measure of market conditions, I linked clinical trials to the
USP Drug Classification list.
Once I had linked the drugs used in a trial to the applicable USP DC category
and class, I could find the number of alternative brands in that class.
This matching was performed by hand, using a custom web interface to the database.
This matching was performed by hand, using a custom web interface I wrote.
In order to link clinical trials to standardized ICD-10 conditions and thus
to the Global Burdens of Disease Data, I wrote a python script to search the
UMLS system for ICD-10 codes that matched the MeSH descriptions for
@ -349,11 +344,6 @@ This search resulted in generally three categories of search results:
\item The results contained a large number of entries, a few of which were correct.
\item The results did not contain any matches.
\end{enumerate}
In these cases I needed a way to validate each match and potentially add my own
ICD-10 codes to each trial.
This matching was also performed by hand, using a separate custom web interface to the database.
The effort to manually match ICD-10 codes and USP DC categories and classes data is ongoing.
%Describe linking icd10 codes to GBD
% Not every icd10 code maps, so some trials are excluded.
@ -365,7 +355,7 @@ Linking to one of the disease categories in the GBD heirarchy is similarly easy.
To get the best estimate of the size of the population associated with a disease,
each trial is linked to the most specific disease category applicable.
As not every ICD-10 code is linked to a condition in the GBD, those without any
applicable conditions are dropped from the dataset.
applicable conditions were dropped from the dataset.
\end{document}

@ -6,11 +6,8 @@
The model I use is a
hierarchal logistic regression model where the
hierarchies are based on disease categories.
%%NOTATION
% change notation
% i indexes trials for y and d
% n indexes snapshots within the trial
hierarchies correspond to the 22 top-level ICD-10 disease categories.
The goal is to take each snapshot and predict the probability of termination.
First, some notation:
\begin{itemize}
@ -23,7 +20,6 @@ First, some notation:
variables associated with the snapshot.
\end{itemize}
The goal is to take each snapshot and predict
The actual specification of the model to measure
the direct effect of enrollment is:
\begin{align}
@ -33,7 +29,7 @@ the direct effect of enrollment is:
Where beta is indexed by
$d \in \{1,2,\dots,21,22\}$
for each general ICD-10 category.
The betas are distributed
The $\beta$s are distributed
\begin{align}
\beta(d_i) \sim \text{Normal}(\mu_i,\sigma_i I)
\end{align}
@ -47,7 +43,6 @@ With hyperpriors
The independent variables include:
\todo{Make sure data is described before this point.}
\begin{subequations}
\begin{align}
x_{i,n}\beta(d_i)
@ -66,20 +61,16 @@ The independent variables include:
\end{align}
\end{subequations}
The arcsinh transform is used because it is similar to a log transform but
differentiably handles counts of zero since
differentiably handles counts of zero and
$\text{arcsinh}(0) = \ln (0 + \sqrt{0^2 + 1}) =0$.
Note that in this is a heirarchal model, each IDC-10 disease category
gets it's own set of parameters, and that is why the $\beta$s are parameterized
by $d_i$.
%%%% Not sure if space should go here. I think these work well together.
Other variables are implicitly controlled for as they are used
Some of the other variables are implicitly controlled for as they are used
to select the trials of interest.
These include:
\todo{double check these in the code.}
\begin{itemize}
\item The trial is Phase 3.
\item The trial has a Data Monitoring Committee.
\item The compounds are FDA regulated drug.
\item The compounds are FDA regulated drugs.
\item The trial was never suspended\footnote{
This was because I wasn't sure how to handle it in the model
when I started scraping the data.
@ -128,8 +119,10 @@ under the counterfactual where enrollment had not yet closed.
The difference
$\delta_{p_{i,n}}$
is then calculated for each trial, and saved.
After repeating this for all the posterior samples, we have an esitmate
for the posterior distribution of differences between treatement and control.
After repeating this for all the posterior samples and
all trials at their point of close, we have an esitmate
for the posterior distribution of differences between treatement and control
for selected trials.
\end{document}

@ -30,7 +30,7 @@ include a model of the missing data
\cite{mcelreath_statisticalrethinkingbayesian_2020}.
which would
allow me to estimate the direct effect of slow enrollment
on clinical trial termination rates
on clinical trial termination rates.
There has been substantial work on forecasting
multi-site enrollment rates and durations by
@ -67,6 +67,8 @@ ICD-10 code.
In contrast, there is no category for non-age related macular degeneration.
Thus not every trial has a good match with the estimate of the population of
interest.
Finding a way to focus on trials that have good disease population estimates
would improve the efficiency of the analysis.
\subsection{Improving Measures of Market Conditions}

@ -4,9 +4,36 @@
\begin{document}
Identifying commercial impediments to successfully completing
clinical trials in otherwise capable pharmaceuticals will hopefully
lead to a more robust and competitive market.
lead to a more robust and competitive pharmaceutical market.
Although the current state of this research is insufficient to draw robust
conclusions, these early results suggest that delaying the close of enrollment periods
reduces the probability of termination of a trial.
conclusions, these early results suggest that delaying the close of
enrollment periods reduces the probability of termination of a trial.
The successful completion of Phase III clinical trials is crucial for
bringing new treatments to market.
This research provides insights into how enrollment management
impacts trial outcomes.
While the preliminary results suggest that delaying the close of enrollment
periods may reduce termination probability, the analysis
reveals significant variation across disease categories and highlights
important methodological challenges.
The primary limitation that must be addressed before drawing a strong conclusion
is that of insufficient data.
This takes two forms.
The first is the small sample size.
To overcome this requires an improved data matching
approach and a revised data scraper.
The second is creating a model of enrollment that can be used to address
the causal identification issue from the joint determination of
enrollment statuses and elapsed durations of trials.
Despite these limitations, this work establishes a framework for analyzing
operational versus strategic factors in clinical trial completion.
The approach developed here can be extended with additional data to
provide more definitive guidance on enrollment management strategies.
Further research in this direction could help reduce operational
barriers to trial completion or estimating the impact policies may have through
operational channels.
Ultimately this work will hopefully support more efficient drug
development and increased market competition.
\end{document}

@ -3,131 +3,134 @@
\begin{document}
%I need to describe separating concerns, e.g.
% Begin by talking about goal, what does it mean? This might need some work prior to give more background.
As I am trying to separate strategic concerns
(the effect of a marginal treatment methodology)
and an operational concern
(the effect of a delay in closing enrollment),
we need to look at what confounds these effects and how we might measure them.
To start, we'll look at the data generating model, the values of interest,
and both the observed and unobserved confounders.
We'll also discuss how the data collected fits the data generating process.
The primary effects one might expect to see are that
\begin{enumerate}
\item Adding more drugs to the market will make it harder to
finish a trial as it is
more likely to be terminated due to concerns about profitabilty.
\item Adding more drugs will make it harder to recruit, slowing enrollment.
\item Enrollment challenges increase the likelihood that a trial will
terminate.
% Mentioned below
% \item A large population/market will tends to have more drugs to treat it
% because it is more profitable.
% \item A large population/market will make it easier to recruit,
% reducing the likelihood of a termination due to enrollment failure.
\item Adding more drugs to the market
will make it harder to recruit, slowing enrollment.
\item Enrollment challenges (i.e. delays) increase the likelihood that
a trial will terminate.
\end{enumerate}
Unfortunately, these causal effects are confounded in many different ways.
Figure \ref{FIG:CausalModel} contains a description of the causal model.
There are a few fundamental issues that arise when trying to estimate
these effects.
The first is that the severity of the disease and the size of the population
who has that disease affects the ease of enrolling participants.
For example, a large population may make it easier to find enough participants
to achieve the required statistical discrimination between
control and treatment.
Second, for some diseases there exists an endogenous dynamic
between the treatments available for a disease and the
market size/population with that disease.
\authorcite{cerda_endogenousinnovationspharmaceutical_2007}
proposes two mechanisms
that link the drugs on the market and market size.
The inverse is that for many chronic diseases with high mortality rates,
more drugs cause better survivability, increasing the size of those markets.
The third major confound is that the drugs on the market affect enrollment.
If there is a treatment already on the market, patients or their doctors
may be less inclined to participate in the trial, even if the current treatment
has severe downsides.
There are additional problems.
One is in that the disease being treated affects the
safety and efficacy standards that the drug will be held too.
For example, if a particular cancer is very deadly and does not respond well
to current treatments, Phase I trials will enroll patients with that cancer,
as opposed to the standard of enrolling healthy volunteers
\cite{commissioner_drugdevelopmentprocess_2020}
to establish safe dosages.
The trial is more likely to be terminated early if the drug is unsafe or has no
discerenable effect, therefore termination depends in part on a compound-disease
interaction.
Another challenge comes from the interaction between duration and termination;
in that if a trial terminates before closing enrollment for issues other
than enrollment, then the enrollment will still be low.
On the other hand, if enrollment is low, the trial might terminate.
These outcomes are indistinguishable in the data provided by the final
\url{ClinicalTrials.gov} dataset.
% The first issue is that the severity of the disease and the size of the population
% who has that disease affects the ease of enrolling participants.
% For example, a large population may make it easier to find enough participants
% to achieve the required statistical discrimination between
% control and treatment.
% Second, for some diseases there exists an endogenous dynamic
% between the treatments available for a disease and the
% market size/population with that disease.
% \authorcite{cerda_endogenousinnovationspharmaceutical_2007}
% proposes two mechanisms
% that link the drugs on the market and market size.
% The inverse is that for many chronic diseases with high mortality rates,
% more drugs cause better survivability, increasing the size of those markets.
% The third major confound is that the drugs on the market affect enrollment.
% If there is a treatment already on the market, patients or their doctors
% may be less inclined to participate in the trial, even if the current treatment
% has severe downsides.
%
% There are additional problems.
% One is in that the disease being treated affects the
% safety and efficacy standards that the drug will be held too.
% For example, if a particular cancer is very deadly and does not respond well
% to current treatments, Phase I trials will enroll patients with that cancer,
% as opposed to the standard of enrolling healthy volunteers
% \cite{commissioner_drugdevelopmentprocess_2020}
% to establish safe dosages and (hopefully) obtain some effectiveness data.
% % The trial is more likely to be terminated early if the drug is unsafe or has no
% % discerenable effect, therefore termination depends in part on a compound-disease
% % interaction.
% Another challenge comes from the interaction between duration and termination;
% in that if a trial terminates before closing enrollment for issues other
% than enrollment, then the enrollment will still be low.
% On the other hand, if enrollment is low, the trial might terminate.
% Thus it is impossible to tell if the low enrollment caused the termination
% or if the termination caused the low enrollment.
% Finally, while conducting a trial, the safety and efficacy of a drug are driven by
% fundamental pharmacokinetic properties of the compounds.
% These are only imperfectly measured both prior to and during any given trial.
% Previously measured safety and efficacy inform the decision to start the trial
% in the first place while currently observed safety and efficiency results
% help the sponsor judge whether to continue the trial.
% In contrast, the recruitment rate may depend on the previous results about safety
% and efficacy.
Finally, while conducting a trial, the safety and efficacy of a drug are driven by
fundamental pharmacokinetic properties of the compounds.
These are only imperfectly measured both prior to and during any given trial.
Previously measured safety and efficacy inform the decision to start the trial
in the first place while currently observed safety and efficiency results
help the sponsor judge whether to continue the trial.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Data Summary}
%% Describe data here
Since Sep 27th, 2007 those who conduct clinical trials of FDA controlled
drugs or devices on human subjects must register
their trial at \url{ClinicalTrials.gov}
(\cite{anderson_fdadrugapproval_2022}).
This involves submitting information on the expected enrollment and duration of
trials, drugs or devices that will be used, treatment protocols and study arms,
as well as contact information the trial sponsor and treatment sites.
When starting a new trial, the required information must be submitted
``\dots not later than 21 calendar days after enrolling the first human subject\dots''.
After the initial submission, the data is briefly reviewed for quality and
then the trial record is published and the trial is assigned a
National Clinical Trial (NCT) identifier.
(\cite{anderson_fdadrugapproval_2022}).
Each trial's record is updated periodically, including a final update that must occur
within a year of completing the primary objective, although exceptions are
available for trials related to drug approvals or for trials with secondary
objectives that require further observation\footnote{This rule came into effect in 2017}
(\cite{anderson_fdadrugapproval_2022}).
Other than the requirements for the first and last submissions, all other
updates occur at the discresion of the trial sponsor.
Because the ClinicalTrials.gov website serves as a central point of information
on which trials are active or recruting for a given condition or drug,
most trials are updated multiple times during their progression.
There are two primary ways to access data about clinical trials.
The first is to search individual trials on ClinicalTrials.gov with a web browser.
This web portal shows the current information about the trial and provides
access to snapshots of previously submitted information.
Together, these features fulfill most of the needs of those seeking
to join a clinical trial.
For this project I've been able to scrape these historical records to establish
snapshots of the records provided.
%include screenshots?
The second way to access the data is through a normalized database setup by
the
\href{https://aact.ctti-clinicaltrials.org/}{Clinical Trials Transformation Initiative}
called AACT. %TODO: Get CITATION
The AACT database is available as a PostgreSQL database dump or set of
flat-files.
These dumps match a near-current version of the ClinicalTrials.gov database.
This format is ameniable to large scale analysis, but does not contain
information about the past state of trials.
I combined these two sources, using the AACT dataset to select
trials of interest and then scraping \url{ClinicalTrials.gov} to get
a timeline of each trial.
%%%%%%%%%%%%%%%%%%%%%%%% Model Outline
The way I use this data is to predict the final status of the trial
from the snapshots that were taken, in effect asking:
``how does the probability of a termination change from the current state
of the trial if X changes?''
% \subsection{Data Summary}
% %% Describe data here
% Since Sep 27th, 2007 those who conduct clinical trials of FDA controlled
% drugs or devices on human subjects must register
% their trial at \url{ClinicalTrials.gov}
% (\cite{anderson_fdadrugapproval_2022}).
% This involves submitting information on the expected enrollment and duration of
% trials, drugs or devices that will be used, treatment protocols and study arms,
% as well as contact information the trial sponsor and treatment sites.
%
% When starting a new trial, the required information must be submitted
% ``\dots not later than 21 calendar days after enrolling the first human subject\dots''.
% After the initial submission, the data is briefly reviewed for quality and
% then the trial record is published and the trial is assigned a
% National Clinical Trial (NCT) identifier.
% (\cite{anderson_fdadrugapproval_2022}).
%
% Each trial's record is updated periodically, including a final update that must occur
% within a year of completing the primary objective, although exceptions are
% available for trials related to drug approvals or for trials with secondary
% objectives that require further observation\footnote{This rule came into effect in 2017}
% (\cite{anderson_fdadrugapproval_2022}).
% Other than the requirements for the first and last submissions, all other
% updates occur at the discresion of the trial sponsor.
% Because the ClinicalTrials.gov website serves as a central point of information
% on which trials are active or recruting for a given condition or drug,
% most trials are updated multiple times during their progression.
%
% There are two primary ways to access data about clinical trials.
% The first is to search individual trials on ClinicalTrials.gov with a web browser.
% This web portal shows the current information about the trial and provides
% access to snapshots of previously submitted information.
% Together, these features fulfill most of the needs of those seeking
% to join a clinical trial.
% For this project I've been able to scrape these historical records to establish
% snapshots of the records provided.
% %include screenshots?
% The second way to access the data is through a normalized database setup by
% the
% \href{https://aact.ctti-clinicaltrials.org/}{Clinical Trials Transformation Initiative}
% called AACT. %TODO: Get CITATION
% The AACT database is available as a PostgreSQL database dump or set of
% flat-files.
% These dumps match a near-current version of the ClinicalTrials.gov database.
% This format is ameniable to large scale analysis, but does not contain
% information about the past state of trials.
% I combined these two sources, using the AACT dataset to select
% trials of interest and then scraping \url{ClinicalTrials.gov} to get
% a timeline of each trial.
%
% %%%%%%%%%%%%%%%%%%%%%%%% Model Outline
%
% The way I use this data is to predict the final status of the trial
% from the snapshots that were taken, in effect asking:
% ``how does the probability of a termination change from the current state
% of the trial if X changes?''
%
%% Return to causal identification
\subsection{Causal Identification}
@ -137,7 +140,6 @@ structural causal model.
Because the data generating process for the clinical trials records is rather
straightforward, this is an ideal place to use
\authorcite{pearl_causalitymodelsreasoning_2009}
Do-Calculus.
This process involves describing the data generating process in the form of
a directed acyclic graph, where the nodes represent different variables
@ -169,51 +171,46 @@ When appropriate issues arise, the study sponsor terminates the trial, otherwise
it continues to completion.
\begin{figure}[H] %use [H] to fix the figure here.
\frame{
\scalebox{0.65}{
\tikzfig{../assets/tikzit/CausalGraph2}
}
}
\todo{check if this is the correct graph}
\includegraphics[width=\textwidth]{../assets/img/CausalModel.drawio.png}
\caption{Graphical Causal Model}
% \small{Crimson boxes are the variables of interest,
% white boxes are unobserved, while the gray boxes will be controlled for.}
\label{Fig:CausalModel}
\label{FIG:CausalModel}
\end{figure}
% Constructing the model more explicitly
% - quickly describe each node and line.
\todo{I think I need to blend the data section in before this, to give some overall information on data.}
\todo{I may need to add some information on snapshots so that this makes sense.}
A quick summary of the nodes of the DAG, the exact representation in the data, and their impact:
A quick summary of the nodes of the DAG,
which nodes are captured in the data,
the hypothesized relationships in the model,
and the proposed confounding pathways.
\begin{itemize}
\item Main Interests (Crimson Boxes)
\item Items of Interest (Blue boxes and Arrow)
\begin{enumerate}
\item \texttt{Will Terminate?}:
If the final status of the trial was \textit{terminated}
and comes from the AACT dataset.
or \textit{completed}.
\item \texttt{Enrollment Status}:
This describes the current enrollment status of the snapshot, e.g.
\texttt{Recruiting},
\texttt{Enrolling by invitation only},
or
\texttt{Active, not recruting}.
\item \texttt{Market Measures}:
Various measures of the number of alternate drugs on the market.
These are either the number of other drugs with the same active ingredient as the trial
(both generic and originators),
and those considered alternatives in various formularies published by the United States Pharmacopeia.
\item \texttt{Enrollment Level (Enrollment Status)}:
While occasionally a trial will keep the enrollment numbers
up to date, the only regular information on enrollment recieved
is the enrollment status, i.e. whether they have finished
recruiting or not.
\item \texttt{Will it Terminate?}:
This represents whether the trial was terminated or if it
completed successfully.
\item The effect of \texttt{Enrollment Status} on
\texttt{Will it Terminate?}:
How does changing the enrollment status affect the
probability of termination.
\end{enumerate}
\item Observed Confounders (Gray Boxes)
\item Observed values (Solid orange boxes)
\begin{enumerate}
\item \texttt{Condition}:
\item \texttt{Condition}
(Not drawn in DAG because it impacts everything):
The underlying condition, classified by IDC-10 group.
This impacts every other aspect of the model and is pulled from
the AACT dataset.
\item \texttt{Market Measures}:
Various measures of the number of alternate drugs on the market.
These are either the number of other drugs with the same active ingredient as the trial
(both generic and originators),
and those considered alternatives in various formularies published by the United States Pharmacopeia.
\item \texttt{Population (market size)}:
Multiple measures of the impact the disease.
These are measured by the DALY cost of the disease, and is
@ -233,7 +230,7 @@ A quick summary of the nodes of the DAG, the exact representation in the data, a
This is included in the analysis by only including
Phase III trials registered in the AACT dataset.
\end{enumerate}
\item Unobserved Confounders (White Boxes)
\item Unobserved (Green Boxes with squiggle hatch marks)
\begin{enumerate}
\item \texttt{Fundamental Efficacy and Safety}:
The underlying safety of the compound.
@ -252,27 +249,63 @@ A quick summary of the nodes of the DAG, the exact representation in the data, a
As this information doesn't appear to be provided to
participants, we don't consider it.
\end{enumerate}
\end{itemize}
% \end{itemize}
%
\begin{itemize}
\item Relationships of interest
% %
%
% \begin{itemize}
% \item Relationships of interest
% \begin{enumerate}
% \item \texttt{Enrollment Status} $\rightarrow$ \texttt{Will Terminate?}:
% This is the primary effect of interest.
% \item \texttt{Market Measures} $\rightarrow$ \texttt{Will Terminate?}:
% This is the secondary effect of interest.
% \end{enumerate}
\item Jointly determined variables
\begin{enumerate}
\item \texttt{Enrollment Status} $\rightarrow$ \texttt{Will Terminate?}:
This is the primary effect of interest.
\item \texttt{Market Measures} $\rightarrow$ \texttt{Will Terminate?}:
This is the secondary effect of interest.
\item
\texttt{Enrollment Level (Enrollment Status)}
$\leftrightarrow$
\texttt{Elapsed Duration}:
Because I only observe enrollment status and have not good estimate of
the enrollment process, there is a potential for confounding between
the elapsed duration of a trial and the enrollment status.
The proposed mechansims are through the partially observed levels of
enrollment.
First, as a trial progresses, the enrollment levels should grow until
it matches the planned enrollment and the trial ends.
Thus under good circumstances, elapsed duration drives
enrollment levels.
Under bad circumstances though, low enrollment levels may cause the
duration to extend, as study sponsors spend more resources
to complete the trial successfully.
This is an issue because the only complete measure of enrollment
that we currently have is the enrollment status, and thus I cannot
control for this effect.
\item
\texttt{Market Conditions}
$\leftrightarrow$
\texttt{Population}:
There exists an endogenous dynamic between
between the treatments available for a disease and the
market size/population with that disease.
\authorcite{cerda_endogenousinnovationspharmaceutical_2007}
proposes two mechanisms
that link the drugs on the market and market size.
The first is that a larger population increases the potential
profitability, trying to get more treatments allowed.
The inverse is that for many chronic diseases with high mortality rates,
more drugs cause better survivability, increasing the size of those markets.
\end{enumerate}
\item Confounding Pathways
\begin{enumerate}
\item
\texttt{Condition}:
Affects every other node.
Part of the Adjustment Set.
\texttt{Condition} (Not drawn in figure \ref{FIG:CausalModel}):
Interacts with everything.
\item Backdoor Pathway
between \texttt{Will Terminate?} and
\texttt{Enrollment Status} through safety and efficiency.
\texttt{Enrollment Status} through
\texttt{Fundamental Safety and Efficacy}.
The concern is that since previously learned information
and current information are driven by the same underlying
physical reality, the enrollment process and
@ -282,107 +315,58 @@ A quick summary of the nodes of the DAG, the exact representation in the data, a
Below I describe the exact pathways.
\begin{enumerate}
\item
\texttt{Will Terminate?}
$\leftarrow$
\texttt{Currently Observed Efficacy and Safety}
$\leftarrow$
\texttt{Fundamental Efficacy and Safety}
$\rightarrow$
\texttt{Currently Observed Efficacy and Safety}:
This relationship represents the measurements of
safety and efficacy in the current trial.
\item
\texttt{Currently Observed Efficacy and Safety}:
\texttt{Previously Observed Efficacy and Safety}
$\rightarrow$
\texttt{Will Terminate?}:
This is how the measurements of safety and efficacy in the
current trial affect the probability of termination.
% typically, evidence of a lack safety or efficacy is
% enought to terminate the trial.
\item \texttt{Fundamental Efficacy and Safety}
\texttt{Is likely safe and effective (Decision to proceed with Phase III trial)}
$\rightarrow$
\texttt{Previously Observed Efficacy and Safety}:
This relationship represents the measurements of
safety and efficacy in work prior to the current trial.
\item
\texttt{Previously Observed Efficacy and Safety}:
\texttt{Enrollment Process Parameters}
$\rightarrow$
\texttt{Decision to proceed with Phase III}:
Previously observed data is essential to the FDA's
decision to allow a phase III trial.
\texttt{Enrollment Levels (Enrollment Status)}
\end{enumerate}
\item
Backdoor Pathway from \texttt{Market Status}
to \texttt{Enrollment}
through \texttt{Population}.
Backdoor Pathways through \texttt{Population} and
\texttt{Market Conditions}
The concern with this pathway is that the rate of enrollment, and
thus the enrollment status, is affected by the Population with
the disease.
Additionally, there is a concern that the number of competitors
is driven by the total market size.
Thus adding Population to the adjustment set is necessary.
the disease and the market condition.
\begin{enumerate}
\item
\texttt{Population}
\texttt{Will Terminate?}
$\leftarrow$
\texttt{Market Conditions}
$\rightarrow$
\texttt{Enrollment Process Parameters}
$\rightarrow$
\texttt{Enrollment Status}:
This is fairly straightforward.
How easy it is to enroll participants depends in part
on how many people have the disease.
\texttt{Enrollment Levels (Enrollment Status)}
\item
\texttt{Will Terminate?}
$\leftarrow$
\texttt{Market Conditions}
$\leftrightarrow$
\texttt{Population}
$\rightarrow$
\texttt{Enrollment Process Parameters}
$\rightarrow$
\texttt{Market Measures}:
This assumes that the population effect flows only one
direction, i.e. that a large population size increases
the likelihood of a large number of drugs.
%TODO: Think about this one a bit because it does mess
% with identification, particularly of market effects.
% these two are jointly determined per cerda 2007.
% If I can't justify separating them, then I'll need to
% merge population (market size) and market measures (drugs on market).
\texttt{Enrollment Levels (Enrollment Status)}
\end{enumerate}
\item Backdoor Pathway through
\texttt{Elapsed Duration}.
\begin{enumerate}
\item
\texttt{Will Terminate?}
$\leftarrow$
\texttt{Elapsed Duration}
$\leftrightarrow$
\texttt{Enrollment Levels (Enrollment Status)}
\end{enumerate}
\item
\texttt{Market Measures}
$\rightarrow$
\texttt{Enrollment Status}:
This confounds the estimation of the effect of
\texttt{Enrollment} on \texttt{Will Terminate?}, and
so \texttt{Market Measures} is part of the adjustment set.
\item
\texttt{Market Measures}
$\rightarrow$
\texttt{Decision to proceed with Phase III}:
The alternative treatments on the market will affect a sponsors'
decision to move forward with a Phase III trial.
This is controlled for by only working with trials that
successfully begin recruitment for a Phase III Trial.
\item
\texttt{Elapsed Duration}
$\rightarrow$
\texttt{Will Terminate?}:
The amount of time past helps drive the decision to continue
or terminate.
\item
\texttt{Enrollment Status}
$\leftrightarrow$
\texttt{Elapsed Duration}:
% This is jointly determined. and the weakest part of the causal identification without an accurate model of enrollment.
This is one of the weakest parts of the causal inference.
Without a well defined model of enrollment, we can't separate
the interaction between the enrollment status and the elapsed
duration.
For example, if enrollment is running slower than expected,
the trial may be terminated due to concerns that it will not
achive the primary objectives or that costs will exceed
the budget allocated to the project.
\item
\texttt{Decision to Proceed with Phase III}
$\rightarrow$
\texttt{Will Terminate?}:
%obviously required. Maybe remove from listing and graph?
This effect is fairly straightforward, in that
there is no possibility of a termination or completion
if the trial does not start.
This is here to block a backdoor pathway between
\texttt{Will Terminate?} and the enrollment status
through \texttt{Previously observed Safety and Efficacy}.
\end{enumerate}
\end{itemize}
\end{document}

@ -14,32 +14,36 @@
% -
% -
To understand how my administrative clinical trial data is obtained and what it
can be used for, let's take a look at how trial investigators record data on
\url{ClinicalTrials.gov}.
Figure \ref{Fig:Stages} illustrates the different states that a trial can
transition between while it is operating.
These states are defined by the National Library of Medicine with respect to
clinical trial results
To understand why clinical trials succeed or fail requires understanding how
they operate and how their progress is documented.
The primary source of this operational data is ClinicalTrials.gov, where
investigators record key information about their trials' status and progression.
To understand how my administrative data captures trial progression, we'll
examine how investigators document their trials' states and transitions.
Figure \ref{Fig:Stages} is a flowchart of definitions of the different states
that a trial can take and the decisions leading to each.
It also describes the knowledge obtained by the study operator
and how that influences further decisions.
The states are standardized and defined by the National Library of Medicine
\cite{usnlm_protocolregistrationdata_2024-06-17}.
During the Pre-Trial period the trial investigators will design the trial,
During the prior to a study, the trial investigators will design the trial,
choose primary and secondary objectives, and decide on how many participants
they need to enroll.
Once they have decided on these details, they post the trial to
\url{ClinicalTrials.com} and decide on a date to begin enrolling trial
participants.
If the investigators decide to not continue with the trial before enrolling any
participants, the trial is marked as ``Withdrawn''.
If they begin enrolling participants, there are two methods to do so.
The first is to enter an "Enrollment by invitation only" state where the
trial operators extend invitations through their own connections to doctors
and patients they are working with.
The second is to enter a general ``Recruiting'' state, where participants apply
to join the trial, and the sponsoring organization may extend invitations as
before.
After a trial has enrolled their participants, they Will typically move to an
"Active, not recruiting" state to inform potential participants that they are
not recruiting.
% If the investigators decide to not continue with the trial before enrolling any
% participants, the trial is marked as ``Withdrawn''.
% If they begin enrolling participants, there are two methods to do so.
% The first is to enter an "Enrollment by invitation only" state where the
% trial operators extend invitations through their own connections to doctors
% and patients they are working with.
% The second is to enter a general ``Recruiting'' state, where participants apply
% to join the trial, and the sponsoring organization may extend invitations as
% before.
After a trial has enrolled enough participants, the sponsor will move to an
"Active, not recruiting" state to inform potential participants that they have
recruiting.
During this time, the trial operators continue monitoring participants for
adverse events and tracking their disease severity and compliance with treatment.
Finally, when the investigators have obtained enough data to achieve their primary
@ -66,8 +70,8 @@ objective within time and budget contstraints.
As a trial goes through the different stages of recruitment, the investigators
update the records on ClinicalTrials.gov.
Even though there are only a few times that investigators are required
to update this information, it tends to be updated somewhat regularly as it is
a way to communicate with potential enrollees.
to update this information, it tends to be updated somewhat regularly during
enrollment as it is a way to communicate with potential enrollees.
When a trial is first posted, it includes information
such as planned enrollment,
planned end dates,
@ -79,44 +83,112 @@ As enrollment is opened and closed and sites are added or removed,
investigators will update the status and information
to help doctors and potential participants understand whether they should apply.
When a trial ends, it can end in one of three ways.
The most desirable outcome is completion, where the trial achieves its
primary objective by gathering sufficient data about safety and efficacy.
However, trials may also end early either through withdrawal
(as mentioned previously)
or termination.
Termination occurs after enrollment has begun but before achieving the
primary objective.
Unfortunately it can be difficult to know why a given trial was terminated,
in spite of the fact that upon termination, trials typically record a
Understanding why trials terminate early is the key goal of this work, but
is not straightforward.
Terminated trials typically record a
description of \textit{a single} reason for the clinical trial termination.
This doesn't necessarily list all the reasons contributing to the trial termination and may not exist for a given trial.
For example, if a Principal Investigator leaves for another institution
(terminating the trial), is this decision affected by
This doesn't necessarily list all the reasons contributing to the trial
termination and may not exist for a given trial.
As an example, if a Principal Investigator leaves for another institution
(terminating the trial), this decision may be affected by things such as
a safety or efficacy concern,
a new competitor on the market,
difficulties recruiting participants,
or a lack of financial support from the study sponsor?
% Estimating the impact of different problems that trials face from these
% low-information, post-hoc signals is insufficient.
Because there are many things that contribute to the decision to terminate a
trial but no way for the results to be described in detail,
we must use another way to infer the relative impact of operational difficulties.
or a lack of financial support from the study sponsor.
In this way, the stated reason may mask the underlying challenges that
led to the termination, leaving us to
use another way to infer the relative impact of operational difficulties.
Although
To better descrobe termination causes, I suggest classifying them into
three broad categories.
The first category, Safety or Efficacy concerns, occurs when data suggests
the treatment is unsafe or unlikely to achieve its therapeutic goals.
While Khmelnitskaya
\cite{khmelnitskaya_competitionattritiondrug_2021}
describes a clinical failure due to safety or efficacy as a
\textit{scientific} failure, it is better described as a compound failure.
Discovering that a compound doesn't work as hoped is not a failure but the whole
purpose of the clinical trials process.
On the other hand, when a trial terminates early due to reasons
other than safety or efficacy concerns, the trial operator does not learn
if the drug is effective or safe.
This is a knowledge-gathering failure.
I prefer describing a clinical trial as being terminated for
Safety or Efficacy concerns, Strategic concerns, or Operational concerns
describes these as scientific failures, I contend that they represent successful
knowledge gathering - the clinical trial process working as intended to
identify ineffective treatments.
The second category, Strategic concerns, encompasses business and
market-driven decisions such as changes in company priorities or
competitive landscape.
The final category, Operational concerns, includes practical challenges
like insufficient enrollment rates or loss of key personnel.
These latter two categories represent true failures of the trial process,
as they prevent us from learning whether the treatment would have
been safe and effective.
\subsection{Data Summary}
%% Describe data here
Since Sep 27th, 2007 those who conduct clinical trials of FDA controlled
drugs or devices on human subjects must register
their trial at \url{ClinicalTrials.gov}
(\cite{anderson_fdadrugapproval_2022}).
This involves submitting information on the expected enrollment and duration of
trials, drugs or devices that will be used, treatment protocols and study arms,
as well as contact information the trial sponsor and treatment sites.
When starting a new trial, the required information must be submitted
``\dots not later than 21 calendar days after enrolling the first human subject\dots''.
After the initial submission, the data is briefly reviewed for quality and
then the trial record is published and the trial is assigned a
National Clinical Trial (NCT) identifier.
(\cite{anderson_fdadrugapproval_2022}).
Each trial's record is updated periodically, including a final update that must occur
within a year of completing the primary objective, although exceptions are
available for trials related to drug approvals or for trials with secondary
objectives that require further observation\footnote{This rule came into effect in 2017}
(\cite{anderson_fdadrugapproval_2022}).
Other than the requirements for the first and last submissions, all other
updates occur at the discresion of the trial sponsor.
Because the ClinicalTrials.gov website serves as a central point of information
on which trials are active or recruting for a given condition or drug,
most trials are updated multiple times during their progression.
There are two primary ways to access data about clinical trials.
The first is to search individual trials on ClinicalTrials.gov with a web browser.
This web portal shows the current information about the trial and provides
access to snapshots of previously submitted information.
Together, these features fulfill most of the needs of those seeking
to join a clinical trial.
For this project I've been able to scrape these historical records to establish
snapshots of the records provided.
%include screenshots?
The second way to access the data is through a normalized database setup by
the
\href{https://aact.ctti-clinicaltrials.org/}{Clinical Trials Transformation Initiative}
called AACT. %TODO: Get CITATION
The AACT database is available as a PostgreSQL database dump or set of
flat-files.
These dumps match a near-current version of the ClinicalTrials.gov database.
This format is ameniable to large scale analysis, but does not contain
information about the past state of trials.
I combined these two sources, using the AACT dataset to select
trials of interest and then scraping \url{ClinicalTrials.gov} to get
a timeline of each trial.
%%%%%%%%%%%%%%%%%%%%%%%% Model Outline
The way I use this data is to predict the final status of the trial
from the snapshots that were taken, in effect asking:
``how does the probability of a termination change from the current state
of the trial if X changes?''
% -
% -
% -
% -
% -
% -
%
\end{document}

@ -0,0 +1,143 @@
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/26.0.9 Chrome/128.0.6613.186 Electron/32.2.5 Safari/537.36" version="26.0.9">
<diagram name="Page-1" id="mtO3n3LGiMWHk561vA-H">
<mxGraphModel dx="1434" dy="796" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="3300" pageHeight="2339" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="rB942MAWg83VmefqhkrR-1" value="Enrollment Level" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#0000FF;perimeterSpacing=1;strokeWidth=4;fillStyle=zigzag-line;" parent="1" vertex="1">
<mxGeometry x="560" y="430" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="rB942MAWg83VmefqhkrR-2" value="Enrollment Status" style="text;strokeColor=#0000FF;fillColor=#ffe6cc;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;strokeWidth=4;perimeterSpacing=1;" parent="rB942MAWg83VmefqhkrR-1" vertex="1">
<mxGeometry y="30" width="120" height="30" as="geometry" />
</mxCell>
<mxCell id="rB942MAWg83VmefqhkrR-5" value="Will it Terminate?" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#0000FF;strokeWidth=4;fillStyle=dots;" parent="1" vertex="1">
<mxGeometry x="840" y="520" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="rB942MAWg83VmefqhkrR-6" value="Enrollment Process&lt;br&gt;Parameters" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fillStyle=zigzag-line;" parent="1" vertex="1">
<mxGeometry x="560" y="241" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="rB942MAWg83VmefqhkrR-27" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;strokeWidth=3;" parent="1" source="rB942MAWg83VmefqhkrR-7" target="rB942MAWg83VmefqhkrR-5" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="rB942MAWg83VmefqhkrR-7" value="Elapsed Duration" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" vertex="1">
<mxGeometry x="840" y="360" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="rB942MAWg83VmefqhkrR-9" value="Population" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" vertex="1">
<mxGeometry x="440" y="460" width="60" height="60" as="geometry" />
</mxCell>
<mxCell id="rB942MAWg83VmefqhkrR-10" value="Market Conditions" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" vertex="1">
<mxGeometry x="500" y="520" width="60" height="60" as="geometry" />
</mxCell>
<mxCell id="rB942MAWg83VmefqhkrR-12" value="Is likely Safe and Effective" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fillStyle=zigzag-line;" parent="1" vertex="1">
<mxGeometry x="770" y="242" width="120" height="59" as="geometry" />
</mxCell>
<mxCell id="rB942MAWg83VmefqhkrR-13" value="Decision to proceed with Phase III trial" style="text;strokeColor=#d79b00;fillColor=#ffe6cc;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" parent="rB942MAWg83VmefqhkrR-12" vertex="1">
<mxGeometry y="30" width="120" height="29" as="geometry" />
</mxCell>
<mxCell id="rB942MAWg83VmefqhkrR-29" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;strokeWidth=3;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="rB942MAWg83VmefqhkrR-6" target="rB942MAWg83VmefqhkrR-1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="619.5" y="320" as="sourcePoint" />
<mxPoint x="619.5" y="380" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rB942MAWg83VmefqhkrR-30" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;strokeWidth=3;exitX=0;exitY=0.25;exitDx=0;exitDy=0;" parent="1" source="rB942MAWg83VmefqhkrR-12" target="rB942MAWg83VmefqhkrR-6" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="610" y="151" as="sourcePoint" />
<mxPoint x="610" y="211" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rB942MAWg83VmefqhkrR-31" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=3;entryX=1;entryY=0.25;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="rB942MAWg83VmefqhkrR-34" target="rB942MAWg83VmefqhkrR-12" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="980" y="221" as="sourcePoint" />
<mxPoint x="720" y="101" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rB942MAWg83VmefqhkrR-33" value="Current Trial Safety and Efficacy" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fillStyle=zigzag-line;" parent="1" vertex="1">
<mxGeometry x="1001" y="520" width="115" height="60" as="geometry" />
</mxCell>
<mxCell id="rB942MAWg83VmefqhkrR-34" value="Previously Observed Safety and Efficacy" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fillStyle=zigzag-line;" parent="1" vertex="1">
<mxGeometry x="1001" y="241" width="115" height="60" as="geometry" />
</mxCell>
<mxCell id="rB942MAWg83VmefqhkrR-35" value="Fundamental Safety and Efficacy" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fillStyle=zigzag-line;" parent="1" vertex="1">
<mxGeometry x="1001" y="390" width="115" height="60" as="geometry" />
</mxCell>
<mxCell id="rB942MAWg83VmefqhkrR-39" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;strokeWidth=3;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="rB942MAWg83VmefqhkrR-33" target="rB942MAWg83VmefqhkrR-5" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1090" y="530" as="sourcePoint" />
<mxPoint x="1090" y="590" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rB942MAWg83VmefqhkrR-45" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;strokeWidth=3;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="rB942MAWg83VmefqhkrR-35" target="rB942MAWg83VmefqhkrR-34" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="961" y="330" as="sourcePoint" />
<mxPoint x="961" y="390" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rB942MAWg83VmefqhkrR-46" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;strokeWidth=3;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="rB942MAWg83VmefqhkrR-35" target="rB942MAWg83VmefqhkrR-33" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="971" y="340" as="sourcePoint" />
<mxPoint x="971" y="400" as="targetPoint" />
<Array as="points">
<mxPoint x="1061" y="490" />
<mxPoint x="1061" y="490" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="rB942MAWg83VmefqhkrR-48" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;strokeWidth=3;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="rB942MAWg83VmefqhkrR-9" target="rB942MAWg83VmefqhkrR-6" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="400" y="380" as="sourcePoint" />
<mxPoint x="400" y="440" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rB942MAWg83VmefqhkrR-51" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;strokeWidth=3;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="rB942MAWg83VmefqhkrR-10" target="rB942MAWg83VmefqhkrR-5" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="670" y="600" as="sourcePoint" />
<mxPoint x="670" y="660" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rB942MAWg83VmefqhkrR-52" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.75;entryY=1;entryDx=0;entryDy=0;strokeWidth=3;exitX=0;exitY=0.5;exitDx=0;exitDy=0;strokeColor=#1A1A1A;" parent="1" source="rB942MAWg83VmefqhkrR-10" target="rB942MAWg83VmefqhkrR-9" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="430" y="515" as="sourcePoint" />
<mxPoint x="430" y="575" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rB942MAWg83VmefqhkrR-54" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.25;entryY=0;entryDx=0;entryDy=0;strokeWidth=3;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="rB942MAWg83VmefqhkrR-9" target="rB942MAWg83VmefqhkrR-10" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="569.5" y="435" as="sourcePoint" />
<mxPoint x="569.5" y="495" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rB942MAWg83VmefqhkrR-60" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.75;entryDx=0;entryDy=0;strokeWidth=3;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="rB942MAWg83VmefqhkrR-10" target="rB942MAWg83VmefqhkrR-6" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="480" y="530" as="sourcePoint" />
<mxPoint x="570" y="280" as="targetPoint" />
<Array as="points">
<mxPoint x="530" y="285" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="rB942MAWg83VmefqhkrR-59" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.25;entryDx=0;entryDy=0;strokeWidth=4;exitX=1;exitY=0.5;exitDx=0;exitDy=0;jumpStyle=arc;jumpSize=14;strokeColor=#0000FF;" parent="1" source="rB942MAWg83VmefqhkrR-2" target="rB942MAWg83VmefqhkrR-5" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="740" y="480" as="sourcePoint" />
<mxPoint x="740" y="540" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="rB942MAWg83VmefqhkrR-64" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.75;entryY=0;entryDx=0;entryDy=0;strokeWidth=3;exitX=0;exitY=0.25;exitDx=0;exitDy=0;" parent="1" source="rB942MAWg83VmefqhkrR-7" target="rB942MAWg83VmefqhkrR-1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="650" y="380" as="sourcePoint" />
<mxPoint x="650" y="440" as="targetPoint" />
<Array as="points">
<mxPoint x="650" y="375" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="rB942MAWg83VmefqhkrR-66" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.25;entryY=1;entryDx=0;entryDy=0;strokeWidth=3;exitX=1;exitY=0.25;exitDx=0;exitDy=0;strokeColor=#999999;" parent="1" source="rB942MAWg83VmefqhkrR-1" target="rB942MAWg83VmefqhkrR-7" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="650" y="380" as="sourcePoint" />
<mxPoint x="650" y="440" as="targetPoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Loading…
Cancel
Save