推广

广义线性混合模型(GLMM)

iseeyu2年前 (2024-02-21)推广128

WX20201110-151431.png

以及样本的各种信息sample.info,形如:

WX20201110-151645.png

  • 步骤1:多滤掉低丰度数据
#过滤掉物种丰度为0的样本数过多的行
> filter.index <- apply(taxa.raw, 1, function(X){sum(X>0)>0.1*length(X)})
> taxa.filter <- taxa.raw[filter.index, ]
#确保样本丰度和相加为100
> taxa.filter <- 100*sweep(taxa.filter, 2, colSums(taxa.filter), FUN="/")
> taxa.data <- as.data.frame(t(taxa.filter))
  • 步骤2:创建协变量矩阵

我们可以用如下代码为grouptime以及grouptime的交互项创建协变量矩阵:

> reg.cov <- tibble::rownames_to_column(sample.info, var = 'Sample') %>% 
           dplyr::select(Sample, group, indID, time) %>% 
           dplyr::mutate(time = ifelse(time == 'w0', 0, ifelse(time == 'w2', 1, ifelse(time == 'w4', 2,NA)))) %>%  #创建时间变量代码:w0是0,w2是1,w4是2;
           dplyr::mutate(group = ifelse(group == 'ck', 0, 1)) %>%  #创建分组变量代码:ck组为0,A组为1
           dplyr::mutate(timeXgroup = time*group) %>%   #创建时间与分组交互代码
           dplyr::mutate(indID = as.character(indID)) %>% 
           as.data.frame
#过滤掉采样不全的个体数据
> ind.count <- table(reg.cov$indID)
> reg.cov <- subset(reg.cov, indID %in% names(ind.count)[ind.count == 3])

> head(reg.cov)
  Sample group indID time timeXgroup
1   FN3T     1  A2-1    1          1
2   FN40     0  D2-4    0          0
3   FN42     1  A1-4    1          1
4   FN44     1  A1-5    0          0
5   FN45     1  A2-3    1          1
7   FN49     0  D2-2    1          0

  • 步骤3:拟合模型

先将w0和w1+w2的数据分别取出备用:

> reg.cov.w0 <- subset(reg.cov, time == 0)
> rownames(reg.cov.w0) <- reg.cov.w0$indID
> head(reg.cov.w0)
     Sample group indID time timeXgroup
D2-4   FN40     0  D2-4    0          0
A1-5   FN44     1  A1-5    0          0
D2-5   FN4D     0  D2-5    0          0
D1-2   FN54     0  D1-2    0          0
A1-4   FN5J     1  A1-4    0          0
A2-4   FN60     1  A2-4    0          0

> reg.cov.w12 <- subset(reg.cov, time != 0)
> reg.cov.w12 <- na.omit(data.frame(baseline.sample = reg.cov.w0[reg.cov.w12$indID, 'Sample'],
                 baseline.subject = reg.cov.w0[reg.cov.w12$indID, 'indID'],
                 reg.cov.w12,
                 stringsAsFactors = F))
> head(reg.cov.w12)
  baseline.sample baseline.subject Sample group indID time timeXgroup
1            FN70             A2-1   FN3T     1  A2-1    1          1
3            FN5J             A1-4   FN42     1  A1-4    1          1
5            FN68             A2-3   FN45     1  A2-3    1          1
7            FN71             D2-2   FN49     0  D2-2    1          0
8            FN54             D1-2   FN4A     0  D1-2    2          0
9            FN6T             D1-5   FN4B     0  D1-5    1          0

然后单独为每一个物种进行拟合(为了便于说明,此处我们仅以其中一个物种丰度举例:

library(dplyr)
library(nlme)

> taxa.all <- colnames(taxa.data)
> p.taxa.list.lme <- list()
> spe <- taxa.all[9]
> spe
[1] "s__Bacteroides_vulgatus"

> X <- data.frame(Baseline = taxa.data[reg.cov.w12$baseline.sample, spe]/100,
                  reg.cov.w12[, c('time', 'group')])
> rownames(X) <- reg.cov.w12$Sample
> head(X)
         Baseline time group
FN3T 0.0004122127    1     1
FN42 0.0001939168    1     1
FN45 0.0026208886    1     1
FN49 0.0003091166    1     0
FN4A 0.0007188949    2     0
FN4B 0.0005986076    1     0

> Z <- X
> subject.ind <- reg.cov.w12$indID
> time.ind <- reg.cov.w12$time
> Y <- taxa.data[reg.cov.w12$Sample, spe]/100
> cat('Zeros/All',sum(Y==0),'/',length(Y),'\n')
Zeros/All 0 / 30 

#对Y进行变换(先开方在反正弦?)
> tdata <- data.frame(Y.tran = asin(sqrt(Y)), X, SID = subject.ind)
> head(tdata)
         Y.tran     Baseline time group  SID
FN3T 0.04531814 0.0004122127    1     1 A2-1
FN42 0.05269246 0.0001939168    1     1 A1-4
FN45 0.01527299 0.0026208886    1     1 A2-3
FN49 0.02599619 0.0003091166    1     0 D2-2
FN4A 0.01817293 0.0007188949    2     0 D1-2
FN4B 0.03147346 0.0005986076    1     0 D1-5
#进行拟合(以Baseline、time以及group为固定效应,以SID为随机效应)
> lme.fit <- try(lme(Y.tran ~ Baseline + time + group, random = ~1|SID, data = tdata))

随机效应的表达方式:
(1)1|SIDSID是随机截距,Baselinetimegroup是固定斜率,也就是他们前面的参数是固定的;
(2)0 + time|SIDSID是固定截距,time是随机斜率,Baselinetime是固定斜率;
(3)1 + time|SIDSID是随机截距,time是随机斜率,Baselinetime是固定斜率;

> summary(lme.fit)
...
Random effects:
 Formula: ~1 | SID
        (Intercept)    Residual
StdDev: 0.007468231 0.009009141

Fixed effects: Y.tran ~ Baseline + time + group 
                 Value Std.Error DF   t-value p-value
(Intercept)  0.0236327 0.0060813 14  3.886108  0.0016
Baseline    -1.2738533 1.3537572 12 -0.940976  0.3653
time         0.0023881 0.0032897 14  0.725932  0.4798
group        0.0016992 0.0053765 12  0.316037  0.7574
...

这样我们就得到了每个自变量的参数,以及P值,后续我们再使用多重检验矫正就可以得到矫正后的P值了。

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://www.0291.com.cn/post/57024.html

相关文章

seo优化除了做网站排名还能做什么。

seo优化除了做网站排名还能做什么。

说到这儿再增加一些废话,做网络推广除了付费推广和seo之外,站外的推广也至关重要,而且效果也会非常不错,例如博客、QQ空间、论坛推广,图片推广、新闻源推广、百度文库、视频推广、微博、微信等,而这里面都会用到seo中的关于软文这块的一些方法和技巧,利用上面那些高权重平台发布信息是很容易在搜索结果中...

网站优化必须准确选择关键词才能待网站带来真实的流量。

网站优化必须准确选择关键词才能待网站带来真实的流量。

如何选择这些关键字?一般来说,我们应该遵循以下原则:首先,关键词不宜过于宽泛,如“手机”、“汽车”、“房产”等,这些词需要打出很大的价格才能获得排名,也就是说,由于这些词的目标不明确,网站的转化率不会太高。第二,关键词有搜索量吗? 如果目前没有搜索量或者搜索量很小,预计未来也会一样。...

如何网络推广为你出招解决网站跳出率高问题

如何网络表示每个网站多少都会有点跳出率,但能理解,因为毕竟网站不可能得到所有人的满意,稍微有点跳出率的网站还算正常,但跳出率高的网站就说明你的网站真的存在一些问题,所以就需要优化人员进行更精准的分析原因,解决问题,从而获得更多的流量和客户。那么如何网络推广网站跳出率高到底...

农产品滞销不赚钱农村女孩靠一个视频就赚了十万块的方法。

农产品滞销不赚钱农村女孩靠一个视频就赚了十万块的方法。

最近有个朋友,跟我说他们家的橙子滞销了。 往年会有专门的收货商,上门来收货,品质还可以的,平均2块钱一斤。家里每年有上万斤,还能赚个一两万块钱。 哪知道,今年大丰收了,本来是个很开心的事,结果收货商上门收的时候,开价5毛一斤。 这样算下来,肯定是血亏的,这上万斤的橙子,从春天的时候施肥、...

如何对您的网站进行SEO审核(包含清单)

如何对您的网站进行SEO审核(包含清单)

由于许多原因,对您的网站执行搜索引擎优化审核(审核)非常重要。 首先,您可以找出需要改进的问题区域并制定行动计划来纠正它们,其次,良好的SEO审核将使您的网站了解最新的搜索营销发展以及竞争对手的最新动态。 什么是SEO审核? 在深入了解如何进行SEO审核之前,有必要了解它的含义以及最终结果...

《文化市场营销学》知识点整理

《文化市场营销学》知识点整理

导图:市场营销 定义 观念:生产观念、产品观念、推销观念、市场营销观念、社会市场营销观念 一、顾客满意表现形式 取决于感受到到的会让期望的差异,是顾客的主观感受;满意度的大小是通过让渡价值来实现的 (让渡价值是指顾客消费产品过程...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片