0.1 Clase lunes 6/04/2020

La función cancatenar, que se denota c(), permite adherir componentes de mismo tipo o diferentes en un solo “vector”.

## [1]  1  2  3 NA

NA significa no disponible (se puede usar cuando un dato no se encuentre en una base de datos). Los datos concatenados pueden ser enteros, numéricos o lógicos (T y F).

## [1] FALSE  TRUE    NA

Si se usa la función de concatenar para datos numéricos y lógicos, dicha función tomará una jerarquía sobre los datos numéricos, significa que hace una asignación de F con el 0 y T con el 1.

## [1] 1 2 3 4 5 0 1

Por otro lado, la función “is.na(x)” que es del mismo tamaño de x, pero con resultados lógicos entrada por entrada.

## [1]  1  2  3  4 NA
## [1] FALSE FALSE FALSE FALSE  TRUE

El resultado NAN lo interpretamos como indeterminado, esto resulta cuando se hace un cálculo y se tiene una forma indeterminada como 0/0

## [1] NaN

Y obtendremos un resultado Inf cuando se haga una operación para el cual el resultado está indefinido, por ejemplo 1/0

## [1] Inf

Consideremo un ejemplo, donde utilicemos las instrucciones vistas hasta ahora

## [1]   1   2   3   0   1  NA Inf NaN

Consideremos un ejemplo un poco más elaborado, donde haremos una operación que posiblemente solo lo podamos hacer en este lenguaje.

## [1] 1.00 1.25 1.50 1.75 2.00

Utilizando la función de concatenar, construiremo un “vector” que es diferente en cuanto a la cantidad de componentes que tiene x, esto es,

##  [1] 1.00 1.25 1.50 1.75 2.00 0.00 1.00 1.25 1.50 1.75 2.00

Note que y tiene 11 componentes (5 de x, luego un cero y luego nuevamente 5 de x). Entonces definiremos una “operación aritmética” de la siguiente manera:

## Warning in 2 * x + y: longitud de objeto mayor no es múltiplo de la
## longitud de uno menor
##  [1] 4.00 4.75 5.50 6.25 7.00 3.00 4.50 5.25 6.00 6.75 5.00

Ahora consideremos un vector x, cualcuiqre acon entradas numéricas o enteras y calculemos algunos elementos de dicho vector como: valor mínimo, valor máximo, longitud (no confundir con la norma), media, la suma de los elementos y la varianza.

## [1]  1.0  4.0 -2.0  5.0  3.1
## [1] 5
## [1] -2
## [1] 5
## [1] 11.1
## [1] -124
## [1] 2.22
## [1] 7.742

Otra operación importante que podemos hacer dado un “vector” es ordenaros en forma creciente, esto lo hacemos con el comando sort

## [1]  1.0  4.0 -2.0  5.0  3.1
## [1] -2.0  1.0  3.1  4.0  5.0

1 Usando el libro de Introducción al tratamiento de datos con R

1.1 La calculadora

Entre las operaciones básicas se encuentre la de redondeo y truncamiento; también podemos pedir una cantidad de decimales, esto tiene sentido cuando el número es irracional. Por ejemplo, la raíz cuadrada de dos. Usaremos el comando print para que nos despliegue la cantidad de decimales que necesitemos ya que solo calcular la raíz nos proporcona una cantidad de decimales.

## [1] 1.414214
## [1] 1.4142135623731

1.1.1 Cifras significativas y redondeos

En ocasiones necesitamos de hacer algún tipo de redondeo o truncamientos de números con decimales.

## [1] 1
## [1] 3

Dado un número con decimales se puede elegir un entero a partir de el tomando solo la parte entera o el entero inmediato superior.

## [1] 4
## [1] 4

El comando ceiling toma el entero superior, en ocasiones a esa función se la llama la función techo.

## [1] 5

1.1.2 Definición de funciones

Para definir una función se asigna una variable y se colocan el argumento de la función y la descripción de la regla de asignación escritas entre llaves.

## [1] 198.4132
## [1] 10.09861
## [1]  4.718282 15.389056
## [1] 4.718282
## [1] 15.38906
## [1]  4.718282 15.389056
## [1] 4.718282
## [1] 15.38906

1.2 2 Una introducción a la regresón lineal y data.frame.

El data.frame es una organización de dato en tablas (como excel) que nos puede permitir tener organizada las variables por columnas (o filas) y con base en ella poder hacer algún tipo de análisis y cálculos como la regresión lineal.

1.2.1 2.1 Cálculo de réctas de regresión

## [1]  1  2  3  5  7  9 11 13
## [1]  76.11  86.45  95.27 109.18 122.03 133.73 143.73 156.41
## [1] "numeric"
## [1] "numeric"
##   edad altura
## 1    1  76.11
## 2    2  86.45
## 3    3  95.27
## 4    5 109.18
## 5    7 122.03
## 6    9 133.73
## 7   11 143.73
## 8   13 156.41

Si queremos trazar la recta de regresión usamos el comando lm y en el argumento colocamos la variable dependiente seguida de la independisnte peo conectadas por ~, esdecir, lm(altura~edad, datos1) esto se hace ya que en el data frame el de las variables está de otra forma.

## 
## Call:
## lm(formula = altura ~ edad, data = datos1)
## 
## Coefficients:
## (Intercept)         edad  
##      73.968        6.493

Al tener solo dos columnas regresa los coeficientes de la regresión lineal simple, estos es, la intersección con el eje de variable dependiente y la pendiente de la recta.

Si queremos visualizar la recta usamos el comando abline(lm(altura~edad,data=datos1)). Es importante que esté el diagrama de dispersión para luego se ponga en el mismo plano la recta de regresión.

Si queremos obtener toda la información de la regresión, utilizamos el comando summary(lm(altura~edad,data=datos1)).

## 
## Call:
## lm(formula = altura ~ edad, data = datos1)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -4.351 -1.743  0.408  2.018  2.745 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  73.9681     1.7979   41.14 1.38e-08 ***
## edad          6.4934     0.2374   27.36 1.58e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.746 on 6 degrees of freedom
## Multiple R-squared:  0.992,  Adjusted R-squared:  0.9907 
## F-statistic: 748.4 on 1 and 6 DF,  p-value: 1.577e-07
##    value    numdf    dendf 
## 748.3922   1.0000   6.0000

El comando read.table permite leer un archivo de internet o de algun programa particular o guardado en el equipo. Usas header=T si quieres que el archivo conserve el nombre de las variables y pueda leer el tipo de variable.

## 'data.frame':    1078 obs. of  2 variables:
##  $ Padres: num  65 63.3 65 65.8 61.1 ...
##  $ Hijos : num  59.8 63.2 63.3 62.8 64.3 ...

Por otro lado, str() te dice el tipo de estructura interna del data.frame o cualquier otro “arreglo”

1.3 3 Vectores y otros tipos de listas

¿Cómo construir vectores?

Un vector es una secuencia de datos, los uales pueden ser de tipo lógicos, enteros, numéricos, complejos o caracteres. La manera de construir un vector es haciendo una asignación con la función c.

1.3.1 3.1 construcción de vectores

##  [1] 1 5 6 7 2 3 2 5 1 0
## [1] "Pep"        "Giselle"    "Allegendre"

Las entradas de cada vector debe contener elmentos del mismo tipo, de no ser así R los convierte automáticamente en datos del mismo tipo siguiendo la regla:

character>complex>numérico>entero>logico

## [1] "2"    "3.5"  "TRUE" "casa"
## function (...)  .Primitive("c")

Si notammos el resultado de salida, todos los elementos del vector loc convirtió en palabras, por el orden que mencionamos anteriormente.

Otra forma de generar vectores es con el comando scan(), en este caso el ingreso de las entradas del vector son manuales:

Se puede generar vectores usando el comando sapply, que permite que una función definida se aplique a cada componente a una sucesión específica, Sapply (vector, función).

## [1] 3

Si quisieramos calcular la media de los números entre 20 y 30, la función no lo podrá calcular y para ello usaremos el comando sapply.

##  [1] 10.5 11.0 11.5 12.0 12.5 13.0 13.5 14.0 14.5 15.0 15.5

Una manera de calcular vectores mediante una sucesión y por tanto mediante una función que depende de el índice n.

##  [1]     -14      -8       4      28      76     172     364     748
##  [9]    1516    3052    6124   12268   24556   49132   98284  196588
## [17]  393196  786412 1572844 3145708
##  [1] 0.50000000 0.40000000 0.30000000 0.23529412 0.19230769 0.16216216
##  [7] 0.14000000 0.12307692 0.10975610 0.09900990 0.09016393 0.08275862
## [13] 0.07647059 0.07106599 0.06637168 0.06225681 0.05862069 0.05538462
## [19] 0.05248619 0.04987531
##  [1] 0.50000000 0.40000000 0.30000000 0.23529412 0.19230769 0.16216216
##  [7] 0.14000000 0.12307692 0.10975610 0.09900990 0.09016393 0.08275862
## [13] 0.07647059 0.07106599 0.06637168 0.06225681 0.05862069 0.05538462
## [19] 0.05248619 0.04987531

También se puede exscribirla sucesión sin definir a la n, solo colocando el rango del índice.

##  [1] 0.00000000 0.50000000 0.40000000 0.30000000 0.23529412 0.19230769
##  [7] 0.16216216 0.14000000 0.12307692 0.10975610 0.09900990 0.09016393
## [13] 0.08275862 0.07647059 0.07106599 0.06637168 0.06225681 0.05862069
## [19] 0.05538462 0.05248619 0.04987531

1.3.2 3.2 Operaciones con vectores

Se pueden hacer ciertas operaciones con vectores.

##  [1] 1 5 6 2 5 7 8 3 5 2 1 0
## [1] 12
## [1] 8
## [1] 0
## [1] 45
## [1] 0
## [1] 3.75
##  [1]  1  6 12 14 19 26 34 37 42 44 45 45
##  [1]  4  1 -4  3  2  1 -5  2 -3 -1 -1
##  [1] 0 1 1 2 2 3 5 5 5 6 7 8
##  [1] 8 7 6 5 5 5 3 2 2 1 1 0
##  [1] 0 1 2 5 3 8 7 5 2 6 5 1

El comando sum puede calcular los valores de una suma o serie. Por ejemplo \[\sum_{n=0}^{20}{\frac{1}{n^2+1}}\]

## [1] 2.027942

Una nueva forma de calcularla es usando el comando cumsum

##  [1] 1.000000 1.500000 1.700000 1.800000 1.858824 1.897285 1.924312
##  [8] 1.944312 1.959697 1.971892 1.981793 1.989990 1.996886 2.002768
## [15] 2.007845 2.012269 2.016160 2.019609 2.022686 2.025448 2.027942

1.4 3.3 Entradas de vectores y subconjuntos (secciones de vectores)

Dado un vector, podemos construir a partir de el un subconjunto, que sería un vector de longitud menor o igual que la del vector original y con alguna caracteristica particular, por ejemplo elegir el que esté en la posisición 2 o los que esten entre la posición 2 y la 5.

## [1] -3  0  4  5  8  9  6 10
## [1] 0
## [1] 0 4 5 8

Notemos que la asignación del vector lo hacemos con la función concatenar y luego la elección de un elemento en particular o de un rango de elementos (sin exceder el tamaño de del vector original) se hace con la variable asignada seguida de corchetes y dentro el elemento a elegir o el rango de elementos.

Consideremos el siguiente ejemplo:

## [1] -2  4  6  7  9  1  8
## [1] -2  1  4  6  7  8  9
## [1] 6

Esto es una manera, muy tardada, de calcular la mediana de los datos usando el comando sort y luego eligiendo el dato que está situado a la mitad.

Así como como se vio en los ejemplos anteriores de cómo selccionar de un vector un subconjunto de el (en términos de sus componentes), existe otra forma de hacerlo de uuna manera donde no implique el orden de los datos o las componentes, es decir, de un conjunto de datos decidir que elementos no voy a alegir, eso lo hacemos con la siguiente instrución

## [1] -1 -2 -5

Esto indica que de los 6 datos hay que excluir los que estén en el rango 4:6, eso se denota con x[-(1:3)]. El signo menos tiene una forma de actuar distinta a la arirmética, esto es, no implica cambiarles el signo a los elementos que están entre el 1 y el 3.

Un caso particular para seleccionar algun elemento del vector, podemos usar vector[length(vector)-i)] resulta el i+1-ésima entrada del vector empezando por el final.

## [1] 2
## [1] 8
## [1] -5

Dado un vector tomaremos un subconjunto colocando alguna condición sobre las entradas, un poco más general o más específico que los ejemplos anteriores.

## [1] 5 6 5 7 8 5
## [1] 5 5 3 5
## [1] 1 6 7 8 3 1 0
## [1] 1 6 2 7 8 2 1 0
## [1] 5 6 5 7 8 5
## [1] 6 2 8 2 0

Una vez que se define un vector x, colocar la notación x>3 genera un vector lógico del mismo tamaño que x, solo que con entradas F o T.

##  [1] FALSE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE  TRUE FALSE FALSE
## [12] FALSE

También podemos pedir la posición o índices de los elementos del vector x que cumplen alguna condición, por ejemplo x>a, para esto se usa el comando which(condición sobre x)

##  [1] 1 5 6 2 5 7 8 3 5 2 1 0
## [1] 2 3 5 6 7 9
## [1] 2 5 8 9
## [1]  1  3  6  7  8 11 12
## [1]  3  4  7 10 12
## [1] 12
## [1] 7

Si en lugar de tener la primera posición del valor mínimo o máximo, quisieramos todas las posiciones donde aparecen los valores máximos o mínimos podemos hacerlo con el comando which u en el argumento colocariamos \(x==min(x)\)

## [1]  1 11
## [1] 3 7

También podemos cambiar las entradas de un vector dado, es decir, en cierta posición reemplazar el número que está por otro.

##  [1] 1 5 8 2 5 7 8 3 5 2 1
##  [1]  1  5 15  2  5  7  8  3  5  2  1
##  [1]  1 15 18 12  5  7  8  3  5  2  1
##  [1] 1 5 8 2 5 7 8 3 0 0 0
##  [1]  1  5  8  2  5  7  8  3  0  0  0 NA NA  2

1.4.1 3.4 Factores

Un factor es como un vector, pero con una estructura interna más general. El factor es una estructura de datos para manejar variables categóricas.

## [1] "Leon"   "Mina"   "Oaxaca" "Leon"   "Oaxaca" "Oaxaca" "Oaxaca" "Mina"  
## [9] "Mina"
## [1] Leon   Mina   Oaxaca Leon   Oaxaca Oaxaca Oaxaca Mina   Mina  
## Levels: Leon Mina Oaxaca

El factor contiene un atributo importante llamado niveles y cada elemento del factor es un nivel, entonces, los niveles clasifican al factor. Por tanto, podemos concebir a un factor como una lista formada por copias de etiquetas (los niveles).

Para crear un factor a partir de un vector usando las funciones factor o as.factor. La última de estas funciones convierte un vector en factor y toma como niveles los diferentes valores que aparecen en el vector, mientras que la función factor define un factor apartir del vector y permite modificar el factor que se crea, tales como:

  1. levels, permite especificar los niveles e incluso añadir niveles que no aparecen en el vector.

  2. labels, permite cambiar los nombres de los niveles

## [1] M M F M F F M
## Levels: F M
## [1] M M F M F F M
## Levels: F M
## [1] M M F M F F M
## Levels: M F B
## [1] Masc Masc Fem  Masc Fem  Fem  Masc
## Levels: Masc Fem Bis

Para obtener los niveles de un factor se puede usar el comando levels y también puede servir para cambiar los niveles de un factor

##  [1] 1 2 2 3 1 3 2 4 2 3 4 2
## Levels: 1 2 3 4
##  [1] Muy.mal  Mal      Mal      Bien     Muy.mal  Bien     Mal     
##  [8] Muy.bien Mal      Bien     Muy.bien Mal     
## Levels: Muy.mal Mal Bien Muy.bien

Hay dos tipos de factores: simples y ordenados. Hasta ahora estudiamos el primer tipo y hemos cambiado los niveles, ahora vamos hacer un factor donde los niveles se ordenan usando el comando ordered. Tomando el ejemplo anterior tenemos

##  [1] Muy.mal  Mal      Mal      Bien     Muy.mal  Bien     Mal     
##  [8] Muy.bien Mal      Bien     Muy.bien Mal     
## Levels: Muy.mal < Mal < Bien < Muy.bien

1.4.2 3.5 Listas heterogéneas