Integrazione di un CDF empirico


13

Ho una distribuzione empirica . Lo calcolo come segueG(x)

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

Indico , ovvero è il pdf mentre è il cdf.h(x)=dG/dxhG

Ora voglio risolvere un'equazione per il limite superiore di integrazione (diciamo ), in modo tale che il valore atteso di sia di qualche .axk

Cioè, integrando da a , dovrei avere . Voglio risolvere per .0bxh(x)dx=kb

Integrando per parti, posso riscrivere l'equazione come

bG(b)0bG(x)dx=k , dove l'integrale è compreso tra e ------- (1)0b

Penso di poter calcolare l'integrale come segue

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

Ma quando provo ad usare questa funzione con

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

dove fun is eq (1), ottengo il seguente errore

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

Penso che il problema sia che la mia funzione intgrlviene valutata a un valore numerico, mentre uniroot.Allpassa l'intervalloc(0,1000)

Come devo risolvere in questa situazione in R?b

Risposte:


13

Lascia che i dati ordinati siano . Per comprendere il CDF empirico , considera uno dei valori di favore chiamalo - e supponi che un certo numero di sia minore di e di sia uguale a . Scegli un intervallo in cui, di tutti i possibili valori dei dati, appare solo . Quindi, per definizione, all'interno di questo intervallo ha il valore costante per i numeri inferiori a G x i γ k x i γ t 1 x i γ [ α , β ] γ G k / n γ ( k + t ) / n γx1x2xnGxiγkxiγt1xiγ[α,β]γGk/nγe passa al valore costante per numeri maggiori di .(k+t)/nγ

ECDF

Considera il contributo a dell'intervallo . Sebbene non sia una funzione - è una misura in punti della dimensione in - l'integrale è definito mediante l'integrazione di parti per convertirlo in un integrale onesto in bontà. Facciamo questo nell'intervallo :h t / n γ [ α , β ]0bxh(x)dx[α,β]ht/nγ[α,β]

αβxh(x)dx=(xG(x))|αβαβG(x)dx=(βG(β)αG(α))αβG(x)dx.

Il nuovo integrando, sebbene sia discontinuo in , è integrabile. Il suo valore si trova facilmente rompendo il dominio di integrazione nelle parti precedenti e seguendo il salto in :γG

αβG(x)dx=αγG(α)dx+γβG(β)dx=(γα)G(α)+(βγ)G(β).

Sostituendo questo nel precedente e ricordando i rendimentiG(α)=k/n,G(β)=(k+t)/n

αβxh(x)dx=(βG(β)αG(α))((γα)G(α)+(βγ)G(β))=γtn.

In altre parole, questo integrale moltiplica la posizione (lungo l' asse ) di ciascun salto per la dimensione di quel salto. La dimensione del salto èX

tn=1n++1n

con un termine per ciascuno dei valori dei dati che equivale a . L'aggiunta dei contributi da tutti questi salti di dimostraγG

0bxh(x)dx=i:0xib(xi1n)=1nxibxi.

Potremmo chiamarlo "media parziale", visto che equivale a volte una somma parziale. (Si prega di notare che si tratta non è un'aspettativa Può essere collegato con l'attesa di una versione della distribuzione di fondo che è stato troncato all'intervallo. : è necessario sostituire la fattore per il , dove è il numero di valori di dati all'interno di .)1/n[0,b]1/n1/mm[0,b]

Dato , desideri trovare per cuiPoiché le somme parziali sono un insieme finito di valori, di solito non c'è soluzione: dovrai accontentarti della migliore approssimazione, che può essere trovata tra parentesi tra due medie parziali, se possibile. Cioè, trovando talekbkj1nxibxi=k.kj

1ni=1j1xik<1ni=1jxi,

avrai ristretto all'intervallo . Non puoi fare di meglio usando ECDF. (Adattando una distribuzione continua all'ECDF è possibile interpolare per trovare un valore esatto di , ma la sua precisione dipenderà dalla precisione dell'adattamento .)[ x j - 1 , x j ) bb[xj1,xj)b


Resegue il calcolo della somma parziale con cumsume trova il punto in cui attraversa qualsiasi valore specificato utilizzando la whichfamiglia di ricerche, come in:

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

L'output in questo esempio di dati estratti da una distribuzione esponenziale è

Il limite superiore è compreso tra 0,39 e 0,57

Il valore vero, risolvendo è . La sua vicinanza ai risultati riportati suggerisce che questo codice è accurato e corretto. (Le simulazioni con set di dati molto più grandi continuano a supportare questa conclusione).0,5318120.1=0bxexp(x)dx,0.531812

Ecco un diagramma del CDF empirico per questi dati, con i valori stimati del limite superiore mostrati come linee grigie tratteggiate verticali:G

Figura di ECDF


Questa è una risposta molto chiara e utile, quindi grazie!
user46768,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.