Hola,

Había un error en la definición de la función que había hecho y la función
que he utilizado como ejemplo (rnorm = distribución normal) presenta
problemas a la hora de integrarla en los extremos...

De esta forma sí que calcula la integral con el ejemplo que he utilizado:

> > integrand <- function(x){sm.density(x)}> > lim02ene.via <- integrand(rnorm(1000))$estimate> > foo<- function(x) lim02ene.via*[x]*> > integrate(Vectorize(foo), 0.999, 99.999, subdivisions=1000)10.70249 with absolute error < 0.0011

>

El error en la función venía porque antes foo no era una función univaluada
(lim02ene.via es un vector de longitud 100, porque esa es la longitud del
elemento de la lista sn.density()$estimate). Declarándolo de esta forma
(lim02ene.via[x], para cada valor de "x", foo(x) devuelve el valor en la
posición "x" de lim02ene.via.

Y por otro lado, también se producía un error por el comportamiento de
rnorm en sus extremos. Como indica la ayuda de la función integrate():

"Like all numerical integration routines, these evaluate the function on a
finite set of points. *If the function is approximately constant (in
particular, zero) over nearly all its range it is possible that the result
and error estimate may be seriously wrong.*"

Y justamente al utilzar la función rnorm, en los extremos (0 y 100) su
valor es muy próximo a cero.
En el ejemplo con valores ligeramente inferiores a 1 y muy cercanos a 100,
integrate es capaz de calcular, pero si pruebas con 0 y 100 entonces no
funciona.

Para tu caso particular:
1. Prueba directamente:

integrand <- function(x){sm.density(x)}
lim02ene.via <- integrand(rnorm(1000))$estimate
foo<- function(x) lim02ene.via[x]
integrate(Vectorize(foo), -Inf, Inf)

2. Si obtienes error, entonces mira el comportamiento de "lim02ene.via" por
si hay singularidades, valores muy próximos a cero o discontinuidades... Si
tiene estas anomalías, entonces integra "lim02ene.via" a trozos en vez de
hacerlo entre -Inf e Inf.

Saludos,
Carlos Ortega
www.qualityexcellence.es


El 18 de enero de 2012 00:29, Carlos Ortega <cof@qualityexcellence.es>escribió:

> Hola,
>
> Esto se aproxima más a lo que debieras de utilizar:
>
>
> sm.density() es una lista y de lo que devuelve te interesa realmente el
> conjunto "estimate".
> Y este conjunto ahora lo tienes que convertir en función para que pueda
> utilizarlo integrate(). La forma de hacerlo es con Vectorize().
>
> Siguiendo todo esto:
>
>
> > integrand <- function(x){sm.density(x)}> > lim02ene.via <- integrand(rnorm(50))$estimate> > foo<- function(x) lim02ene.via> > int.lim02ene.via <- integrate(Vectorize(foo), 0, 100)Error en integrate(Vectorize(foo), 0, 100) :
>   evaluation of function gave a result of wrong length>
>
>
> Que como ves da otro mensaje de error que viene descrito en la propia
> ayuda de integrate() pero que no proporciona claves para resolver...
> Sigo mirando.
>
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
>
>
>
> El 17 de enero de 2012 22:12, Eric <ericconchamunoz@gmail.com> escribió:
>
>> Estimada comunidad, nuevamente con algo que no se como hacer en R, pero
>> aprendiendo ....
>>
>> El problema es el siguiente:
>> 1. tengo un conjunto de 10 mil datos (n) cuyo valor va entre 0 y 10.000 a
>> los que aplico una funcion sm.density() para obtener una especie de
>> histograma pero con una curva que parece continua.
>> 2. Una vez que obtengo esa curva necesito calcular el area bajo la curva
>> en
>> ciertos intervalos, esto equivale a aplicar una integral en esos
>> intervalos. He intentado hacerlo de la siguiente forma:
>> integrand <- function(x){sm.density(x)}
>> lim02ene.via <- integrand(compara.tiempos2[,1])
>> int.lim02ene.via <- integrate(lim02ene.via, -Inf, Inf)
>>
>> pero obtengo el siguiente error:
>>
>> Error in get(as.character(FUN), mode = "function", envir = envir) :
>>  object 'lim02ene.via' of mode 'function' was not found
>>
>> buscando encontre que la funcion a integrar debe ser "vectorizable" y que
>> para eso se puede aplicar la funcion "vectorize", pero sigo obteniendo el
>> mismo error, el problema parece ser que el resultado de aplicar la funcion
>> sm.density no es una funcion si no un conjunto de muchos puntos (x.y) ...
>> entonces.
>>
>> como puedo hacer para calcular un area bajo la curva obtenida con
>> sm.density() ???
>>
>> Muchas gracias por su tiempo y ayuda ...
>>
>> Eric Concha M.
>>
>>
>>
>>
>>
>> --
>> Nota: las tildes se han omitido para evitar conflictos con algunos
>> lectores
>> de correo.
>>
>> * Un economista es un experto que sabrá mañana por qué las cosas que
>> predijo
>> ayer no han sucedido hoy (Laurence Peter).
>>
>> * SATYÂT NÂSTI PARO DHARMAH
>>
>>        [[alternative HTML version deleted]]
>>
>>
>> _______________________________________________
>> R-help-es mailing list
>> R-help-es@r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>
>>
>

	[[alternative HTML version deleted]]

