R :贝叶斯Beta线性回归

news/2024/12/2 10:13:26/文章来源:https://www.cnblogs.com/wzbzk/p/18581126
rm(list = ls())
library(readr)      # 读取 CSV 文件
library(dplyr)      # 数据操作
library(tidyr)      # 数据整理
library(brms)       # 贝叶斯回归
library(tibble) 
setwd("C:\\Users\\Administrator\\Desktop\\machine learning\\Bayesian linear regression")
# 数据导入
# 读取矩阵和分组文件
bray_matrix <- read.csv("bray.csv", row.names = 1)
jaccard_matrix <- read.csv("jaccard.csv", row.names = 1)
group_info <- read_delim("group.txt", delim = "\t")# --- 1. 计算组内稳定性 ---
calculate_stability <- function(matrix_data, group_info) {long_data <- matrix_data %>%as.matrix() %>%as.table() %>%as.data.frame() %>%setNames(c("Sample1", "Sample2", "Distance")) %>%left_join(group_info, by = c("Sample1" = "SampleID")) %>%rename(Time1 = Time) %>%  # 使用时间 (Time) 替换基因 (Gene)left_join(group_info, by = c("Sample2" = "SampleID")) %>%rename(Time2 = Time) %>%  # 使用时间 (Time) 替换基因 (Gene)filter(Time1 == Time2, Distance != 0) %>% # 只保留组内非零距离mutate(Stability = 1 - Distance)return(long_data)
}stability_long <- calculate_stability(bray_matrix, group_info)# --- 2. 转换距离矩阵为全样本长格式,并引入分组信息 ---
convert_to_long <- function(matrix_data, group_info) {long_data <- matrix_data %>%as.matrix() %>%as.table() %>%as.data.frame() %>%setNames(c("Sample1", "Sample2", "Distance")) %>%left_join(group_info, by = c("Sample1" = "SampleID")) %>%rename(Time1 = Time) %>%  # 使用时间 (Time) 替换基因 (Gene)left_join(group_info, by = c("Sample2" = "SampleID")) %>%rename(Time2 = Time) %>%  # 使用时间 (Time) 替换基因 (Gene)filter(Distance != 0) # 移除自己与自己的比较return(long_data)
}bray_long <- convert_to_long(bray_matrix, group_info)
jaccard_long <- convert_to_long(jaccard_matrix, group_info)# --- 3. 贝叶斯Beta回归分析函数 ---
perform_bayesian_beta_regression <- function(data, response, predictors) {formula <- as.formula(paste(response, "~", paste(predictors, collapse = "+")))# 使用 brms 进行贝叶斯Beta回归model <- brm(formula, data = data, family = "beta",   # 指定 Beta 分布prior = c(prior(normal(0, 5), class = "b"),  # 为回归系数设置先验prior(student_t(3, 0, 10), class = "Intercept")  # 为截距设置先验),chains = 4,  # 链条数量iter = 2000, # 迭代次数warmup = 1000 # 热身迭代次数)# 提取回归结果result <- summary(model)$fixed# 创建结果表result_table <- data.frame(Variable = rownames(result),Beta = result[, "Estimate"],       # 回归系数SE = result[, "Est.Error"],        # 标准误差`2.5%` = result[, "l-95% CI"],     # 2.5% 置信区间下限`97.5%` = result[, "u-95% CI"],    # 97.5% 置信区间上限Rhat = result[, "Rhat"],           # Gelman-Rubin 收敛诊断Bulk_ESS = result[, "Bulk_ESS"],   # 样本有效大小 (Bulk ESS)Tail_ESS = result[, "Tail_ESS"]    # 尾部有效大小 (Tail ESS))return(result_table)
}# --- 4. 进行回归分析 ---
# (1) 稳定性回归分析
stability_results <- perform_bayesian_beta_regression(stability_long, "Stability", c("Time1"))# (2) Bray–Curtis 距离回归分析
bray_results <- perform_bayesian_beta_regression(bray_long, "Distance", c("Time1"))# (3) Jaccard 距离回归分析
jaccard_results <- perform_bayesian_beta_regression(jaccard_long, "Distance", c("Time1"))# --- 5. 合并结果表 ---
final_table <- bind_rows(mutate(stability_results, Metric = "Stability (1 - Bray–Curtis, Within Group)"),mutate(bray_results, Metric = "Bray–Curtis distance"),mutate(jaccard_results, Metric = "Jaccard Index distance")
) %>%select(Metric, everything())# 打印结果
print(final_table)write.table(final_table, "Bayesian_Beta_Regression_Time.txt", row.names = TRUE, col.names = TRUE, sep = "\t", quote = FALSE)######################################################
# --- 6. 根据 Time 计算均值和标准差 ---
calculate_group_stats <- function(data) {stats <- data %>%group_by(Time1) %>%  # 使用时间 (Time1) 分组summarise(Mean = mean(Stability, na.rm = TRUE),SD = sd(Stability, na.rm = TRUE))return(stats)
}group_stats <- calculate_group_stats(stability_long)# --- 7. PERMANOVA 检验 ---
library(vegan)  # 加载 vegan 包用于 PERMANOVAperform_permanova <- function(data, response, grouping_var, n_permutations = 999) {# 使用距离矩阵进行 PERMANOVA 检验distance_matrix <- dist(data[[response]])  # 计算距离矩阵permanova_result <- adonis2(distance_matrix ~ data[[grouping_var]], permutations = n_permutations)return(permanova_result)
}# 执行 PERMANOVA 检验
permanova_result <- perform_permanova(stability_long, "Stability", "Time1", n_permutations = 999)# --- 8. 保存均值和标准差到文件 ---
write.table(group_stats, "Stability_Stats_Time.txt", row.names = FALSE, col.names = TRUE, sep = "\t", quote = FALSE)# --- 9. 保存 PERMANOVA 检验结果到文件 ---
write.table(permanova_result, "permanova_result_time.txt", row.names = FALSE, col.names = TRUE, sep = "\t", quote = FALSE)# 提取回归结果并查看列名
result <- summary(model)$fixed
print(colnames(result))  # 查看返回结果的列名

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/845325.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

循环神经网络设计同样可以使用预训练词“嵌入”

序言:重新训练人工智能大型模型是一项复杂且高成本的任务,尤其对于当前的LLM(大型语言模型)来说,全球99.99%的企业难以承担。这是因为模型训练需要巨大的资源投入、复杂的技术流程以及大量的人力支持。因此,无论在科学研究还是实际应用中,人们通常依赖开源的预训练模型及…

img中的src加载失败时如何用默认图片来替换呢?

在前端开发中,当 <img> 元素的 src 属性指定的图片加载失败时,可以使用几种方法来替换为默认图片: 1. 使用 onerror 属性: 这是最直接和常用的方法。onerror 属性会在图片加载失败时触发一个 JavaScript 事件,你可以在这个事件中将 src 属性更改为默认图片的路径。 &…

巧妙应对顾客还价:三大原则+一句话攻略

原价229元,在享受88折优惠后降至201元,此时顾客往往会顺口提出:“零头1元就抹掉吧。”这种还价行为往往预示着购买意愿已相当明确,但遗憾的是,许多交易就因这小小的还价而未能达成。那么,如何巧妙应对,一句话化解顾客的还价难题呢? 首先,处理顾客还价需坚守三大基本原…

css中的baseline,你知道吗?

是的,我知道 CSS 中的 baseline。 它指的是文本基线,是排列文本行的一个重要概念。更具体地说,它是字母“x”的下边缘所在的线。 理解 baseline 对于垂直对齐元素,尤其是文本元素至关重要。 以下是一些关于 CSS baseline 的关键点:默认对齐方式: 在没有明确指定对齐方式…

飞驰云联再次荣膺“CSA 2024安全创新奖” 实力再获认可!

2024年11月15日,由云安全联盟大中华区(CSA大中华区)主办的“第八届云安全联盟大中华区大会”于北京隆重召开,会议聚焦众多国际知名专家学者及行业领袖,共同探讨行业前沿技术与发展趋势。会上,CSA大中华区发布了多个研究成果并进行了 CSA 2024 年度颁奖仪式,Ftrans飞驰云…

云效收费

产品解决方案文档与社区权益中心定价云市场合作伙伴支持与服务了解阿里云 备案控制台bjcaijing 文档输入文档关键字查找 云效产品概述动态与公告云效套餐与计费调整公告 产品月度更新总览 Codeup 更新日志 Flow 更新日志 Packages 更新日志 Projex更新日志 Insight 更新日志 Ap…

【看过来】实现总分支跨网域文件交换和共享的秘籍!

⼤型企业和一些机构为扩大市场份额、优化资源配置,在不同地区设立多级下属分支机构,如常见的总行-分行-营业网点模式、总部-分公司-研发中心等模式等。总部和各分支机构内部,也会根据安全等级划分不同的安全域或网络区域。这就导致总分支之间,会存在跨安全域、跨地域、跨组…

【人人都能学得会的NLP - 文本分类篇 05】使用LSTM完成情感分析任务

【人人都能学得会的NLP - 文本分类篇 05】使用LSTM完成情感分析任务 NLP Github【人人都能学得会的NLP - 文本分类篇 05】使用LSTM完成情感分析任务NLP Github 项目:NLP 项目实践:fasterai/nlp-project-practice 介绍:该仓库围绕着 NLP 任务模型的设计、训练、优化、部署和应…

织梦后台专题节点文章列表只能保存1个文档

问题:专题节点文章列表只能保存1个文档。 解决办法:打开 /dede/spec_add.php 和 /dede/spec_edit.php 文件,将 $arcids = ; 改为 $arcids = array();。扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等…

PbootCMS 织梦搜索结果页分页条样式修改

编辑 /include/arc.searchview.class.php 文件,将532行左右的代码:$this->dtp->Assign($tagid, $this->GetPageListDM($list_len));修改为:$listitem = $ctag->GetAtt("listitem") == "" ? "index,pre,pageno,next,end,option" …

易优CMS中出现 General error: 1366 Incorrect string value 错误的原因是什么?

在使用易优CMS时,如果遇到 General error: 1366 Incorrect string value 错误,通常是由于数据库字段不支持某些特殊字符或表情符号导致的。具体来说,MySQL在5.5版本之前,默认的UTF-8编码只支持1-3个字节的字符,这涵盖了基本多语言平面(BMP)部分的Unicode编码区。然而,从…

易优CMS中 formreply 标签的基本用法是什么?

在易优CMS中,formreply 标签用于获取自由表单的回复列表。这个标签非常有用,特别是在需要展示用户提交的表单回复时。以下是 formreply 标签的基本用法和详细说明:基本语法:html{eyou:formreply typeid="52" id="field" pagesize=5}用户头像: {$field.…