diff --git a/vignettes/wpgsd_corr_example.Rmd b/vignettes/wpgsd_corr_example.Rmd index c9262f0..db155d2 100644 --- a/vignettes/wpgsd_corr_example.Rmd +++ b/vignettes/wpgsd_corr_example.Rmd @@ -19,7 +19,9 @@ $$Corr(Z_{ik},Z_{i'k'})=\frac{n_{i \wedge i',k \wedge k'}}{\sqrt{n_{ik}*n_{i'k'} ## Examples -In a 2-arm controlled clinical trial example with one primary endpoint (@anderson2022unified), there are 3 patient populations defined by the status of two biomarkers A and B : +We borrow an example from a paper by Anderson et al. (@anderson2022unified), demonstrated in Section 2 - Motivating Examples, we use Example 1 as the basis here. The setting will be: + +In a two-arm controlled clinical trial with one primary endpoint, there are three patient populations defined by the status of two biomarkers, A and B: * Biomarker A positive, the population 1, * Biomarker B positive, the population 2, @@ -41,8 +43,8 @@ library(gt) ```{r} event_tb <- tribble( ~Population, ~"Number of Event in IA", ~"Number of Event in FA", - "Population 1", 100,200, - "Population 2", 110,220, + "Population 1", 100, 200, + "Population 2", 110, 220, "Overlap of Population 1 and 2", 80, 160, "Overall Population", 225, 450 ) @@ -51,7 +53,7 @@ event_tb %>% tab_header(title = "Number of events at each population") ``` -### Example 1 - Correlation of different populations within the same analysis +### Correlation of different populations within the same analysis Let's consider a simple situation, we want to compare the population 1 and population 2 in only interim analyses. Then $k=1$, and to compare $H_{1}$ and $H_{2}$, the $i$ will be $i=1$ and $i=2$. The correlation matrix will be $$Corr(Z_{11},Z_{21})=\frac{n_{1 \wedge 2,1 \wedge 1}}{\sqrt{n_{11}*n_{21}}}$$ @@ -60,7 +62,7 @@ The number of events are listed as event_tbl <- tribble( ~Population, ~"Number of Event in IA", "Population 1", 100, - "Population 2", 110, + "Population 2", 110, "Overlap in population 1 and 2", 80 ) event_tbl %>% @@ -70,11 +72,11 @@ event_tbl %>% The the corrleation could be simply calculated as $$Corr(Z_{11},Z_{21})=\frac{80}{\sqrt{100*110}}=0.76$$ ```{r} -Corr1=80/sqrt(100*110) -round(Corr1,2) +Corr1 <- 80 / sqrt(100 * 110) +round(Corr1, 2) ``` -### Example 2 - Correlation of different analyses within the same population +### Correlation of different analyses within the same population Let's consider another simple situation, we want to compare single population, for example, the population 1, but in different analyses, interim and final analyses. Then $i=1$, and to compare IA and FA, the $k$ will be $k=1$ and $k=2$. The correlation matrix will be $$Corr(Z_{11},Z_{12})=\frac{n_{1 \wedge 1,1 \wedge 2}}{\sqrt{n_{11}*n_{12}}}$$ @@ -82,7 +84,7 @@ The number of events are listed as ```{r} event_tb2 <- tribble( ~Population, ~"Number of Event in IA", ~"Number of Event in FA", - "Population 1", 100,200 + "Population 1", 100, 200 ) event_tb2 %>% gt() %>% @@ -92,10 +94,11 @@ The the corrleation could be simply calculated as $$Corr(Z_{11},Z_{12})=\frac{100}{\sqrt{100*200}}=0.71$$ The 100 in the numerator is the overlap number of events of interim analysis and final analysis in population 1. ```{r} -Corr1=100/sqrt(100*200) -round(Corr1,2) +Corr1 <- 100 / sqrt(100 * 200) +round(Corr1, 2) ``` -### Example 3 - Correlation of different analyses and different population + +### Correlation of different analyses and different population Let's consider the situation that we want to compare population 1 in interim analyses and population 2 in final analyses. Then for different population, $i=1$ and $i=2$, and to compare IA and FA, the $k$ will be $k=1$ and $k=2$. The correlation matrix will be $$Corr(Z_{11},Z_{22})=\frac{n_{1 \wedge 1,2 \wedge 2}}{\sqrt{n_{11}*n_{22}}}$$ @@ -103,23 +106,24 @@ The number of events are listed as ```{r} event_tb3 <- tribble( ~Population, ~"Number of Event in IA", ~"Number of Event in FA", - "Population 1", 100,200, + "Population 1", 100, 200, "Population 2", 110, 220, - "Overlap in population 1 and 2", 80,160 - + "Overlap in population 1 and 2", 80, 160 ) event_tb3 %>% gt() %>% tab_header(title = "Number of events at each population & analyses in example 3") ``` + The correlation could be simply calculated as $$Corr(Z_{11},Z_{22})=\frac{80}{\sqrt{100*220}}=0.54$$ The 80 in the numerator is the overlap number of events of population 1 in interim analysis and population 2 in final analysis. ```{r} -Corr1=80/sqrt(100*220) -round(Corr1,2) +Corr1 <- 80 / sqrt(100 * 220) +round(Corr1, 2) ``` -Now we know how to calculate the correlation values under different situations, and the generate_corr() function was built based on this logic. We can directly calculate the results for each cross situation via the function. + +Now we know how to calculate the correlation values under different situations, and the $generate$_$corr()$ function was built based on this logic. We can directly calculate the results for each cross situation via the function. First, we need a event table including the information of the study. @@ -141,6 +145,23 @@ event <- tibble::tribble( 1, 3, 2, 200, 2, 3, 2, 220 ) +# The event table +event <- tibble::tribble( + ~H1, ~H2, ~Analysis, ~Event, + 1, 1, 1, 100, + 2, 2, 1, 110, + 3, 3, 1, 225, + 1, 2, 1, 80, + 1, 3, 1, 100, + 2, 3, 1, 110, + 1, 1, 2, 200, + 2, 2, 2, 220, + 3, 3, 2, 450, + 1, 2, 2, 160, + 1, 3, 2, 200, + 2, 3, 2, 220 +) + event %>% gt() %>% tab_header(title = "Number of events at each population & analyses") @@ -155,4 +176,5 @@ For example: H1=1, H2=1, Analysis=1, Event=100 indicates that in the first popul Another example: H1=1, H2=2, Analysis=2, Event=160 indicates that the number of overlapping cases where the experimental treatment is superior to the control in population 1 and 2 in the final analysis is 160. -*To be noticed, the column names in this function are fixed to be 'H1, H2, Analysis, Event'. \ No newline at end of file +*To be noticed, the column names in this function are fixed to be 'H1, H2, Analysis, Event'. +