miércoles, 30 de marzo de 2016

6-Muestra aleatoria discreta (dos funciones)

La siguiente función sirve para generar el valor discreto que provenga de una variable aleatoria con distribución discreta. En este caso, primero hay que generar un número aleatorio u=runif(1).

#u= numero en [0,1].
#probas= vector de pesos que sumen 1.
###################################################
escoge=function(u,probas){
Res=0; i=0
  while(Res==0){
    i=i+1
    Res=i*(u<=cumsum(probas)[i])
    #if(u<=cumsum(probas)[i]){Res=i}
    #else{Res=0}
  }
Res}
###################################################
###EJEMPLO##
u=runif(1)
escoge(u,c(.3,.3,.4))

La siguiente función utiliza la función "escoge" para generar una muestra aleatoria de tamaño "n".

#n= elementos de la muestra deseada.
#probas= vector de pesos que sumen 1.
####################################################
GenDis=function(n,probas){
muestra=numeric(n); U=runif(n)
for(i in 1:n){muestra[i]=escoge(U[i],probas)}
muestra}
####################################################
###EJEMPLO 1##
GenDis(8,c(.3,.3,.4))
############

###EJEMPLO 2##
sop=0:10
v=dbinom(sop,10,.3)
plot(sop,v)
a=GenDis(1000,v)-1
b=rbinom(1000,10,.3)
hist(a,freq=F,add=T,col="yellow")
hist(b,freq=F,add=T,col="green")

lunes, 14 de marzo de 2016

5-Sumas de Riemann

Para integrales de funciones sin antiderivada como exp(-x^2) podemos aproximar su integral en un intervalo [a,b] con sumas de Riemann, la siguiente función hace el trabajo.

#n = numero de intervalos.
#a,b son los limites izq y der del
#intervalo de integracion.
int.Riemann=function(n,a,b){
  incx=(b-a)/n
  sumRiem=0
  for(k in 1:n){
    sumRiem=sumRiem+incx*f(a+k*incx)
  }
  sumRiem
}
#Ejemplo1
#primero definimos la funcion a integrar
f=function(x){x^2}
#hacemos nuestra suma de Riemann 
#con n intervalos
int.Riemann(20,-2,2)
#Comparamos con el valor real calculado
#por R con la funcion 'integrate'
integrate(f,-2,2)

#Ejemplo2
f=function(x){exp(-x^2)}
int.Riemann(10,-4,4)
integrate(f,-4,4)

#Ejemplo3
f=function(x){x*sin(x)}
int.Riemann(10000,0,10)
integrate(f,0,10)

jueves, 10 de marzo de 2016

4-Convierte tasa CAT a tasa mensual y viceversa

Función que ejemplifica un uso de la función round( ,digits= )
###################################################
#cat=tasa de interes anual, o bien,
#cat (costo anual total), entre 0 y 100%
#i=tasa de interes mensual, entre 0 y 100%
#Convierte la cantidad positiva
###################################################
conv.cat.mensual=function(cat,i){
  if(cat>0){
    cat=cat/100
    i=(1+cat)^(1/12)-1
    i=round(i*100,digits=2)
    paste("El cat de",cat*100,"% equivale a una tasa de interes de",
          i, "% mensual.")
  }else{
    i=i/100
    cat=(1+i)^12-1
    cat=round(cat*100,digits=2)
    paste("La tasa de interes  mensual de",
          i*100, "% equivale a un cat de",cat, "%.")
  }
}
#EJEMPLO 1
conv.cat.mensual(70,0)
#EJEMPLO 2
conv.cat.mensual(0,5)

3-Ritmo de carrera

En la siguiente función se ejemplifica un posible uso de las funciones floor y paste. La primera regresa el mayor entero no mayor al número ingresado.
Con esta función pueden saber a qué ritmo promedio se debe de correr para terminar alguna carrera en el tiempo planeado.
########################################
#d=1,3,5,10,16,21,35,42, etc. kms
#h=horas; m=minutos; s=segundos
#Dada una distancia y el tiempo en que
#se quiere recorrer dicha distancia
#se da el tiempo en el que se tiene que
#correr x km
########################################
minutosxkm=function(d,h,m,s){
  tiempo=h*60+m+s/60
  mxk=tiempo/d
  a=mxk/60
  horas=floor(a)
  b=a-horas
  c=b*60
  minutos=floor(c)
  d=c-minutos
  segundos=d*60
  if(horas>0){
    paste("Debes de recorrer en", horas, "horas",
          minutos,"minutos",segundos,"segundos el km.")
  }else{
    paste("Debes de recorrer en",
          minutos,"minutos",segundos,"segundos el km.")
  }
}
#EJEMPLO
minutosxkm(10,0,30,0)

miércoles, 2 de marzo de 2016

2-Suma de los primeros n naturales al cuadrado

En este código, se hace la suma cuyo resultado se sabe que es n(n+1)(2n+1)/6.
Se ejemplifica el uso de 'while'

#n=algun natural
#############################
suma.n.naturales2=function(n){
  suma=0; i=0
  while(i<n){
    i=i+1
    suma=suma+i^2
  }
  suma
}
############################
#EJEMPLO
suma.n.naturales2(10)

1-Suma de los primeros n naturales.

En este primer código se calcula la suma de los primeros n naturales, es conocido que dicha suma es igual a n(n+1)/2, pero la siguiente función hace toda la suma y ejemplifica un uso de 'for'

#n=algun natural
#############################
suma.n.naturales=function(n){
  suma=0
  for(i in 1:n){
    suma=suma+i
  }
  suma
}
############################
#EJEMPLO
suma.n.naturales(100)