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

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


C'est une réponse très claire et utile, alors merci!
user46768
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.