在临床和科研中,我们经常面对海量的基因表达数据。
问题是:这些数据太复杂,看不懂怎么办❓
· 哪些基因重要?
· 能不能区分不同亚型?
· 对预后有没有价值?
这时候,机器学习就像一个“智能助手”:
·自动从成百上千个基因里挑出关键因子
·帮助我们发现疾病分型
·预测病人的预后或药物反应
·给临床研究提供线索
别担心,“机器学习”听起来高大上,但用起来其实并不难。下面给你一个最简单的示例
:
⭐ R语言实操:用随机森林预测肿瘤亚型
r
library(caret)
library(randomForest)
library(ggplot2)
⭐ 1. 模拟100个样本 × 500个基因
r
expr_matrix 100*500), nrow=100, ncol=500)
colnames(expr_matrix) "Gene", 1:500)
labels "SubtypeA", "SubtypeB"), 100, replace=TRUE)
data
data$Subtype
⭐ 2. 划分训练/测试集
r
train_index data$Subtype, p=0.8, list=FALSE)
train_data data[train_index, ]
test_data data[-train_index, ]
⭐ 3. 训练随机森林模型
r
rf_model ~ ., data=train_data, ntree=100, importance=TRUE)
⭐ 4. 测试集预测 + 混淆矩阵
r
pred
confusionMatrix(pred, test_data$Subtype)
到这里,模型就能预测不同亚型了。但结果光看数字还不直观,于是我们继续
可视化结果
⭐1. PCA降维:看亚型是否能区分
r
pca
pca_df 1:2], Subtype=labels)
ggplot(pca_df, aes(x=PC1, y=PC2, color=Subtype)) +
geom_point(size=3, alpha=0.8) +
labs(title="PCA of Gene Expression Data")
√不同亚型如果在散点图中自然分开,说明基因表达模式确实有差异。
⭐ 2. 随机森林基因重要性:找关键基因
r
library(dplyr)
importance_df
Gene = rownames(importance(rf_model)),
Importance = importance(rf_model)[,1]
)
top_genes %
arrange(desc(Importance)) %>%
head(20)
ggplot(top_genes, aes(x=reorder(Gene, Importance), y=Importance)) +
geom_bar(stat="identity", fill="steelblue") +
coord_flip() +
labs(title="Top 20 Important Genes",
x="Gene", y="Importance")
√这些“贡献度最高”的基因,可能就是潜在的分型标志物或药物靶点。
⭐ 3. 混淆矩阵热图:模型预测效果
r
cm $Subtype)
cm_df $table)
ggplot(cm_df, aes(x=Prediction, y=Reference, fill=Freq)) +
geom_tile(color="white") +
geom_text(aes(label=Freq), color="black", size=6) +
scale_fill_gradient(low="white", high="steelblue") +
labs(title="Confusion Matrix Heatmap")
√一眼就能看出:模型把多少样本分对了、分错了。
⭐4. ROC曲线 / AUC:临床常用指标
r
library(pROC)
prob "prob")[,1]
roc_obj
plot(roc_obj, col="red", lwd=2, main="ROC Curve (Random Forest)")
auc(roc_obj)
√AUC 是临床医生最熟悉的“判别能力”指标。
⭐5. 聚类热图:模式可视化
r
library(pheatmap)
pheatmap(expr_matrix[, top_genes$Gene],
show_rownames=FALSE, scale="row")
√热图能展示关键基因的表达差异,非常直观。
⭐ 6. t-SNE降维:更适合复杂数据
r
library(Rtsne)
tsne 30, dims=2)
tsne_df
ggplot(tsne_df, aes(x=X1, y=X2, color=Subtype)) +
geom_point(size=3, alpha=0.8
) +
labs(title="t-SNE of Gene Expression Data")
√比PCA更强大,经常用来展示分型聚类。
⭐7. (可选)生存曲线:直接连到临床预后
r
library(survival)
library(survminer)
surv_df 1:1000, 100),
status=sample(0:1, 100, replace=TRUE),
group=labels)
fit
ggsurvplot(fit, data=surv_df, pval=TRUE)
√不同分型预后差异显著?那就可能有临床应用价值!
✨ 结果能告诉我们什么?
1.模型准确率:能不能正确区分不同亚型?
2.重要基因:哪些基因对分类贡献最大?
3.临床启示:这些关键基因可能就是新的分型标志物或潜在靶点。
✨ 一句话总结:
即使不会复杂的编程,只要会用现成的工具,机器学习就能帮我们在庞杂的基因数据里找到规律,挖掘出与疾病相关的临床价值。