Intégrer un CDF empirique

13

J'ai une distribution empirique . Je le calcule comme suitG(x)

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

Je note , c'est-à-dire que h est le pdf tandis que G est le cdf.h(x)=dG/dxhG

Je veux maintenant résoudre une équation pour la limite supérieure d'intégration (disons, ), telle que la valeur attendue de x est de k .axk

Autrement dit, en intégrant de à b , je devrais avoir x h ( x ) d x = k . Je veux résoudre pour b .0bxh(x)dx=kb

L'intégration par parties, je peux réécrire l'équation comme

, où l'intégrale est de 0 à b ------- (1)bG(b)0bG(x)dx=k0b

Je pense que je peux calculer l'intégrale comme suit

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

Mais quand j'essaie d'utiliser cette fonction avec

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

où le plaisir est eq (1), j'obtiens l'erreur suivante

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

Je pense que le problème est que ma fonction intgrlest évaluée à une valeur numérique, tout en uniroot.Allpassant l'intervallec(0,1000)

Comment dois-je résoudre pour dans cette situation dans R?b

user46768
la source

Réponses:

13

Laissez les données triées soit . Pour comprendre le CDF G empirique , considérons l'une des valeurs de x i - appelons-le γ - et supposons qu'un certain nombre k des x i sont inférieurs à γ et t 1 des x i sont égaux à γ . Choisissez un intervalle [ α , β ] dans lequel, de toutes les valeurs de données possibles, seulement γx1x2xnGxiγkxiγt1xiγ[α,β]γapparaît. Ensuite, par définition, dans cet intervalle a la valeur constante k / n pour les nombres inférieurs à γ et saute à la valeur constante ( k + t ) / n pour les nombres supérieurs à γ .Gk/nγ(k+t)/nγ

ECDF

Considérons la contribution à de l'intervalle [ α , β ] . Bien que h ne soit pas une fonction - c'est une mesure ponctuelle de la taille t / n à γ - l'intégrale est définie au moyen d'une intégration par parties pour la convertir en une intégrale honnête à la bonté. Faisons-le sur l'intervalle [ α , β ] :0bxh(x)dx[α,β]ht/nγ[α,β]

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

γG

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

G(α)=k/n,G(β)=(k+t)/n

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

X

tn=1n++1n

γG

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

1/n[0,b]1/n1/mm[0,b]

kb1nxibxi=k.kj

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

b[xj1,xj)b


Reffectue le calcul de somme partielle avec cumsumet trouve où il croise une valeur spécifiée à l'aide de la whichfamille de recherches, comme dans:

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

La sortie dans cet exemple de données tirées iid d'une distribution exponentielle est

La limite supérieure se situe entre 0,39 et 0,57

0.1=0bxexp(x)dx,0.531812

G

Figure d'ECDF

whuber
la source
C'est une réponse très claire et utile, alors merci!
user46768