簡體   English   中英

如何找到betareg軟件包接受的最小浮點值?

[英]How to find the minimum floating-point value accepted by betareg package?

我正在R中進行Beta回歸 ,該回歸需要0到1之間的值,並且排除了端點,即(0,1)而不是[0,1]。

我的數據集中有一些0和1值,所以我想將它們轉換為最小的鄰居,例如0.0000 ... 0001和0.9999 ... 9999。 我用過.Machine$double.xmin (這給我2.225074e-308),但是betareg()仍然給出錯誤:

無效的因變量,所有觀察值必須位於(0,1)中

如果我使用0.000001和0.999999,則會出現另一組錯誤:

1:在betareg.fit(X,Y,Z,權重,偏移量,鏈接,link.phi,類型,控制)中:未能反轉信息矩陣:迭代過早停止
2:在sqrt(wpp)中:chol.default(K)中的錯誤:4階的前導未定

只有使用0.0001和0.9999時,我才能正常運行。 有什么辦法可以使用betareg來提高此最小值? 還是我應該對此感到滿意?

嘗試用eps (位移從0和1開始)先等於1e-4(如此處所示),然后再嘗試1e-3。 如果模型的結果在您關心的任何方面都沒有不同,那就太好了。 如果是這樣,則需要非常小心,因為這表明您的答案將對假設非常敏感。

在下面的示例中,色散參數phi發生了很大變化,但是攔截和斜率參數變化不大。

如果確實發現特定數據的參數變化量令人擔憂,那么您需要更認真地考慮零和一出現的過程,並為該過程建模,例如

  • 審查數據模型:零/一通過最小/最大檢測閾值出現,將零/一值建模為實際上位於尾巴中或
  • 障礙 / 零一通貨膨脹模型:零和一通貨膨脹是通過與其他數據分開的過程產生的,使用二項式或多項式模型來表征零對(0,1)對一,然后對(0,1)組件)

有關這些步驟的問題可能更適用於CrossValidated,而不是適用於SO。

樣本數據

set.seed(101)
library(betareg)
dd <- data.frame(x=rnorm(500))
rbeta2 <- function(n, prob=0.5, d=1) {
    rbeta(n, shape1=prob*d, shape2=(1-prob)*d)
}
dd$y <- rbeta2(500,plogis(1+5*dd$x),d=1)
dd$y[dd$y<1e-8] <- 0

試穿功能

ss <- function(eps) {
    dd <- transform(dd,
                    y=pmin(1-eps,pmax(eps,y)))
    m <- try(betareg(y~x,data=dd))
    if (inherits(m,"try-error")) return(rep(NA,3))
    return(coef(m))
}
ss(0)  ## fails
ss(1e-8) ## fails
ss(1e-4)
## (Intercept)           x       (phi) 
##   0.3140810   1.5724049   0.7604656
ss(1e-3)  ## also fails
ss(1e-2)
## (Intercept)           x       (phi) 
##   0.2847142   1.4383922   1.3970437
ss(5e-3)
## (Intercept)           x       (phi) 
##   0.2870852   1.4546247   1.2029984

嘗試一系列值

evec <- seq(-4,-1,length=51)
res <- t(sapply(evec, function(e) ss(10^e)) )
library(ggplot2)
ggplot(data.frame(e=10^evec,reshape2::melt(res)),
       aes(e,value,colour=Var2))+
    geom_line()+scale_x_log10()

在此處輸入圖片說明

暫無
暫無

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

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