Quantiles

為什麼要使用極值理論?

  • June 26, 2015

我來自土木工程,我們使用極值理論,例如GEV分佈來預測某些事件的值,例如最大風速,即98.5%的風速會低於該值。

我的問題是為什麼要使用這樣的極值分佈如果我們只使用整體分佈並獲得98.5% 概率的值,會不會更容易?

免責聲明:在以下幾點,這大致假定您的數據是正態分佈的。如果您實際上是在設計任何東西,那麼請與強大的統計專業人士交談,並讓該人在線上簽名,說明級別將是多少。與其中 5 人或 25 人交談。此答案適用於詢問“為什麼”的土木工程專業學生,而不適用於詢問“如何”的工程專業人士。

我認為問題背後的問題是“什麼是極值分佈?”。是的,它是一些代數 - 符號。所以呢?對?

讓我們想想 1000 年的洪水。他們很大。

當它們發生時,它們會殺死很多人。許多橋樑正在倒塌。

你知道哪座橋不會倒塌嗎?我做。你還沒有……還沒有。

**問題:**哪座橋不會在 1000 年的洪水中倒塌?

**答:**設計的橋樑可以承受它。

您需要按照自己的方式進行操作的數據:

因此,假設您擁有 200 年的每日水數據。那裡有1000年的洪水嗎?不是遠程。您有一個分佈尾部的樣本。你沒有人口。如果您了解所有洪水的歷史,那麼您將擁有全部數據。讓我們考慮一下。您需要多少年的數據,多少個樣本才能獲得至少一個可能性為千分之一的值?在一個完美的世界中,您至少需要 1000 個樣本。現實世界是混亂的,所以你需要更多。您開始在大約 4000 個樣本處獲得 50/50 的賠率。您開始得到保證在大約 20,000 個樣本中擁有超過 1 個樣本。樣本並不意味著“一秒鐘與下一秒鐘的水”,而是對每個獨特變異來源的衡量——比如逐年變化。一項措施超過一年,與另一年的另一項措施一起構成兩個樣本。如果您沒有 4,000 年的良好數據,那麼您可能在數據中沒有 1000 年洪水的示例。好消息是 - 你不需要那麼多數據來獲得好的結果。

以下是如何用更少的數據獲得更好的結果:

如果您查看年度最大值,您可以將“極值分佈”擬合到 year-max-levels 的 200 個值,您將得到包含 1000 年洪水的分佈-等級。它將是代數,而不是實際的“它有多大”。您可以使用該等式來確定 1000 年洪水的規模。然後,鑑於水的體積 - 你可以建造你的橋樑來抵抗它。不要追求精確的值,而要追求更大的值,否則您將其設計為在 1000 年的洪水中失敗。如果您是大膽的,那麼您可以使用重新採樣來確定您需要將其構建到的確切 1000 年值超出多少才能使其抵抗。

這就是為什麼 EV/GEV 是相關分析形式的原因:

廣義極值分佈是關於最大值變化的程度。最大值的變化與平均值的變化完全不同。正態分佈通過中心極限定理描述了許多“中心趨勢”。

程序:

  1. 做以下 1000 次:

i. 從標準正態分佈中挑選 1000 個數字

ii. 計算該組樣本的最大值並將其存儲 2. 現在繪製結果的分佈

#libraries
library(ggplot2)

#parameters and pre-declarations
nrolls <- 1000
ntimes <- 10000
store <- vector(length=ntimes)

#main loop
for (i in 1:ntimes){

    #get samples
    y <- rnorm(nrolls,mean=0,sd=1)

    #store max
    store[i] <- max(y)
}

#plot
ggplot(data=data.frame(store), aes(store)) + 
    geom_histogram(aes(y = ..density..),
                   col="red", 
                   fill="green", 
                   alpha = .2) + 
    geom_density(col=2) + 
    labs(title="Histogram for Max") +
    labs(x="Max", y="Count")

這不是“標準正態分佈”: 在此處輸入圖像描述

峰值為 3.2,但最大值上升至 5.0。它有偏斜。它不會低於大約 2.5。如果您有實際數據(標準法線)並且您只選擇尾部,那麼您將沿著這條曲線均勻隨機地選擇一些東西。如果你幸運的話,你會朝著中心而不是下尾巴。工程與運氣相反——它是關於每次都能始終如一地實現預期的結果。“隨機數太重要了,不能任憑運氣”(見腳註),尤其是對於工程師而言。最適合該數據的分析函數族 - 分佈的極值族。

樣本擬合:

假設我們有 200 個來自標準正態分佈的年度最大值的隨機值,我們將假裝它們是我們 200 年的最高水位歷史(無論這意味著什麼)。要獲得分佈,我們將執行以下操作:

  1. 對“存儲”變量進行採樣(以製作簡短/簡單的代碼)
  2. 擬合廣義極值分佈
  3. 找到分佈的平均值
  4. 使用 bootstrapping 來找到均值變化的 95% CI 上限,因此我們可以針對我們的工程進行定位。

(代碼假定上面已經先運行)

library(SpatialExtremes) #if it isn't here install it, it is the ev library
y2 <- sample(store,size=200,replace=FALSE)  #this is our data

myfit <- gevmle(y2)

這給出了結果:

> gevmle(y2)    
      loc      scale      shape     
3.0965530  0.2957722 -0.1139021     

這些可以插入到生成函數中以創建 20,000 個樣本

y3 <- rgev(20000,loc=myfit[1],scale=myfit[2],shape=myfit[3])

建立以下條件將使任何一年的失敗機率為 50/50:

平均值(y3)

3.23681

這是確定 1000 年“洪水”水平的代碼:

p1000 <- qgev(1-(1/1000),loc=myfit[1],scale=myfit[2],shape=myfit[3])
p1000

建立在以下基礎上應該會給你 50/50 的失敗機率在 1000 年的洪水中失敗。

p1000

4.510931

為了確定 95% 的 CI 上限,我使用了以下代碼:

myloc <- 3.0965530
myscale <- 0.2957722
myshape <- -0.1139021

N <- 1000
m <- 200
p_1000 <- vector(length=N)
yd <- vector(length=m)

for (i in 1:N){

     #generate samples
   yd <- rgev(m,loc=myloc,scale=myscale,shape=myshape)

   #compute fit
   fit_d <- gevmle(yd)

   #compute quantile
   p_1000[i] <- qgev(1-(1/1000),loc=fit_d[1],scale=fit_d[2],shape=fit_d[3])

}

mytarget <- quantile(p_1000,probs=0.95)

結果是:

> mytarget
    95% 
4.812148

這意味著,為了抵禦 1000 年的大部分洪水,鑑於您的數據非常正常(不太可能),您必須為…

> out <- pgev(4.812148,loc=fit_d[1],scale=fit_d[2],shape=fit_d[3])
> 1/(1-out)

或者

> 1/(1-out)
  shape 
1077.829 

… 1078 年洪水。

底線:

  • 你有一個數據樣本,而不是實際的總人口。這意味著您的分位數是估計值,並且可能會關閉。
  • 像廣義極值分佈這樣的分佈被構建為使用樣本來確定實際的尾部。與使用樣本值相比,它們在估計方面的情況要好得多,即使您沒有足夠的樣本用於經典方法。
  • 如果你很健壯,上限就很高,但結果是——你不會失敗。

祝你好運

PS:

  • 我聽說一些土木工程設計的目標是 98.5%。如果我們計算的是第 98.5 個百分位數而不是最大值,那麼我們會發現一條具有不同參數的不同曲線。我認為這是為了建立一個 67 年的風暴。 imo 那裡的方法是找到 67 年風暴的分佈,然後確定平均值附近的變化,並獲得填充,以便將其設計為在第 67 年風暴中成功而不是在其中失敗。
  • 鑑於前一點,平民平均每 67 年就應該重建一次。因此,考慮到土木結構的使用壽命(我不知道那是什麼),以每 67 年的全部工程和建設成本計算,在某個時候,在更長的風暴間期進行工程設計可能會更便宜。可持續的民用基礎設施旨在至少持續一個人的壽命而不會失敗,對嗎?

PS:更有趣 - 一個 youtube 視頻(不是我的)

https://www.youtube.com/watch?v=EACkiMRT0pc

腳註:Coveyou, Robert R. “隨機數生成太重要了,不能靠運氣。” 應用概率和蒙特卡羅方法以及動力學的現代方面。應用數學研究 3(1969):70-111。

引用自:https://stats.stackexchange.com/questions/158767

comments powered by Disqus