Інтеграція емпіричного CDF


13

Маю емпіричний розподіл . Я обчислюю це наступним чиномГ(х)

    x <- seq(0, 1000, 0.1)
    g <- ecdf(var1)
    G <- g(x)

Я позначаю , тобто h - pdf, а G - cdf.год(х)=гГ/гхгодГ

Тепер я хочу розв'язати рівняння для верхньої межі інтеграції (скажімо, ), таке, що очікуване значення x дорівнює k .ахк

Тобто, інтегруючи від до b , я повинен мати x h ( x ) d x = k . Я хочу вирішити для б .0бхгод(х)гх=кб

Інтегруючи по частинах, я можу переписати рівняння як

, де інтеграл від 0 до b ------- (1)бГ(б)-0бГ(х)гх=к0б

Я думаю, що я можу обчислити інтеграл так

    intgrl <- function(b) {
        z <- seq(0, b, 0.01)
        G <- g(z)
        return(mean(G))
     }

Але коли я намагаюся використовувати цю функцію

    library(rootSolve)
    root <- uniroot.All(fun, c(0, 1000))

де весело eq (1), я отримую таку помилку

    Error in seq.default(0, b, by = 0.01) : 'to' must be of length 1  

Я думаю, що проблема полягає в тому, що моя функція intgrlоцінюється за числовим значенням, при цьому uniroot.Allпроходить інтервалc(0,1000)

Як я повинен вирішити для в цій ситуації в R?б

Відповіді:


13

Нехай відсортовані дані будуть . Щоб зрозуміти емпіричний CDF G , розглянемо одне зі значень x i --let, називаємо його γ - і припустимо, що деяке число k з x i менше, ніж γ, а t 1 з x i дорівнює γ . Виберіть інтервал [ α , β ], у якому з усіх можливих значень даних лише γх1х2хнГхiγкхiγт1хiγ[α,β]γз'являється. Тоді, за визначенням, у цьому інтервалі має постійне значення k / n для чисел, менших від γ, і переходить до постійного значення ( k + t ) / n для чисел, більших за γ .Гк/нγ(к+т)/нγ

ECDF

Розглянемо внесок у з інтервалу [ α , β ] . Хоча h не є функцією - це точкова міра розміру t / n при γ - інтеграл визначається за допомогою інтеграції частин для перетворення його в інтеграл чесного доброго. Зробимо це через інтервал [ α , β ] :0бхгод(х)гх[α,β]годт/нγ[α,β]

αβхгод(х)гх=(хГ(х))|αβ-αβГ(х)гх=(βГ(β)-αГ(α))-αβГ(х)гх.

Новий інтегранд, хоча і розривний при , є інтегральним . Його значення легко знайти, розбиваючи область інтеграції в частини, що передують і слідуючи за стрибком у G :γГ

αβГ(х)гх=αγГ(α)гх+γβГ(β)гх=(γ-α)Г(α)+(β-γ)Г(β).

Підставляючи це до вищесказаного і згадуючи виходитьГ(α)=к/н,Г(β)=(к+т)/н

αβхгод(х)гх=(βГ(β)-αГ(α))-((γ-α)Г(α)+(β-γ)Г(β))=γтн.

Іншими словами, цей інтеграл помножує розташування (вздовж осі ) кожного стрибка на розмір цього стрибка. Розмір стрибка становитьХ

тн=1н++1н

з одним доданком для кожного зі значень даних, що дорівнює . Якщо додати внесок від усіх таких стрибків G, це показуєγГ

0бхгод(х)гх=i:0хiб(хi1н)=1нхiбхi.

Ми можемо назвати це "частковою середньою", бачачи, що воно дорівнює разів частковою сумою. (Зверніть увагу, що це не очікування. Це може бути пов'язано з очікуванням версії базового розподілу, яка врізана в інтервал [ 0 , b ] : ви повинні замінити коефіцієнт 1 / n на 1 / м, де m - кількість значень даних у межах [ 0 , b ] .)1/н[0,б]1/н1/мм[0,б]

Давши , ви хочете знайти b, для якого 1кб1нхiбхi=к.кj

1нi=1j-1хiк<1нi=1jхi,

б[хj-1,хj)б


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])

Вихід у цьому прикладі даних, отриманих із експоненціального розподілу, є

Верхня межа лежить між 0,39 і 0,57

0,1=0бхдосвід(-х)гх,0,531812

Г

Фігура ECDF


Це дуже чітка і корисна відповідь, тож дякую!
user46768
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.