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 .0b∫xh(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 γx1≤x2≤⋯≤xnGxiγkxiγt≥1xiγ[α,β]γ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:0≤xi≤b(xi1n)=1n∑xi≤bxi.

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

kb1n∑xi≤bxi=k.kj

1n∑i=1j−1xi≤k<1n∑i=1jxi,

b[xj−1,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.