Está en la página 1de 6

Actividad 3: Entorno de análisis y programación estadística R Ejercicio 1. 1.

Queremos programar una función en R donde introduciendo un valor a, un valor x (al que
queremos aproximar su valor en la fundión f) y un entero n, nos dé la aproximación 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 número factorial, o calcula derivadas de orden n. FUNCIÓN FACTORIAL: > Factorial<-function(n) + { + if(n>1) + factorial<-n*Factorial(n-1) + else factorial<-1 + } FUNCIÓN DERIVADA de orden n: > Dn<-function(f,n) + { + for(i in 1:n) + f<-D(f,”x”) + return(f) + } Como la función D que incorpora el paquete R devuelve una expresión algebráica, en lugar de un valor numérico, necesitamos definir la función 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 función f evaluado en un punto, tendríamos que fijar el punto y evaluarlo en la expresión fx. Ahora estamos en disposición de aplicar la siguiente función 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 función previamente definida fx, ponemos el comando Taylor(xx,a,n). Usaremos en modo de ejemplo la función raíz cuadrada √ x , queremos aproximar √ 2 a partir del valor a =1 : > x<-2; fx<-expression(sqrt(x)) > eval(fx)

66.414073 Observamos que el método converge correctamente.5 > Taylor(2.3) [1] 1. ii.2) [1] 1.\n".i)) + } .89.63.1.K){ + cont<-0 + for(i in 1:length(x)) + if(x[[i]]>K) cont<-cont+1 + return(cont)} > mayorK(T.10) [1] 1.48.75) [1] 7 Hubo 7 días en el que las temperaturas máximas estuvieron por encima de 75ºF.414214 Borramos el valor que hemos apuntado a x para no tener problemas de asignación. 10 y 100. 91.A.91.1) [1] 1.74.375 > Taylor(2. 2.65.1. que llamamos A y B: > entreAyB<-function(x. Ahora la función debe comprender dos extremos. 5.B)) + for(i in 1:length(x)) + if((x[[i]]<B)&&(x[[i]]>A)) cat(sprintf("Día %i abril de 2002. i.425781 > Taylor(2. > Taylor(2.80) [1] 11 Hubo 11 días en el que las temperaturas máximas estuvieron comprendidas entre 60ºF y 80ºF.1.409931 > Taylor(2.73.64.100) [1] 1. Queremos que la función nos devuelva los días del mes que responden a los límites cuestionados: > DIASentreAyB<-function(x.63.[1] 1.53.73. Observamos las temperaturas máximas (en ºF) en Washington DC durante abril de 2002. iii.63.56.74.4375 > Taylor(2.A.1.64. con el comando rm(x).69) Determinamos las siguientes funciones facilitando el poder generalizar el problema a otros futuros.93.5) [1] 1.B){ + cat(sprintf("Los siguientes días están entre %i y %i ºF\n".84. Vemos las aproximaciones de orden 1.82.80. 3.73. aunque algo lento para esta función.1.69. 2.1.73.66.56.A.50.B){ + cont<-0 + for(i in 1:length(x)) + if((x[[i]]<B)&&(x[[i]]>A)) cont<-cont+1 + return(cont)} > entreAyB(T.59.69. Escribimos un vector de datos: > T<-c(58. Creamos la función que calcula el número de valores de una lista (de cualquier tamaño) mayores a un determinado K: > mayorK<-function(x.

Día 4 abril de 2002.287644 > sd(y) [1] 25.00 1st Qu. y la distancia. Leemos los datos de la muestra cars que tiene 2 variables. Determinamos los siguientes resultados: Para una variable: > summary(cars) speed dist Min.00 Max.> DIASentreAyB(T.4 Mean : 42.00 Tomamos x e y los dos vectores de tamaño 50. > x=vector(mode="numeric".: 56.1193971 .76938 Como medida de apuntamiento tenemos la curtosis. 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.2]] } Desviación típica: > sd(x) [1] 5.00 Mean :15.00 Median :15.: 26. hay 50 tomas de la Velocidad de los coches y de la Distancia que recorren hasta parar. Día 23 abril de 2002.50.length=50) > y=vector(mode="numeric".98 3rd Qu.0 Min.0 Max. : 2. : 4.60) Los siguientes días están entre 50 y 60 ºF Día 1 abril de 2002.0 Median : 36. Día 21 abril de 2002.:19. Ejercicio 2.6730924 > kurtosis(y) [1] 0.length=50) > for(i in 1:50){ + x[[i]]<-cars[[i. :120. :25.:12.1]] + y[[i]]<-cars[[i. Día 7 abril de 2002.0 3rd Qu. que no es un comando de R. x la velocidad.0 1st Qu.

Sacamos los gráficos siguientes: Histogramas: Diagrama de cajas: Diagrama de barras: Tablas de frecuencias: > table(x) x 4 7 8 9 10 11 12 13 14 15 16 17 18 19 20 22 23 24 25 2 2 1 1 3 2 4 4 4 3 2 3 4 3 5 1 1 4 1 > table(y) y .

579095 3.ylab='distancia'.932409 > curve(modelo$coef[1]+modelo$coef[2]*x.10 14 42 46 48 50 1 1 2 1 1 2 1 1 52 54 56 60 1 2 2 1 2 4 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 Considerando el par de variables: Diagrama de dispersión: > plot(y~x) Recta de regresión: > modelo<-lm(y~x) > coeficientes<-coef(modelo) > coeficientes (Intercept) x -17.bg='blue') .xlim=range(x).col='blue'. + ylim=range(y)) > points(x.pch=21. + xlab='velocidad'.y.main='Ajuste lineal'.

y) [1] 0.y) [1] 109.9469 .8068949 Covarianza: > cov(x.Coeficiente de correlación de Pearson: > cor(x.