為什麼要使用極值理論?
我來自土木工程,我們使用極值理論,例如GEV分佈來預測某些事件的值,例如最大風速,即98.5%的風速會低於該值。
我的問題是為什麼要使用這樣的極值分佈?如果我們只使用整體分佈並獲得98.5% 概率的值,會不會更容易?
免責聲明:在以下幾點,這大致假定您的數據是正態分佈的。如果您實際上是在設計任何東西,那麼請與強大的統計專業人士交談,並讓該人在線上簽名,說明級別將是多少。與其中 5 人或 25 人交談。此答案適用於詢問“為什麼”的土木工程專業學生,而不適用於詢問“如何”的工程專業人士。
我認為問題背後的問題是“什麼是極值分佈?”。是的,它是一些代數 - 符號。所以呢?對?
讓我們想想 1000 年的洪水。他們很大。
- http://www.huffingtonpost.com/2013/09/20/1000-year-storm_n_3956897.html
- http://science.time.com/2013/09/17/the-science-behind-colorados-thousand-year-flood/
- http://gizmodo.com/why-we-dont-design-our-cities-to-withstand-1-000-year-1325451888
當它們發生時,它們會殺死很多人。許多橋樑正在倒塌。
你知道哪座橋不會倒塌嗎?我做。你還沒有……還沒有。
**問題:**哪座橋不會在 1000 年的洪水中倒塌?
**答:**設計的橋樑可以承受它。
您需要按照自己的方式進行操作的數據:
因此,假設您擁有 200 年的每日水數據。那裡有1000年的洪水嗎?不是遠程。您有一個分佈尾部的樣本。你沒有人口。如果您了解所有洪水的歷史,那麼您將擁有全部數據。讓我們考慮一下。您需要多少年的數據,多少個樣本才能獲得至少一個可能性為千分之一的值?在一個完美的世界中,您至少需要 1000 個樣本。現實世界是混亂的,所以你需要更多。您開始在大約 4000 個樣本處獲得 50/50 的賠率。您開始得到保證在大約 20,000 個樣本中擁有超過 1 個樣本。樣本並不意味著“一秒鐘與下一秒鐘的水”,而是對每個獨特變異來源的衡量——比如逐年變化。一項措施超過一年,與另一年的另一項措施一起構成兩個樣本。如果您沒有 4,000 年的良好數據,那麼您可能在數據中沒有 1000 年洪水的示例。好消息是 - 你不需要那麼多數據來獲得好的結果。
以下是如何用更少的數據獲得更好的結果:
如果您查看年度最大值,您可以將“極值分佈”擬合到 year-max-levels 的 200 個值,您將得到包含 1000 年洪水的分佈-等級。它將是代數,而不是實際的“它有多大”。您可以使用該等式來確定 1000 年洪水的規模。然後,鑑於水的體積 - 你可以建造你的橋樑來抵抗它。不要追求精確的值,而要追求更大的值,否則您將其設計為在 1000 年的洪水中失敗。如果您是大膽的,那麼您可以使用重新採樣來確定您需要將其構建到的確切 1000 年值超出多少才能使其抵抗。
這就是為什麼 EV/GEV 是相關分析形式的原因:
廣義極值分佈是關於最大值變化的程度。最大值的變化與平均值的變化完全不同。正態分佈通過中心極限定理描述了許多“中心趨勢”。
程序:
- 做以下 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 年的最高水位歷史(無論這意味著什麼)。要獲得分佈,我們將執行以下操作:
- 對“存儲”變量進行採樣(以製作簡短/簡單的代碼)
- 擬合廣義極值分佈
- 找到分佈的平均值
- 使用 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。