Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Queremos programar una funcin en R donde introduciendo un valor a, un valor x (al que
queremos aproximar su valor en la fundin f) y un entero n, nos d la aproximacin por el polinomio de Taylor de orden n. Recordemos que el polinomio de Taylor de orden n se expresa de la siguiente manera:
Necesitamos previamente crear algunas funciones como la que calcula un nmero factorial, o calcula derivadas de orden n. FUNCIN FACTORIAL: > Factorial<-function(n) + { + if(n>1) + factorial<-n*Factorial(n-1) + else factorial<-1 + } FUNCIN DERIVADA de orden n: > Dn<-function(f,n) + { + for(i in 1:n) + f<-D(f,x) + return(f) + } Como la funcin D que incorpora el paquete R devuelve una expresin algebrica, en lugar de un valor numrico, necesitamos definir la funcin a la que se quiere aplicar el Polinomio de Taylor en un comando aparte, sea por ejemplo: > fx<-expression(sin(x)) o bien, > fx<-expression(x^3-x^2+1) Si queremos obtener el valor de la funcin f evaluado en un punto, tendramos que fijar el punto y evaluarlo en la expresin fx. Ahora estamos en disposicin de aplicar la siguiente funcin que hemos programado: > Taylor<-function(xx,a,n) + x<-a + taylor<-eval(fx) + for(i in 1:n) + taylor<-taylor+(xx-a)^i * eval(Dn(fx,i))/Factorial(i) + return(taylor) Si queremos calcular el polinomio de Taylor para la funcin previamente definida fx, ponemos el comando Taylor(xx,a,n). Usaremos en modo de ejemplo la funcin raz cuadrada x , queremos aproximar 2 a partir del valor a =1 : > x<-2; fx<-expression(sqrt(x)) > eval(fx)
[1] 1.414214 Borramos el valor que hemos apuntado a x para no tener problemas de asignacin, con el comando rm(x). Vemos las aproximaciones de orden 1, 2, 3, 5, 10 y 100. > Taylor(2,1,1) [1] 1.5 > Taylor(2,1,2) [1] 1.375 > Taylor(2,1,3) [1] 1.4375 > Taylor(2,1,5) [1] 1.425781 > Taylor(2,1,10) [1] 1.409931 > Taylor(2,1,100) [1] 1.414073 Observamos que el mtodo converge correctamente, aunque algo lento para esta funcin.
> DIASentreAyB(T,50,60) Los siguientes das estn entre 50 y 60 F Da 1 abril de 2002. Da 4 abril de 2002. Da 7 abril de 2002. Da 21 abril de 2002. Da 23 abril de 2002.
Ejercicio 2.
Leemos los datos de la muestra cars que tiene 2 variables, hay 50 tomas de la Velocidad de los coches y de la Distancia que recorren hasta parar. Determinamos los siguientes resultados: Para una variable: > summary(cars) speed dist Min. : 4.0 Min. : 2.00 1st Qu.:12.0 1st Qu.: 26.00 Median :15.0 Median : 36.00 Mean :15.4 Mean : 42.98 3rd Qu.:19.0 3rd Qu.: 56.00 Max. :25.0 Max. :120.00 Tomamos x e y los dos vectores de tamao 50, x la velocidad, y la distancia. > x=vector(mode="numeric",length=50) > y=vector(mode="numeric",length=50) > for(i in 1:50){ + x[[i]]<-cars[[i,1]] + y[[i]]<-cars[[i,2]] } Desviacin tpica: > sd(x) [1] 5.287644 > sd(y) [1] 25.76938 Como medida de apuntamiento tenemos la curtosis, que no es un comando de R, por lo que lo programamos: > kurtosis<-function(x){ + m4=mean((x-mean(x))^4) + kurt=m4/(sd(x)^4)-3 + return(kurt) + } > kurtosis(x) [1] -0.6730924 > kurtosis(y) [1] 0.1193971
Diagrama de cajas:
Diagrama de barras:
10 14 42 46 48 50 1 1 2 1 1 2 1 1 52 54 56 60 1 2 2 1
16 1 64 1
17 1 66 1
18 1 68 1
20 2 70 1
22 1 76 1
24 1 80 1
26 4 84 1
28 2 85 1
32 3 92 1
34 3
36 2
40 2
93 120 1 1
Recta de regresin: > modelo<-lm(y~x) > coeficientes<-coef(modelo) > coeficientes (Intercept) x -17.579095 3.932409 > curve(modelo$coef[1]+modelo$coef[2]*x,ylab='distancia', + xlab='velocidad',main='Ajuste lineal',xlim=range(x), + ylim=range(y)) > points(x,y,pch=21,col='blue',bg='blue')
Coeficiente de correlacin de Pearson: > cor(x,y) [1] 0.8068949 Covarianza: > cov(x,y) [1] 109.9469