缘由
不懂原理的生信人,不是一个好的调包侠。
这个系列不是教程系列 而是原理系列,教程地址见Ref
碎碎念
我的梦想,值得我本人去争取,我今天的生活,绝不是我昨天生活的冷淡抄袭。——《红与黑》
Question 答案见底部
- KSEA激酶分析回答了什么问题?
- KSEA激酶的核心原理是什么?
Ref
- The KSEA App 原始出处
- 使用KSEA App进行激酶底物富集分析(KSEA) 使用教程 友链
输入文件
KSData
-ksea激酶分析/img-20250814144754748.webp)
PX
-ksea激酶分析/img-20250814144754976.webp)
代码
source <- function(KSData, PX, NetworKIN, NetworKIN.cutoff, m.cutoff,
p.cutoff)
{
# 1. 整理数据
if (length(grep(";", PX$Residue.Both)) == 0) {
new <- PX
colnames(new)[c(2, 4)] <- c("SUB_GENE", "SUB_MOD_RSD")
new$log2FC <- log2(abs(as.numeric(as.character(new$FC))))
new <- new[complete.cases(new$log2FC), ] # 删除log2FC为NA的行
} else {
double <- PX[grep(";", PX$Residue.Both), ]
residues <- as.character(double$Residue.Both)
residues <- as.matrix(residues, ncol = 1)
split <- strsplit(residues, split = ";")
x <- sapply(split, length)
single <- data.frame(
Protein = rep(double$Protein, x),
Gene = rep(double$Gene, x),
Peptide = rep(double$Peptide, x),
Residue.Both = unlist(split),
p = rep(double$p, x),
FC = rep(double$FC, x)
)
new <- PX[-grep(";", PX$Residue.Both), ]
new <- rbind(new, single)
colnames(new)[c(2, 4)] <- c("SUB_GENE", "SUB_MOD_RSD")
new$log2FC <- log2(abs(as.numeric(as.character(new$FC))))
new <- new[complete.cases(new$log2FC), ]
}
#2. 选择数据率
if (NetworKIN == TRUE) {
KSData.filtered <- KSData[grep("[a-z]", KSData$Source), ]
KSData.filtered <- KSData.filtered[(KSData.filtered$networkin_score >=
NetworKIN.cutoff), ]
} else {
KSData.filtered <- KSData[grep("PhosphoSitePlus", KSData$Source), ]
}
#3. 合并数据库和鉴定的位点
# 合并的逻辑,认为底物名称和位点位置完全一致
KSData.dataset <- merge(KSData.filtered, new)
KSData.dataset <- KSData.dataset[order(KSData.dataset$GENE), ]
KSData.dataset$Uniprot.noIsoform <- sapply(
KSData.dataset$KIN_ACC_ID,
function(x) unlist(strsplit(as.character(x), split = "-"))[1]
)
KSData.dataset.abbrev <- KSData.dataset[, c(
5, 1, 2, 16:19,
14
)]
# 最终使用的数据框包含 激酶基因 底物基因 底物 肽段 FC log2FC source列
colnames(KSData.dataset.abbrev) <- c(
"Kinase.Gene", "Substrate.Gene",
"Substrate.Mod", "Peptide", "p", "FC", "log2FC", "Source"
)
KSData.dataset.abbrev <- KSData.dataset.abbrev[order(
KSData.dataset.abbrev$Kinase.Gene,
KSData.dataset.abbrev$Substrate.Gene, KSData.dataset.abbrev$Substrate.Mod,
KSData.dataset.abbrev$p
), ]
#计算相关指标
#按照分组进行计算同一个激酶 底物 修饰位点 来源计算取均值
KSData.dataset.abbrev <- aggregate(
log2FC ~ Kinase.Gene +
Substrate.Gene + Substrate.Mod + Source,
data = KSData.dataset.abbrev,
FUN = mean
)
KSData.dataset.abbrev <- KSData.dataset.abbrev[order(KSData.dataset.abbrev$Kinase.Gene), ]
kinase.list <- as.vector(KSData.dataset.abbrev$Kinase.Gene)
#计算每个激酶的底物数
kinase.list <- as.matrix(table(kinase.list))
#计算每个激酶平均log2FC
Mean.FC <- aggregate(log2FC ~ Kinase.Gene,
data = KSData.dataset.abbrev,
FUN = mean
)
Mean.FC <- Mean.FC[order(Mean.FC[, 1]), ]
Mean.FC$mS <- Mean.FC[, 2]
Mean.FC$Enrichment <- Mean.FC$mS / abs(mean(new$log2FC, na.rm = T))
Mean.FC$m <- kinase.list
#进行富集或者匮乏分析
###核心原理代码###
Mean.FC$z.score <- ((Mean.FC$mS - mean(new$log2FC, na.rm = T)) *
sqrt(Mean.FC$m)) / sd(new$log2FC, na.rm = T)
Mean.FC$p.value <- pnorm(-abs(Mean.FC$z.score)) # 计算单尾概率
Mean.FC$FDR <- p.adjust(Mean.FC$p.value, method = "fdr")
Mean.FC.filtered <- Mean.FC[(Mean.FC$m >= m.cutoff), -2]
Mean.FC.filtered <- Mean.FC.filtered[order(Mean.FC.filtered$z.score), ]
#作图
plot.height <- length(Mean.FC.filtered$z.score)^0.55
Mean.FC.filtered$color <- "black"
Mean.FC.filtered[(Mean.FC.filtered$p.value < p.cutoff) &
(Mean.FC.filtered$z.score < 0), ncol(Mean.FC.filtered)] <- "blue"
Mean.FC.filtered[(Mean.FC.filtered$p.value < p.cutoff) &
(Mean.FC.filtered$z.score > 0), ncol(Mean.FC.filtered)] <- "red"
tiff("KSEA Bar Plot.tiff", width = 6 * 300, height = 300 *
plot.height, res = 300, pointsize = 13)
par(mai = c(1, 1, 0.4, 0.4))
barplot(as.numeric(Mean.FC.filtered$z.score),
col = Mean.FC.filtered$color,
border = NA, xpd = F, cex.names = 0.6, cex.axis = 0.8,
xlab = "Kinase z-score", names.arg = Mean.FC.filtered$Kinase.Gene,
horiz = T, las = 1
)
dev.off()
write.csv(KSData.dataset.abbrev,
file = "Kinase-Substrate Links.csv",
quote = F, row.names = F
)
write.csv(Mean.FC[order(Mean.FC$Kinase.Gene), -ncol(Mean.FC)],
file = "KSEA Kinase Scores.csv", quote = F, row.names = F
)
}Answer
- KSEA激酶分析回答了什么问题?
- 哪些激酶的功能活性可能被激活或抑制了(基于底物磷酸化)
- KSEA激酶的核心原理是什么?
- KSEA(Kinase-Substrate Enrichment Analysis)的核心原理是:通过比较特定激酶下游底物的磷酸化水平(log2FC)与全局平均水平,统计判断这些底物是否整体显著上调或下调,从而间接推断该激酶是否活性增强或抑制。它不依赖激酶自身是否被检测到,而是基于激酶-底物数据库和质谱磷酸化数据,利用 z-score 和 p 值评估每个激酶的调控活性变化趋势。