Buenos dias!
Os escribo para ver si me podeis ayudar con un asunto en el que me he quedado un
poco encallado.
Lo que tengo que hacer es sacar los percentiles (0.001, 0.005, 0.95 y 0.999) de
varias distribuciones beta, concretamente 418. Cada distribucion esta definida
por los parametros "shape1" y "shape2". Por lo tanto tengo
una base de datos de 418 filas y en cada una de ellas los parametros que me
definen la distribucion beta, shape1 y shape2.
Tengo el siguiente codigo:
distrname="beta"
shape1= 0.2 #ejemplo
shape2= 0.3 #ejemplo
quantvector=c(0.001,0.005,0.95,0.999)
(paste("qvector=q",distrname,"(quantvector, shape1,
shape2)",sep=""))
eval(parse(text= paste("qvector=q",distrname,"(quantvector,
shape1, shape2)",sep="") ))
qvector
Donde tengo problemas es en aplicar el anterior codigo para cada una de las
filas de mi base de datos, especificando que shape1 es "mydata$shape1"
y shape2 es "mydata$shape2". He pensado que quizas podria hacer una
funcion con el anterior codigo y hacer un loop posterior para que me la aplique
para cada una de mis filas.
Sin embargo estoy convencido de que tiene que haber una manera mas directa
utilizando la funcion "apply" de R o alguna de sus
"hermanas", que funcionaria mejor.
Me podriais ayudar? cualquier pista me seria de gran utilidad.
Muchas gracias!!
Javi
P.D. si necesitais cualquier otra info o un ejemplo de los datos, no dudeis en
pedirmelo.
	[[alternative HTML version deleted]]
Hola, Efectivamente la función "apply" te ayudaría mucho en este caso, y no hace falta que pases por crear la función y evaluarla como haces. Sería algo así. quantvector=c(0.001,0.005,0.95,0.999) res_ults <- apply(tu_dataframe, 1, qbeta, p=quantvector, shape1 tu_dataframe$shape1, shape2 = tu_dataframe$shape2) El "1" de apply está indicando el MARGIN sobre el que ha de actuar de tu dataframe, en este caso las filas. Entiendo que tu dataframe tienbe una columna que es el "shape1" y otra el "shape2". Saludos, Carlos Ortega www.qualityexcellence.es El 12 de julio de 2018, 11:44, javier bueno enciso <jbuenoenciso en hotmail.com> escribió:> Buenos dias! > > > Os escribo para ver si me podeis ayudar con un asunto en el que me he > quedado un poco encallado. > > > Lo que tengo que hacer es sacar los percentiles (0.001, 0.005, 0.95 y > 0.999) de varias distribuciones beta, concretamente 418. Cada distribucion > esta definida por los parametros "shape1" y "shape2". Por lo tanto tengo > una base de datos de 418 filas y en cada una de ellas los parametros que me > definen la distribucion beta, shape1 y shape2. > > > Tengo el siguiente codigo: > > > distrname="beta" > shape1= 0.2 #ejemplo > shape2= 0.3 #ejemplo > quantvector=c(0.001,0.005,0.95,0.999) > (paste("qvector=q",distrname,"(quantvector, shape1, shape2)",sep="")) > eval(parse(text= paste("qvector=q",distrname,"(quantvector, shape1, > shape2)",sep="") )) > qvector > > Donde tengo problemas es en aplicar el anterior codigo para cada una de > las filas de mi base de datos, especificando que shape1 es "mydata$shape1" > y shape2 es "mydata$shape2". He pensado que quizas podria hacer una funcion > con el anterior codigo y hacer un loop posterior para que me la aplique > para cada una de mis filas. > > Sin embargo estoy convencido de que tiene que haber una manera mas directa > utilizando la funcion "apply" de R o alguna de sus "hermanas", que > funcionaria mejor. > > Me podriais ayudar? cualquier pista me seria de gran utilidad. > > Muchas gracias!! > > Javi > > P.D. si necesitais cualquier otra info o un ejemplo de los datos, no > dudeis en pedirmelo. > > > > > > [[alternative HTML version deleted]] > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Muchas gracias Carlos,
Sin embargo lo que me crea es una matriz de 174724 elementos (148x 148).  Lo que
yo quiero en el output es una matriz de 1672 elementos (los cuatro percentiles
especificados en "quantvector" de columnas x 148 filas de las
deiferentes distribuciones).
A modo de curiosidad. Mi base de datos original en verdad tiene muchas mas
variables a parte de"shape1" y "shape2". Usando esta base de
datos original la funcion 'apply' no funcionaria verdad? Para correr tu
codigo he creado una nueva data.frame con solo las dos columnas de interes.
Muchas gracias de nuevo por el tiempo empleado en atenderme.
Atentamente,
Javi
________________________________
De: Carlos Ortega <cof en qualityexcellence.es>
Enviado: jueves, 12 de julio de 2018 13:15
Para: javier bueno enciso
Cc: r-help-es en r-project.org
Asunto: Re: [R-es] Problemas con la funcion "apply"
Hola,
Efectivamente la funci?n "apply" te ayudar?a mucho en este caso, y no
hace falta que pases por crear la funci?n y evaluarla como haces.
Ser?a algo as?.
quantvector=c(0.001,0.005,0.95,0.999)
res_ults <- apply(tu_dataframe, 1, qbeta, p=quantvector, shape1 =
tu_dataframe$shape1, shape2 = tu_dataframe$shape2)
El "1" de apply est? indicando el MARGIN sobre el que ha de actuar de
tu dataframe, en este caso las filas.
Entiendo que tu dataframe tienbe una columna que es el "shape1" y otra
el "shape2".
Saludos,
Carlos Ortega
www.qualityexcellence.es<http://www.qualityexcellence.es>
QualityExcellence<http://www.qualityexcellence.es/>
www.qualityexcellence.es
QUALITY EXCELLENCE, consultores en calidad, procesos y mejora continua
El 12 de julio de 2018, 11:44, javier bueno enciso <jbuenoenciso en
hotmail.com<mailto:jbuenoenciso en hotmail.com>> escribi?:
Buenos dias!
Os escribo para ver si me podeis ayudar con un asunto en el que me he quedado un
poco encallado.
Lo que tengo que hacer es sacar los percentiles (0.001, 0.005, 0.95 y 0.999) de
varias distribuciones beta, concretamente 418. Cada distribucion esta definida
por los parametros "shape1" y "shape2". Por lo tanto tengo
una base de datos de 418 filas y en cada una de ellas los parametros que me
definen la distribucion beta, shape1 y shape2.
Tengo el siguiente codigo:
distrname="beta"
shape1= 0.2 #ejemplo
shape2= 0.3 #ejemplo
quantvector=c(0.001,0.005,0.95,0.999)
(paste("qvector=q",distrname,"(quantvector, shape1,
shape2)",sep=""))
eval(parse(text= paste("qvector=q",distrname,"(quantvector,
shape1, shape2)",sep="") ))
qvector
Donde tengo problemas es en aplicar el anterior codigo para cada una de las
filas de mi base de datos, especificando que shape1 es "mydata$shape1"
y shape2 es "mydata$shape2". He pensado que quizas podria hacer una
funcion con el anterior codigo y hacer un loop posterior para que me la aplique
para cada una de mis filas.
Sin embargo estoy convencido de que tiene que haber una manera mas directa
utilizando la funcion "apply" de R o alguna de sus
"hermanas", que funcionaria mejor.
Me podriais ayudar? cualquier pista me seria de gran utilidad.
Muchas gracias!!
Javi
P.D. si necesitais cualquier otra info o un ejemplo de los datos, no dudeis en
pedirmelo.
        [[alternative HTML version deleted]]
_______________________________________________
R-help-es mailing list
R-help-es en r-project.org<mailto:R-help-es en r-project.org>
https://stat.ethz.ch/mailman/listinfo/r-help-es
--
Saludos,
Carlos Ortega
www.qualityexcellence.es<http://www.qualityexcellence.es>
	[[alternative HTML version deleted]]