Short example on how to use the IrisSpatialFeatures package

Reading the dataset

This is a toy example, based on 2 sample with 2 coordinates each. The 20x images were acquired on the Mantra system of PerkinElmer, analyzed in inForm. There are three different phenotypes present in this example: melanoma cells (SOX10+ cells), CD8 cells indicating cytotoxic T-cells and other or undefined cells which have neither SOX10 or CD8 protein expression, but show up as cells according to the nuclear stain. In addition, PD1 and PD-L1 expression was scored in each sample and a threshold was determined in inForm that let's us distinguish between PD1+ and PD1- cells as well as PD-L1+/-. PD-L1 is only relevant in melanoma cells, whereas PD1 is relevant in the other two cell types. Since the toy example only shows the area of a very small image, the resulting statistics often contain NA value, because cell types are not present, which is especially the case in ROI analyses. Look at the full example datasets for more realistic examples.

require(IrisSpatialFeatures)
raw_data<- read_raw(path=system.file("extdata", package = "IrisSpatialFeatures"),
                    format='Mantra')

#apply all the thresholds PD1 for T and other cells, PD-L1 for macrophages and tumor cells
dataset <- threshold_dataset(raw_data,
                             marker='PD-Ligand-1 (Opal 690)',
                             marker_name='PDL1',
                             base=c('SOX10+'))
dataset <- threshold_dataset(dataset,
                             marker='PD-1 (Opal 540)',
                             marker_name='PD1',
                             base=c('CD8+','OTHER'))

Overview plots

Next we plot all the cell coordinates color coordinated in .pdf format

plot_dir <- file.path(tempdir(),'plots')
if (!file.exists(plot_dir)){
    dir.create(file.path(plot_dir))
}
p <- overview_plot(dataset,outdir=plot_dir,palette=NULL,type='png')

Example of an Overview plot

Extract counts and ratios

Here we extract counts per mm2 for each marker, both for each coordinate and collapsed across the multiple images per sample.

get_counts_per_mm2(dataset)
get_counts_per_mm2_noncollapsed(dataset)
get_count_ratios(dataset,'SOX10+ PDL1-','SOX10+ PDL1+')

Nearest neighbor analysis

Next step we calculate the average nearest neighbor distances for each cell-type, plot barplots compare different distances and finally generate ray plots that show a visual representation of these distances for each coordinate.

dataset <- extract_nearest_neighbor(dataset,min_num_cells=2)
get_nearest_neighbors(dataset,"SOX10+ PDL1+")
p <- plot_nearest_neighbor(dataset,'CD8+ PD1+','SOX10+ PDL1')
p <- plot_nearest_neighbor(dataset,'SOX10+ PDL1+','SOX10+ PDL1-')

#ray plots for 
plot_dir <- file.path(tempdir(),'ray_plots')
if (!file.exists(plot_dir)){
    dir.create(file.path(plot_dir))
}
neighbor_ray_plot(dataset,from_type='CD8+ PD1+',to_type='SOX10+ PDL1+',plot_dir=plot_dir,format ='pdf')

Interaction analysis

Here we extract the interactions between different cell types, generate an interaction profile for SOX10+ PDL1+ cells and also generate interaction maps for each coordinate showing the interactions between CD8+ PD1+ cells and SOX10+ PD-L1+ cells.

dataset <- extract_interactions(dataset)
get_interactions(dataset,'SOX10+ PDL1+')

#plotting interaction summaries
p <- plot_interactions(dataset,'SOX10+ PDL1+',xlim_fix=4)

#plotting interaction maps
int_markers <- c('CD8+ PD1+','SOX10+ PDL1+')
int_marker_cols <- c('#fc5858','#66c2a4')
silent_markers <- c('CD8+ PD1-','SOX10+ PDL1-' )
silent_col=c('#fff7bc','#a6bddb')
plot_dir <- file.path(tempdir(),'interaction_maps')
if (!file.exists(plot_dir)){
    dir.create(file.path(plot_dir))
}
p <- interaction_maps(dataset,int_markers,int_marker_cols,silent_markers,
                      silent_col,outdir=plot_dir)

Example of a Interaction map

Running the proximity analysis

Calculating the number of cells within 25 pixels distance for each cell and then showing the the profile for SOX10+ PDL1-

dataset <- extract_proximity(dataset,only_closest=TRUE,radii=25)
p <- plot_proximities(dataset,"SOX10+ PDL1-",xlim_fix=3)


gusef/IrisSpatialFeatures documentation built on May 6, 2019, 9:50 p.m.