Sei sulla pagina 1di 6

Actividad 3: Entorno de anlisis y programacin estadstica R Ejercicio 1. 1.

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.

2. Observamos las temperaturas mximas (en F) en Washington DC durante abril de 2002.


Escribimos un vector de datos: > T<-c(58,73,73,53,50,48,56,73,73,66,69,63,74,82,84, 91,93,89,91,80,59,69,56,64,63,66,64,74,63,69) Determinamos las siguientes funciones facilitando el poder generalizar el problema a otros futuros. i. Creamos la funcin que calcula el nmero de valores de una lista (de cualquier tamao) mayores a un determinado K: > mayorK<-function(x,K){ + cont<-0 + for(i in 1:length(x)) + if(x[[i]]>K) cont<-cont+1 + return(cont)} > mayorK(T,75) [1] 7 Hubo 7 das en el que las temperaturas mximas estuvieron por encima de 75F. ii. Ahora la funcin debe comprender dos extremos, que llamamos A y B: > entreAyB<-function(x,A,B){ + cont<-0 + for(i in 1:length(x)) + if((x[[i]]<B)&&(x[[i]]>A)) cont<-cont+1 + return(cont)} > entreAyB(T,65,80) [1] 11 Hubo 11 das en el que las temperaturas mximas estuvieron comprendidas entre 60F y 80F. iii. Queremos que la funcin nos devuelva los das del mes que responden a los lmites cuestionados: > DIASentreAyB<-function(x,A,B){ + cat(sprintf("Los siguientes das estn entre %i y %i F\n",A,B)) + for(i in 1:length(x)) + if((x[[i]]<B)&&(x[[i]]>A)) cat(sprintf("Da %i abril de 2002.\n",i)) + }

> 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

Sacamos los grficos 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

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

Considerando el par de variables:


Diagrama de dispersin: > plot(y~x)

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

Potrebbero piacerti anche