模型選擇與多模型推斷

2021-02-13 算法與數學之美
分析千島湖鳥類多樣性與墓群出現率的決定性因素

斯幸峰

三墩職業技術學校空想資本主義學院理論想像學研究所, 杭州 310058, 中國浙江

摘要

由於常規的逐步回歸分析在使用過程中有諸多缺陷,而信息理論的赤池信息量準則(AIC)彌補了這一缺點。此文基於AIC的判定方法,利用模型選擇和多模型推斷(model selection and multimodel inference)探討千島湖島嶼鳥類多樣性的決定因素。同時開展對千島湖墓葬分布的可能性分析,為盜墓的理論研究打下翔實的基礎。

關鍵詞

AIC、盜墓、多模型推斷、模型選擇、鳥類、千島湖、逐步回歸

前言

面對一系列可能的備選模型,如何評判模型的優劣?選用逐步回歸分析(stepwise regression)還是信息理論(information theoretic analysis)?Whittingham等(2006)對2004年的Ecology Letters、Journal of Applied Ecology和Animal Behaviors三個雜誌分析,共有65篇文章使用多元回歸(multiple regression),其中57%的研究使用了逐步回歸的方法。雖然逐步回歸依舊廣泛使用,但是有許多缺陷,如:參數估計的誤差(bias in parameter),模型選擇算法的不一致(inconsistencies among model selection algorithms),多個假設檢驗的內在缺陷(inherent problem of multiple hypothesis testing),以及最後結果只依賴單一的最優模型(inappropriate focus or reliance on a single best model)。至於具體的缺陷原理,此處不予細說,本文將採用信息理論簡要介紹多模型推斷的方法。

千島湖地處浙江西部,山清水秀,民風淳樸(此處省略一百字)。自1959年新安江大壩建成後,形成1078個島嶼(108米水位時),乃名副其實的「千島湖」,是一個得天獨厚的路橋島嶼天然實驗場所。本研究團隊自2003年開始千島湖地區的鳥類調查,到目前已經逐漸拓展到蜘蛛、蜥蜴、青蛙、蛇、猴子、昆蟲、獸類、蝴蝶以及植物等各項業務,歡迎廣大生態愛好者和有志之士前來參觀與洽談。撰寫本文的起因是早先跟本團隊中的「蜘蛛俠」吳博士嘗試探討鳥類多樣性與風水的關係,加上近日剛好看了一些有關模型選擇和多模型推斷(model selection and multimodel inference)的文獻(xián),採用「先進」的AIC(Akaike information criterion)技術,探討該學術問題的可能性。

本文主要探討的問題包括兩部分:1) AIC是啥?莫非是美國國際大學(American International College)的縮寫?2) 模型選擇的操作步驟;3) 千島湖島嶼上鳥類和墓葬分布的機理。

材料與方法研究地點與島嶼參數

按照面積和隔離度,利用分層隨機抽樣法(stratified random sampling)在千島湖選取40個島嶼。自2002年開始實地考察並詳細並測量了跟鳥類多樣性相關的各種島嶼參數:面積、隔離度、 植被物種數、生境種類、周長、周長面積比、形狀指數、海拔,並於昨晚想像了各種與盜墓可能相關的島嶼參數:凹凸度、坡度、朝向、鋁和矽的含量,沙土指數和pH值。

其中鋁和矽的含量是白膏泥的主要組成元素。由於白膏泥防水性能好,是墓葬出沒的指標。沙土指數反映了建墓的可能性,即如果沙土含量過多,土質不夯實,容易測漏。pH值,跟墓葬中的有機體「發酵」程度相關。形狀指數、凹凸度、坡度和朝向是判斷風水優劣的關鍵,因為圓山、朝南、土層厚及石頭少的生境是墓葬出現的高發區。

AIC

AIC(Akaika Information Criterion)即赤池信息量準則,是評估統計模型的複雜度和衡量統計模型擬合優良性的一種標準。最早由日本統計學家赤池弘次創立和發展,由此得名。

AIC在一般情況下,可以表示為

其中: k是參數的數量, L是似然函數(likelihood function)。這是公式,知道就可以,R語言中有現成的命令(stat包中的AIC命令,及stats包中的extractAIC命令)。如果自己動手算,也可以:假設條件是模型的誤差服從獨立正態分布,n為觀察數, RSS為殘差平方和,則

增加了自由參數提高了擬合的優良性,即AIC鼓勵數據的優良性但是儘量避免出現過度擬合(overfitting)的情況,所以優先考慮的模型是AIC值最小的那一隻。

其中在小樣本的情況下(n/k < 40),AIC 轉變成AICc (corrected AIC),即:

當n增加時,AICc收斂成AIC。所以AICc可以應用於任何樣本大小的情況下(注: 這部分內容主要抄自維基百科,不過維基百科的該頁中文文獻引用有個小錯誤,即參考書是 Burham & Anderson(2002),而不是2004)

如果數據有過度離散(overdispersion)的影響,則需要考慮Q版的AIC,即

$\hat{c}$ 為方差膨脹係數(VIF)或者過度離散係數(overdispersion coefficient)。如果 $\hat{c}$ 大於1,則需要採用QAIC。當然,Q版的,也有QAICc,道理同上。一般在參數進入模型前,只要保證參數的獨立性,則可以避免過度離散的情況。

計算模型權重

得到各個模型的AIC值後,按照AIC從小到大排列,然後每個模型的AIC值與最小的AIC值相減,得到ΔAIC。

通過得到的ΔAIC,計算各個模型的模型權重,即Akaika weight(wi )。其中第 i 個模型的模型權重為:

公式不複雜,而且R中有現成的命令計算wi 。wi 在0至1之間,並且所有模型權重之和為1。模型權重越大,表示該模型是真實模型的可能性就越大。比如第二個模型的w2 為0.31,則表示這個模型為真實模型(best possible model)的可能性為31%。

通過模型權重還可以計算各個參數的重要值(importance)。方法很簡單,比如參數1,則挑出含參數1的所有模型,然後把這些模型的權重相加,即是該參數的權重。各個參數的權重值一比,就知道哪個參數最重要了。

模型選擇的不確定性和多模型推斷

其實現實一般不會這麼完美的,上述所有結論都建立在ΔAIC>2的基礎上,即第二個模型的AIC值比最小模型的AIC值差值大於2。如果小於2,則說明第一個模型跟第二個模型(或者連續前四五個模型)為真實模型的可能性差不多,無法決定優劣。咋麼辦?終極武器:模型平均(model averaging)。

曾經ΔAIC>2是條金科玉律(Burnham & Anderson, 2002),但是Anderson大神在2008版的書中似乎把ΔAIC>2給降級了(Andersion, 2008),建議不要輕信這條規律,而是建議把所有模型統統進行模型平均,也就是不要隨便剔除一些看似不可能模型,哪怕這些模型的權重都小得接近於零。如果ΔAIC>2,通過最優模型,代入實際島嶼參數測量值,就可以計算出預測的鳥類種數或者存在墓葬的可能性。現在由於ΔAIC<2,第一個模型無法「代表」其他模型,於是所有模型都得參與進來。假設 Y^ 值為預測值(鳥類種數或墓葬出現概率),則平均預測值為:

啥意思?假設有九個可能模型,則有九個模型的權重,以及可以計算出九個預測值。如今,平均預測值就是預測值分別乘以權重後的和,比如

既然預測值Y^需要模型平均,參數估計值也得平均,道理跟估計預測值相似。假設參數i的參數估計為θi,本來當ΔAIC>2時只要直接採用最小AIC模型的 θi 值即可,現在則需要把含有參數 i 的所有模型列出來,進行模型平均:

同理,計算參數估計的方差時,也得進行模型平均,得到非條件方差估計(unconditional variance estimate),詳見(Burnham & Anderson, 2002, p.162):

Anderson大神似乎對這個公式也不是很滿意,建議更新為Anderson (2008)第111頁的公式,其實計算結果相差不多:

其中 $\hat{\bar{θ}}$ 是模型的平均參數估計,wi 是模型權重,以及 gi 表示第i 個模型。簡言之,非條件方差估計就是包括兩部分:根號內的前部分是本身的取樣方差,另外一部分是由於模型選擇不確定導致的方差。所以,把後者考慮進去以後,最後的方差估計不會由於模型的不確定性而降低準確性。我怕表達有所不準,列出Anderson(2008)第111頁的原文: an estimator of the variance of parameter estimater esimates that incorporates both sampling variance, given a model, and a variance component for model selection uncertainty. 所以,在樣本量較大的前提下,最後參數的置信區間為

實戰演練

演練開始之前,請確保已經安裝下列軟體包:glmulti, MuMIn, bbmle。網速給力的情況下,最簡單的方法是直接在R語言操作界面中輸入

install.packages("glmulti")

否則,得從R的鏡像網站下載壓縮包後再本地安裝。

演練一:千島湖鳥類多樣性的決定因素

導入 glmulti包

library(glmulti)

###Loading required package: rJava

導入千島湖鳥類和島嶼數據(註:這個數據是真實的,只是我把數據的順序隨機調換了)

tilbird <- read.table("http://sixf.org/files/code/2014/tilbird.txt", h = T)  #找到 'tilbird.txt'文件並打開str(tilbird)  ##檢查`til.bird`的數據結構

###'data.frame': 40 obs. of  9 variables:### $ birdspp  : int  43 34 35 32 31 27 30 33 24 24 ...### $ area     : num  1289.2 143.2 109 55.1 46.4 ...### $ isolation: num  897 1415 965 954 730 ...### $ plants   : int  36 50 88 86 65 68 45 49 45 31 ...### $ habitats : int  3 6 3 3 3 3 3 7 4 4 ...### $ Pe       : num  105965 17465 12022 7570 10444 ...### $ PAR      : num  82.2 122 110.3 137.4 225.2 ...### $ SI       : num  832 412 325 288 433 ...### $ elev     : num  298 251 227 198 174 ...

數據中第一列為鳥類物種數,其餘八列為島嶼參數,分別為:面積、隔離度、植物物種數、生境類別數、島嶼周長、周長面積比(越大表示邊緣越多)、形狀指數(完全的圓形,則形狀指數為1)和海拔。

模型開始之前得進行島嶼參數的獨立性檢驗。其中方法可以使用相關分析(correlation test),方差膨脹係數(VIF)和主成份分析(PCA),這裡採用常用的相關分析。

相關分析的R語言命令是cor.test,這是兩兩檢驗。cor是多個參數一起檢驗,可以多個參數一起檢驗的時候,結果不給出p值,於是我寫了一個小函數,就是多個參數檢驗的時候也同時給出p值。命令名稱為cor.sig,代碼為:

cor.sig = function(test) {    res.cor = cor(test)    res.sig = res.cor    res.sig[abs(res.sig) > 0] = NA    nx = dim(test)[2]    for (i in 1:nx) {        for (j in 1:nx) {            res.cor1 = as.numeric(cor.test(test[, i], test[, j])$est)            res.sig1 = as.numeric(cor.test(test[, i], test[, j])$p.value)            if (res.sig1 <= 0.001) {                sig.mark = "***"            }            if (res.sig1 <= 0.01 & res.sig1 > 0.001) {                sig.mark = "** "            }            if (res.sig1 <= 0.05 & res.sig1 > 0.01) {                sig.mark = "*  "            }            if (res.sig1 > 0.05) {                sig.mark = "   "            }            if (res.cor1 > 0) {                res.sig[i, j] = paste(" ", as.character(round(res.cor1, 3)),                  sig.mark, sep = "")            } else {                res.sig[i, j] = paste(as.character(round(res.cor1, 3)), sig.mark,                  sep = "")            }        }    }    as.data.frame(res.sig)}

所有島嶼參數進行相關分析,

cor.sig(tilbird[, 2:9])  #第一列不算,那是鳥類物種數,即Y值。

###               area isolation    plants  habitats        Pe       PAR###area           1*** -0.115    -0.139    -0.064     0.996*** -0.429** ###isolation -0.115         1*** -0.101      -0.1    -0.117     0.299   ###plants    -0.139    -0.101         1***  -0.16    -0.138    -0.048   ###habitats  -0.064      -0.1     -0.16         1*** -0.057    -0.035   ###Pe         0.996*** -0.117    -0.138    -0.057         1*** -0.481** ###PAR       -0.429**   0.299    -0.048    -0.035    -0.481**       1***###SI         0.857*** -0.045    -0.167    -0.034     0.898*** -0.619***###elev       0.726*** -0.127    -0.039    -0.032     0.775*** -0.803***###                 SI      elev###area       0.857***  0.726***###isolation -0.045    -0.127   ###plants    -0.167    -0.039   ###habitats  -0.034    -0.032   ###Pe         0.898***  0.775***###PAR       -0.619*** -0.803***###SI             1***  0.888***###elev       0.888***      1***

結果表明,面積跟周長、周長面積比、形狀指數和海拔呈顯著相關。考慮到這些因素的生物學意義,很明顯,除去其他顯著相關的參數而保留面積是合理的,因為在島嶼生物地理學框架下,面積是極為重要的參數,且這裡的其他參數都可能由於面積而產生。比如海拔,由於是島嶼,在坡度相似的情況下,面積越大,海拔越高。所以,最後進入模型的是四個參數:面積、隔離度、植物數和生境數。

權且採用最常見的線性模型(linear model),創建總模型(global model),即包括所有參數:

global.model <- lm(birdspp ~ area + isolation + plants + habitats, data = tilbird)

然後利用glmulti包中的函數glmulti對所有可能模型中來選擇最優模型。此處由於是4個參數,則共有2^4=16個可能模型(此處不考慮交互效應)。

bird.model <- glmulti(global.model, level = 1, crit = "aicc")  #選用AICc進行評判模型

###Initialization...###TASK: Exhaustive screening of candidate set.###Fitting...###Completed.

summary(bird.model)

###$name###[1] "glmulti.analysis"######$method###[1] "h"######$fitting###[1] "lm"######$crit###[1] "aicc"######$level###[1] 1######$marginality###[1] FALSE######$confsetsize###[1] 100######$bestic###[1] 223.7######$icvalues### [1] 223.7 223.8 225.0 225.7 226.2 226.7 228.6 228.7 243.6 244.1 244.5###[12] 244.5 246.0 246.7 246.8 247.0######$bestmodel###[1] "birdspp ~ 1 + area + habitats"######$modelweights### [1] 2.871e-01 2.708e-01 1.455e-01 1.049e-01 8.123e-02 6.348e-02 2.432e-02### [8] 2.259e-02 1.332e-05 1.036e-05 8.538e-06 8.461e-06 3.984e-06 2.794e-06###[15] 2.652e-06 2.496e-06######$includeobjects###[1] TRUE

結果出來了,最優模型只包括面積和生境的參數,看看:

lm9 <- lm(birdspp ~ area + habitats, data = tilbird)summary(lm9)

######Call:###lm(formula = birdspp ~ area + habitats, data = tilbird)######Residuals:###   Min     1Q Median     3Q    Max ###-6.606 -2.107 -0.263  1.911  8.705 ######Coefficients:###            Estimate Std. Error t value Pr(>|t|)    ###(Intercept) 20.69295    2.08432    9.93  5.6e-12 ***###area         0.01564    0.00289    5.41  3.9e-06 ***###habitats     1.29893    0.55652    2.33    0.025 *  ###---###Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1######Residual standard error: 3.67 on 37 degrees of freedom###Multiple R-squared:  0.474, Adjusted R-squared:  0.445 ###F-statistic: 16.6 on 2 and 37 DF,  p-value: 7e-06

但再看看剛才的模型的AICc結果:

summary(bird.model)$icvalue

### [1] 223.7 223.8 225.0 225.7 226.2 226.7 228.6 228.7 243.6 244.1 244.5###[12] 244.5 246.0 246.7 246.8 247.0

發現第二個模型的ΔAICc為223.8-223.7=0.1。坑爹啊!如果此時ΔAICc>2,則模型選擇到此結束,即最優模型為第一個模型。可是,現實比較殘忍,繼續模型平均,列出所有可能模型:

看著比較壯觀,但是碰到十個參數,共 2^10=1024 個可能模型的時候就比較麻煩了。沒事,可以再編個程序循環一下就行,後文會再次提及此問題。

16個可能模型一起平均,

library(MuMIn)lm.ave <- model.avg(lm1, lm2, lm3, lm4, lm5, lm6, lm7, lm8, lm9, lm10, lm11,    lm12, lm13, lm14, lm15, lm16)summary(lm.ave)

######Call:###model.avg.default(object = lm1, lm2, lm3, lm4, lm5, lm6, lm7, ###    lm8, lm9, lm10, lm11, lm12, lm13, lm14, lm15, lm16)######Component models:###       df logLik  AICc Delta Weight###12      4 -107.3 223.7  0.00   0.29###123     5 -106.0 223.8  0.12   0.27###124     5 -106.6 225.0  1.36   0.15###1234    6 -105.6 225.7  2.01   0.10###13      4 -108.5 226.2  2.53   0.08###1       3 -110.0 226.7  3.02   0.06###134     5 -108.4 228.6  4.94   0.02###14      4 -109.8 228.7  5.08   0.02###3       3 -118.5 243.6 19.96   0.00###23      4 -117.5 244.1 20.46   0.00###(Null)  2 -120.1 244.5 20.85   0.00###2       3 -118.9 244.5 20.86   0.00###34      4 -118.4 246.0 22.37   0.00###234     5 -117.5 246.7 23.08   0.00###4       3 -120.1 246.8 23.18   0.00###24      4 -118.9 247.0 23.31   0.00######Term codes:###     area  habitats isolation    plants ###        1         2         3         4 ######Model-averaged coefficients: ###             Estimate Std. Error Adjusted SE z value Pr(>|z|)    ###(Intercept) 22.023011   3.272613    3.327045    6.62   <2e-16 ***###area         0.015423   0.002945    0.003044    5.07   <2e-16 ***###habitats     1.287322   0.560392    0.579478    2.22    0.026 *  ###isolation   -0.001104   0.000728    0.000753    1.47    0.143    ###plants       0.019405   0.021519    0.022247    0.87    0.383    ###---###Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1######Full model-averaged coefficients (with shrinkage): ### (Intercept)      area  habitats isolation    plants###   22.023011  0.015422  1.040595 -0.000531  0.005770######Relative variable importance:###     area  habitats isolation    plants ###     1.00      0.81      0.48      0.30

結果中的第一部分,』Component models』,即列出了所有模型的自由度(df),對數似然函數(logLik),AICc值,ΔAICc值和模型權重。比如最優模型的模型權重為0.29,即為真實模型的可能性為29%(其實是非常低的,一般達到0.6-0.7就很不錯了,當然,這裡使用的數據是被我隨機化過的,所以結果沒有實際參考價值)

其中的第4部分,』Full model-averaged coefficients』,即是平均參數估計, $\hat{\bar{θ}}$ 。

第5部分,』Relative variable importance』,即是各個參數的重要值。最大為1,可見該例子中,面積是最重要的,次之是生境。至於隔離度和植物數量,則在模型中貢獻不大。

MuMIn包裡面其實有現成的命令dredge得到上述的部分結果,不信,試試輸入以下一句命令:

dredge(global.model)

此時如果打算計算各島的預鳥類物種數,則可以如下進行模型平均:

pred.mat <- matrix(NA, ncol = 16, nrow = 40, dimnames = list(paste("isl", 1:40,

sep = ""), paste("lm", 1:16, sep = "")))  #建立一個空矩陣,放40個島的各16各模型預測值,如下所示

bird.pred <- pred.mat %*% summary(lm.ave)$msTable$weight[c(4,14,3,2,7,16,10,13,1,8,5,6,9,15,12,11)]round(t(bird.pred),2) #把矩陣換方向,給頁面省點空間,跟分析無關

###      isl1  isl2  isl3  isl4  isl5  isl6  isl7  isl8  isl9 isl10###[1,] 44.76 30.01 26.82 25.98 25.85 24.97 24.87 29.67 26.19 25.46###     isl11 isl12 isl13 isl14 isl15 isl16 isl17 isl18 isl19 isl20###[1,] 25.11 25.06 24.81 23.79 25.03 24.41    26 25.03 24.92  26.6###     isl21 isl22 isl23 isl24 isl25 isl26 isl27 isl28 isl29 isl30###[1,] 25.63 25.12 24.32  24.1 25.02 24.62 24.15 26.52 27.03 23.69###     isl31 isl32 isl33 isl34 isl35 isl36 isl37 isl38 isl39 isl40###[1,] 25.59  24.5 24.27 26.11 25.51  26.5 24.88 24.95 28.28 24.91

還有一點是非條件方差估計,這個,有點麻煩,等以後再說。計算方法其實跟上述的 $\hat{\bar{Y}}$ 類似。

實戰演練二: 千島湖墓群的決定因素

這個分析就跟上述方法相似了,按部就班:

tiltomb <- read.table("http://sixf.org/files/code/2014/tiltomb.txt", h = T)  #讀取墓的虛擬數據 'tiltomb.txt'cor.sig(tiltomb[, -1])

###              area    plants  habitats        SI      elev    convex###area          1*** -0.139    -0.064     0.857***  0.726***  0.041   ###plants   -0.139         1***  -0.16    -0.167    -0.039    -0.107   ###habitats -0.064     -0.16         1*** -0.034    -0.032    -0.187   ###SI        0.857*** -0.167    -0.034         1***  0.888***  0.237   ###elev      0.726*** -0.039    -0.032     0.888***      1***  0.307   ###convex    0.041    -0.107    -0.187     0.237     0.307         1***###slope     0.248     0.193     0.115     0.247     0.322*    0.264   ###aspect   -0.114    -0.081     0.141     0.069     0.278     0.075   ###Al        0.088    -0.066     0.193     0.223     0.326*     0.06   ###Si        0.055    -0.099     0.101      0.14     0.243     0.081   ###sand     -0.207     0.197     0.111     -0.22    -0.191    -0.311   ###pH       -0.194    -0.132    -0.204     -0.17    -0.228     0.018   ###             slope    aspect        Al        Si      sand        pH###area      0.248    -0.114     0.088     0.055    -0.207    -0.194   ###plants    0.193    -0.081    -0.066    -0.099     0.197    -0.132   ###habitats  0.115     0.141     0.193     0.101     0.111    -0.204   ###SI        0.247     0.069     0.223      0.14     -0.22     -0.17   ###elev      0.322*    0.278     0.326*    0.243    -0.191    -0.228   ###convex    0.264     0.075      0.06     0.081    -0.311     0.018   ###slope         1*** -0.093     0.412**   0.334*    0.111     -0.53***###aspect   -0.093         1***  0.075     0.101    -0.086     0.198   ###Al        0.412**   0.075         1***  0.887***  0.615*** -0.756***###Si        0.334*    0.101     0.887***      1***  0.504*** -0.646***###sand      0.111    -0.086     0.615***  0.504***      1*** -0.598***###pH        -0.53***  0.198    -0.756*** -0.646*** -0.598***      1***

結果發現面積、形狀指數和海拔顯著相關。考慮島實際因素,島嶼面積或者說千島湖以前的山頭大小估計不會是墓葬考慮的因素,而這個山頭圓不圓,這關乎風水的事,應該是主要因素,所以剔除面積和海拔。再看發現形狀指數跟沙土也有正相關,可是考慮沙土多少是決定建不建墓的關鍵因素,予以保留,何況不是非常強烈的正相關(coef. = 0.373)。再看發現鋁、矽和坡度有相關,可以確信鋁和矽,其中之一是冗餘的,因為白膏泥富含鋁和矽。白膏泥相對鋁含量較多,此處選擇去除矽,以及另外的坡度。pH跟沙土相關,看來得把pH去除,估計過了上千年,墓葬中的有機質早化成泥土了。

再看看選取參數後的結果,

cor.sig(tiltomb[, c("plants", "habitats", "SI", "convex", "aspect", "Al", "sand")])

###            plants  habitats        SI    convex    aspect        Al###plants        1***  -0.16    -0.167    -0.107    -0.081    -0.066   ###habitats  -0.16         1*** -0.034    -0.187     0.141     0.193   ###SI       -0.167    -0.034         1***  0.237     0.069     0.223   ###convex   -0.107    -0.187     0.237         1***  0.075      0.06   ###aspect   -0.081     0.141     0.069     0.075         1***  0.075   ###Al       -0.066     0.193     0.223      0.06     0.075         1***###sand      0.197     0.111     -0.22    -0.311    -0.086     0.615***###              sand###plants    0.197   ###habitats  0.111   ###SI        -0.22   ###convex   -0.311   ###aspect   -0.086   ###Al        0.615***###sand          1***

後續步驟跟演練一類似,不同的是,此處的應變量為二元結構,即presence-absence數據,得用廣義線性模型中的邏輯斯帝回歸(logistic regression)。其他註解省略,直接上程序,

global.model.tomb <- glm(tomb ~ plants + habitats + SI + convex + aspect + Al +    sand, family = binomial("logit"), data = tiltomb)tomb.model <- glmulti(global.model.tomb, level = 1, crit = "aicc")

###Initialization...###TASK: Exhaustive screening of candidate set.###Fitting...######After 50 models:###Best model: tomb~1+SI###Crit= 57.9820910321992###Mean crit= 64.0858355584437

######After 100 models:###Best model: tomb~1+SI###Crit= 57.9820910321992###Mean crit= 64.9421343165768

######After 150 models:###Best model: tomb~1+SI###Crit= 57.9820910321992###Mean crit= 64.5619346833708

###Completed.

summary(tomb.model)

###$name###[1] "glmulti.analysis"######$method###[1] "h"######$fitting###[1] "glm"######$crit###[1] "aicc"######$level###[1] 1######$marginality###[1] FALSE######$confsetsize###[1] 100######$bestic###[1] 57.98######$icvalues###  [1] 57.98 58.33 59.61 60.17 60.22 60.30 60.39 60.46 60.54 60.75 60.82### [12] 60.94 62.15 62.17 62.18 62.24 62.39 62.44 62.67 62.70 62.77 62.77### [23] 62.79 62.87 62.89 62.91 62.95 62.98 63.01 63.09 63.19 63.27 63.32### [34] 63.51 63.53 63.60 63.66 64.05 64.43 64.52 64.53 64.60 64.62 64.77### [45] 64.80 64.87 64.88 64.91 64.92 64.92 64.95 64.96 65.08 65.12 65.14### [56] 65.40 65.40 65.45 65.52 65.54 65.58 65.65 65.66 65.67 65.69 65.69### [67] 65.72 65.81 65.82 65.88 66.02 66.08 66.14 66.14 66.22 66.32 66.47### [78] 66.56 66.64 66.72 66.82 66.85 66.91 66.92 66.93 67.22 67.35 67.37### [89] 67.38 67.64 67.65 67.66 67.67 67.80 67.83 67.83 67.86 67.87 68.02###[100] 68.17######$bestmodel###[1] "tomb ~ 1 + SI"######$modelweights###  [1] 0.1201201 0.1011728 0.0531133 0.0401592 0.0392729 0.0377621 0.0359927###  [8] 0.0348480 0.0333513 0.0300502 0.0290503 0.0273379 0.0149678 0.0148350### [15] 0.0147370 0.0143245 0.0132729 0.0129413 0.0115051 0.0113448 0.0109770### [22] 0.0109687 0.0108420 0.0104403 0.0103423 0.0102346 0.0100197 0.0098576### [29] 0.0097113 0.0093423 0.0088919 0.0085364 0.0083084 0.0075580 0.0074968### [36] 0.0072460 0.0070090 0.0057865 0.0047700 0.0045613 0.0045489 0.0043911### [43] 0.0043397 0.0040282 0.0039725 0.0038450 0.0038208 0.0037599 0.0037378### [50] 0.0037365 0.0036946 0.0036696 0.0034468 0.0033923 0.0033552 0.0029419### [57] 0.0029405 0.0028648 0.0027779 0.0027422 0.0026895 0.0025989 0.0025888### [64] 0.0025730 0.0025506 0.0025475 0.0025079 0.0023998 0.0023883 0.0023173### [71] 0.0021582 0.0020990 0.0020310 0.0020308 0.0019495 0.0018537 0.0017263### [78] 0.0016468 0.0015814 0.0015211 0.0014462 0.0014228 0.0013853 0.0013789### [85] 0.0013704 0.0011849 0.0011078 0.0011006 0.0010928 0.0009612 0.0009542### [92] 0.0009487 0.0009451 0.0008861 0.0008726 0.0008723 0.0008583 0.0008546### [99] 0.0007955 0.0007370######$includeobjects###[1] TRUE

結果一看,最優模型只包括形狀指數,看來理論想像的數據也不錯嘛,雖然煩人的ΔAICc依舊小於2,因此還得繼續模型平均了。因為 2^7=128 個可能模型,手動輸入運算則是比較折騰了,所以得寫個循環程序讓電腦來運算。

tomb7=tiltomb[, c("plants", "habitats", "SI", "convex", "aspect", "Al", "sand","tomb")]npar=7modPar=c("plants", "habitats", "SI", "convex", "aspect", "Al", "sand","tomb")unit=c(1,0)parEst=rep(unit,each=2^(npar-1))for (i in 2:npar){  unit=c(i,0)  parEst.tmp=rep(rep(unit,each=2^(npar-i)),2^(i-1))  parEst=cbind(parEst,parEst.tmp)}parMat=cbind(parEst[,1:npar],1)dimnames(parMat)=list(1:(2^npar),modPar)allModel=list()for (i in 1:(dim(parMat)[1]-1)) {    tomb7.tmp=tomb7[,parMat[i,]!=0]    allModel[[i]]=glm(tomb~.,family = binomial("logit"),data=tomb7.tmp)}modelC=glm(tomb~1,family = binomial("logit"),data=tomb7)lm.ave <- model.avg(allModel,modelC)summary(lm.ave)

其中128個模型平均後的部分結果為:

### Full model-averaged coefficients (with shrinkage): ### (Intercept)          SI          Al        sand      aspect    habitats      convex      plants### -2.96791424  0.01986124 -0.09423029 -0.08413135  0.00217080 -0.04294219  0.00446755  0.00043138######Relative variable importance:###      SI   aspect       Al     sand habitats   convex   plants ###   0.98     0.27     0.27     0.26     0.24     0.23     0.22

再次放個大招吧,一次性列出模型平均後的部分結果:

dredge(global.model.tomb)

結果

千島湖鳥類多樣性主要取決於島嶼面積和生境多樣性,而墓葬可能性取決於島嶼的形狀指數。

討論

聽說統計上有一個更牛的利器是隨機森林模型(random forest model),可以無視參數是否獨立,直接進入模型而且可以精確預測。哪天有興趣琢磨琢磨。

PS: 以下是娛樂時間。

圓山頭是墓葬的首選,所以,各位看官以後到千島湖旅遊,不要去什麼猴島蛇島,選擇山頭比較圓的島,才是王道!

最後檢驗一下鳥類多樣性跟墓葬出現的相關性分析:

cor.test(tilbird[, 1], tiltomb[, 1])

###### Pearson's product-moment correlation######data:  tilbird[, 1] and tiltomb[, 1]###t = 3.256, df = 38, p-value = 0.002378###alternative hypothesis: true correlation is not equal to 0###95 percent confidence interval:### 0.1821 0.6797###sample estimates:###   cor ###0.4671

結果是顯著正相關(t = 3.2562, df = 38, p-value = 0.002378)。墓葬的出現,表示該島風水還不錯,所以最後證實本文的最初假設,即跟蜘蛛俠討論時所做的預測:鳥類多樣性與風水有顯著的相關性。至於機理等科學問題的討論,不是本篇論文能夠解決的。請聽下回分解。

致謝

謝謝看官的一路捧場,瀏覽完這塊又長又臭的博文。謝謝實驗室提供的平臺和提供的支助,給於了我想像的空間,以及島嶼的數據。有關墓葬的生境數據,來自古田山大樣地,我想像著搬到千島湖了,在此一併致謝。分析方法部分參考於此。本文的原始碼及數據可以點擊此處(已更新)或此處(已過期)下載。看官就是reviewer(評審員),若有任何reviews,請盡請留言,謝謝!

參考文獻

Anderson, David R. (2008) Model based inference in the life sciences: a primer on evidence. New York: Springer.

Burnham, Kenneth P. and David R. Anderson. (2002) Model selection and multimodel inference: a practical information-theoretic approach. Springer.

Symonds, Matthew RE and Adnan Moussalli. (2011) A brief guide to model selection, multimodel inference and model averaging in behavioural ecology using Akaike’s information criterion. Behavioral Ecology and Sociobiology, 65: 13-21. APA

Whittingham, Mark J. et al. (2006) Why do we still use stepwise modelling in ecology and behaviour?. Journal of Animal Ecology, 75: 1182-1189.

本文引用格式: Si X., Pimm S.L., Russell G.J. & P. Ding. (2014) Turnover of breeding bird communities on islands in an inundated lake. Journal of Biogeography, 41, 2283–2292.

往期精彩文章:

第一個被認為「科學家」的人:泰勒斯

數學思維比數學運算更重要

二十世紀的十大科學騙局

瞎扯現代數學的基礎

x背後的軼聞趣事

主宰這個世界的10大算法

16個讓你燒腦讓你暈的悖論

機器學習中距離和相似性度量方法

傳說中的快排是怎樣的

玻璃秘史:一個人 改變了全世界

程序人生的四個象限和兩條主線

比特幣的原理及運作機制

概率論公式,你值得擁有

分類算法之樸素貝葉斯算法

採樣定理:有限個點構建出整個函數

長按二維碼識別

歡迎大家把獨特見解分享出來,投稿郵箱:

math_alg@163.com

相關焦點

  • 模型剪枝,不可忽視的推斷效率提升方法 - 機器之心Pro
    選自TowardsDataScience作者:Ranjeet Singh機器之心編譯參與:路剪枝是常用的模型壓縮方法之一,本文對剪枝的原理、效果進行了簡單介紹。目前,深度學習模型需要大量算力、內存和電量。當我們需要執行實時推斷、在設備端運行模型、在計算資源有限的情況下運行瀏覽器時,這就是瓶頸。能耗是人們對於當前深度學習模型的主要擔憂。
  • 多元線性回歸的模型解釋、假設檢驗、特徵選擇
    同樣地,通過固定廣播和報紙,我們推斷電視預算每增加1000美元,產品大約增加46個單位。然而,對於報紙預算來說,由於係數幾乎可以忽略不計(接近於零),很明顯報紙並沒有影響銷售。事實上,它在0的負的一邊(-0.001),如果幅度足夠大,可能意味著這個代理是導致銷售下降。但我們不能以如此微不足道的價值做出這種推斷。
  • 宏觀多因子模型BIRR模型
    宏觀和統計多因素模型計算必要報酬率的多因子模型主要是:FFM(Fama–French Model)和PSM(Pastor and Stambaugh Model,在FFM的基礎上加了流動性因子LIQ)是基於多個基本因素的一系列要求回報模型的一種類型的例子
  • 展館設計模型:設計模型與表現模型
    提到展館的設計模型,它所給大家帶來的第一印象就是能夠真實反映出設計展示的效果、將整個空間的空間感、光感以及質感進行真實體現。在此篇文章中,展館設計公司水北展陳裝飾的小編就跟大家一起來聊聊可以幫助推敲滿意展示設計成果的模型。
  • 陳丹琦新作:關係抽取新SOTA,用pipeline方式挫敗joint模型
    近期研究多採用 joint 方式建模兩個子任務,而陳丹琦等人新研究提出一種簡單高效的 pipeline 方法,在多個基準上獲得了新的 SOTA 結果。端到端關係抽取旨在識別命名實體,同時抽取其關係。近期研究大多採取 joint 方式建模這兩項子任務,要麼將二者統一在一個結構化預測網絡中,要麼通過共享表示進行多任務學習。
  • 李子布丁模型:一個有缺陷的模型,如何幫助我們理解原子
    李子布丁模型,又稱棗糕模型、葡萄乾蛋糕模型、湯姆孫模型、洋李布丁模型等。湯姆遜開創性地把原子看作是帶正電的「布丁」,把電子看作是「李子」,李子嵌入布丁裡。
  • 汽車軟體開發模型——瀑布模型/V模型
    學過計算機軟體的同學,應該都知道軟體開發的模型有很多:瀑布模型,V模型,螺旋模型,快速原型模型,增量模型,噴泉模型等。而汽車軟體的開發模型是怎樣的呢?汽車軟體傳統的開發模型——瀑布模型/V模型汽車軟體,就目前而言,是嵌入式軟體。
  • 靜態模型裡的Q版飛機模型——蛋機
    作為靜態模型界的另一個新寵,Q版從動漫形象轉變成手辦模型。一直深受廣大漫迷,模迷的喜愛。今天跟大家說說模型界裡的蛋機。(靜態飛機模型)小編也是一位靜態模型愛好者。且入坑足足二十年有餘。Q版模型的出現也讓喜愛等比例模型的朋友們更多了一份樂趣。從民用模型到動漫模型,比如高達系列。再到軍模,都有Q版的身影。而作為Q版的飛機模型,模友們更喜歡稱其為蛋機,顯得更加貼切!小編第一次接觸蛋機是日本長谷川的產品,在某寶上的模型圈裡大受歡迎。基本所有主流飛機模型都有自己的Q版。
  • 方差-協方差法VaR計量模型選擇
    目前,國內越來越多的金融機構也採用VaR技術作為事前風險監控和事後風險評估的重要手段。因此,加強對VaR技術的研究就顯得十分必要。      VaR能比較準確地反映出金融市場風險狀況且易於理解,因此在風險測量及風險管理方面應用得非常廣泛。同時,VaR方法經過不斷發展,現已成為一個龐大的家族,根據不同情況在實際應用中面臨具體模型選擇的問題。
  • 伊朗在荷姆茲海峽擺美國航母模型
    伊朗在荷姆茲海峽擺美國航母模型王宏彬美國27日公開的衛星圖像顯示,伊朗方面在海灣「咽喉」荷姆茲海峽放置一艘美國航空母艦模型,貌似將用於實彈演習。美國媒體根據事發時機推斷,伊朗此舉可能是為回應上周美軍戰機「攔截」伊朗客機一事。美國馬克薩爾科技公司25日和26日拍攝到的多張衛星圖像顯示,一艘拖船把航母模型從伊朗港口城市阿巴斯拖到荷姆茲海峽;另一艘快艇高速衝向模型;模型的飛行甲板上有16架戰鬥機模型。從外表看,這艘航母模型很像美國海軍現役的尼米茲級航母。
  • 江蘇建築模型設計費用_北京沙盤模型
    大峽谷模型設計有限公司表示,公司創立於1994年,是中國沙盤模型行業知名企業,專注於提供智能動態沙盤、多媒體沙盤、投影沙盤、房地產沙盤、電子沙盤、工業模型等高端沙盤模型領域的設計、製作、運輸、安裝、售後等一體化服務。  售樓部沙盤模型製作需要把控這些!  售樓部沙盤是房地產銷售中扮演著重要角色。隨著房地產業的興起,房地產模型越來越流行。
  • 模型教程2 | 模型樹的幾種打開方式
    那麼從本期開始,就先暫時進入一個新的小版塊,拿出我珍(xian)藏(xue)已(xian)久(mai)的p站各種手工模型參考圖,來分析一下這些參考圖是如何更好的來表現和表達模型的!~本期我們主要從模型中最重要的小配景,模型樹來入手。
  • 論文中統計報告的注意事項:多因素模型和診斷試驗
    1.1 多變量回歸、傾向性評分和工具變量並不是一根魔棒有研究者認為多變量調整可以「消除混雜」、「使兩組相似」或「模擬隨機試驗」。多變量調整T2c 時,並不能保證T2c 的不同表型也完全相同。其次,模型只針對少數測量的協變量進行調整,並不能排除未測量(甚至不可測量)的協變量存在重要作用的可能性。
  • 3dmax精品模型素材!再也不用擔心沒好模型用了
    青雲模型網頁面選擇一個自己喜歡的3d模型,比如這個現代輕奢客廳餐廳原創作者洋洋彡丶下載速度接下來我們把這個壓縮文件解壓,我們就會看到有多出來一個文件夾~3d模型素材,我們也可以自己去網站下載貼圖材質,在這裡給大家推薦一個有海量精美3d模型素材的網站——【青雲模型網】qingyun6.com
  • 高達模型入門 模型分類篇
    PG顧名思義完美模型,萬代公司於1998年開始發售本級別的高達模型.被廣大玩家認做是最夢寐以求的高達模型.本系列只有一種比例為1:60大小.做出的成品一般在33釐米高左右.        Z高達系列三款:MSZ-006 ZETA 高達\RX-178 高達MKⅡ奧谷配色版\RX-178 高達MKⅡ泰坦斯配色版.其中Z高達出過幾款稀有配色版,數量極少多是高達展會上的限量品或高達模型大賽的冠軍獎品.         W高達系列一款:W-高達 ZERO CUSTOM.
  • MotoSim EG-VRC軟體:使用模型創建工具創建三維模型
    Add Model Dialog對話框中其他功能說明:File Name功能區中,點擊「…」按鈕,可以選擇現有的外部模型創建模型;勾選「Dummy Model」選項,可以創建虛擬模型。3.左側的模型樹中出現新創建的模型文件,此時的新模型文件中不包含任何模型數據。4.左側模型樹中雙擊新創建的模型文件Model,在彈出的零部件添加對話框中Add Parts功能區下零部件類選擇框中點選「BOX」,然後點擊後方的「Add」按鈕。
  • 經典模型第一講:冰山模型建立自我認知
    借用冰山模型建立自我認知,這是一個分析自我的有效方式。作者闡述其中的具體步驟,希望能夠給大家提供幫助。在職場和生活中會遇到形形色色的人,你永遠不會知道對方是什麼的人,自私而毫無底線?同一個團隊裡,誰值得相信?選擇誰將會你的產品Team裡的合適的人?
  • 【動漫模型】動漫模型簡介導購 動漫模型熱賣產品推薦
    【動漫模型】動漫模型簡介      由於機動戰士高達的成功,在成年人市場的需求下,原本只有300日元價位的高達模型很快緊跟著便發行了定價達到1000日元甚至3000日元的高價位面向成人的高達模型扯遠點,科幻模型也可以說是借著高達動畫的巨大成功才能發展到今天和軍事模型分庭抗禮甚至稍勝一籌的局面。    在國外,這類商品被統稱為HOBBY,有硬周邊與軟周邊的區分。象扭蛋、掛卡、模型、手辦這樣沒有多少實用價值純觀賞收藏的被稱為動漫模型或硬周邊。相對降格較高;另外我們常見的借用某個動漫形象生產的具有一定實用性的如文具、服飾、鑰扣、手機鏈等商品,相對價格便宜。
  • CivilFEM的本構模型
    (摘自百度百科)在CivilFEM powered by Marc中,提供了鋼、混凝土、巖石、土和用戶自定義等材質的多種本構模型,用戶根據實際的工程情況,選擇不同的本構模型,從而更好地模擬與分析工程問題。
  • 阿里開源人機對話模型ESIM:達摩院出品,準確度曾創世界新紀錄
    這次是人機對話模型ESIM,全稱Enhanced Sequential Inference Model,一種增強序列推斷模型。這一模型的主要應用場景為智能客服、導航軟體、智能音箱等,現在已經被阿里巴巴應用到語音點餐機、地鐵語音售票機、汽車交互系統等應用中。