# Setup -------------------------------------------------------------------
setwd (dirname (rstudioapi:: getSourceEditorContext ()$ path))
suppressPackageStartupMessages ({
library (Seurat)
library (tidyverse)
library (reticulate)
library (qs)
library (parallel)
library (pbapply)
use_condaenv ("/envs/liana/" )
})
sc <- import ('scanpy' , convert = F)
li <- import ('liana' , convert = F)
ad <- import ('anndata' , convert = F)
np <- import ('numpy' , convert = F)
merged <- qread ("outputs/Spatial_Clustering/tumor_tumoradj_GoL_samples_annotated_v2_lite_new_deconv.qs" )
# Running LIANA on tumor samples ------------------------------------------
tumor <- subset (merged, subset = tissue == 'PDAC' )
tumor <- SplitObject (tumor, split.by = 'sample_id' )
cl <- makeCluster (detectCores () - 1 )
clusterEvalQ (cl, {
library (Seurat)
library (tidyverse)
library (reticulate)
library (qs)
library (parallel)
use_condaenv ("/envs/liana/" )
})
tumor_LR_itx <- pblapply (cl = cl, X = tumor, FUN = function (x){
sc <- import ('scanpy' , convert = F)
li <- import ('liana' , convert = F)
ad <- import ('anndata' , convert = F)
np <- import ('numpy' , convert = F)
DefaultAssay (x) <- 'Spatial'
adata <- ad$ AnnData (
X = t (GetAssayData (x, assay = 'Spatial' , layer = 'data' )),
obs = x@ meta.data
)
adata$ var_names <- rownames (x)
adata$ obs_names <- colnames (x)
adata$ obsm['spatial' ] <- GetTissueCoordinates (x)[,c ('x' ,'y' )]
bandwidth <- li$ ut$ query_bandwidth (coordinates= adata$ obsm['spatial' ],
start= as.integer (0 ),
end= as.integer (500 ),
interval_n= as.integer (20 )) %>% py_to_r ()
bandwidth <-
bandwidth[[2 ]] %>%
filter (neighbours == 6 ) %>%
pull (bandwith) %>%
min ()
li$ ut$ spatial_neighbors (
adata,
bandwidth = as.integer (bandwidth),
cutoff = 0.1 ,
kernel = 'gaussian' ,
set_diag = TRUE
)
# li$pl$connectivity(adata, idx=as.integer(0), size=1.3)
lrdata = li$ mt$ bivariate (adata,
resource_name= 'cellchatdb' ,
local_name= "norm_product" ,
global_name= "morans" ,
n_perms= as.integer (100 ),
mask_negatives= TRUE ,
add_categories= TRUE ,
nz_prop= 0.01 ,
use_raw= FALSE ,
verbose= TRUE
)
ranked_itx <- lrdata$ var$ sort_values ("morans" , ascending= FALSE ) %>%
py_to_r () %>%
mutate (p_adj = p.adjust (morans_pvals, method = 'BH' )) %>%
rownames_to_column (var = 'pair' )
ranked_itx$ sample <- unique (py_to_r (lrdata$ obs['sample_id' ]))
co_exp <- t (py_to_r (lrdata$ X))
colnames (co_exp) <- py_to_r (lrdata$ obs_names$ to_list ())
rownames (co_exp) <- py_to_r (lrdata$ var_names$ to_list ())
cats <- t (py_to_r (lrdata$ layers['cats' ]))
colnames (cats) <- py_to_r (lrdata$ obs_names$ to_list ())
rownames (cats) <- py_to_r (lrdata$ var_names$ to_list ())
return (list (ranked_itx = ranked_itx, co_exp = co_exp, cats = cats))
})
qsave (tumor_LR_itx, "liana_res_tumor_global_morans_local_norm_product.qs" )
tumor_LR_itx <- qread ("liana_res_tumor_global_morans_local_norm_product.qs" )
tumor_LR_ranks <- lapply (tumor_LR_itx, function (x){x[[1 ]]}) %>%
bind_rows ()
tumor <- lapply (tumor, function (x){
x[['LRMoran' ]] <- CreateAssayObject (tumor_LR_itx[[unique (x$ sample_id)]][[2 ]])
x[['cat' ]] <- CreateAssayObject (tumor_LR_itx[[unique (x$ sample_id)]][[3 ]])
return (x)
})
tumor <- reduce (tumor, merge)
tumor <- JoinLayers (tumor, assay = 'Spatial' )
qsave (tumor, "liana_res_mapped_tumor_global_morans_local_norm_product.qs" )
# Running LIANA on GoL samples ------------------------------------------
gol <- subset (merged, subset = tissue == 'Healthy' )
rm (merged);gc ()
gol <- SplitObject (gol, split.by = 'sample_id' )
cl <- makeCluster (detectCores () - 1 )
clusterEvalQ (cl, {
library (Seurat)
library (tidyverse)
library (reticulate)
library (qs)
library (parallel)
use_condaenv ("envs/liana/" )
})
GoL_LR_itx <- pblapply (cl = cl, X = gol, FUN = function (x){
sc <- import ('scanpy' , convert = F)
li <- import ('liana' , convert = F)
ad <- import ('anndata' , convert = F)
np <- import ('numpy' , convert = F)
DefaultAssay (x) <- 'Spatial'
adata <- ad$ AnnData (
X = t (GetAssayData (x, assay = 'Spatial' , layer = 'data' )),
obs = x@ meta.data
)
adata$ var_names <- rownames (x)
adata$ obs_names <- colnames (x)
adata$ obsm['spatial' ] <- GetTissueCoordinates (x)[,c ('x' ,'y' )]
bandwidth <- li$ ut$ query_bandwidth (coordinates= adata$ obsm['spatial' ],
start= as.integer (0 ),
end= as.integer (500 ),
interval_n= as.integer (20 )) %>% py_to_r ()
bandwidth <-
bandwidth[[2 ]] %>%
filter (neighbours == 6 ) %>%
pull (bandwith) %>%
min ()
li$ ut$ spatial_neighbors (
adata,
bandwidth = as.integer (bandwidth),
cutoff = 0.1 ,
kernel = 'gaussian' ,
set_diag = TRUE
)
# li$pl$connectivity(adata, idx=as.integer(0), size=1.3)
lrdata = li$ mt$ bivariate (adata,
resource_name= 'cellchatdb' ,
local_name= 'norm_product' ,
global_name= "morans" ,
n_perms= as.integer (100 ),
mask_negatives= TRUE ,
add_categories= TRUE ,
nz_prop= 0.01 ,
use_raw= FALSE ,
verbose= TRUE
)
ranked_itx <- lrdata$ var$ sort_values ("morans" , ascending= FALSE ) %>%
py_to_r () %>%
mutate (p_adj = p.adjust (morans_pvals, method = 'BH' )) %>%
rownames_to_column (var = 'pair' )
ranked_itx$ sample <- unique (py_to_r (lrdata$ obs['sample_id' ]))
co_exp <- t (py_to_r (lrdata$ X))
colnames (co_exp) <- py_to_r (lrdata$ obs_names$ to_list ())
rownames (co_exp) <- py_to_r (lrdata$ var_names$ to_list ())
cats <- t (py_to_r (lrdata$ layers['cats' ]))
colnames (cats) <- py_to_r (lrdata$ obs_names$ to_list ())
rownames (cats) <- py_to_r (lrdata$ var_names$ to_list ())
return (list (ranked_itx = ranked_itx, co_exp = co_exp, cats = cats))
})
qsave (GoL_LR_itx, "liana_res_gol_global_morans_local_norm_product.qs" )
gol_LR_ranks <- lapply (GoL_LR_itx, function (x){x[[1 ]]}) %>%
bind_rows ()
gol <- lapply (gol, function (x){
x[['LRMoran' ]] <- CreateAssayObject (GoL_LR_itx[[unique (x$ sample_id)]][[2 ]])
x[['cat' ]] <- CreateAssayObject (GoL_LR_itx[[unique (x$ sample_id)]][[3 ]])
return (x)
})
gol <- reduce (gol, merge)
gol <- JoinLayers (gol, assay = 'Spatial' )
qsave (gol, "liana_res_mapped_gol_global_morans_local_norm_product.qs" )
gol <- qread ("liana_res_mapped_gol_global_morans_local_norm_product.qs" )