开心六月综合激情婷婷|欧美精品成人动漫二区|国产中文字幕综合色|亚洲人在线成视频

    1. 
      
        <b id="zqfy3"><legend id="zqfy3"><fieldset id="zqfy3"></fieldset></legend></b>
          <ul id="zqfy3"></ul>
          <blockquote id="zqfy3"><strong id="zqfy3"><dfn id="zqfy3"></dfn></strong></blockquote>
          <blockquote id="zqfy3"><legend id="zqfy3"></legend></blockquote>
          打開APP
          userphoto
          未登錄

          開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

          開通VIP
          【R數(shù)據(jù)處理】GLM(廣義線性模型)分析



           知其然也要知其所以然。”   --free傻孩子


          "R實(shí)戰(zhàn)"專題·第15篇
            編輯 | free傻孩子
            4306字 |10分鐘閱讀

          本期推送內(nèi)容
          在數(shù)據(jù)分析的過程中,很多分析方法和模型往往要求目標(biāo)變量(數(shù)據(jù))服從某些假設(shè)如正態(tài)分布、方差齊次等。一般來說,如果數(shù)據(jù)不能服從這些假設(shè),那么采用對(duì)應(yīng)的方法或模型獲得的結(jié)果往往不可信。例如,我們經(jīng)常使用的經(jīng)典模型,即形如y = kx +b(在R中形如 lm(y ~ x, data))的一般線性模型就要求數(shù)據(jù)(目標(biāo)變量)必須滿足正態(tài)分布和殘差的方差齊次。然而,在實(shí)際科研工作中,很多數(shù)據(jù)往往不能滿足以上條件。這種情況就要求我們尋找一種沒有以上假設(shè)的方法來替代存在假設(shè)的模型如:一般線性模型。這種方法之一就是本節(jié)我想給大家推薦的廣義線性模型(GLM)。

          廣義線性模型,是為了克服線性回歸模型的缺點(diǎn)出現(xiàn)的,是線性回歸模型的推廣。首先自變量可以是離散的,也可以是連續(xù)的。離散的可以是0-1變量,也可以是多種取值的變量。廣義線性模型取消了對(duì)殘差(因變量)服從正態(tài)分布的要求。殘差不一定要服從正態(tài)分布,可以服從二項(xiàng)、泊松、負(fù)二項(xiàng)、正態(tài)、伽馬、逆高斯等分布,這些分布被統(tǒng)稱為指數(shù)分布族。(這一段是我在網(wǎng)上找的,想要進(jìn)一步了解GLM的,請(qǐng)參考R語言實(shí)戰(zhàn)或者度娘)

          在介紹GLM之前,我先說一下為什么我要了解并掌握GLM分析。1)我看到了多篇NC(nature communications)中使用過GLM分析。他們使用GLM要么推斷多個(gè)自變量對(duì)目標(biāo)變量的解釋效應(yīng);要么通過算法從很多GLMs中獲得最簡(jiǎn)GLM,然后再根據(jù)該GLM預(yù)測(cè)目標(biāo)變量的發(fā)展趨勢(shì);2)看起來這個(gè)算法和模型很牛犇。推薦一篇NC供大家在使用該模型時(shí)參考“A meta-analysis of global fungal distribution reveals climate-driven patterns.”

          01

          模型構(gòu)建


          在前段時(shí)間我介紹的隨機(jī)森林模型的推文中,使用測(cè)試數(shù)據(jù),我們發(fā)現(xiàn)pH是影響物種豐富度(Richness)的主要因素,其它因素對(duì)物種的豐富度均沒有顯著的影響(如下圖)。在計(jì)算這個(gè)隨機(jī)森林模型的過程中,我們?nèi)藶榈陌裵H,CN比、P含量、TC(總碳)、Torigin(初始溫度)、ECEC(離子交換量)、CP比、NP比和TN(總氮)作為該模型的一個(gè)自變量。最終我們發(fā)現(xiàn)這些自變量構(gòu)成的模型對(duì)豐富度的解釋量為25.45%。現(xiàn)在問題來了,為什么要選擇這些自變量而不是那些自變量作為模型中的一個(gè)因子這些自變量的組合是最優(yōu)組合嗎?這個(gè)模型是最優(yōu)最簡(jiǎn)模型嗎?帶著這些問題我們來了解廣義線性模型。

          #load packages
          library(tidyverse)
          #install.packages("leaps")
          library(leaps)

          #load data
          load("RFdata2.RData")
          head(RFdata2)

          數(shù)據(jù)格式如下:

          1)計(jì)算不同GLMs模型對(duì)變量的解釋效應(yīng)

          leaps <- regsubsets(Richness~.,data = RFdata2,
          nbest=2)
          plot(leaps, scale = "adjr2")

          通過全子集回歸分析,我們獲得了一批模型及其對(duì)應(yīng)的調(diào)整R2(如上圖)。這個(gè)圖的左側(cè)縱坐標(biāo)為調(diào)整R2,橫坐標(biāo)為截距和各個(gè)自變量,存在顏色表示包含該自變量,空白表示不包含該自變量。

          我們發(fā)現(xiàn)當(dāng)模型僅有一個(gè)變量Torigin時(shí)(最下方),GLM模型的調(diào)整R2為0.26,而當(dāng)模型包含Torigin、pH、P、TC、CN_ratio、CP_ratio和NP_ratio時(shí)模型的調(diào)整R2最大為0.66;相同的當(dāng)模型包含Torigin、pH、P、TN、CN_ratio、CP_ratio和NP_ratio時(shí)模型的調(diào)整R2也是最大值0.66。該結(jié)果表明這兩個(gè)模型可能都是解釋量最高的模型。

          為了進(jìn)一步評(píng)估哪個(gè)模型是最優(yōu)模型且同時(shí)是最簡(jiǎn)模型,我們可以看一下每個(gè)模型的BIC值,一般來說該值越小則表示模型的擬合度(也就是R2,不是調(diào)整R2)越好。

          plot(leaps, scale = "bic")

          我們發(fā)現(xiàn)不同GLMs的BIC值排序并不與調(diào)整R2一致。結(jié)果表明了pH、TN、TC和CN_ratio構(gòu)成的模型以及pH、P、TC和CP_ratio這兩個(gè)模型的BIC值最低。查看上一個(gè)調(diào)整R2的值,它們對(duì)應(yīng)的調(diào)整R2分別為0.62和0.62。該結(jié)果表明這兩個(gè)模型都是最簡(jiǎn)模型。因?yàn)樗鼈兣c最大的擬合度0.66只差0.04,因此,從模型的簡(jiǎn)單性來說,這兩個(gè)模型就是最優(yōu)最簡(jiǎn)模型。根據(jù)自己的科研目的可以選擇其中之一。

          最終模型如下:

          names(RFdata2)
          fit <- lm(Richness ~ pH+P+TC+CP_ratio, data = RFdata2)
          summary(fit)

          通過該結(jié)果我們發(fā)現(xiàn),該模型顯著影響豐富度,且模型中的每個(gè)變量都顯著影響豐富度,模型的擬合度為0.66,調(diào)整擬合度為0.62。

          02

          模型的交叉驗(yàn)證



          上面我們已經(jīng)通過算法獲得了最優(yōu)最簡(jiǎn)模型,那么該模型的穩(wěn)健性如何呢?下面我們對(duì)該模型進(jìn)行交叉驗(yàn)證。

          什么叫交叉驗(yàn)證?

          所謂交叉驗(yàn)證指的是將一定比例的樣品挑選出來作為訓(xùn)練樣本,另一部分樣品作為保留樣品,先使用訓(xùn)練樣品獲得回歸方程,然后在保留樣品上預(yù)測(cè)。因?yàn)楸A魳悠凡]有參與模型的構(gòu)建過程,因此可以用來估測(cè)模型的準(zhǔn)確性。

          k重交叉驗(yàn)證,指的是將樣品分為k個(gè)子集,輪流將k-1個(gè)子樣品作為訓(xùn)練集,另外一個(gè)子集作為保留集,最終獲得平均預(yù)測(cè)值。

          代碼如下:

          #install.packages("bootstrap")
          library(bootstrap)


          shrinkage <- function(fit, k = 10){
          require(bootstrap)
          set.seed(123)


          theta.fit <- function(x,y){lsfit(x,y)}
          theta.predict <- function(fit,x){cbind(1,x) %*% fit$coef}


          x <- fit$model[,2:ncol(fit$model)]
          y <- fit$model[,1]


          results <- crossval(x, y, theta.fit,theta.predict, ngroup = k)
          r2 <- cor(y, fit$fitted.values)^2
          r2cv <- cor(y, results$cv.fit)^2
          cat("Original R-square =", r2, "\n")
          cat(k, "Fold Cross-Validated R-square =", r2cv, "\n")
          cat("Change =", r2-r2cv, "\n")
          }

          shrinkage(fit, k =10)
          #Original R-square = 0.6993476
          #10 Fold Cross-Validated R-square = 0.527686
          #Change = 0.130537

          10倍交叉驗(yàn)證的結(jié)果表明,我們最終獲得的模型對(duì)豐富度的實(shí)際解釋量為0.53;變化性為0.13(這相當(dāng)于誤差)。

          然后通過該模型預(yù)測(cè)因變量的值如下:

          #predict valuse
          predValue <- predict(fit,RFdata2[,c("pH","P","TC","CP_ratio")],
          interval="predict")
          predValue

          fit表示通過該模型預(yù)測(cè)得到的豐富度值,lwr和upr分別表示下和上邊界。

          03

          模型中每個(gè)變量的重要性


          在獲得模型后,我們往往還想要知道獲得的模型中每一個(gè)變量對(duì)自變量如何重要,類似于隨機(jī)森林分析(可以使用隨機(jī)森林分析預(yù)測(cè))也可以通過以下代碼預(yù)測(cè)(參考R語言實(shí)戰(zhàn))。代碼和結(jié)果如下:

          #importance of each variables
          relweights <- function(fit,...){
          set.seed(123)
          options(digits = 3)


          R <- cor(fit$model)
          nvar <- ncol(R)
          rxx <- R[2:nvar, 2:nvar]
          rxy <- R[2:nvar,1]
          svd <- eigen(rxx)
          evec <- svd$vectors
          ev <- svd$values
          delta <- diag(sqrt(ev))
          lambda <- evec %*% delta %*% t(evec)
          lambdasq <- lambda^2
          beta <- solve(lambda) %*% rxy
          rsquare <- colSums(beta^2)
          rawwgt <- lambdasq %*% beta^2
          import <- (rawwgt/rsquare) *100
          import <- as.data.frame(import)
          rownames(import) <- names(fit$model[2:nvar])
          names(import) <- "Weights"
          dotchart(import$Weights, labels = rownames(import),
          xlab = "% of R-Square", pch = 19,
          main = "Relative importance of predictor variables",
          sub = paste("Total R-Square =",round(rsquare,digits = 2)),
          ...)
          return(import)
          }
          relweights(fit,col = "blue")

          跟我們的隨機(jī)森林分析的結(jié)果對(duì)照且相同,GLM模型的結(jié)果也表明了pH是影響richness的最主要影響因素。其次是CP比,影響最小的是TC。

          希望大家看一下我的群公告,在力所能及的情況下幫一下忙,謝謝。

          本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
          打開APP,閱讀全文并永久保存 查看更多類似文章
          猜你喜歡
          類似文章
          廣義線性模型
          廣義線性模型glm泊松回歸的lasso、彈性網(wǎng)絡(luò)分類預(yù)測(cè)學(xué)生考試成績(jī)數(shù)據(jù)和交叉驗(yàn)證
          廣義線性模型(GLM) | Public Library of Bioinformatics
          用R語言做數(shù)據(jù)分析——廣義線性模型
          數(shù)據(jù)挖掘:基于R語言的實(shí)戰(zhàn) | 第6章:線性模型與廣義線性模型
          研究生論文中常用的回歸分析具體方法
          更多類似文章 >>
          生活服務(wù)
          分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
          綁定賬號(hào)成功
          后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
          如果VIP功能使用有故障,
          可點(diǎn)擊這里聯(lián)系客服!

          聯(lián)系客服