Funciones

Ejemplo 1

R0 = function(a,b,c) b/(a+c)
#Pruebas
R0(2,2,1)
## [1] 0.6666667

Ejemplo2

TMB<-function(Sexo,Altura,Peso,Edad){
     if(Sexo=="mujer"){ 655 + (9.6 * Peso) + (1.8 *                    Altura) - (4.7 * Edad)
     }else{ 66 + (13.7 * Peso) + (5 * Altura) - (6.8 * Edad) }
 }


TMB("hombre",170,57,32)
## [1] 1479.3

Vectores

Supongase que se tiene una ventana de tiempo de longitud 20 años y queremos analizar una variable cada dos años

particion = seq(1,20, by =2)
particion
##  [1]  1  3  5  7  9 11 13 15 17 19
particion[2]#acceder a la entrada 2
## [1] 3

También lo podemos utilizar para generar muestras seudoaleatorias o aleatorias

set.seed(1) # "semilla"
x = sample(1:10, 5) # muestra seudoaleatoria de 5 números enteros de 1 a 10
x
## [1] 3 4 5 7 2

Operaciones sobre vectores

edades_F=c(23,34,32,26,43,21,36,26)
mean(edades_F)
## [1] 30.125
sd(edades_F)
## [1] 7.434235

Supongamos que tenemos un vector x de datos (una muestra) ordenados de menor a mayor, x = (x1,x2,…,xn).
la media de los datos que quedan al descartar los primeros y los últimos k datos.

mediaP = function(x,k){
n = length(x)
xs = sort(x)
xp = xs[(k+1):(n-k)] #eliminar k primeros y los k últimos datos
mean(xp)
}
#probarla
x=c( 0.82, 0.514, 0.3902, 0.90, 0.4469, 0.836)
k=2
cat(mean(x)," ", mediaP(x,k))
## 0.6511833   0.667

Matrices

B = matrix(c(1,2,3,
5,6,7), nrow = 2, byrow=T)
B
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    5    6    7

Programa punto fijo

#1e-9 = 0.000000001
puntofijo =function(g, x0, tol=1e-9, maxIter=100){
k = 1
# iteración hasta que abs(x1 - x0) <= tol o se alcance maxIteraciones
repeat{
x1 = g(x0)
dx = abs(x1 - x0)
x0 = x1
#Imprimir estado
cat("x_", k, "= ", x1, "\n")
k = k+1
#until
if(dx< tol|| k > maxIter) break;
}
# Mensaje de salida
if( dx > tol ){
cat("No hubo convergencia ")
#return(NULL)
} else{
cat("x* es aproximadamente ", x1, " con error menor que ", tol)
}
}

Probar con una funcion conocida

phi = function(x) 3*x^2/(1+(x/1)^2)# r=3, K=1
curve(phi, 0, 4); abline(h=0, v=0, lty=3)
curve(1*x, 0,4, col="red", add=TRUE)

puntofijo(phi, 2.5, 1e-7, 15)
## x_ 1 =  2.586207 
## x_ 2 =  2.609805 
## x_ 3 =  2.61593 
## x_ 4 =  2.617498 
## x_ 5 =  2.617897 
## x_ 6 =  2.617999 
## x_ 7 =  2.618025 
## x_ 8 =  2.618032 
## x_ 9 =  2.618033 
## x_ 10 =  2.618034 
## x_ 11 =  2.618034 
## x_ 12 =  2.618034 
## x* es aproximadamente  2.618034  con error menor que  1e-07