整合經驗 CDF
我有一個經驗分佈. 我計算如下
x <- seq(0, 1000, 0.1) g <- ecdf(var1) G <- g(x)
我表示, IE,是pdf,而是 cdf。
我現在想求解積分上限的方程(例如,),這樣的期望值是一些.
也就是說,從整合到, 我應該. 我想解決.
按部分積分,我可以將方程重寫為
, 其中積分來自到——– (1)
我想我可以計算積分如下
intgrl <- function(b) { z <- seq(0, b, 0.01) G <- g(z) return(mean(G)) }
但是當我嘗試使用這個功能時
library(rootSolve) root <- uniroot.All(fun, c(0, 1000))
fun 是 eq (1),我收到以下錯誤
Error in seq.default(0, b, by = 0.01) : 'to' must be of length 1
我認為問題在於我的函數
intgrl
是在數值上評估的,而uniroot.All
正在傳遞區間c(0,1000)
我應該如何解決在這種情況下R?
讓排序後的數據為. 了解經驗 CDF,考慮的值之一——我們稱之為——假設某個數字的小於和的等於. 選擇一個區間其中,在所有可能的數據值中,只有出現。那麼,根據定義,在這個區間內具有恆定值對於數字小於並跳轉到常數值對於大於的數字.
考慮對從區間. 雖然不是函數——它是大小的點度量在–積分是通過部分積分的方式*定義的,將其轉換為誠實積分。*讓我們在間隔內執行此操作:
新被積函數,雖然它在, 是可積的。它的價值很容易通過將集成域分解為跳轉之前和之後的部分來發現:
將其代入上述內容並回顧產量
換句話說,這個積分乘以位置(沿著軸)的每個跳躍的大小。跳躍的大小是
每個數據值都有一個術語等於. 添加所有此類跳躍的貢獻表明
我們可以稱其為“部分均值”,因為它等於乘以部分總和。(請注意,這不是一個期望值。它可能與一個已被截斷到區間的基礎分佈版本的期望值有關: 你必須更換因數在哪裡是數據值的數量.)
給定, 你想找到為此因為部分和是一組有限的值,通常沒有解決方案:您需要找到最佳近似值,可以通過括號找到如果可能,在兩個部分均值之間。也就是說,一旦發現這樣
你會縮小到區間. 你不能比使用 ECDF 做得更好。(通過將一些連續分佈擬合到 ECDF,您可以進行插值以找到,但其準確性將取決於擬合的準確性。)
R
執行部分和計算,cumsum
並使用搜索系列找到它與任何指定值相交的which
位置,如下所示:set.seed(17) k <- 0.1 var1 <- round(rgamma(10, 1), 2) x <- sort(var1) x.partial <- cumsum(x) / length(x) i <- which.max(x.partial > k) cat("Upper limit lies between", x[i-1], "and", x[i])
此示例中從指數分佈中提取 iid 的數據的輸出為
上限介於 0.39 和 0.57 之間
真正的價值,解決是. 它與報告結果的接近表明此代碼是準確和正確的。(具有更大數據集的模擬繼續支持這一結論)。
這是經驗 CDF 的圖對於這些數據,上限的估計值顯示為垂直的灰色虛線: