// Bioconductor spicyR-inspired differential spatial colocalization.
///|
fn main {
let (cells, metadata, pairs) = @src.spicyr_example_data()
let config = @src.SpicyConfig::create(
radii=[0.5, 1.0, 2.0],
edge_correction=true,
use_weights=true,
reference_condition="control",
fdr_threshold=0.1,
tolerance=0.01,
) catch {
SpicyError(message) => abort("invalid spicyR configuration: " + message)
}
let result = @src.spicyr(
cells,
metadata,
pairs~,
covariate_names=["age"],
config~,
) catch {
SpicyError(message) => abort("spicyR analysis failed: " + message)
}
println("=== Direct spicyR analysis ===")
println(result.summary())
println("pair\tcondition\testimate\tSE\tp-value\tFDR\tmodel")
for pair_result in result.pairs {
for condition in pair_result.conditions {
let model = if pair_result.model
is @src.SpicyModelKind::WeightedRandomIntercept {
"random-intercept"
} else {
"linear"
}
println(
pair_result.pair.label() +
"\t" +
condition.condition_level +
"\t" +
condition.estimate.to_string() +
"\t" +
condition.standard_error.to_string() +
"\t" +
condition.p_value.to_string() +
"\t" +
condition.adjusted_p_value.to_string() +
"\t" +
model,
)
}
}
let first_pair = result.pairs[0]
let first_image = first_pair.associations[0]
println("\n=== Per-image cross-L curve ===")
println(
"image=" +
first_image.image_id +
", pair=" +
first_pair.pair.label() +
", summary=" +
first_image.statistic.to_string() +
", precision_weight=" +
first_image.weight.to_string(),
)
for index in 0..
abort("precomputed spicyR association fit failed: " + message)
}
println("\n=== Precomputed association input ===")
println(refitted.summary())
let experiment = @src.SpatialExperiment::new()
for cell in cells {
let mut image_index = -1
for index in 0..
abort("spicyR SpatialExperiment integration failed: " + message)
}
println("\n=== SpatialExperiment integration ===")
println(
"images=" +
integrated.experiment.metadata["spicyr_images"] +
", pairs=" +
integrated.experiment.metadata["spicyr_pairs"] +
", reference=" +
integrated.experiment.metadata["spicyr_reference"],
)
}