class: center, middle, inverse, title-slide .title[ # Topological Data Analysis ] .subtitle[ ## A primer ] .author[ ###
Erik Amézquita
] .institute[ ### Division of Plant Sciences & Technology
Department of Mathematics
University of Missouri
- ] .date[ ### 2023-10-26
-
Published Review
10.1002/dvdy.175
] --- class: inverse # Shape has data, and data has shape <div class="row"> <div class="column" style="max-width:19%"> <img src="../../barley/figs/S019_L0_1.gif"></img> <img src="https://botany.one/wp-content/uploads/2018/08/mcy061.jpg"></img> </div> <div class="column" style="max-width:39%"> <iframe width="375" height="210" src="https://www.youtube-nocookie.com/embed/LxNSbrfq3kY?si=Qw9qv3Og1XcPIUyg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe> <img src="../figs/Mapper_ColorBy_Tissue.png"></img> </div> <div class="column" style="max-width:41%"> <img src="https://i.kinja-img.com/gawker-media/image/upload/s--usj3b0wY--/c_fit,fl_progressive,q_80,w_636/ve69bswtlq7vqih5qrb1.gif"></img> <img src="../figs/g86.png"></img> </div> </div> --- background-image: url("../../demat/figs/fam9_3.png") background-size: 100px background-position: 98% 2% # From MX to MI to MO at MU .left-column[ ![](../../img/dvdy216-toc-0001-m.jpg) ] .right-column[ - 2013 - 2018 : Math @ at the Universidad de Guanajuato and CIMAT. - 2016 - 2018 : Bachelor thesis: **Math + Archaeology**. Use TDA to quantify and classify the shape of pre-Columbian masks found in the Templo Mayor in Mexico City. - 2018 - 2023 : CMSE @ Michigan State University. **Came for the math. Stayed for the plants.** - 2023 - ???? : PFFIE Postdoc Fellow @ Division of Plant Sciences & Department of Mathematics at Mizzou ] ——————————————— <div class="row"> <div class="column" style="max-width:49%"> <iframe width="375" height="210" src="https://www.youtube-nocookie.com/embed/oM9kAq0PBvw?controls=0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> </div> <div class="column" style="max-width:49%"> <iframe width="375" height="210" src="https://www.youtube-nocookie.com/embed/V39K58evWlU?controls=0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> </div> </div> --- # Roadmap for today - **I promise you the bulk of slides are just stills from time-lapses** - It is impossible to cover all there is to know about Topological Data Analysis in a single session - Go over some basic lingo and applications - Leave plenty of pointers - Slides available --- class: inverse, middle, center # 1. Motivating Persistence ## Single-linkage clustering --- background-image: url("../figs/circs2kiss_just_points.svg") background-size: 500px background-position: 50% 95% # How many connected componets you see? - Infer the underlying topology of a *sampled* finite metric space - Beyond the naive discrete topology --- background-image: url("../figs/circs2kiss_just_points.svg") background-size: 500px background-position: 50% 95% # Single linkage clustering of `\(X\)` - For `\(R\geq0\)`, consider the relation `\(\sim_R\)` `$$x\sim_Rx'\Leftrightarrow d(x,x')\leq R.$$` - Let `\(\simeq_R\)` be the equivalence relation generated by `\(\sim_R\)`. - The equivalence classes under `\(\simeq_R\)` partition `\(X\)` into connected components - Different `\(R\)`s can generate different partitions - *"What is the right `\(R\)`?"*: Ill-posed question --- background-image: url("../figs/circs2kiss_vr0_000.svg") background-size: 800px background-position: 50% 75% # Compatibility accross changes in `\(R\)` `$$x\sim_Rx'\Leftrightarrow d(x,x')\leq R.$$` - If `\(R\leq R'\)`, then the partition `\(X_R\)` by `\(\simeq_R\)` is coarser than the partition `\(X_{R'}\)` by `\(\simeq_{R'}\)` --- background-image: url("../figs/circs2kiss_vr0_001.svg") background-size: 800px background-position: 50% 75% # Compatibility accross changes in `\(R\)` `$$x\sim_Rx'\Leftrightarrow d(x,x')\leq R.$$` - If `\(R\leq R'\)`, then the partition `\(X_R\)` by `\(\simeq_R\)` is coarser than the partition `\(X_{R'}\)` by `\(\simeq_{R'}\)` --- background-image: url("../figs/circs2kiss_vr0_002.svg") background-size: 800px background-position: 50% 75% # Compatibility accross changes in `\(R\)` `$$x\sim_Rx'\Leftrightarrow d(x,x')\leq R.$$` - If `\(R\leq R'\)`, then the partition `\(X_R\)` by `\(\simeq_R\)` is coarser than the partition `\(X_{R'}\)` by `\(\simeq_{R'}\)` --- background-image: url("../figs/circs2kiss_vr0_003.svg") background-size: 800px background-position: 50% 75% # Compatibility accross changes in `\(R\)` `$$x\sim_Rx'\Leftrightarrow d(x,x')\leq R.$$` - If `\(R\leq R'\)`, then the partition `\(X_R\)` by `\(\simeq_R\)` is coarser than the partition `\(X_{R'}\)` by `\(\simeq_{R'}\)` --- background-image: url("../figs/circs2kiss_vr0_004.svg") background-size: 800px background-position: 50% 75% # Compatibility accross changes in `\(R\)` `$$x\sim_Rx'\Leftrightarrow d(x,x')\leq R.$$` - If `\(R\leq R'\)`, then the partition `\(X_R\)` by `\(\simeq_R\)` is coarser than the partition `\(X_{R'}\)` by `\(\simeq_{R'}\)` --- background-image: url("../figs/circs2kiss_vr0_005.svg") background-size: 800px background-position: 50% 75% # Compatibility accross changes in `\(R\)` `$$x\sim_Rx'\Leftrightarrow d(x,x')\leq R.$$` - If `\(R\leq R'\)`, then the partition `\(X_R\)` by `\(\simeq_R\)` is coarser than the partition `\(X_{R'}\)` by `\(\simeq_{R'}\)` --- background-image: url("../figs/circs2kiss_vr0_006.svg") background-size: 800px background-position: 50% 75% # Compatibility accross changes in `\(R\)` `$$x\sim_Rx'\Leftrightarrow d(x,x')\leq R.$$` - If `\(R\leq R'\)`, then the partition `\(X_R\)` by `\(\simeq_R\)` is coarser than the partition `\(X_{R'}\)` by `\(\simeq_{R'}\)` --- background-image: url("../figs/circs2kiss_vr0_007.svg") background-size: 800px background-position: 50% 75% # Compatibility accross changes in `\(R\)` `$$x\sim_Rx'\Leftrightarrow d(x,x')\leq R.$$` - If `\(R\leq R'\)`, then the partition `\(X_R\)` by `\(\simeq_R\)` is coarser than the partition `\(X_{R'}\)` by `\(\simeq_{R'}\)` --- background-image: url("../figs/circs2kiss_vr0_008.svg") background-size: 800px background-position: 50% 75% # Compatibility accross changes in `\(R\)` `$$x\sim_Rx'\Leftrightarrow d(x,x')\leq R.$$` - If `\(R\leq R'\)`, then the partition `\(X_R\)` by `\(\simeq_R\)` is coarser than the partition `\(X_{R'}\)` by `\(\simeq_{R'}\)` --- background-image: url("../figs/circs2kiss_vr0_009.svg") background-size: 800px background-position: 50% 75% # Compatibility accross changes in `\(R\)` `$$x\sim_Rx'\Leftrightarrow d(x,x')\leq R.$$` - If `\(R\leq R'\)`, then the partition `\(X_R\)` by `\(\simeq_R\)` is coarser than the partition `\(X_{R'}\)` by `\(\simeq_{R'}\)` --- background-image: url("../figs/circs2kiss_vr0_010.svg") background-size: 800px background-position: 50% 75% # Compatibility accross changes in `\(R\)` `$$x\sim_Rx'\Leftrightarrow d(x,x')\leq R.$$` - If `\(R\leq R'\)`, then the partition `\(X_R\)` by `\(\simeq_R\)` is coarser than the partition `\(X_{R'}\)` by `\(\simeq_{R'}\)` --- background-image: url("../figs/circs2kiss_vr0_011.svg") background-size: 800px background-position: 50% 75% # Compatibility accross changes in `\(R\)` `$$x\sim_Rx'\Leftrightarrow d(x,x')\leq R.$$` - If `\(R\leq R'\)`, then the partition `\(X_R\)` by `\(\simeq_R\)` is coarser than the partition `\(X_{R'}\)` by `\(\simeq_{R'}\)` --- background-image: url("../figs/circs2kiss_vr0_012.svg") background-size: 800px background-position: 50% 75% # Compatibility accross changes in `\(R\)` `$$x\sim_Rx'\Leftrightarrow d(x,x')\leq R.$$` - If `\(R\leq R'\)`, then the partition `\(X_R\)` by `\(\simeq_R\)` is coarser than the partition `\(X_{R'}\)` by `\(\simeq_{R'}\)` --- background-image: url("../figs/circs2kiss_vr0_013.svg") background-size: 800px background-position: 50% 75% # Compatibility accross changes in `\(R\)` `$$x\sim_Rx'\Leftrightarrow d(x,x')\leq R.$$` - If `\(R\leq R'\)`, then the partition `\(X_R\)` by `\(\simeq_R\)` is coarser than the partition `\(X_{R'}\)` by `\(\simeq_{R'}\)` --- background-image: url("../figs/circs2kiss_vr0_014.svg") background-size: 800px background-position: 50% 75% # Compatibility accross changes in `\(R\)` `$$x\sim_Rx'\Leftrightarrow d(x,x')\leq R.$$` - If `\(R\leq R'\)`, then the partition `\(X_R\)` by `\(\simeq_R\)` is coarser than the partition `\(X_{R'}\)` by `\(\simeq_{R'}\)` --- background-image: url("../figs/circs2kiss_vr0_015.svg") background-size: 800px background-position: 50% 75% # Compatibility accross changes in `\(R\)` `$$x\sim_Rx'\Leftrightarrow d(x,x')\leq R.$$` - If `\(R\leq R'\)`, then the partition `\(X_R\)` by `\(\simeq_R\)` is coarser than the partition `\(X_{R'}\)` by `\(\simeq_{R'}\)` --- background-image: url("../figs/circs2kiss_vr0_016.svg") background-size: 800px background-position: 50% 75% # Compatibility accross changes in `\(R\)` `$$x\sim_Rx'\Leftrightarrow d(x,x')\leq R.$$` - If `\(R\leq R'\)`, then the partition `\(X_R\)` by `\(\simeq_R\)` is coarser than the partition `\(X_{R'}\)` by `\(\simeq_{R'}\)` --- background-image: url("../figs/circs2kiss_vr0_017.svg") background-size: 800px background-position: 50% 75% # Compatibility accross changes in `\(R\)` `$$x\sim_Rx'\Leftrightarrow d(x,x')\leq R.$$` - If `\(R\leq R'\)`, then the partition `\(X_R\)` by `\(\simeq_R\)` is coarser than the partition `\(X_{R'}\)` by `\(\simeq_{R'}\)` --- background-image: url("../figs/circs2kiss_vr0_018.svg") background-size: 800px background-position: 50% 75% # Compatibility accross changes in `\(R\)` `$$x\sim_Rx'\Leftrightarrow d(x,x')\leq R.$$` - If `\(R\leq R'\)`, then the partition `\(X_R\)` by `\(\simeq_R\)` is coarser than the partition `\(X_{R'}\)` by `\(\simeq_{R'}\)` --- background-image: url("../figs/circs2kiss_vr0_019.svg") background-size: 800px background-position: 50% 75% # Compatibility accross changes in `\(R\)` `$$x\sim_Rx'\Leftrightarrow d(x,x')\leq R.$$` - If `\(R\leq R'\)`, then the partition `\(X_R\)` by `\(\simeq_R\)` is coarser than the partition `\(X_{R'}\)` by `\(\simeq_{R'}\)` --- class: inverse, middle, center # Persistence set ## Why take one value when you can take all of them? --- # Definition: Persistent set - A *persistent set* is a family of sets `\(\{X_R\}_{R\in\mathbb{R}}\)` together with set maps `$$\varphi_R^{R'}\;:\;X_R\to X_{R'}\quad\text{for all}\quad R\leq R',$$` - so that `$$\varphi_{R'}^{R''}\varphi_{R}^{R'} = \varphi_{R}^{R''}\quad\text{for all}\quad R\leq R'\leq R''.$$` - The `\(X_R\)`s can be simplicial complexes, vector spaces, topological spaces, etc. ### Persistent Homology - Your good, ol' simplicial homology but parameterized by `\(\mathbb{R}\)`. --- # 1st TDA Ingredient: Complexes - Think the data as a collection of elementary building blocks ( _simplices_ ) Vertices | Edges | Faces | Tetrahedra ---------|-------|-------|------- 0-dim | 1-dim | 2-dim | 3-dim - A collection of cells is a _simplicial complex_ - Count the number of topologically invariant features ( _holes_ ): Connected components | Loops | Voids ---------------------|-------|------- 0-dim | 1-dim | 2-dim - Example with 3 connected components, 1 loop, 1 voids <img src="../figs/complex-good.svg" width="350" style="display: block; margin: auto;" /> --- # 2nd TDA Ingredient: Filters - Each cell is assigned a real value which defines how the complex is constructed. - Observe how the number of topological features change as the complex grows. .pull-left[ <img src="../../barley/figs/eigcurv_filter.gif" width="250px" style="display: block; margin: auto;" /><img src="../../barley/figs/gaussian_density_filter.gif" width="250px" style="display: block; margin: auto;" /> ] .pull-right[ <img src="../../barley/figs/eccentricity_filter.gif" width="250px" style="display: block; margin: auto;" /><img src="../../barley/figs/vrips_ver2.gif" width="250px" style="display: block; margin: auto;" /> ] --- class: inverse, center, middle # Persistent Homology ## Your good, ol' simplicial homology but parameterized by `\(\mathbb{R}\)`. --- # Ye olde simplicial homology - A `\(d\)`-dimensional simplex `\(\sigma\)` is the convex hulls of `\(d\)` vertices in general position. <img src="../figs/simplices.svg" width="300" style="display: block; margin: auto;" /> - Simplicial complexes **K** are collections of nicely glued simplices. .pull-left[ <img src="../figs/complex-good.svg" width="300" style="display: block; margin: auto;" /> - Good complex ] .pull-right[ <img src="../figs/complex-bad.svg" width="300" style="display: block; margin: auto;" /> - Bad complex ] - Define *q-chains* `\(C_q = \left\{\sum_{k=1}^r \lambda_k\sigma_k\,:\,\lambda_k\in\mathbb{Z_2},\,\sigma_k \textrm{ a } q\textrm{-simplex}\right\}\)`. - Favor the use `\(\mathbb{Z_2}\)` instead of `\(\mathbb{Z}\)` to keep things manageable. --- # Ye olde groups of homology - `\(\partial_q:C_q\to C_{q-1}\)` with `\(\partial\sigma= \sum_{i=0}^q (-1)^i(\mathbf v_0,\ldots,\mathbf v_{i-1},\mathbf v_{i+1}, \ldots, \mathbf v_{n}).\)` - Recall that `\(\partial^2 = \partial_q\circ\partial_{q-1}=0\)`. <img src="../figs/boundary-example.svg" width="500" style="display: block; margin: auto;" /> - `\(\partial_2(\partial_3(K)) = \mathbf{(v-u)+(w-v)+(x-w)+(y-x)+(u-y)=0}\)`. - Group of *q-cycles* `\(Z_q(K) = \ker\partial_q\)`. - Group of *q-boundary cycles* `\(B_q(K) = \text{im}\:\partial_{q+1}\)` - The *q-th group of homology* is `\(H_q(K)=Z_q(K)/B_q(K)\)` - The *q-th Betti number* is `\(\beta_q(K)=\dim(H_q(K))\)` --- # Now throw in persistence - A *filtration* of simplicial complex `\(\mathbf K\)` is a collection of nested subcomplexes `\(\mathbf K_0\subset\mathbf K_0\subset\ldots\subset\mathbf K_m=\mathbf K\)`. <img src="https://www.frontiersin.org/files/Articles/637684/fphys-12-637684-HTML/image_m/fphys-12-637684-g003.jpg" width="400" style="display: block; margin: auto;" /> - We have canonical inclusions `\(\iota_{i,j}:\mathbf K_i\to\mathbf K_j\)`. - We see that `\(\iota_{i,k} = \iota_{j,k}\circ\iota_{i,j}\)` for any `\(0\leq i\leq j\leq k\leq m\)`. - (Abusing notation) These correspond to inclusions `\(\iota_{i,j}:H_q(\mathbf K_i)\to H_q(\mathbf K_j)\)` for `\(q=0,1,2,\ldots\)`. - The `\((i,j)\)`-th persistent `\(q\)`-th homology group is `\(H_{i,j;q}(\mathbf K) = \text{Im}\,(\iota_{i,j})\)`. - It's dimension is the `\((i,j)\)`-th persistent `\(q\)`-th Betti number, `\(\beta_{i,j;q}(\mathbf K)\)`. - A class `\(\alpha\in H_q(\mathbf K_i)\)` *is born* at time `\(i\)` if `\(\alpha\notin H_{i-1,i;q}(\mathbf K)\)`. - This class `\(\alpha\in H_q(\mathbf K_j)\)` *dies* at time `\(j+1\)` if `\(\iota_{j,j+1}(\alpha)\in H_{i,j;q}(\mathbf K)\)`. --- background-image: url("../figs/vr1_00.svg") background-size: 500px background-position: 50% 90% # A toy Vietoris-Rips filtration example Consider a collection of vertices `\(\{v_\lambda\}_{\lambda\in\Lambda}\)` and `\(r\geq0\)`. The subset `\(\{v_0,\ldots,v_n\}\)` is a simplex in the `\(VR(r)\)` simplicial complex iff `$$d(v_i,v_j)\leq r\quad\text{ for all }\quad i,j\in\{0,\ldots,n\}.$$` --- background-image: url("../figs/vr1_01.svg") background-size: 500px background-position: 50% 90% # A toy Vietoris-Rips filtration example Consider a collection of vertices `\(\{v_\lambda\}_{\lambda\in\Lambda}\)` and `\(r\geq0\)`. The subset `\(\{v_0,\ldots,v_n\}\)` is a simplex in the `\(VR(r)\)` simplicial complex iff `$$d(v_i,v_j)\leq r\quad\text{ for all }\quad i,j\in\{0,\ldots,n\}.$$` --- background-image: url("../figs/vr1_02.svg") background-size: 500px background-position: 50% 90% # A toy Vietoris-Rips filtration example Consider a collection of vertices `\(\{v_\lambda\}_{\lambda\in\Lambda}\)` and `\(r\geq0\)`. The subset `\(\{v_0,\ldots,v_n\}\)` is a simplex in the `\(VR(r)\)` simplicial complex iff `$$d(v_i,v_j)\leq r\quad\text{ for all }\quad i,j\in\{0,\ldots,n\}.$$` --- background-image: url("../figs/vr1_03.svg") background-size: 500px background-position: 50% 90% # A toy Vietoris-Rips filtration example Consider a collection of vertices `\(\{v_\lambda\}_{\lambda\in\Lambda}\)` and `\(r\geq0\)`. The subset `\(\{v_0,\ldots,v_n\}\)` is a simplex in the `\(VR(r)\)` simplicial complex iff `$$d(v_i,v_j)\leq r\quad\text{ for all }\quad i,j\in\{0,\ldots,n\}.$$` --- background-image: url("../figs/vr1_04.svg") background-size: 500px background-position: 50% 90% # A toy Vietoris-Rips filtration example Consider a collection of vertices `\(\{v_\lambda\}_{\lambda\in\Lambda}\)` and `\(r\geq0\)`. The subset `\(\{v_0,\ldots,v_n\}\)` is a simplex in the `\(VR(r)\)` simplicial complex iff `$$d(v_i,v_j)\leq r\quad\text{ for all }\quad i,j\in\{0,\ldots,n\}.$$` --- background-image: url("../figs/vr1_05.svg") background-size: 500px background-position: 50% 90% # A toy Vietoris-Rips filtration example Consider a collection of vertices `\(\{v_\lambda\}_{\lambda\in\Lambda}\)` and `\(r\geq0\)`. The subset `\(\{v_0,\ldots,v_n\}\)` is a simplex in the `\(VR(r)\)` simplicial complex iff `$$d(v_i,v_j)\leq r\quad\text{ for all }\quad i,j\in\{0,\ldots,n\}.$$` --- background-image: url("../figs/vr1_06.svg") background-size: 500px background-position: 50% 90% # A toy Vietoris-Rips filtration example Consider a collection of vertices `\(\{v_\lambda\}_{\lambda\in\Lambda}\)` and `\(r\geq0\)`. The subset `\(\{v_0,\ldots,v_n\}\)` is a simplex in the `\(VR(r)\)` simplicial complex iff `$$d(v_i,v_j)\leq r\quad\text{ for all }\quad i,j\in\{0,\ldots,n\}.$$` --- background-image: url("../figs/vr1_07.svg") background-size: 500px background-position: 50% 90% # A toy Vietoris-Rips filtration example Consider a collection of vertices `\(\{v_\lambda\}_{\lambda\in\Lambda}\)` and `\(r\geq0\)`. The subset `\(\{v_0,\ldots,v_n\}\)` is a simplex in the `\(VR(r)\)` simplicial complex iff `$$d(v_i,v_j)\leq r\quad\text{ for all }\quad i,j\in\{0,\ldots,n\}.$$` --- background-image: url("../figs/barcode_vr1.svg") background-size: 600px background-position: 50% 90% # Summarizing results in a barcode .pull-left[ <img src="../figs/vr1_summary.svg" width="400" style="display: block; margin: auto;" /> ] .pull-right[ - Five connected components are born from the get-go - Four of them merge into one at `\(r_4\)` - A hole is born with this merge - This hole eventually is filled with triangles at `\(r_6\)`. ] --- # Persistence diagrams .pull-left[ <img src="../figs/persistence_diagrams.svg" width="400" style="display: block; margin: auto;" /> ] .pull-right[ - Consider `\(C_{i,j;q}\)` all the `\(q\)`-classes that are born at time `\(i\)` and die at time `\(j\)` - The associated persistence diagram `\(\text{dgm}(\mathcal{F})\)` is a multiset `\(\text{dgm}(\mathcal{F}) = \bigcup_{q=0}^{n}\{(i,j) : \alpha_{i,j;q}\in C_{i,j;q}\}\cup\textrm{diag}\)` ] --- background-image: url("../figs/bottleneck_diagram.svg") background-size: 600px background-position: 50% 90% # Bottleneck distance and stability - Consider `\(\text{dgm}_1\)`, `\(\text{dgm}_2\)` two persistence diagrams. The *bottleneck distance* between them is `$$d_B(\text{dgm}_1,\text{dgm}_2) = \inf_\gamma\sup_{p\in\text{dgm}_1}\|p-\gamma(p)\|_\infty.$$` - Where `\(\gamma\)` is a bijection between the `\(q\)`-th `\(\text{dgm}_1\)` and `\(\text{dgm}_2\)` - **Persistence diagrams are stable under the bottleneck distance!** --- class: inverse, center, middle # A word on statistical caution <img src="../figs/vr2_summary.svg" width="400" style="display: block; margin: auto;" /> --- background-image: url("https://anatomypubs.onlinelibrary.wiley.com/cms/asset/affff43e-32c2-4f91-ade4-e1d3020ed4ee/dvdy175-fig-0005-m.jpg") background-size: 500px background-position: 50% 90% # The underbelly - The space of persistence diagrams is notoriously difficult to work with - Hard to deal with Hausdorff noise - Plenty of open questions on multiparameter persistence (parameterizing simplicial homology with `\(\mathbb{R}^m\)`). - Unclear on how to distinguish noise from nuanced signal - **Interpretability** of the results: what does a persistent diagram really represents? --- background-image: url("../figs/mapper_b_11.svg") background-size: 425px background-position: 50% 95% # Plenty of topics left to cover - Persistence landscapes, persistence images, and other more amenable representations of persistent topological features. - Bootstraping to distinguish noise from signal. - Density-based bi-parameter persistence to deal with Hausdorff noise. - A central-limit-theorem-like theorem for persistence for different classic topological spaces and other probabilistic insights. - Persistent Homology Transform and the Euler Characteristic Transform. - Reducing and clustering high-dimensional data with Mapper. --- class: inverse, middle, center # Literature examples --- ### Detecting holes → detect cancerous tissue .pull-left[ ![](https://ars.els-cdn.com/content/image/1-s2.0-S1361841518302688-gr1.jpg) ] .pull-right[ ![](https://ars.els-cdn.com/content/image/1-s2.0-S1361841518302688-gr2.jpg) ] <p style="font-size: 10px; text-align: right; color: Grey;"> Credits: <a href="https://doi.org/10.1016/j.media.2019.03.014">Qaiser <em>et al.</em> (2019)</a></p> --- ### Detect holes → detect reassortment and horizontal evolution .pull-left[ ![](https://www.pnas.org/cms/10.1073/pnas.1313480110/asset/ce30e9df-d595-4520-a68a-74f3c6f151d1/assets/graphic/pnas.1313480110fig01.jpeg) ] .pull-right[ ![](https://www.pnas.org/cms/10.1073/pnas.1313480110/asset/b733c3a3-00f2-43d5-b372-9da25f3d33c9/assets/graphic/pnas.1313480110fig02.jpeg) ] <p style="font-size: 10px; text-align: right; color: Grey;"> Credits: <a href="https://doi.org/10.1073/pnas.1313480110">Chan <em>et al.</em> (2013)</a></p> --- ### Detect holes → detect open and closed conformations .pull-left[ ![](https://www.degruyter.com/document/doi/10.1515/sagmb-2015-0057/asset/graphic/j_sagmb-2015-0057_fig_001.jpg) ![](https://www.degruyter.com/document/doi/10.1515/sagmb-2015-0057/asset/graphic/j_sagmb-2015-0057_fig_012.jpg) ] .pull-right[ ![](https://www.degruyter.com/document/doi/10.1515/sagmb-2015-0057/asset/graphic/j_sagmb-2015-0057_fig_010.jpg) ] <p style="font-size: 10px; text-align: right; color: Grey;"> Credits: <a href="https://doi.org/10.1515/sagmb-2015-0057">Kovacev-Nikolic <em>et al.</em> (2016)</a></p> --- ### Detect componets across the morphospace → detect leaf development <img src="../figs/g86.png" width="450" style="display: block; margin: auto;" /> <p style="font-size: 10px; text-align: right; color: Grey;"> Credits: <a href="https://doi.org/10.1101/2023.07.14.549010">Percival <em>et al.</em> (2023)</a></p> --- ### Detect changes in Euler characteristics → detect different barley varieties <div class="row"> <div class="column" style="max-width:25%; font-size: 15px;"> <img style="padding: 25px 0 35px 0;" src="../../barley/figs/S019_L0_1.gif"> <p style="font-size: 20px; text-align: center; color: DarkRed;">X-ray CT scans</p> </div> <div class="column" style="max-width:40%; padding: 0 25px 0 25px; font-size: 15px;"> <img src="../../barley/figs/ecc_X.gif"> <p style="font-size: 20px; text-align: center; color: DarkRed;">Euler Characteristic Transform</p> </div> <div class="column" style="max-width:35%; font-size: 15px;"> <table class="tg"> <thead> <tr> <th class="tg-0pky">Shape descriptors</th> <th class="tg-0pky">No. of descriptors</th> <th class="tg-0pky">F1</th> </tr> </thead> <tbody> <tr> <td class="tg-2bhk">Traditional</td> <td class="tg-2bhk">11</td> <td class="tg-2bhk">0.55 ± 0.019</td> </tr> <tr> <td class="tg-0pky">Topological + UMAP</td> <td class="tg-0pky">12</td> <td class="tg-0pky">0.74 ± 0.016</td> </tr> <tr> <td class="tg-2bhk">Combined</td> <td class="tg-2bhk">23</td> <td class="tg-2bhk">0.86 ± 0.010</td> </tr> </tbody> </table> <p style="font-size: 20px; text-align: center; color: DarkRed;">Classify 28 different accessions</p> </div> </div> <p style="font-size: 10px; text-align: right; color: Grey;"> Credits: <a href="https://doi.org/10.1093/insilicoplants/diab033">Amézquita <em>et al.</em> (2023)</a></p> --- class: inverse, middle, center # Applied Topology `\(\oplus\)` Plant Biology ## Current projects in the works --- ## Quantifying the movement of plants and genes <div style="text-align:center;"> <video width="500" controls> <source src="../../cuscuta/video/4pm_rep7_plant_00.mp4" type="video/mp4"> </video> </div> <p style="font-size: 9px; text-align: right; color: Grey;"> Credits: Park Lab. <em>In progress</em></p> <img src="../../mcarto/figs/D2_GLYMA_05G092200_z_kde_pd_suplevel_by_both_00609.jpg" width="500" style="display: block; margin: auto;" /> <p style="font-size: 9px; text-align: right; color: Grey;"> Credits: Libault Lab. <em>In progress</em></p> --- class: inverse, middle, center # Where to go now? --- # Literature review and growing community <img src="../figs/amezquita_etal_2020.png" width="500" style="display: block; margin: auto;" /> .pull-left[ <img src="../figs/logo_aatrn_black_transparent_background.png" width="200" style="display: block; margin: auto;" /> ] .pull-right[ ![](../figs/gtml_slack.png) - Applied Algebraic Topology Research Network ] --- background-image: url("https://lh5.googleusercontent.com/vYDMaU7pTcgKtQ3WqwqBVWcL4ckz5k8Mfseh3KzN53O7nUDUUKox-ISPBIloXZDoi6_a5XNfQanQ6dRGhU7A1-w=w16383") background-size: 100px background-position: 99% 1% # www.AATRN.net <p align="center"> <iframe width="800" height="500" src="https://www.aatrn.net/home" title="AATRN"> </iframe> </p> <p style="font-size: 10px; text-align: right; color: Grey;"><a href="https://www.aatrn.net/home" target="_blank">Original link</a></p> --- # Actively mantained C/C++ and python .pull-left[ ![](https://gudhi.inria.fr/assets/img/home.png) - [gudhi](https://gudhi.inria.fr/) <img src="https://scikit-tda.org/_images/ripser.png" width="200" style="display: block; margin: auto;" /> - [ripser](https://github.com/Ripser/ripser) ] .pull-right[ ![](https://raw.githubusercontent.com/giotto-ai/giotto-tda/master/doc/images/tda_logo.svg) - [giotto-tda](https://github.com/giotto-ai/giotto-tda) <img src="https://scikit-tda.org/_static/logo.png" width="200" style="display: block; margin: auto;" /> - [scikit-tda](https://scikit-tda.org/) ] --- class: inverse # Thanks! - eah4d@missouri.edu - 240a Bond Life Sciences Center Building - [https://ejamezquita.github.io/](https://ejamezquita.github.io/) - Slides: https://ejamezquita.github.io/tda/slides/mizzou_2023.html ## Questions? <img src="https://64.media.tumblr.com/895f079d8cc1128b5ce3ca7aacf57389/9ff35c052f5d8802-16/s500x750/55486cc6b04f5f7192d0002707ca8b7e550e4db8.gifv" width="200" style="display: block; margin: auto;" />