Skip to contents

Introduction

To apply spatial summary statistics, like Ripley’s K, in analyses of multiplexed spatial proteomics imaging data, the user is required to select a radius in which to quantify the degree of clustering, repulsion, or lack thereof. The optimal radius, however, is typically unknown beforehand. To this end, it can be helpful to consider a range of candidate radii at which to calculate Ripley’s K and test for an association at each radius, aggregating the resulting p-values. This is the idea behind the SPatial Omnibus Test (SPOT) (@samorodnitsky2024spatial). In this vignette, we discuss integrating spagg with SPOT using the associated R package, SPOT. This will allow us to compute Ripley’s K at several candidate radii, aggregate the resulting spatial summary statistics for a given radius within a sample across regions-of-interest (ROIs), test for an association between the aggregated spatial summary and an outcome, and combine the results across radii.

We first load in the necessary packages, including the SPOT package, which is available on Github.

library(spagg)
library(SPOT)
library(magrittr)
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
library(ggplot2)

Loading in the Data

For this analysis, we will use the non-small cell lung cancer dataset used in the Non-Small Cell Lung Cancer Analysis vignette. As described there, we will downloaded the data from http://juliawrobel.com/MI_tutorial/MI_Data.html but is also available from the VectraPolarisData R package. For the purposes of this illustration, we do some basic tidying of the data prior to analysis. The steps to this are similar to those given in the link given above. These steps are shown below.

# Load in the data
load(url("http://juliawrobel.com/MI_tutorial/Data/lung.RDA"))

# Label the immune cell types
lung_df <- lung_df %>%
  mutate(type = case_when(
    phenotype_cd14 == "CD14+" ~ "CD14+ cell",
    phenotype_cd19 == "CD19+" ~ "CD19+ B cell",
    phenotype_cd4 == "CD4+" ~ "CD4+ T cell",
    phenotype_cd8 == "CD8+" ~ "CD8+ T cell",
    phenotype_other == "Other+" ~ "Other",
    phenotype_ck == "CK+" ~ "Tumor"
  ))

# Add a column indicating if a sample has >=5% MHCII+ tumor cells
lung_df <- lung_df %>%                       
  dplyr::group_by(patient_id) %>% 
  dplyr::mutate(mhcII_high = as.numeric(mhcII_status == "high"))

# Change colnames
colnames(lung_df)[colnames(lung_df) == "patient_id"] <- "PID"

# Add a PID column
colnames(lung_df)[colnames(lung_df) == "image_id"] <- "id"

# Filter to just cells detected within the tumor
lung_df_tumor <- lung_df %>% filter(tissue_category == "Tumor")

# Remove grouping
lung_df_tumor <- lung_df_tumor %>% dplyr::ungroup()

# Remove NA types
lung_df_tumor <- lung_df_tumor %>% filter(!is.na(type))

# Show the first few rows of the data
head(lung_df_tumor)
#> # A tibble: 6 × 39
#>   id              PID   cell_id     x     y gender mhcII_status age_at_diagnosis
#>   <chr>           <chr>   <dbl> <dbl> <dbl> <chr>  <chr>                   <dbl>
#> 1 #01 0-889-121 … #01 …       5  453    2.5 F      low                        85
#> 2 #01 0-889-121 … #01 …       6  463    2.5 F      low                        85
#> 3 #01 0-889-121 … #01 …      11  464    8.5 F      low                        85
#> 4 #01 0-889-121 … #01 …      12  538   10   F      low                        85
#> 5 #01 0-889-121 … #01 …      21  522   20.5 F      low                        85
#> 6 #01 0-889-121 … #01 …      22  566.  25   F      low                        85
#> # ℹ 31 more variables: stage_at_diagnosis <chr>, stage_numeric <dbl>,
#> #   pack_years <dbl>, survival_days <dbl>, survival_status <dbl>,
#> #   cause_of_death <chr>, adjuvant_therapy <chr>,
#> #   time_to_recurrence_days <dbl>, recurrence_or_lung_ca_death <dbl>,
#> #   tissue_category <chr>, cd19 <dbl>, cd3 <dbl>, cd14 <dbl>, cd8 <dbl>,
#> #   hladr <dbl>, ck <dbl>, dapi <dbl>, entire_cell_axis_ratio <dbl>,
#> #   entire_cell_major_axis <dbl>, entire_cell_minor_axis <dbl>, …

There are four immune cell types available in this dataset: CD14+ cell, CD4+ T cell, CD8+ T cell, and CD19+ B cell. We will examine the pairwise colocalization of CD4+ T cells and tumor cells as well as CD8+ T cells and tumor cells and their associations with a sample exhibiting an MHCII-high tumor microenvironment (TME).

Weighted Aggregations

As described in the introductory vignette, spagg contains five approaches for aggregating spatial summaries at a given radius. Three of these approaches are weighted means and the other three are ensemble approaches. Currently, the SPOT package does not accommodate incorporating ensemble testing into the framework. This feature is in development. For now, we will focus on applying the first three weighted means to test for an association with MHCII-high TME.

The first three approaches are weighted means of the summary statistics are given below:

  1. KiDiggle=1r=1Rinirr=1RinirK̂ir\begin{equation*} \bar K_i^{Diggle} = \frac{1}{\sum_{r=1}^{R_i} n_{ir}} \sum_{r=1}^{R_i} n_{ir} \hat K_{ir} \end{equation*}

  2. KiBaddeley=1r=1Rinir2r=1Rinir2K̂ir\begin{equation*} \bar K_i^{Baddeley} = \frac{1}{\sum_{r=1}^{R_i} n^2_{ir}} \sum_{r=1}^{R_i} n^2_{ir} \hat K_{ir} \end{equation*}

  3. KiLandau=r=1RiAirr=1Rinirr=1Rinir2AirK̂ir\begin{equation*} \bar K_i^{Landau} = \frac{\sum_{r=1}^{R_i} A_{ir}}{\sum_{r=1}^{R_i} n_{ir}} \sum_{r=1}^{R_i} \frac{n^2_{ir}}{A_{ir}} \hat K_{ir} \end{equation*}

Incorporating Weighted Aggregations into SPOT

The steps to our analysis are as follows:

  1. We will determine a range of candidate radii in advance. For this analysis, we will use Ripley’s rule of thumb and consider radii between 00 and 0.250.25 times the shortest length of any image in the dataset.

  2. We will compute Ripley’s K for each radius r=0,10,20,30r = 0, 10, 20, 30 and for each ROI. Within each sample, we will aggregate the spatial summaries across ROIs using an arithmetic mean, the Diggle mean, the Landau mean, and the Baddeley mean. We will then test for an association between the aggregated spatial summaries and MHCII-high status. At the end, we will aggregate the p-values using the Cauchy combination test (CCT) (@liu2020cauchy).

  3. We will also use the ensemble approaches to aggregate the spatial summaries and test for an association with the outcome. This will involve two nested p-value combination steps: (1) at the ensemble testing level, we will aggregate the p-values using the CCT across ensemble replications; (2) at the SPOT level, we will aggregate the ensemble p-values across radii using the CCT again.

  4. At the end, we will assess which cell type pairs have significant associations with MHCII-high status.

We first start by computing the range of radii to consider.

# Calculate the radii 
smallest.dim <- lung_df_tumor %>%
  dplyr::group_by(PID) %>%
  dplyr::summarize(x.range = abs(max(x) - min(x)), 
                   y.range = abs(max(y) - min(y)),
                   min = min(x.range, y.range))

# Set the radii by Ripley's rule
radii <- seq(0, 0.25 * min(smallest.dim$min), length.out = 100)

Next, we iterate through the two pairs of cell types, calculating Ripley’s K for each radius value, and computing each of our weighted averages (and a standard arithmetic mean) for each sample. At the end, we will test for an association between each average and MHCII-status. All of this can be done using the SPOT package which allows the user to select an aggregation method to average spatial summary statistics across ROIs.

We first consider the colocalization of CD4+ T cells and tumor cells for each aggregation method. We also adjust for patient age in our analysis.

# Using an arithmetic mean
cd4.tumor.mean.res <- SPOT::spot(data = lung_df_tumor, 
                                 radii = radii,
                                 outcome = "mhcII_high", 
                                 censor = NULL,
                                 model.type = "logistic",
                                 use.K = TRUE,
                                 homogeneous = TRUE,
                                 adjustments = "age_at_diagnosis",
                                 marked = TRUE,
                                 cell.type = c("CD4+ T cell", "Tumor"),
                                 pick.roi = "average")
#> Progress:   0%  Progress:   0%  Progress:   0%  Progress:   1%  Progress:   1%  Progress:   1%  Progress:   1%  Progress:   1%  Progress:   1%  Progress:   1%  Progress:   1%  Progress:   2%  Progress:   2%  Progress:   2%  Progress:   2%  Progress:   2%  Progress:   2%  Progress:   2%  Progress:   2%  Progress:   3%  Progress:   3%  Progress:   3%  Progress:   3%  Progress:   3%  Progress:   3%  Progress:   3%  Progress:   4%  Progress:   4%  Progress:   4%  Progress:   4%  Progress:   4%  Progress:   4%  Progress:   4%  Progress:   4%  Progress:   5%  Progress:   5%  Progress:   5%  Progress:   5%  Progress:   5%  Progress:   5%  Progress:   5%  Progress:   6%  Progress:   6%  Progress:   6%  Progress:   6%  Progress:   6%  Progress:   6%  Progress:   6%  Progress:   6%  Progress:   7%  Progress:   7%  Progress:   7%  Progress:   7%  Progress:   7%  Progress:   7%  Progress:   7%  Progress:   7%  Progress:   8%  Progress:   8%  Progress:   8%  Progress:   8%  Progress:   8%  Progress:   8%  Progress:   8%  Progress:   9%  Progress:   9%  Progress:   9%  Progress:   9%  Progress:   9%  Progress:   9%  Progress:   9%  Progress:   9%  Progress:  10%  Progress:  10%  Progress:  10%  Progress:  10%  Progress:  10%  Progress:  10%  Progress:  10%  Progress:  11%  Progress:  11%  Progress:  11%  Progress:  11%  Progress:  11%  Progress:  11%  Progress:  11%  Progress:  11%  Progress:  12%  Progress:  12%  Progress:  12%  Progress:  12%  Progress:  12%  Progress:  12%  Progress:  12%  Progress:  12%  Progress:  13%  Progress:  13%  Progress:  13%  Progress:  13%  Progress:  13%  Progress:  13%  Progress:  13%  Progress:  14%  Progress:  14%  Progress:  14%  Progress:  14%  Progress:  14%  Progress:  14%  Progress:  14%  Progress:  14%  Progress:  15%  Progress:  15%  Progress:  15%  Progress:  15%  Progress:  15%  Progress:  15%  Progress:  15%  Progress:  16%  Progress:  16%  Progress:  16%  Progress:  16%  Progress:  16%  Progress:  16%  Progress:  16%  Progress:  16%  Progress:  17%  Progress:  17%  Progress:  17%  Progress:  17%  Progress:  17%  Progress:  17%  Progress:  17%  Progress:  17%  Progress:  18%  Progress:  18%  Progress:  18%  Progress:  18%  Progress:  18%  Progress:  18%  Progress:  18%  Progress:  19%  Progress:  19%  Progress:  19%  Progress:  19%  Progress:  19%  Progress:  19%  Progress:  19%  Progress:  19%  Progress:  20%  Progress:  20%  Progress:  20%  Progress:  20%  Progress:  20%  Progress:  20%  Progress:  20%  Progress:  20%  Progress:  21%  Progress:  21%  Progress:  21%  Progress:  21%  Progress:  21%  Progress:  21%  Progress:  21%  Progress:  22%  Progress:  22%  Progress:  22%  Progress:  22%  Progress:  22%  Progress:  22%  Progress:  22%  Progress:  22%  Progress:  23%  Progress:  23%  Progress:  23%  Progress:  23%  Progress:  23%  Progress:  23%  Progress:  23%  Progress:  24%  Progress:  24%  Progress:  24%  Progress:  24%  Progress:  24%  Progress:  24%  Progress:  24%  Progress:  24%  Progress:  25%  Progress:  25%  Progress:  25%  Progress:  25%  Progress:  25%  Progress:  25%  Progress:  25%  Progress:  25%  Progress:  26%  Progress:  26%  Progress:  26%  Progress:  26%  Progress:  26%  Progress:  26%  Progress:  26%  Progress:  27%  Progress:  27%  Progress:  27%  Progress:  27%  Progress:  27%  Progress:  27%  Progress:  27%  Progress:  27%  Progress:  28%  Progress:  28%  Progress:  28%  Progress:  28%  Progress:  28%  Progress:  28%  Progress:  28%  Progress:  29%  Progress:  29%  Progress:  29%  Progress:  29%  Progress:  29%  Progress:  29%  Progress:  29%  Progress:  29%  Progress:  30%  Progress:  30%  Progress:  30%  Progress:  30%  Progress:  30%  Progress:  30%  Progress:  30%  Progress:  30%  Progress:  31%  Progress:  31%  Progress:  31%  Progress:  31%  Progress:  31%  Progress:  31%  Progress:  31%  Progress:  32%  Progress:  32%  Progress:  32%  Progress:  32%  Progress:  32%  Progress:  32%  Progress:  32%  Progress:  32%  Progress:  33%  Progress:  33%  Progress:  33%  Progress:  33%  Progress:  33%  Progress:  33%  Progress:  33%  Progress:  34%  Progress:  34%  Progress:  34%  Progress:  34%  Progress:  34%  Progress:  34%  Progress:  34%  Progress:  34%  Progress:  35%  Progress:  35%  Progress:  35%  Progress:  35%  Progress:  35%  Progress:  35%  Progress:  35%  Progress:  35%  Progress:  36%  Progress:  36%  Progress:  36%  Progress:  36%  Progress:  36%  Progress:  36%  Progress:  36%  Progress:  37%  Progress:  37%  Progress:  37%  Progress:  37%  Progress:  37%  Progress:  37%  Progress:  37%  Progress:  37%  Progress:  38%  Progress:  38%  Progress:  38%  Progress:  38%  Progress:  38%  Progress:  38%  Progress:  38%  Progress:  39%  Progress:  39%  Progress:  39%  Progress:  39%  Progress:  39%  Progress:  39%  Progress:  39%  Progress:  39%  Progress:  40%  Progress:  40%  Progress:  40%  Progress:  40%  Progress:  40%  Progress:  40%  Progress:  40%  Progress:  40%  Progress:  41%  Progress:  41%  Progress:  41%  Progress:  41%  Progress:  41%  Progress:  41%  Progress:  41%  Progress:  42%  Progress:  42%  Progress:  42%  Progress:  42%  Progress:  42%  Progress:  42%  Progress:  42%  Progress:  42%  Progress:  43%  Progress:  43%  Progress:  43%  Progress:  43%  Progress:  43%  Progress:  43%  Progress:  43%  Progress:  43%  Progress:  44%  Progress:  44%  Progress:  44%  Progress:  44%  Progress:  44%  Progress:  44%  Progress:  44%  Progress:  45%  Progress:  45%  Progress:  45%  Progress:  45%  Progress:  45%  Progress:  45%  Progress:  45%  Progress:  45%  Progress:  46%  Progress:  46%  Progress:  46%  Progress:  46%  Progress:  46%  Progress:  46%  Progress:  46%  Progress:  47%  Progress:  47%  Progress:  47%  Progress:  47%  Progress:  47%  Progress:  47%  Progress:  47%  Progress:  47%  Progress:  48%  Progress:  48%  Progress:  48%  Progress:  48%  Progress:  48%  Progress:  48%  Progress:  48%  Progress:  48%  Progress:  49%  Progress:  49%  Progress:  49%  Progress:  49%  Progress:  49%  Progress:  49%  Progress:  49%  Progress:  50%  Progress:  50%  Progress:  50%  Progress:  50%  Progress:  50%  Progress:  50%  Progress:  50%  Progress:  50%  Progress:  51%  Progress:  51%  Progress:  51%  Progress:  51%  Progress:  51%  Progress:  51%  Progress:  51%  Progress:  52%  Progress:  52%  Progress:  52%  Progress:  52%  Progress:  52%  Progress:  52%  Progress:  52%  Progress:  52%  Progress:  53%  Progress:  53%  Progress:  53%  Progress:  53%  Progress:  53%  Progress:  53%  Progress:  53%  Progress:  53%  Progress:  54%  Progress:  54%  Progress:  54%  Progress:  54%  Progress:  54%  Progress:  54%  Progress:  54%  Progress:  55%  Progress:  55%  Progress:  55%  Progress:  55%  Progress:  55%  Progress:  55%  Progress:  55%  Progress:  55%  Progress:  56%  Progress:  56%  Progress:  56%  Progress:  56%  Progress:  56%  Progress:  56%  Progress:  56%  Progress:  57%  Progress:  57%  Progress:  57%  Progress:  57%  Progress:  57%  Progress:  57%  Progress:  57%  Progress:  57%  Progress:  58%  Progress:  58%  Progress:  58%  Progress:  58%  Progress:  58%  Progress:  58%  Progress:  58%  Progress:  58%  Progress:  59%  Progress:  59%  Progress:  59%  Progress:  59%  Progress:  59%  Progress:  59%  Progress:  59%  Progress:  60%  Progress:  60%  Progress:  60%  Progress:  60%  Progress:  60%  Progress:  60%  Progress:  60%  Progress:  60%  Progress:  61%  Progress:  61%  Progress:  61%  Progress:  61%  Progress:  61%  Progress:  61%  Progress:  61%  Progress:  61%  Progress:  62%  Progress:  62%  Progress:  62%  Progress:  62%  Progress:  62%  Progress:  62%  Progress:  62%  Progress:  63%  Progress:  63%  Progress:  63%  Progress:  63%  Progress:  63%  Progress:  63%  Progress:  63%  Progress:  63%  Progress:  64%  Progress:  64%  Progress:  64%  Progress:  64%  Progress:  64%  Progress:  64%  Progress:  64%  Progress:  65%  Progress:  65%  Progress:  65%  Progress:  65%  Progress:  65%  Progress:  65%  Progress:  65%  Progress:  65%  Progress:  66%  Progress:  66%  Progress:  66%  Progress:  66%  Progress:  66%  Progress:  66%  Progress:  66%  Progress:  66%  Progress:  67%  Progress:  67%  Progress:  67%  Progress:  67%  Progress:  67%  Progress:  67%  Progress:  67%  Progress:  68%  Progress:  68%  Progress:  68%  Progress:  68%  Progress:  68%  Progress:  68%  Progress:  68%  Progress:  68%  Progress:  69%  Progress:  69%  Progress:  69%  Progress:  69%  Progress:  69%  Progress:  69%  Progress:  69%  Progress:  70%  Progress:  70%  Progress:  70%  Progress:  70%  Progress:  70%  Progress:  70%  Progress:  70%  Progress:  70%  Progress:  71%  Progress:  71%  Progress:  71%  Progress:  71%  Progress:  71%  Progress:  71%  Progress:  71%  Progress:  71%  Progress:  72%  Progress:  72%  Progress:  72%  Progress:  72%  Progress:  72%  Progress:  72%  Progress:  72%  Progress:  73%  Progress:  73%  Progress:  73%  Progress:  73%  Progress:  73%  Progress:  73%  Progress:  73%  Progress:  73%  Progress:  74%  Progress:  74%  Progress:  74%  Progress:  74%  Progress:  74%  Progress:  74%  Progress:  74%  Progress:  75%  Progress:  75%  Progress:  75%  Progress:  75%  Progress:  75%  Progress:  75%  Progress:  75%  Progress:  75%  Progress:  76%  Progress:  76%  Progress:  76%  Progress:  76%  Progress:  76%  Progress:  76%  Progress:  76%  Progress:  76%  Progress:  77%  Progress:  77%  Progress:  77%  Progress:  77%  Progress:  77%  Progress:  77%  Progress:  77%  Progress:  78%  Progress:  78%  Progress:  78%  Progress:  78%  Progress:  78%  Progress:  78%  Progress:  78%  Progress:  78%  Progress:  79%  Progress:  79%  Progress:  79%  Progress:  79%  Progress:  79%  Progress:  79%  Progress:  79%  Progress:  80%  Progress:  80%  Progress:  80%  Progress:  80%  Progress:  80%  Progress:  80%  Progress:  80%  Progress:  80%  Progress:  81%  Progress:  81%  Progress:  81%  Progress:  81%  Progress:  81%  Progress:  81%  Progress:  81%  Progress:  81%  Progress:  82%  Progress:  82%  Progress:  82%  Progress:  82%  Progress:  82%  Progress:  82%  Progress:  82%  Progress:  83%  Progress:  83%  Progress:  83%  Progress:  83%  Progress:  83%  Progress:  83%  Progress:  83%  Progress:  83%  Progress:  84%  Progress:  84%  Progress:  84%  Progress:  84%  Progress:  84%  Progress:  84%  Progress:  84%  Progress:  84%  Progress:  85%  Progress:  85%  Progress:  85%  Progress:  85%  Progress:  85%  Progress:  85%  Progress:  85%  Progress:  86%  Progress:  86%  Progress:  86%  Progress:  86%  Progress:  86%  Progress:  86%  Progress:  86%  Progress:  86%  Progress:  87%  Progress:  87%  Progress:  87%  Progress:  87%  Progress:  87%  Progress:  87%  Progress:  87%  Progress:  88%  Progress:  88%  Progress:  88%  Progress:  88%  Progress:  88%  Progress:  88%  Progress:  88%  Progress:  88%  Progress:  89%  Progress:  89%  Progress:  89%  Progress:  89%  Progress:  89%  Progress:  89%  Progress:  89%  Progress:  89%  Progress:  90%  Progress:  90%  Progress:  90%  Progress:  90%  Progress:  90%  Progress:  90%  Progress:  90%  Progress:  91%  Progress:  91%  Progress:  91%  Progress:  91%  Progress:  91%  Progress:  91%  Progress:  91%  Progress:  91%  Progress:  92%  Progress:  92%  Progress:  92%  Progress:  92%  Progress:  92%  Progress:  92%  Progress:  92%  Progress:  93%  Progress:  93%  Progress:  93%  Progress:  93%  Progress:  93%  Progress:  93%  Progress:  93%  Progress:  93%  Progress:  94%  Progress:  94%  Progress:  94%  Progress:  94%  Progress:  94%  Progress:  94%  Progress:  94%  Progress:  94%  Progress:  95%  Progress:  95%  Progress:  95%  Progress:  95%  Progress:  95%  Progress:  95%  Progress:  95%  Progress:  96%  Progress:  96%  Progress:  96%  Progress:  96%  Progress:  96%  Progress:  96%  Progress:  96%  Progress:  96%  Progress:  97%  Progress:  97%  Progress:  97%  Progress:  97%  Progress:  97%  Progress:  97%  Progress:  97%  Progress:  98%  Progress:  98%  Progress:  98%  Progress:  98%  Progress:  98%  Progress:  98%  Progress:  98%  Progress:  98%  Progress:  99%  Progress:  99%  Progress:  99%  Progress:  99%  Progress:  99%  Progress:  99%  Progress:  99%  Progress:  99%  Progress: 100%  Progress: 100%  Progress: 100%  Progress: 100%

# Using the Diggle mean
cd4.tumor.diggle.res <- SPOT::spot(data = lung_df_tumor, 
                                 radii = radii,
                                 outcome = "mhcII_high", 
                                 censor = NULL,
                                 model.type = "logistic",
                                 use.K = TRUE,
                                 homogeneous = TRUE,
                                 adjustments = "age_at_diagnosis",
                                 marked = TRUE,
                                 cell.type = c("CD4+ T cell", "Tumor"),
                                 pick.roi = "diggle")
#> Progress:   0%  Progress:   0%  Progress:   0%  Progress:   1%  Progress:   1%  Progress:   1%  Progress:   1%  Progress:   1%  Progress:   1%  Progress:   1%  Progress:   1%  Progress:   2%  Progress:   2%  Progress:   2%  Progress:   2%  Progress:   2%  Progress:   2%  Progress:   2%  Progress:   2%  Progress:   3%  Progress:   3%  Progress:   3%  Progress:   3%  Progress:   3%  Progress:   3%  Progress:   3%  Progress:   4%  Progress:   4%  Progress:   4%  Progress:   4%  Progress:   4%  Progress:   4%  Progress:   4%  Progress:   4%  Progress:   5%  Progress:   5%  Progress:   5%  Progress:   5%  Progress:   5%  Progress:   5%  Progress:   5%  Progress:   6%  Progress:   6%  Progress:   6%  Progress:   6%  Progress:   6%  Progress:   6%  Progress:   6%  Progress:   6%  Progress:   7%  Progress:   7%  Progress:   7%  Progress:   7%  Progress:   7%  Progress:   7%  Progress:   7%  Progress:   7%  Progress:   8%  Progress:   8%  Progress:   8%  Progress:   8%  Progress:   8%  Progress:   8%  Progress:   8%  Progress:   9%  Progress:   9%  Progress:   9%  Progress:   9%  Progress:   9%  Progress:   9%  Progress:   9%  Progress:   9%  Progress:  10%  Progress:  10%  Progress:  10%  Progress:  10%  Progress:  10%  Progress:  10%  Progress:  10%  Progress:  11%  Progress:  11%  Progress:  11%  Progress:  11%  Progress:  11%  Progress:  11%  Progress:  11%  Progress:  11%  Progress:  12%  Progress:  12%  Progress:  12%  Progress:  12%  Progress:  12%  Progress:  12%  Progress:  12%  Progress:  12%  Progress:  13%  Progress:  13%  Progress:  13%  Progress:  13%  Progress:  13%  Progress:  13%  Progress:  13%  Progress:  14%  Progress:  14%  Progress:  14%  Progress:  14%  Progress:  14%  Progress:  14%  Progress:  14%  Progress:  14%  Progress:  15%  Progress:  15%  Progress:  15%  Progress:  15%  Progress:  15%  Progress:  15%  Progress:  15%  Progress:  16%  Progress:  16%  Progress:  16%  Progress:  16%  Progress:  16%  Progress:  16%  Progress:  16%  Progress:  16%  Progress:  17%  Progress:  17%  Progress:  17%  Progress:  17%  Progress:  17%  Progress:  17%  Progress:  17%  Progress:  17%  Progress:  18%  Progress:  18%  Progress:  18%  Progress:  18%  Progress:  18%  Progress:  18%  Progress:  18%  Progress:  19%  Progress:  19%  Progress:  19%  Progress:  19%  Progress:  19%  Progress:  19%  Progress:  19%  Progress:  19%  Progress:  20%  Progress:  20%  Progress:  20%  Progress:  20%  Progress:  20%  Progress:  20%  Progress:  20%  Progress:  20%  Progress:  21%  Progress:  21%  Progress:  21%  Progress:  21%  Progress:  21%  Progress:  21%  Progress:  21%  Progress:  22%  Progress:  22%  Progress:  22%  Progress:  22%  Progress:  22%  Progress:  22%  Progress:  22%  Progress:  22%  Progress:  23%  Progress:  23%  Progress:  23%  Progress:  23%  Progress:  23%  Progress:  23%  Progress:  23%  Progress:  24%  Progress:  24%  Progress:  24%  Progress:  24%  Progress:  24%  Progress:  24%  Progress:  24%  Progress:  24%  Progress:  25%  Progress:  25%  Progress:  25%  Progress:  25%  Progress:  25%  Progress:  25%  Progress:  25%  Progress:  25%  Progress:  26%  Progress:  26%  Progress:  26%  Progress:  26%  Progress:  26%  Progress:  26%  Progress:  26%  Progress:  27%  Progress:  27%  Progress:  27%  Progress:  27%  Progress:  27%  Progress:  27%  Progress:  27%  Progress:  27%  Progress:  28%  Progress:  28%  Progress:  28%  Progress:  28%  Progress:  28%  Progress:  28%  Progress:  28%  Progress:  29%  Progress:  29%  Progress:  29%  Progress:  29%  Progress:  29%  Progress:  29%  Progress:  29%  Progress:  29%  Progress:  30%  Progress:  30%  Progress:  30%  Progress:  30%  Progress:  30%  Progress:  30%  Progress:  30%  Progress:  30%  Progress:  31%  Progress:  31%  Progress:  31%  Progress:  31%  Progress:  31%  Progress:  31%  Progress:  31%  Progress:  32%  Progress:  32%  Progress:  32%  Progress:  32%  Progress:  32%  Progress:  32%  Progress:  32%  Progress:  32%  Progress:  33%  Progress:  33%  Progress:  33%  Progress:  33%  Progress:  33%  Progress:  33%  Progress:  33%  Progress:  34%  Progress:  34%  Progress:  34%  Progress:  34%  Progress:  34%  Progress:  34%  Progress:  34%  Progress:  34%  Progress:  35%  Progress:  35%  Progress:  35%  Progress:  35%  Progress:  35%  Progress:  35%  Progress:  35%  Progress:  35%  Progress:  36%  Progress:  36%  Progress:  36%  Progress:  36%  Progress:  36%  Progress:  36%  Progress:  36%  Progress:  37%  Progress:  37%  Progress:  37%  Progress:  37%  Progress:  37%  Progress:  37%  Progress:  37%  Progress:  37%  Progress:  38%  Progress:  38%  Progress:  38%  Progress:  38%  Progress:  38%  Progress:  38%  Progress:  38%  Progress:  39%  Progress:  39%  Progress:  39%  Progress:  39%  Progress:  39%  Progress:  39%  Progress:  39%  Progress:  39%  Progress:  40%  Progress:  40%  Progress:  40%  Progress:  40%  Progress:  40%  Progress:  40%  Progress:  40%  Progress:  40%  Progress:  41%  Progress:  41%  Progress:  41%  Progress:  41%  Progress:  41%  Progress:  41%  Progress:  41%  Progress:  42%  Progress:  42%  Progress:  42%  Progress:  42%  Progress:  42%  Progress:  42%  Progress:  42%  Progress:  42%  Progress:  43%  Progress:  43%  Progress:  43%  Progress:  43%  Progress:  43%  Progress:  43%  Progress:  43%  Progress:  43%  Progress:  44%  Progress:  44%  Progress:  44%  Progress:  44%  Progress:  44%  Progress:  44%  Progress:  44%  Progress:  45%  Progress:  45%  Progress:  45%  Progress:  45%  Progress:  45%  Progress:  45%  Progress:  45%  Progress:  45%  Progress:  46%  Progress:  46%  Progress:  46%  Progress:  46%  Progress:  46%  Progress:  46%  Progress:  46%  Progress:  47%  Progress:  47%  Progress:  47%  Progress:  47%  Progress:  47%  Progress:  47%  Progress:  47%  Progress:  47%  Progress:  48%  Progress:  48%  Progress:  48%  Progress:  48%  Progress:  48%  Progress:  48%  Progress:  48%  Progress:  48%  Progress:  49%  Progress:  49%  Progress:  49%  Progress:  49%  Progress:  49%  Progress:  49%  Progress:  49%  Progress:  50%  Progress:  50%  Progress:  50%  Progress:  50%  Progress:  50%  Progress:  50%  Progress:  50%  Progress:  50%  Progress:  51%  Progress:  51%  Progress:  51%  Progress:  51%  Progress:  51%  Progress:  51%  Progress:  51%  Progress:  52%  Progress:  52%  Progress:  52%  Progress:  52%  Progress:  52%  Progress:  52%  Progress:  52%  Progress:  52%  Progress:  53%  Progress:  53%  Progress:  53%  Progress:  53%  Progress:  53%  Progress:  53%  Progress:  53%  Progress:  53%  Progress:  54%  Progress:  54%  Progress:  54%  Progress:  54%  Progress:  54%  Progress:  54%  Progress:  54%  Progress:  55%  Progress:  55%  Progress:  55%  Progress:  55%  Progress:  55%  Progress:  55%  Progress:  55%  Progress:  55%  Progress:  56%  Progress:  56%  Progress:  56%  Progress:  56%  Progress:  56%  Progress:  56%  Progress:  56%  Progress:  57%  Progress:  57%  Progress:  57%  Progress:  57%  Progress:  57%  Progress:  57%  Progress:  57%  Progress:  57%  Progress:  58%  Progress:  58%  Progress:  58%  Progress:  58%  Progress:  58%  Progress:  58%  Progress:  58%  Progress:  58%  Progress:  59%  Progress:  59%  Progress:  59%  Progress:  59%  Progress:  59%  Progress:  59%  Progress:  59%  Progress:  60%  Progress:  60%  Progress:  60%  Progress:  60%  Progress:  60%  Progress:  60%  Progress:  60%  Progress:  60%  Progress:  61%  Progress:  61%  Progress:  61%  Progress:  61%  Progress:  61%  Progress:  61%  Progress:  61%  Progress:  61%  Progress:  62%  Progress:  62%  Progress:  62%  Progress:  62%  Progress:  62%  Progress:  62%  Progress:  62%  Progress:  63%  Progress:  63%  Progress:  63%  Progress:  63%  Progress:  63%  Progress:  63%  Progress:  63%  Progress:  63%  Progress:  64%  Progress:  64%  Progress:  64%  Progress:  64%  Progress:  64%  Progress:  64%  Progress:  64%  Progress:  65%  Progress:  65%  Progress:  65%  Progress:  65%  Progress:  65%  Progress:  65%  Progress:  65%  Progress:  65%  Progress:  66%  Progress:  66%  Progress:  66%  Progress:  66%  Progress:  66%  Progress:  66%  Progress:  66%  Progress:  66%  Progress:  67%  Progress:  67%  Progress:  67%  Progress:  67%  Progress:  67%  Progress:  67%  Progress:  67%  Progress:  68%  Progress:  68%  Progress:  68%  Progress:  68%  Progress:  68%  Progress:  68%  Progress:  68%  Progress:  68%  Progress:  69%  Progress:  69%  Progress:  69%  Progress:  69%  Progress:  69%  Progress:  69%  Progress:  69%  Progress:  70%  Progress:  70%  Progress:  70%  Progress:  70%  Progress:  70%  Progress:  70%  Progress:  70%  Progress:  70%  Progress:  71%  Progress:  71%  Progress:  71%  Progress:  71%  Progress:  71%  Progress:  71%  Progress:  71%  Progress:  71%  Progress:  72%  Progress:  72%  Progress:  72%  Progress:  72%  Progress:  72%  Progress:  72%  Progress:  72%  Progress:  73%  Progress:  73%  Progress:  73%  Progress:  73%  Progress:  73%  Progress:  73%  Progress:  73%  Progress:  73%  Progress:  74%  Progress:  74%  Progress:  74%  Progress:  74%  Progress:  74%  Progress:  74%  Progress:  74%  Progress:  75%  Progress:  75%  Progress:  75%  Progress:  75%  Progress:  75%  Progress:  75%  Progress:  75%  Progress:  75%  Progress:  76%  Progress:  76%  Progress:  76%  Progress:  76%  Progress:  76%  Progress:  76%  Progress:  76%  Progress:  76%  Progress:  77%  Progress:  77%  Progress:  77%  Progress:  77%  Progress:  77%  Progress:  77%  Progress:  77%  Progress:  78%  Progress:  78%  Progress:  78%  Progress:  78%  Progress:  78%  Progress:  78%  Progress:  78%  Progress:  78%  Progress:  79%  Progress:  79%  Progress:  79%  Progress:  79%  Progress:  79%  Progress:  79%  Progress:  79%  Progress:  80%  Progress:  80%  Progress:  80%  Progress:  80%  Progress:  80%  Progress:  80%  Progress:  80%  Progress:  80%  Progress:  81%  Progress:  81%  Progress:  81%  Progress:  81%  Progress:  81%  Progress:  81%  Progress:  81%  Progress:  81%  Progress:  82%  Progress:  82%  Progress:  82%  Progress:  82%  Progress:  82%  Progress:  82%  Progress:  82%  Progress:  83%  Progress:  83%  Progress:  83%  Progress:  83%  Progress:  83%  Progress:  83%  Progress:  83%  Progress:  83%  Progress:  84%  Progress:  84%  Progress:  84%  Progress:  84%  Progress:  84%  Progress:  84%  Progress:  84%  Progress:  84%  Progress:  85%  Progress:  85%  Progress:  85%  Progress:  85%  Progress:  85%  Progress:  85%  Progress:  85%  Progress:  86%  Progress:  86%  Progress:  86%  Progress:  86%  Progress:  86%  Progress:  86%  Progress:  86%  Progress:  86%  Progress:  87%  Progress:  87%  Progress:  87%  Progress:  87%  Progress:  87%  Progress:  87%  Progress:  87%  Progress:  88%  Progress:  88%  Progress:  88%  Progress:  88%  Progress:  88%  Progress:  88%  Progress:  88%  Progress:  88%  Progress:  89%  Progress:  89%  Progress:  89%  Progress:  89%  Progress:  89%  Progress:  89%  Progress:  89%  Progress:  89%  Progress:  90%  Progress:  90%  Progress:  90%  Progress:  90%  Progress:  90%  Progress:  90%  Progress:  90%  Progress:  91%  Progress:  91%  Progress:  91%  Progress:  91%  Progress:  91%  Progress:  91%  Progress:  91%  Progress:  91%  Progress:  92%  Progress:  92%  Progress:  92%  Progress:  92%  Progress:  92%  Progress:  92%  Progress:  92%  Progress:  93%  Progress:  93%  Progress:  93%  Progress:  93%  Progress:  93%  Progress:  93%  Progress:  93%  Progress:  93%  Progress:  94%  Progress:  94%  Progress:  94%  Progress:  94%  Progress:  94%  Progress:  94%  Progress:  94%  Progress:  94%  Progress:  95%  Progress:  95%  Progress:  95%  Progress:  95%  Progress:  95%  Progress:  95%  Progress:  95%  Progress:  96%  Progress:  96%  Progress:  96%  Progress:  96%  Progress:  96%  Progress:  96%  Progress:  96%  Progress:  96%  Progress:  97%  Progress:  97%  Progress:  97%  Progress:  97%  Progress:  97%  Progress:  97%  Progress:  97%  Progress:  98%  Progress:  98%  Progress:  98%  Progress:  98%  Progress:  98%  Progress:  98%  Progress:  98%  Progress:  98%  Progress:  99%  Progress:  99%  Progress:  99%  Progress:  99%  Progress:  99%  Progress:  99%  Progress:  99%  Progress:  99%  Progress: 100%  Progress: 100%  Progress: 100%  Progress: 100%
#> Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred

# Using the Baddeley mean
cd4.tumor.baddeley.res <- SPOT::spot(data = lung_df_tumor, 
                                 radii = radii,
                                 outcome = "mhcII_high", 
                                 censor = NULL,
                                 model.type = "logistic",
                                 use.K = TRUE,
                                 homogeneous = TRUE,
                                 adjustments = "age_at_diagnosis",
                                 marked = TRUE,
                                 cell.type = c("CD4+ T cell", "Tumor"),
                                 pick.roi = "baddeley")
#> Progress:   0%  Progress:   0%  Progress:   0%  Progress:   1%  Progress:   1%  Progress:   1%  Progress:   1%  Progress:   1%  Progress:   1%  Progress:   1%  Progress:   1%  Progress:   2%  Progress:   2%  Progress:   2%  Progress:   2%  Progress:   2%  Progress:   2%  Progress:   2%  Progress:   2%  Progress:   3%  Progress:   3%  Progress:   3%  Progress:   3%  Progress:   3%  Progress:   3%  Progress:   3%  Progress:   4%  Progress:   4%  Progress:   4%  Progress:   4%  Progress:   4%  Progress:   4%  Progress:   4%  Progress:   4%  Progress:   5%  Progress:   5%  Progress:   5%  Progress:   5%  Progress:   5%  Progress:   5%  Progress:   5%  Progress:   6%  Progress:   6%  Progress:   6%  Progress:   6%  Progress:   6%  Progress:   6%  Progress:   6%  Progress:   6%  Progress:   7%  Progress:   7%  Progress:   7%  Progress:   7%  Progress:   7%  Progress:   7%  Progress:   7%  Progress:   7%  Progress:   8%  Progress:   8%  Progress:   8%  Progress:   8%  Progress:   8%  Progress:   8%  Progress:   8%  Progress:   9%  Progress:   9%  Progress:   9%  Progress:   9%  Progress:   9%  Progress:   9%  Progress:   9%  Progress:   9%  Progress:  10%  Progress:  10%  Progress:  10%  Progress:  10%  Progress:  10%  Progress:  10%  Progress:  10%  Progress:  11%  Progress:  11%  Progress:  11%  Progress:  11%  Progress:  11%  Progress:  11%  Progress:  11%  Progress:  11%  Progress:  12%  Progress:  12%  Progress:  12%  Progress:  12%  Progress:  12%  Progress:  12%  Progress:  12%  Progress:  12%  Progress:  13%  Progress:  13%  Progress:  13%  Progress:  13%  Progress:  13%  Progress:  13%  Progress:  13%  Progress:  14%  Progress:  14%  Progress:  14%  Progress:  14%  Progress:  14%  Progress:  14%  Progress:  14%  Progress:  14%  Progress:  15%  Progress:  15%  Progress:  15%  Progress:  15%  Progress:  15%  Progress:  15%  Progress:  15%  Progress:  16%  Progress:  16%  Progress:  16%  Progress:  16%  Progress:  16%  Progress:  16%  Progress:  16%  Progress:  16%  Progress:  17%  Progress:  17%  Progress:  17%  Progress:  17%  Progress:  17%  Progress:  17%  Progress:  17%  Progress:  17%  Progress:  18%  Progress:  18%  Progress:  18%  Progress:  18%  Progress:  18%  Progress:  18%  Progress:  18%  Progress:  19%  Progress:  19%  Progress:  19%  Progress:  19%  Progress:  19%  Progress:  19%  Progress:  19%  Progress:  19%  Progress:  20%  Progress:  20%  Progress:  20%  Progress:  20%  Progress:  20%  Progress:  20%  Progress:  20%  Progress:  20%  Progress:  21%  Progress:  21%  Progress:  21%  Progress:  21%  Progress:  21%  Progress:  21%  Progress:  21%  Progress:  22%  Progress:  22%  Progress:  22%  Progress:  22%  Progress:  22%  Progress:  22%  Progress:  22%  Progress:  22%  Progress:  23%  Progress:  23%  Progress:  23%  Progress:  23%  Progress:  23%  Progress:  23%  Progress:  23%  Progress:  24%  Progress:  24%  Progress:  24%  Progress:  24%  Progress:  24%  Progress:  24%  Progress:  24%  Progress:  24%  Progress:  25%  Progress:  25%  Progress:  25%  Progress:  25%  Progress:  25%  Progress:  25%  Progress:  25%  Progress:  25%  Progress:  26%  Progress:  26%  Progress:  26%  Progress:  26%  Progress:  26%  Progress:  26%  Progress:  26%  Progress:  27%  Progress:  27%  Progress:  27%  Progress:  27%  Progress:  27%  Progress:  27%  Progress:  27%  Progress:  27%  Progress:  28%  Progress:  28%  Progress:  28%  Progress:  28%  Progress:  28%  Progress:  28%  Progress:  28%  Progress:  29%  Progress:  29%  Progress:  29%  Progress:  29%  Progress:  29%  Progress:  29%  Progress:  29%  Progress:  29%  Progress:  30%  Progress:  30%  Progress:  30%  Progress:  30%  Progress:  30%  Progress:  30%  Progress:  30%  Progress:  30%  Progress:  31%  Progress:  31%  Progress:  31%  Progress:  31%  Progress:  31%  Progress:  31%  Progress:  31%  Progress:  32%  Progress:  32%  Progress:  32%  Progress:  32%  Progress:  32%  Progress:  32%  Progress:  32%  Progress:  32%  Progress:  33%  Progress:  33%  Progress:  33%  Progress:  33%  Progress:  33%  Progress:  33%  Progress:  33%  Progress:  34%  Progress:  34%  Progress:  34%  Progress:  34%  Progress:  34%  Progress:  34%  Progress:  34%  Progress:  34%  Progress:  35%  Progress:  35%  Progress:  35%  Progress:  35%  Progress:  35%  Progress:  35%  Progress:  35%  Progress:  35%  Progress:  36%  Progress:  36%  Progress:  36%  Progress:  36%  Progress:  36%  Progress:  36%  Progress:  36%  Progress:  37%  Progress:  37%  Progress:  37%  Progress:  37%  Progress:  37%  Progress:  37%  Progress:  37%  Progress:  37%  Progress:  38%  Progress:  38%  Progress:  38%  Progress:  38%  Progress:  38%  Progress:  38%  Progress:  38%  Progress:  39%  Progress:  39%  Progress:  39%  Progress:  39%  Progress:  39%  Progress:  39%  Progress:  39%  Progress:  39%  Progress:  40%  Progress:  40%  Progress:  40%  Progress:  40%  Progress:  40%  Progress:  40%  Progress:  40%  Progress:  40%  Progress:  41%  Progress:  41%  Progress:  41%  Progress:  41%  Progress:  41%  Progress:  41%  Progress:  41%  Progress:  42%  Progress:  42%  Progress:  42%  Progress:  42%  Progress:  42%  Progress:  42%  Progress:  42%  Progress:  42%  Progress:  43%  Progress:  43%  Progress:  43%  Progress:  43%  Progress:  43%  Progress:  43%  Progress:  43%  Progress:  43%  Progress:  44%  Progress:  44%  Progress:  44%  Progress:  44%  Progress:  44%  Progress:  44%  Progress:  44%  Progress:  45%  Progress:  45%  Progress:  45%  Progress:  45%  Progress:  45%  Progress:  45%  Progress:  45%  Progress:  45%  Progress:  46%  Progress:  46%  Progress:  46%  Progress:  46%  Progress:  46%  Progress:  46%  Progress:  46%  Progress:  47%  Progress:  47%  Progress:  47%  Progress:  47%  Progress:  47%  Progress:  47%  Progress:  47%  Progress:  47%  Progress:  48%  Progress:  48%  Progress:  48%  Progress:  48%  Progress:  48%  Progress:  48%  Progress:  48%  Progress:  48%  Progress:  49%  Progress:  49%  Progress:  49%  Progress:  49%  Progress:  49%  Progress:  49%  Progress:  49%  Progress:  50%  Progress:  50%  Progress:  50%  Progress:  50%  Progress:  50%  Progress:  50%  Progress:  50%  Progress:  50%  Progress:  51%  Progress:  51%  Progress:  51%  Progress:  51%  Progress:  51%  Progress:  51%  Progress:  51%  Progress:  52%  Progress:  52%  Progress:  52%  Progress:  52%  Progress:  52%  Progress:  52%  Progress:  52%  Progress:  52%  Progress:  53%  Progress:  53%  Progress:  53%  Progress:  53%  Progress:  53%  Progress:  53%  Progress:  53%  Progress:  53%  Progress:  54%  Progress:  54%  Progress:  54%  Progress:  54%  Progress:  54%  Progress:  54%  Progress:  54%  Progress:  55%  Progress:  55%  Progress:  55%  Progress:  55%  Progress:  55%  Progress:  55%  Progress:  55%  Progress:  55%  Progress:  56%  Progress:  56%  Progress:  56%  Progress:  56%  Progress:  56%  Progress:  56%  Progress:  56%  Progress:  57%  Progress:  57%  Progress:  57%  Progress:  57%  Progress:  57%  Progress:  57%  Progress:  57%  Progress:  57%  Progress:  58%  Progress:  58%  Progress:  58%  Progress:  58%  Progress:  58%  Progress:  58%  Progress:  58%  Progress:  58%  Progress:  59%  Progress:  59%  Progress:  59%  Progress:  59%  Progress:  59%  Progress:  59%  Progress:  59%  Progress:  60%  Progress:  60%  Progress:  60%  Progress:  60%  Progress:  60%  Progress:  60%  Progress:  60%  Progress:  60%  Progress:  61%  Progress:  61%  Progress:  61%  Progress:  61%  Progress:  61%  Progress:  61%  Progress:  61%  Progress:  61%  Progress:  62%  Progress:  62%  Progress:  62%  Progress:  62%  Progress:  62%  Progress:  62%  Progress:  62%  Progress:  63%  Progress:  63%  Progress:  63%  Progress:  63%  Progress:  63%  Progress:  63%  Progress:  63%  Progress:  63%  Progress:  64%  Progress:  64%  Progress:  64%  Progress:  64%  Progress:  64%  Progress:  64%  Progress:  64%  Progress:  65%  Progress:  65%  Progress:  65%  Progress:  65%  Progress:  65%  Progress:  65%  Progress:  65%  Progress:  65%  Progress:  66%  Progress:  66%  Progress:  66%  Progress:  66%  Progress:  66%  Progress:  66%  Progress:  66%  Progress:  66%  Progress:  67%  Progress:  67%  Progress:  67%  Progress:  67%  Progress:  67%  Progress:  67%  Progress:  67%  Progress:  68%  Progress:  68%  Progress:  68%  Progress:  68%  Progress:  68%  Progress:  68%  Progress:  68%  Progress:  68%  Progress:  69%  Progress:  69%  Progress:  69%  Progress:  69%  Progress:  69%  Progress:  69%  Progress:  69%  Progress:  70%  Progress:  70%  Progress:  70%  Progress:  70%  Progress:  70%  Progress:  70%  Progress:  70%  Progress:  70%  Progress:  71%  Progress:  71%  Progress:  71%  Progress:  71%  Progress:  71%  Progress:  71%  Progress:  71%  Progress:  71%  Progress:  72%  Progress:  72%  Progress:  72%  Progress:  72%  Progress:  72%  Progress:  72%  Progress:  72%  Progress:  73%  Progress:  73%  Progress:  73%  Progress:  73%  Progress:  73%  Progress:  73%  Progress:  73%  Progress:  73%  Progress:  74%  Progress:  74%  Progress:  74%  Progress:  74%  Progress:  74%  Progress:  74%  Progress:  74%  Progress:  75%  Progress:  75%  Progress:  75%  Progress:  75%  Progress:  75%  Progress:  75%  Progress:  75%  Progress:  75%  Progress:  76%  Progress:  76%  Progress:  76%  Progress:  76%  Progress:  76%  Progress:  76%  Progress:  76%  Progress:  76%  Progress:  77%  Progress:  77%  Progress:  77%  Progress:  77%  Progress:  77%  Progress:  77%  Progress:  77%  Progress:  78%  Progress:  78%  Progress:  78%  Progress:  78%  Progress:  78%  Progress:  78%  Progress:  78%  Progress:  78%  Progress:  79%  Progress:  79%  Progress:  79%  Progress:  79%  Progress:  79%  Progress:  79%  Progress:  79%  Progress:  80%  Progress:  80%  Progress:  80%  Progress:  80%  Progress:  80%  Progress:  80%  Progress:  80%  Progress:  80%  Progress:  81%  Progress:  81%  Progress:  81%  Progress:  81%  Progress:  81%  Progress:  81%  Progress:  81%  Progress:  81%  Progress:  82%  Progress:  82%  Progress:  82%  Progress:  82%  Progress:  82%  Progress:  82%  Progress:  82%  Progress:  83%  Progress:  83%  Progress:  83%  Progress:  83%  Progress:  83%  Progress:  83%  Progress:  83%  Progress:  83%  Progress:  84%  Progress:  84%  Progress:  84%  Progress:  84%  Progress:  84%  Progress:  84%  Progress:  84%  Progress:  84%  Progress:  85%  Progress:  85%  Progress:  85%  Progress:  85%  Progress:  85%  Progress:  85%  Progress:  85%  Progress:  86%  Progress:  86%  Progress:  86%  Progress:  86%  Progress:  86%  Progress:  86%  Progress:  86%  Progress:  86%  Progress:  87%  Progress:  87%  Progress:  87%  Progress:  87%  Progress:  87%  Progress:  87%  Progress:  87%  Progress:  88%  Progress:  88%  Progress:  88%  Progress:  88%  Progress:  88%  Progress:  88%  Progress:  88%  Progress:  88%  Progress:  89%  Progress:  89%  Progress:  89%  Progress:  89%  Progress:  89%  Progress:  89%  Progress:  89%  Progress:  89%  Progress:  90%  Progress:  90%  Progress:  90%  Progress:  90%  Progress:  90%  Progress:  90%  Progress:  90%  Progress:  91%  Progress:  91%  Progress:  91%  Progress:  91%  Progress:  91%  Progress:  91%  Progress:  91%  Progress:  91%  Progress:  92%  Progress:  92%  Progress:  92%  Progress:  92%  Progress:  92%  Progress:  92%  Progress:  92%  Progress:  93%  Progress:  93%  Progress:  93%  Progress:  93%  Progress:  93%  Progress:  93%  Progress:  93%  Progress:  93%  Progress:  94%  Progress:  94%  Progress:  94%  Progress:  94%  Progress:  94%  Progress:  94%  Progress:  94%  Progress:  94%  Progress:  95%  Progress:  95%  Progress:  95%  Progress:  95%  Progress:  95%  Progress:  95%  Progress:  95%  Progress:  96%  Progress:  96%  Progress:  96%  Progress:  96%  Progress:  96%  Progress:  96%  Progress:  96%  Progress:  96%  Progress:  97%  Progress:  97%  Progress:  97%  Progress:  97%  Progress:  97%  Progress:  97%  Progress:  97%  Progress:  98%  Progress:  98%  Progress:  98%  Progress:  98%  Progress:  98%  Progress:  98%  Progress:  98%  Progress:  98%  Progress:  99%  Progress:  99%  Progress:  99%  Progress:  99%  Progress:  99%  Progress:  99%  Progress:  99%  Progress:  99%  Progress: 100%  Progress: 100%  Progress: 100%  Progress: 100%
#> Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred

# Using the Landau mean
cd4.tumor.landau.res <- SPOT::spot(data = lung_df_tumor, 
                                 radii = radii,
                                 outcome = "mhcII_high", 
                                 censor = NULL,
                                 model.type = "logistic",
                                 use.K = TRUE,
                                 homogeneous = TRUE,
                                 adjustments = "age_at_diagnosis",
                                 marked = TRUE,
                                 cell.type = c("CD4+ T cell", "Tumor"),
                                 pick.roi = "landau")
#> Progress:   0%  Progress:   0%  Progress:   0%  Progress:   1%  Progress:   1%  Progress:   1%  Progress:   1%  Progress:   1%  Progress:   1%  Progress:   1%  Progress:   1%  Progress:   2%  Progress:   2%  Progress:   2%  Progress:   2%  Progress:   2%  Progress:   2%  Progress:   2%  Progress:   2%  Progress:   3%  Progress:   3%  Progress:   3%  Progress:   3%  Progress:   3%  Progress:   3%  Progress:   3%  Progress:   4%  Progress:   4%  Progress:   4%  Progress:   4%  Progress:   4%  Progress:   4%  Progress:   4%  Progress:   4%  Progress:   5%  Progress:   5%  Progress:   5%  Progress:   5%  Progress:   5%  Progress:   5%  Progress:   5%  Progress:   6%  Progress:   6%  Progress:   6%  Progress:   6%  Progress:   6%  Progress:   6%  Progress:   6%  Progress:   6%  Progress:   7%  Progress:   7%  Progress:   7%  Progress:   7%  Progress:   7%  Progress:   7%  Progress:   7%  Progress:   7%  Progress:   8%  Progress:   8%  Progress:   8%  Progress:   8%  Progress:   8%  Progress:   8%  Progress:   8%  Progress:   9%  Progress:   9%  Progress:   9%  Progress:   9%  Progress:   9%  Progress:   9%  Progress:   9%  Progress:   9%  Progress:  10%  Progress:  10%  Progress:  10%  Progress:  10%  Progress:  10%  Progress:  10%  Progress:  10%  Progress:  11%  Progress:  11%  Progress:  11%  Progress:  11%  Progress:  11%  Progress:  11%  Progress:  11%  Progress:  11%  Progress:  12%  Progress:  12%  Progress:  12%  Progress:  12%  Progress:  12%  Progress:  12%  Progress:  12%  Progress:  12%  Progress:  13%  Progress:  13%  Progress:  13%  Progress:  13%  Progress:  13%  Progress:  13%  Progress:  13%  Progress:  14%  Progress:  14%  Progress:  14%  Progress:  14%  Progress:  14%  Progress:  14%  Progress:  14%  Progress:  14%  Progress:  15%  Progress:  15%  Progress:  15%  Progress:  15%  Progress:  15%  Progress:  15%  Progress:  15%  Progress:  16%  Progress:  16%  Progress:  16%  Progress:  16%  Progress:  16%  Progress:  16%  Progress:  16%  Progress:  16%  Progress:  17%  Progress:  17%  Progress:  17%  Progress:  17%  Progress:  17%  Progress:  17%  Progress:  17%  Progress:  17%  Progress:  18%  Progress:  18%  Progress:  18%  Progress:  18%  Progress:  18%  Progress:  18%  Progress:  18%  Progress:  19%  Progress:  19%  Progress:  19%  Progress:  19%  Progress:  19%  Progress:  19%  Progress:  19%  Progress:  19%  Progress:  20%  Progress:  20%  Progress:  20%  Progress:  20%  Progress:  20%  Progress:  20%  Progress:  20%  Progress:  20%  Progress:  21%  Progress:  21%  Progress:  21%  Progress:  21%  Progress:  21%  Progress:  21%  Progress:  21%  Progress:  22%  Progress:  22%  Progress:  22%  Progress:  22%  Progress:  22%  Progress:  22%  Progress:  22%  Progress:  22%  Progress:  23%  Progress:  23%  Progress:  23%  Progress:  23%  Progress:  23%  Progress:  23%  Progress:  23%  Progress:  24%  Progress:  24%  Progress:  24%  Progress:  24%  Progress:  24%  Progress:  24%  Progress:  24%  Progress:  24%  Progress:  25%  Progress:  25%  Progress:  25%  Progress:  25%  Progress:  25%  Progress:  25%  Progress:  25%  Progress:  25%  Progress:  26%  Progress:  26%  Progress:  26%  Progress:  26%  Progress:  26%  Progress:  26%  Progress:  26%  Progress:  27%  Progress:  27%  Progress:  27%  Progress:  27%  Progress:  27%  Progress:  27%  Progress:  27%  Progress:  27%  Progress:  28%  Progress:  28%  Progress:  28%  Progress:  28%  Progress:  28%  Progress:  28%  Progress:  28%  Progress:  29%  Progress:  29%  Progress:  29%  Progress:  29%  Progress:  29%  Progress:  29%  Progress:  29%  Progress:  29%  Progress:  30%  Progress:  30%  Progress:  30%  Progress:  30%  Progress:  30%  Progress:  30%  Progress:  30%  Progress:  30%  Progress:  31%  Progress:  31%  Progress:  31%  Progress:  31%  Progress:  31%  Progress:  31%  Progress:  31%  Progress:  32%  Progress:  32%  Progress:  32%  Progress:  32%  Progress:  32%  Progress:  32%  Progress:  32%  Progress:  32%  Progress:  33%  Progress:  33%  Progress:  33%  Progress:  33%  Progress:  33%  Progress:  33%  Progress:  33%  Progress:  34%  Progress:  34%  Progress:  34%  Progress:  34%  Progress:  34%  Progress:  34%  Progress:  34%  Progress:  34%  Progress:  35%  Progress:  35%  Progress:  35%  Progress:  35%  Progress:  35%  Progress:  35%  Progress:  35%  Progress:  35%  Progress:  36%  Progress:  36%  Progress:  36%  Progress:  36%  Progress:  36%  Progress:  36%  Progress:  36%  Progress:  37%  Progress:  37%  Progress:  37%  Progress:  37%  Progress:  37%  Progress:  37%  Progress:  37%  Progress:  37%  Progress:  38%  Progress:  38%  Progress:  38%  Progress:  38%  Progress:  38%  Progress:  38%  Progress:  38%  Progress:  39%  Progress:  39%  Progress:  39%  Progress:  39%  Progress:  39%  Progress:  39%  Progress:  39%  Progress:  39%  Progress:  40%  Progress:  40%  Progress:  40%  Progress:  40%  Progress:  40%  Progress:  40%  Progress:  40%  Progress:  40%  Progress:  41%  Progress:  41%  Progress:  41%  Progress:  41%  Progress:  41%  Progress:  41%  Progress:  41%  Progress:  42%  Progress:  42%  Progress:  42%  Progress:  42%  Progress:  42%  Progress:  42%  Progress:  42%  Progress:  42%  Progress:  43%  Progress:  43%  Progress:  43%  Progress:  43%  Progress:  43%  Progress:  43%  Progress:  43%  Progress:  43%  Progress:  44%  Progress:  44%  Progress:  44%  Progress:  44%  Progress:  44%  Progress:  44%  Progress:  44%  Progress:  45%  Progress:  45%  Progress:  45%  Progress:  45%  Progress:  45%  Progress:  45%  Progress:  45%  Progress:  45%  Progress:  46%  Progress:  46%  Progress:  46%  Progress:  46%  Progress:  46%  Progress:  46%  Progress:  46%  Progress:  47%  Progress:  47%  Progress:  47%  Progress:  47%  Progress:  47%  Progress:  47%  Progress:  47%  Progress:  47%  Progress:  48%  Progress:  48%  Progress:  48%  Progress:  48%  Progress:  48%  Progress:  48%  Progress:  48%  Progress:  48%  Progress:  49%  Progress:  49%  Progress:  49%  Progress:  49%  Progress:  49%  Progress:  49%  Progress:  49%  Progress:  50%  Progress:  50%  Progress:  50%  Progress:  50%  Progress:  50%  Progress:  50%  Progress:  50%  Progress:  50%  Progress:  51%  Progress:  51%  Progress:  51%  Progress:  51%  Progress:  51%  Progress:  51%  Progress:  51%  Progress:  52%  Progress:  52%  Progress:  52%  Progress:  52%  Progress:  52%  Progress:  52%  Progress:  52%  Progress:  52%  Progress:  53%  Progress:  53%  Progress:  53%  Progress:  53%  Progress:  53%  Progress:  53%  Progress:  53%  Progress:  53%  Progress:  54%  Progress:  54%  Progress:  54%  Progress:  54%  Progress:  54%  Progress:  54%  Progress:  54%  Progress:  55%  Progress:  55%  Progress:  55%  Progress:  55%  Progress:  55%  Progress:  55%  Progress:  55%  Progress:  55%  Progress:  56%  Progress:  56%  Progress:  56%  Progress:  56%  Progress:  56%  Progress:  56%  Progress:  56%  Progress:  57%  Progress:  57%  Progress:  57%  Progress:  57%  Progress:  57%  Progress:  57%  Progress:  57%  Progress:  57%  Progress:  58%  Progress:  58%  Progress:  58%  Progress:  58%  Progress:  58%  Progress:  58%  Progress:  58%  Progress:  58%  Progress:  59%  Progress:  59%  Progress:  59%  Progress:  59%  Progress:  59%  Progress:  59%  Progress:  59%  Progress:  60%  Progress:  60%  Progress:  60%  Progress:  60%  Progress:  60%  Progress:  60%  Progress:  60%  Progress:  60%  Progress:  61%  Progress:  61%  Progress:  61%  Progress:  61%  Progress:  61%  Progress:  61%  Progress:  61%  Progress:  61%  Progress:  62%  Progress:  62%  Progress:  62%  Progress:  62%  Progress:  62%  Progress:  62%  Progress:  62%  Progress:  63%  Progress:  63%  Progress:  63%  Progress:  63%  Progress:  63%  Progress:  63%  Progress:  63%  Progress:  63%  Progress:  64%  Progress:  64%  Progress:  64%  Progress:  64%  Progress:  64%  Progress:  64%  Progress:  64%  Progress:  65%  Progress:  65%  Progress:  65%  Progress:  65%  Progress:  65%  Progress:  65%  Progress:  65%  Progress:  65%  Progress:  66%  Progress:  66%  Progress:  66%  Progress:  66%  Progress:  66%  Progress:  66%  Progress:  66%  Progress:  66%  Progress:  67%  Progress:  67%  Progress:  67%  Progress:  67%  Progress:  67%  Progress:  67%  Progress:  67%  Progress:  68%  Progress:  68%  Progress:  68%  Progress:  68%  Progress:  68%  Progress:  68%  Progress:  68%  Progress:  68%  Progress:  69%  Progress:  69%  Progress:  69%  Progress:  69%  Progress:  69%  Progress:  69%  Progress:  69%  Progress:  70%  Progress:  70%  Progress:  70%  Progress:  70%  Progress:  70%  Progress:  70%  Progress:  70%  Progress:  70%  Progress:  71%  Progress:  71%  Progress:  71%  Progress:  71%  Progress:  71%  Progress:  71%  Progress:  71%  Progress:  71%  Progress:  72%  Progress:  72%  Progress:  72%  Progress:  72%  Progress:  72%  Progress:  72%  Progress:  72%  Progress:  73%  Progress:  73%  Progress:  73%  Progress:  73%  Progress:  73%  Progress:  73%  Progress:  73%  Progress:  73%  Progress:  74%  Progress:  74%  Progress:  74%  Progress:  74%  Progress:  74%  Progress:  74%  Progress:  74%  Progress:  75%  Progress:  75%  Progress:  75%  Progress:  75%  Progress:  75%  Progress:  75%  Progress:  75%  Progress:  75%  Progress:  76%  Progress:  76%  Progress:  76%  Progress:  76%  Progress:  76%  Progress:  76%  Progress:  76%  Progress:  76%  Progress:  77%  Progress:  77%  Progress:  77%  Progress:  77%  Progress:  77%  Progress:  77%  Progress:  77%  Progress:  78%  Progress:  78%  Progress:  78%  Progress:  78%  Progress:  78%  Progress:  78%  Progress:  78%  Progress:  78%  Progress:  79%  Progress:  79%  Progress:  79%  Progress:  79%  Progress:  79%  Progress:  79%  Progress:  79%  Progress:  80%  Progress:  80%  Progress:  80%  Progress:  80%  Progress:  80%  Progress:  80%  Progress:  80%  Progress:  80%  Progress:  81%  Progress:  81%  Progress:  81%  Progress:  81%  Progress:  81%  Progress:  81%  Progress:  81%  Progress:  81%  Progress:  82%  Progress:  82%  Progress:  82%  Progress:  82%  Progress:  82%  Progress:  82%  Progress:  82%  Progress:  83%  Progress:  83%  Progress:  83%  Progress:  83%  Progress:  83%  Progress:  83%  Progress:  83%  Progress:  83%  Progress:  84%  Progress:  84%  Progress:  84%  Progress:  84%  Progress:  84%  Progress:  84%  Progress:  84%  Progress:  84%  Progress:  85%  Progress:  85%  Progress:  85%  Progress:  85%  Progress:  85%  Progress:  85%  Progress:  85%  Progress:  86%  Progress:  86%  Progress:  86%  Progress:  86%  Progress:  86%  Progress:  86%  Progress:  86%  Progress:  86%  Progress:  87%  Progress:  87%  Progress:  87%  Progress:  87%  Progress:  87%  Progress:  87%  Progress:  87%  Progress:  88%  Progress:  88%  Progress:  88%  Progress:  88%  Progress:  88%  Progress:  88%  Progress:  88%  Progress:  88%  Progress:  89%  Progress:  89%  Progress:  89%  Progress:  89%  Progress:  89%  Progress:  89%  Progress:  89%  Progress:  89%  Progress:  90%  Progress:  90%  Progress:  90%  Progress:  90%  Progress:  90%  Progress:  90%  Progress:  90%  Progress:  91%  Progress:  91%  Progress:  91%  Progress:  91%  Progress:  91%  Progress:  91%  Progress:  91%  Progress:  91%  Progress:  92%  Progress:  92%  Progress:  92%  Progress:  92%  Progress:  92%  Progress:  92%  Progress:  92%  Progress:  93%  Progress:  93%  Progress:  93%  Progress:  93%  Progress:  93%  Progress:  93%  Progress:  93%  Progress:  93%  Progress:  94%  Progress:  94%  Progress:  94%  Progress:  94%  Progress:  94%  Progress:  94%  Progress:  94%  Progress:  94%  Progress:  95%  Progress:  95%  Progress:  95%  Progress:  95%  Progress:  95%  Progress:  95%  Progress:  95%  Progress:  96%  Progress:  96%  Progress:  96%  Progress:  96%  Progress:  96%  Progress:  96%  Progress:  96%  Progress:  96%  Progress:  97%  Progress:  97%  Progress:  97%  Progress:  97%  Progress:  97%  Progress:  97%  Progress:  97%  Progress:  98%  Progress:  98%  Progress:  98%  Progress:  98%  Progress:  98%  Progress:  98%  Progress:  98%  Progress:  98%  Progress:  99%  Progress:  99%  Progress:  99%  Progress:  99%  Progress:  99%  Progress:  99%  Progress:  99%  Progress:  99%  Progress: 100%  Progress: 100%  Progress: 100%  Progress: 100%

# Create a data.frame to show the p-values
cd4.tumor.df <- data.frame(
  Method = c("Mean", "Diggle", "Baddeley", "Landau"),
  P.Value = c(cd4.tumor.mean.res$overall.pval, cd4.tumor.diggle.res$overall.pval,
              cd4.tumor.baddeley.res$overall.pval, cd4.tumor.landau.res$overall.pval)
)

# Display
cd4.tumor.df
#>     Method    P.Value
#> 1     Mean 0.08080625
#> 2   Diggle 0.04128158
#> 3 Baddeley 0.03202144
#> 4   Landau 0.09480697

We can also examine how the p-values associated with each aggregated method varied across radii. Below, we plot the log10-transformed p-value as a function of the radius to examine how significance varies.

# First, combine the results together across methods
results <- dplyr::bind_rows(
  cd4.tumor.mean.res$pval.df %>% dplyr::select(radius, pval),
  cd4.tumor.diggle.res$pval.df %>% dplyr::select(radius, pval),
  cd4.tumor.baddeley.res$pval.df %>% dplyr::select(radius, pval),
  cd4.tumor.landau.res$pval.df %>% dplyr::select(radius, pval),
  .id = "source"
)

# Rename the "source" column, which indicates the mean type
colnames(results)[1] <- "Mean"

# Rename the values of the Mean column
results$Mean <- factor(results$Mean)
levels(results$Mean) <- c("Mean", "Diggle", "Baddeley", "Landau")

# Plot the log10-transformed p-values
results %>%
  dplyr::mutate(log10.pval = -log10(pval)) %>%
  ggplot(aes(x = radius, y = log10.pval, color = Mean)) +
  geom_point() +
  theme_bw() +
  xlab("Radius") + ylab("-log10(P-Value)") +
  geom_hline(yintercept = -log10(0.05), linetype = "dashed") +
  ggtitle("P-Values for Association Between Tumor and CD4+ T Cell \n Colocalization and MHCII-High Status Across Radii")

The above plot illustrates how the significance of the association between tumor-CD4+ T cell colocalization and MHCII-high status varies as a function of aggregation method (arithmetic mean, Diggle mean, Baddeley mean, or Landau mean) and as a function of radius. The dashed line indicates significance at an α=0.05\alpha=0.05 level. Log10-transformed p-values greater than this line are significant. Between a radius of approximately 77 and 1212, all four means show significance. After approximately a radius of 4040, only the Baddeley mean shows consistent significance. This aligns with the omnibus p-value for the Baddeley mean being the lowest among the four options shown above.