簡體   English   中英

使用比例數據在 mgcv 中運行二項式 GAM 時出錯

[英]Error running binomial GAM in mgcv with proportional data

我正在嘗試對比例數據(0 到 1 之間的數字)運行 GAM。 但我收到了警告

In eval(family$initialize) : non-integer #successes in a binomial glm!

基本上,我正在模擬溫暖適應物種的出現次數與溫暖和寒冷適應物種的總出現次數對海面溫度的影響,並使用來自另一個天氣系統 (NAO) 的數據作為隨機效應,以及其他三個分類、參數變量。

m5 <- gam(prop ~ s(SST_mean) + s(NAO, bs="re") + WarmCold + Cycle6 + Region, 
          family=binomial, data=DAT_WC, method = "REML")

prop = 出現的比例,WarmCold = 物種是溫暖適應還是寒冷適應,Cycle6 = 6 年時間段,Region = 4 個區域之一。 我的數據集示例如下

structure(list(WarmCold = structure(c(1L, 1L, 1L, 1L, 2L, 2L), .Label = c("Cold", 
"Warm"), class = "factor"), Season = structure(c(2L, 2L, 2L, 
2L, 2L, 2L), .Label = c("Autumn", "Spring", "Summer", "Winter"
), class = "factor"), Region = structure(c(1L, 2L, 3L, 4L, 1L, 
2L), .Label = c("OSPARII_N", "OSPARII_S", "OSPARIII_N", "OSPARIII_S"
), class = "factor"), Cycle6 = structure(c(1L, 1L, 1L, 1L, 1L, 
1L), .Label = c("1990-1995", "1996-2001", "2002-2007", "2008-2013", 
"2014-2019"), class = "factor"), WC.Strandings = c(18L, 10L, 
0L, 3L, 5L, 25L), SST_mean = c(7.4066298185553, 7.49153086390094, 
9.28247524767124, 10.8654859624361, 7.4066298185553, 7.49153086390094
), NAO = c(0.542222222222222, 0.542222222222222, 0.542222222222222, 
0.542222222222222, 0.542222222222222, 0.542222222222222), AMO = c(-0.119444444444444, 
-0.119444444444444, -0.119444444444444, -0.119444444444444, -0.119444444444444, 
-0.119444444444444), Total.Strandings = c(23, 35, 5, 49, 23, 
35), prop = c(0.782608695652174, 0.285714285714286, 0, 0.0612244897959184, 
0.217391304347826, 0.714285714285714)), row.names = c(NA, 6L), class = "data.frame")

從文獻 (Zuur, 2009) 看來,二項分布似乎最適合用於比例數據。 但這似乎不起作用。 它正在運行,但給出了上述警告,並且輸出沒有意義。 我在這里做錯了什么?

這是一個警告,而不是錯誤,但它確實表明有些地方不正確; 二項分布支持非負 integer 值,因此在沒有形成比例的樣本總數的情況下傳入非整數值是沒有意義的。

您可以使用weights參數來執行此操作,在這種情況下,它應該采用一個整數向量,其中包含計算比例的每個觀察值的總計數。

或者,如果均值-方差關系適合您的數據,請考慮使用family = quasibinomial 變暖將 go 消失,但是您將無法使用 AIC 和相關工具來期望真正的可能性。

如果您的比例是真實比例,則考慮family = betar以擬合 beta 回歸 model,其中響應的條件分布支持單位間隔 (0, 1) 上的實數值(但技術上不是 0 或 1 - mgcv 將添加如果響應中有 0 或 1 個值,則減去一個小數字來調整數據)。

我還發現,不是計算總數,而是使用帶有 2 個感興趣列的 cbind() 刪除了警告,例如

m8 <- gam(cbind(WC.Strandings, Total.Strandings) ~ s(x1) + x2, 
family=binomial(link="logit"), data=DAT, method = "REML")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM