---
title: "Secreted protein signaling activity change between two phenotypes"
output: rmarkdown::html_vignette
description: >
Secreted protein signaling activity change between two phenotypes.
vignette: >
%\VignetteIndexEntry{Secreted protein signaling activity change between two phenotypes}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
---
output: github_document
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
```
This tutorial demonstrates how to infer changes in secreted protein signaling activity between two phenotypes, such as treatment vs control, tumor vs normal, or responder vs non-responder. The input expression values, from either RNA sequencing or MicroArray, should be transformed by log2(x+1). Of note, x could be FPKM, RPKM, or TPM for RNA-Seq data.
For this demonstration, we employ a clinical cohort of patients with discoid lupus erythematosus who received a single dose of anti-IFNG antibody AMG 811. Using the SecAct framework, we predict the activity change of secreted proteins between treatment and control groups.
## Prepare expression data
This section shows how to read an expression matrix to the R environment and separate samples into the treatment and control groups.
``` r
library(SecAct)
# prepare expression matrix
dataPath <- file.path(system.file(package="SecAct"), "extdata/")
expr <- read.csv(paste0(dataPath,"GSE100093.IFNG.expr.gz"), sep="\t")
# read meta infomation
meta <- read.csv(paste0(dataPath,"GSE100093.IFNG.meta"), sep="\t")
# subset treatment and control groups
expr.treatment <- expr[, meta[,"Treatment"]=="Anti-IFNG"]
expr.control <- expr[, meta[,"Treatment"]=="Control"]
```
## Infer activity change
We input `expr.treatment` and `expr.control` into `SecAct.activity.inference` to infer the activity change of secreted proteins between treatment and control groups. `SecAct` calculates the OVERALL activity change between two groups with default setting `is.singleSampleLevel = FALSE`. You can also obtain the activity change for each SINGLE sample in `expr.treatment` by setting `is.singleSampleLevel = TRUE`. Of note, if your samples are paired, just change the default setting `is.paired = FALSE` to `is.paired = TRUE`.
``` r
# infer activity change; ~2 mins
res <- SecAct.activity.inference(
inputProfile = expr.treatment,
inputProfile_control = expr.control,
is.singleSampleLevel = FALSE,
is.paired = FALSE
)
# res$zscore stores activity change
act.change <- res$zscore
# show activity change
head(act.change)
```
A positive value means the secreted protein has high activity in the treatment group while a negative value means the secreted protein has high activity in the control group.
``` r
# show IFNG activity change
act.change["IFNG","Change"]
```
We can see that IFNG activity was reduced as expected, consistent with the treatment group receiving anti-IFNG therapy.
## Visualize activity change
User can visualize any secreted proteins of interest using `SecAct.bar.plot`. Here, we select the top up- and down-regulated secreted proteins (SPs) between treatment and control as examples.
``` r
# select the top secreted proteins
n <- 10
up.SPs <- names(sort(act.change[,"Change"],decreasing=T))[1:n]
down.SPs <- names(sort(act.change[,"Change"]))[1:n]
SPs <- c(up.SPs, down.SPs)
# user can assign any secreted proteins to SPs
# generate a vector
fg.vec <- act.change[SPs,"Change"]
# visualize in bar plot
SecAct.bar.plot(fg.vec, title="Activity Change (treatment vs control)")
```
A positive value means the secreted protein has high activity in the treatment group while a negative value means the secreted protein has high activity in the control group.
## Run a differential profile
If you already have a differential profile (or signature) instead of the expression matrix from two phenotypes, you can directly run `SecAct.activity.inference` with `is.differential = TRUE`.
``` r
# compare two phenotypes to generate a differential profile
expr.diff <- matrix(
data = rowMeans(expr.treatment) - rowMeans(expr.control),
ncol = 1,
dimnames = list(
row_names = rownames(expr.treatment),
col_names = "Diff"
)
)
# Run a differential profile; ~2 mins
res <- SecAct.activity.inference(
inputProfile = expr.diff,
is.differential = TRUE
)
# res$zscore stores activity change
act.change <- res$zscore
# show activity change
head(act.change)
```