Resumen Libro probabilidad y estadistica utilizando R

El Rpbs presenta un resumen del libro probabilidad y estadistica con R escrito por sus autores (Urgate, Militino, Arnholt, 2008) propuesto para estudiar y complementar los fundamentos del lenguaje de programación.

Mencionan que el Lenguaje S, incluye tanto R como S-PLUS. "R se puede considerar como una implementación de el lenguaje S que fue desarrollado en Bell Laboratories por Rick Becker, John Chambers, y Allan Wilks, y también forma la base de los sistemas S-PLUS.

#1. Capitulo 1. Fundamentos y utilidad
#2. Capitulo 2. Fundamentos de estadistica

1. Capitulo 1

Muestran una breve introducción a S que incluye sintaxis, estructuras y funciones. Está diseñado para proporcionar una descripción general de cómo utilizar R y S-PLUS.

1.1 Los fundamentos y uso de S

S es un sistema de análisis de datos interactivo que se desarrolló en Bell Laboratories. Existen dos programas del lenguaje S:
R, una implementación de código abierto de S disponible en http://www.r-project.org y
S-PLUS, una implementación comercial de S. Este libro referirse a R y S-PLUS simplemente como S. El lenguaje S fue diseñado con uso interactivo.

Algunos tips:

#El simbolo (>) indica que el software está listo para recibir entrada.

#No se requiere puntuación para expresiones y asignaciones individuales

#Para cerrar el trabajo de forma rápida se puede escribir y ejecutar q()

#Para recibir ayuda se puede escribir hel() o el signo ? con el nombre de comando

help("plot")
## starting httpd help server ... done
# ?plot

#Es sensible a mayúsculas y minúsculas, es decir, X yx se refieren a diferentes objetos. Si el usuario omite una coma o un paréntesis, o errores ortograficos, un signo + aparecerá para indicar que el comando está incompleto.

1.2 Conjuntos de datos

Los paquetes de R se pueden descargar e instalar dentro de una sesión de R con el función install.packages ().

Los paquetes de Contributed R se pueden descargar e instalar desde el http://www.r-project.org

#Una vez que se instala un paquete, se puede cargar con la función library ()

1.3 Manipulación de datos

1.3.1 Estructuras

Elementos ⊂ Vectores ⊂ Matrices ⊂ Arrays

1.3.2 Operaciones matemáticas

La expresiones aritmeticas usualmente se utilizan: +, −, ∗, /, y ˆ. Calcular:

(7*3)+12/2-7^2+sqrt(4)
## [1] -20

otras funciones: log(), log10(), exp(), sin(), cos(), tan(), and sqrt()

La función round (x, 2) redondea el número de decimales a dos para el objeto x:

sqrt(10)
## [1] 3.162278
x=sqrt(10)
round(x,2)
## [1] 3.16

asignación de valores a los objetos

x<-3
x=3

1.3.3 Vectores

Cuando se trabaja con datos univariados, constantemente se almacenan información en vectores. El comando para crear un vector es c (…).

Ejemplo: Almacenar los valores 1.5, 2 y 3 en un vector llamado x

x=c(1.5,2,3)
x
## [1] 1.5 2.0 3.0

Para elevar al cuadrado cada valor en x, ingrese:

x ^ 2
## [1] 2.25 4.00 9.00

Para encontrar la posición de la entrada cuyo valor es 4, ingrese:

which(x ^ 2 == 4)
## [1] 2

El comando c (…) también funciona con datos de caracteres ejemplo:

y <- c("A","table","book")
y
## [1] "A"     "table" "book"

Se pueden unir dos o más vectores como columnas de vectores o filas de vectores.

Para unir dos o más vectores de columna, use el comando cbind ().

Para unir dos o más vectores de fila, utilice el comando rbind ().

Por ejemplo

x <- c(2,3,4,1)
y <- c(1,1,3,7)
cbind (x,y)
##      x y
## [1,] 2 1
## [2,] 3 1
## [3,] 4 3
## [4,] 1 7

Si se desean vectores de fila, use rbind

x <- c(2,3,4,1)
y <- c(1,1,3,7)
rbind (x,y)
##   [,1] [,2] [,3] [,4]
## x    2    3    4    1
## y    1    1    3    7

1.3.4 Secuencias

El comando seq() crea una secuencia de números.

Los tres argumentos que se utilizan normalmente con el comando seq() son el valor inicial, el valor final y el valor incremental. Ejemplo:

seq(0,1,0.2)
## [1] 0.0 0.2 0.4 0.6 0.8 1.0

Cuando el valor incremental es 1, basta con utilizar solo los valores inicial y final

seq(1,10)
##  [1]  1  2  3  4  5  6  7  8  9 10

Una forma aún más corta de lograr el mismo resultado es 1:10:

1:10
##  [1]  1  2  3  4  5  6  7  8  9 10

Las secuencias decrecientes también son posibles con comandos como 10:1

10:1
##  [1] 10  9  8  7  6  5  4  3  2  1

El comando rep(a,n) se usa para repetir el número o carácter a, n-veces

 rep(1,5) #repite 1, cinco veces
## [1] 1 1 1 1 1

es extremadamente flexible y permite que varios comandos sean combinados:

rep(c(0,"x"), 3) #Repite 0, x, tres veces
## [1] "0" "x" "0" "x" "0" "x"
rep(c(1,3,2), length=10) #Repite la secuencia (1,3,2) hasta que la secuencia tenga 10 datos
##  [1] 1 3 2 1 3 2 1 3 2 1
c(rep(1,3), rep(2,3), rep(3,3)) #Repite 1 tres veces, luego repite 2 tres veces, y repite 3 tres veces.
## [1] 1 1 1 2 2 2 3 3 3

Los valores específicos de un vector se referencian mediante llaves cuadradas []. Se debe tener en cuenta que usa paréntesis () con funciones y llaves cuadradas [] para hacer referencia a los valores en vectores, matrices y listas.

Una lista es un objeto S cuyos elementos pueden ser de diferentes tipos (carácter, numérico, factor, etc.)

typos <- c(2, 2, 2, 3, 3, 0, 3, 4, 6, 4) 
typos #los valores almacenados en typos muestran un error
##  [1] 2 2 2 3 3 0 3 4 6 4

Para seleccionar el número de errores cometidos en la cuarta posición:

typos[4]
## [1] 3

Para obtener la cantidad de errores cometidos en la posición 3:6]

typos[3:6]
## [1] 2 3 3 0

La función names() permite la asignación de nombres a vectores:

x <- c(1,2,3)
names(x) <- c("A","B","C")
x
## A B C 
## 1 2 3

Para suprimir los nombres de un vector, escriba names(x) <- NULL:

names(x) <- NULL
x
## [1] 1 2 3

1.3.4 Leer datos

Resulta más fácil primero guardar los datos originales como un archivo de texto, y luego para leer el archivo externo se usa read.table() o scan(). Para leer datos de la consola, se puede utilizar la función scan().

age1 <- scan() #funciona bien para ingresar una pequeña cantidad de datos escribiendo el consola

read.tanle()

FAT <- read.table("C:/Users/asus/Documents/EJEMPLO.txt", header=TRUE, sep="\t")
 #funciona para leer un archivo .txt en formato tabla

FAT
FAT $ sexo [3: 6] #Para ver el sexo en esa posición
## [1] "F" "F" "M" "M"

1.3.5 Función write()

La función write() permite guardar el contenido de una matriz o marco de datos S en un archivo externo

write(t(FAT), file="C:/Users/asus/Documents/new/EJEMPLO.txt", ncolumns=3)
FAT

1.3.6 Operadores lógicos y valores perdidos

Los operadores lógicos son < , >, <= ,>=(menor que, mayor que, menor o igual que, mayor o igual a), == para igualdad exacta,!= para desigualdad exacta, & para intersección, y | para la unión.

with(FAT, Peso) #forma de acceder a las variables
##  [1] 45.8 42.3 46.9 62.0 62.5 80.0 75.2 76.3 68.9 66.2 64.5 61.3 74.3 79.8 78.8
## [16] 45.8 79.8 61.3 62.0 66.0

Supongamos que necesitamos analizar los sujetos que se encuentren en la escala del peso 60k de peso. Esta se puede lograr usando el comando with() junto con Peso<60, Peso>60, Peso==60 :

with(FAT, Peso< 60) #peso menor a 60
##  [1]  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13] FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE
with(FAT, Peso>60) #peso mayor a 60
##  [1] FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
## [13]  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE
with(FAT, Peso== 60) #peso igual a 60
##  [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
with(FAT, Peso!= 60) #peso diferente a 60
##  [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [16] TRUE TRUE TRUE TRUE TRUE

R devuelve la palabra VERDADERO o FALSO para una condición lógica

attach(FAT)#busca en la base de datos al evaluar una variable

La función is.na(x) devuelve un vector lógico del mismo tamaño que x que toma el valor VERDADERO si y sólo si el elemento correspondiente en x es NA. Si x es un vector con valores NA, pero solo el Los valores no perdidos son de interés, la función !is.na (x) se puede usar como se muestra a continuación:

x <- c(1,6,9,2, NA) #denotar un valor faltante
is.na(x)
## [1] FALSE FALSE FALSE FALSE  TRUE
y<-x[!is.na(x)] #elimina un valor faltante
y
## [1] 1 6 9 2

1.3.7 Matrices

Las matrices se utilizan para organizar los valores en filas y columnas en una tabla rectangular.

los valores se escriben en una matriz (leyendo en las filas con el comando byrow = TRUE) con el nombre barley.data de la siguiente manera:

Ejemplo: diferentes tipos de cebada están en las columnas, y diferentes provincias en filas

Data <- c(190,8,22,191,4,1.7,223,80,2) #datos de la matriz
barley.data <- matrix(Data, nrow=3, byrow=TRUE) #ordena la matriz
barley.data
##      [,1] [,2] [,3]
## [1,]  190    8 22.0
## [2,]  191    4  1.7
## [3,]  223   80  2.0

Las dimensiones de la matriz se calculan escribiendo dim (barley.data):

dim(barley.data)
## [1] 3 3

El siguiente código crea dos objetos donde se asignan los nombres de las tres provincias a la provincia, y los tres tipos de cebada a escribir:

province <- c("Navarra", "Zaragoza", "Madrid")
type <- c("typeA", "typeB", "typeC")

Para asignar nombres almacenados en la provincia a las filas de la matriz se realiza:

dimnames(barley.data) <- list(province, NULL)
barley.data
##          [,1] [,2] [,3]
## Navarra   190    8 22.0
## Zaragoza  191    4  1.7
## Madrid    223   80  2.0

Ahora, para asignar los nombres almacenados en tipo a las columnas de la matriz.

dimnames(barley.data) <- list(NULL, type)
barley.data
##      typeA typeB typeC
## [1,]   190     8  22.0
## [2,]   191     4   1.7
## [3,]   223    80   2.0

Para asignar nombres de filas y columnas simultáneamente, el comando que debe usarse es dimnames (barley.data) <- lista (provincia, tipo):

dimnames(barley.data) <- list(province, type)
barley.data
##          typeA typeB typeC
## Navarra    190     8  22.0
## Zaragoza   191     4   1.7
## Madrid     223    80   2.0
dimnames(barley.data)#Verifica los nombres asignados
## [[1]]
## [1] "Navarra"  "Zaragoza" "Madrid"  
## 
## [[2]]
## [1] "typeA" "typeB" "typeC"
barley.data[2,]#ver solo la 2 columnda de datos
## typeA typeB typeC 
## 191.0   4.0   1.7
barley.data["Zaragoza", ]
## typeA typeB typeC 
## 191.0   4.0   1.7
#dimnames(barley.data) <- NULL #elimina las asignaciones de nombres de filas y columnas

Para agregar una columna adicional para un cuarto tipo de cebada (typeD), use el comando cbind():

typeD <- c(2,3.5,2.75)
barley.data <- cbind(barley.data, typeD)
rm("typeD")
barley.data
##          typeA typeB typeC typeD
## Navarra    190     8  22.0  2.00
## Zaragoza   191     4   1.7  3.50
## Madrid     223    80   2.0  2.75

La función apply() permite al usuario aplicar una función a una o más de las dimensiones. de una matriz. Para calcular la media de las columnas de la matriz cebada.

apply(barley.data,2, mean)
##      typeA      typeB      typeC      typeD 
## 201.333333  30.666667   8.566667   2.750000

1.3.8 Operaciones Vectoriales y Matriciales

Considere el sistema de ecuaciones: 3 x+ 2 y + 1 z = 10 2 x− 3 y + 1 z = −1 1 x+ 1 y + 1 z = 6 Este sistema representa con matrices y vectores como:

A <- matrix(c(3,2,1,2,-3,1,1,1,1), byrow=TRUE, nrow=3)
A
##      [,1] [,2] [,3]
## [1,]    3    2    1
## [2,]    2   -3    1
## [3,]    1    1    1
b <- matrix(c(10,-1,6), byrow=TRUE, nrow=3)
b
##      [,1]
## [1,]   10
## [2,]   -1
## [3,]    6
x <- solve(A, b)
x
##      [,1]
## [1,]    1
## [2,]    2
## [3,]    3

El operador% % se utiliza para la multiplicación de matrices. Si x es un vector de columna (n × 1), y A es una matriz (m × n), entonces el producto de A y x se calcula escribiendo A% % x

A%*%x
##      [,1]
## [1,]   10
## [2,]   -1
## [3,]    6

1.3.9 Arrays

Una matriz generaliza una matriz al extender el número de dimensiones a más de dos

cube <- 1:27 #asigna los valores del 1 al 27 
cube
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## [26] 26 27
dim(cube) <- c(3,3,3) #asigna los valores del 1 al 27 en una matriz tridimensional. Para hacer referencia al valor en en el medio del cubo,
cube
## , , 1
## 
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
## 
## , , 2
## 
##      [,1] [,2] [,3]
## [1,]   10   13   16
## [2,]   11   14   17
## [3,]   12   15   18
## 
## , , 3
## 
##      [,1] [,2] [,3]
## [1,]   19   22   25
## [2,]   20   23   26
## [3,]   21   24   27
cube[2,2,2] #asigna los valores del 1 al 27 en una matriz tridimensional hace referencia al valor en el medio del cubo
## [1] 14

Otra forma de crear la matriz es especificar sus elementos y dimensiones directamente:

a <- array(1:27, dim=(c(3,3,3)))
a[, , 1]
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
a[, , 2]
##      [,1] [,2] [,3]
## [1,]   10   13   16
## [2,]   11   14   17
## [3,]   12   15   18
a[, , 3]
##      [,1] [,2] [,3]
## [1,]   19   22   25
## [2,]   20   23   26
## [3,]   21   24   27

1.3.10 Listas

Una lista es un objeto cuyos elementos pueden ser de diferentes tipos (carácter, numérico, factor, entre otros).

Se utilizan para unir datos relacionados que tienen diferentes estructuras.

Ejemplo: El registro de un estudiante

student <- list(first.name="John", last.name="Smith", major="Biology", semester.hours=15)
student 
## $first.name
## [1] "John"
## 
## $last.name
## [1] "Smith"
## 
## $major
## [1] "Biology"
## 
## $semester.hours
## [1] 15
length (student) #cuenta el número de componentes en una lista
## [1] 4

Tres de los componentes son caracteres, mientras que el cuarto es numérico. Los componentes individuales de cualquier lista se pueden extraer utilizando el operador [[]]

student[[4]]
## [1] 15

o especificando el nombre de la lista y el nombre del componente, separados por un signo $

student$semester.hours
## [1] 15

Ahora suponga que se agrega un componente adicional llamado horario

student$schedule[2,1]
## NULL
student$schedule[2,1]
## NULL

1.3.11 Data Frames

Es el objeto más utilizado en S para almacenar conjuntos de datos. Puede manejar diferentes tipos de variables (numéricas, factoriales, lógicas, etc.) siempre que sean de la misma longitud. Para crear una lista de variables donde las variables no son todas iguales se escribe:

# El comando data.frame() trata la columna valores en una matriz como las variables y las filas como registros individuales para cada sujeto en la variable dada

Para agregar una variable que contiene información de caracteres, use el comando data.frame () de la siguiente manera:

cont.weather<-c("no","no","yes")
city <- data.frame(barley.data, cont.weather)
rm("cont.weather")
city

Si solo desea cebada de tipo, escriba city$typeA:

city$typeA
## [1] 190 191 223

Para que las columnas estén disponibles por nombre, use el comando:

attach(city)
typeA
## [1] 190 191 223

Al terminar de trabajar con un objeto adjunto, se debe separar el objeto usando el comando detach ()

#detach(city)
#typeC

1.3.12 Tablas

El comando table() se usa como una aplicación a factores de clasificación cruzada para crear una tabla.

Para construir una tabla de contingencia de “Origin by AirBags”, mencionan los siguientes comandos:

library(MASS)
attach(Cars93)
table(Origin, AirBags)
##          AirBags
## Origin    Driver & Passenger Driver only None
##   USA                      9          23   16
##   non-USA                  7          20   18

?Cars93

table(Origin, AirBags, DriveTrain)
## , , DriveTrain = 4WD
## 
##          AirBags
## Origin    Driver & Passenger Driver only None
##   USA                      0           3    2
##   non-USA                  0           2    3
## 
## , , DriveTrain = Front
## 
##          AirBags
## Origin    Driver & Passenger Driver only None
##   USA                      6          15   13
##   non-USA                  5          13   15
## 
## , , DriveTrain = Rear
## 
##          AirBags
## Origin    Driver & Passenger Driver only None
##   USA                      3           5    1
##   non-USA                  2           5    0

Cuando se utilizan tablas de contingencia de tres vías, ftable () proporciona una salida más compacta que table()

ftable(Origin, AirBags, DriveTrain)
##                            DriveTrain 4WD Front Rear
## Origin  AirBags                                     
## USA     Driver & Passenger              0     6    3
##         Driver only                     3    15    5
##         None                            2    13    1
## non-USA Driver & Passenger              0     5    2
##         Driver only                     2    13    5
##         None                            3    15    0

También en R, margin.table() y prop.table() permiten el cálculo de totales y proporciones por filas o columnas

CT <- table(Origin, AirBags)
CT
##          AirBags
## Origin    Driver & Passenger Driver only None
##   USA                      9          23   16
##   non-USA                  7          20   18
margin.table(CT) #agregar todas las entradas en la tabla 
## [1] 93
margin.table(CT,1) #agregar entradas en filas
## Origin
##     USA non-USA 
##      48      45
margin.table(CT,2) #agregar entradas en las columnas 
## AirBags
## Driver & Passenger        Driver only               None 
##                 16                 43                 34

Por otro lado

prop.table(CT) #divide cada entrada por el total de la tabla
##          AirBags
## Origin    Driver & Passenger Driver only       None
##   USA             0.09677419  0.24731183 0.17204301
##   non-USA         0.07526882  0.21505376 0.19354839
prop.table(CT,1) #divide cada entrada por el total de la fila 
##          AirBags
## Origin    Driver & Passenger Driver only      None
##   USA              0.1875000   0.4791667 0.3333333
##   non-USA          0.1555556   0.4444444 0.4000000
 prop.table(CT,2) #divide cada entrada por el total de la columna
##          AirBags
## Origin    Driver & Passenger Driver only      None
##   USA              0.5625000   0.5348837 0.4705882
##   non-USA          0.4375000   0.4651163 0.5294118

1.3.13 Funciones que operan sobre factores y listas

La base de datos ‘Cars93’ de la libreria(MASS) se utiliza para ilustrar varios funciones.

Para encontrar el precio promedio de los vehículos en la tabla Origin by AirBags, se podría usar la función tapply()

tapply(Price, list(Origin, AirBags), mean) #tapply(x, y, 'FUN')
##         Driver & Passenger Driver only     None
## USA               24.57778    19.86957 13.33125
## non-USA           33.24286    22.78000 13.03333

La función aggregate() también se usa para calcular las mismas cantidades; sin embargo, la salida es un data.frame:

aggregate(Price, list(Origin, AirBags), mean)

Ejemplo: Asignar los valores (19, 14, 15, 17, 20, 23, 19, 19, 21, 18) a un vector x tal que los primeros cinco valores de x están en el treatment A y los siguientes cinco valores están en el treatment B.

Calcule las medias de los dos grupos de tratamiento utilizando tapply().

x <- c(19,14,15,17,20,23,19,19,21,18)
treatment <- c(rep("A",5), rep("B",5))
treatment
##  [1] "A" "A" "A" "A" "A" "B" "B" "B" "B" "B"

o

treatment <- rep(LETTERS[1:2], rep(5,2))
treatment
##  [1] "A" "A" "A" "A" "A" "B" "B" "B" "B" "B"

Luego se usa tapply () para calcular las medias de los treatment A y B

tapply(x, treatment, mean)
##  A  B 
## 17 20

1.4 Funciones de probabilidad

En este libre cubren cuatro clases de funciones que realizan cálculos de probabilidad en todas las distribuciones Estas cuatro funciones generan números aleatorios, calcula probabilidades acumuladas, calcular densidades y cuantiles de retorno para las distribuciones.

Cada una de las funciones tiene un nombre que comienza con un código de una letra que indica la tipo de función: rdist, pdist, ddist y qdist, respectivamente, donde dist es el nombre de distribución.

#• pnorm(q, mean=0, sd=1) computes P(X ≤ q) función de distribución, función cuantil y generación aleatoria para la distribución normal 
#• qnorm(p, mean=0, sd=1) computes x such that P(X ≤ x) = p  función  para la distribución normal con media igual a media y desviación estándar igual a sd
#• dnorm(x, mean=0, sd=1) computes f(x)
#• rnorm(n, mean=0, sd=1) returns a random sample of size n from a N(0, 1) distribution
set.seed (136)

set1 <- rbinom(10,10,.3)
set.seed(136)
set2 <- rbinom(10,10,.3)

1.5 Creando funciones

Las funciones del sistema se caracteriza por escribir el nombre de la función y especificar los argumentos que se pasan a la función entre paréntesis. El mismo principio se aplica al construir una nueva función.

fname <- function(argument1, argument2,...){expression} #calcula su valor numérico y /o crea objetos basados en los argumentos especificados por el usuario

Suponga que se necesita una función para sumar los primeros n números \(\mathbb{N}\).

La fórmula para encontrar la suma de los primeros n números \(\mathbb{N}\) es n × (n + 1) / 2. Para crear la función SUM.N (),

SUM.N <- function(n){(n)*(n+1)/2}
SUM.N(10) #Visualiza la suma de los primeros 10 números $\mathbb{N}$ es 55
## [1] 55

La función sum.sq() suma los cuadrados de los valores en un vector o matriz x

sum.sq<-function(x) {sum(x^2)}

Si no se quisiera sumar los valores al cuadrado de cada columna en la matriz se podria:

apply(barley.data, 2, sum.sq)
##       typeA       typeB       typeC       typeD 
## 122310.0000   6480.0000    490.8900     23.8125

1.6 Declaraciones de programación

la mayoría de los lenguajes de programación, tiene la capacidad de controlar la ejecución del código. con instrucciones de programación como for(), while(), repeat() y break().

Ejemplo:

sum.a <- 0
for (i in c(10,20,30)){sum.a <- i + sum.a} #usa for() para agregar los valores 10, 20 y 30. 
sum.a 
## [1] 60

Otro ejemplo, valores aproximados para convertir los valores de temperatura de Se dan Farenheit (incrementos de 60 a 90 por 5 grados) a Celsius:

 for (farenheit in seq(60,90,5)) print(c(farenheit,(farenheit-32)*5/9))
## [1] 60.00000 15.55556
## [1] 65.00000 18.33333
## [1] 70.00000 21.11111
## [1] 75.00000 23.88889
## [1] 80.00000 26.66667
## [1] 85.00000 29.44444
## [1] 90.00000 32.22222

Otra forma de calcular la suma de los primeros n números \(\mathbb{N}\)

i <- 0; a <- 0; n <- 50
while (i<n) {i <- i+1; a <- i+a}
a
## [1] 1275
# source("source("C:/Sfolder/functions.txt")")#Para almacenar las funciones en un solo archivo y luego leerlas 

1.7 Graficos

Ejemplos de la función plot () usando diferentes valores para los parámetros main, pch, xlim, ylim, type, xlab, ylab y axes.

par(mfrow=c(3,3), pty="m")
x <- -4:4
y <- x^2
plot(x, y, main="Default values with limits \n for x and y axes altered", xlim=c(-8,8), ylim=c(0,20) )
plot(x, y, pch="x", main="Default plotting character \n changed to x", xlim=c(-8,8), ylim=c(0,20))
plot(x, y, type="l", main="Lines connecting the data", xlim=c(-8,8), ylim=c(0,20))
plot(x, y, type="b", main="Both point and lines \n between data", xlim=c(-8,8), ylim=c(0,20))
plot(x, y, type="h", main="Vertical bars", xlim=c(-8,8), ylim=c(0,20))
plot(x, y, type="o", main="Overlaid points \n and connected lines", xlim=c(-8,8), ylim=c(0,20))
plot(x, y, type="s", main="Stairsteps", xlim=c(-8,8), ylim=c(0,20))
plot(x, y, xlab="X Axis", ylab="Y Axis", main="Basic plot with axes labeled", xlim=c(-8,8), ylim=c(0,20))
plot(x, y, type="n", main="Empty Graph", xlab="", ylab="", axes=FALSE)

Los nombres de color se pueden usar con una especificación col = en funciones gráficas.

plot(1,1, xlim=c(1,16), ylim=c(-1.5,5), type="n", xlab="", ylab="")
points(seq(1,15,2), rep(4,8), cex=1:8, col=1:8, pch=0:7)
text(seq(1,15,2), rep(2,8), labels=paste(0:7), cex=1:8, col=1:8)
points(seq(1,15,2), rep(0,8), pch=(8:15), cex=2)
text(seq(1,15,2)+.7, rep(0,8), paste(8:15), cex=2)
points(seq(1,15,2), rep(-1,8), pch=(16:23), cex=2)
text(seq(1,15,2)+.7, rep(-1,8), paste(16:23), cex=2)

2. Capitulo 2: Exploración de datos

Lo titulan “Exploración de datos”, cubre importantes métodos descriptivos gráficos y numéricos de estadistica basica.

2.1 ¿Qué es la estadistica?

La estadística es el proceso de obtener más información sobre un tema mediante la recopilación información y luego tratar de encontrarle sentido a esa información. En esencia, la estadística se preocupa por los métodos para recopilar, organizar, resumir, presentar y analizar datos. La información cargada de datos está presente prácticamente en todos los sectores de la sociedad.

2.2 Datos

Los datos, según The American Heritage Dictionary, son “Información, especialmente información organizada para el análisis o utilizada como base para una decisión”.

Una característica que se está estudiando en un problema estadístico se llama variable.

2.3 Visualización de datos cualitativos

2.3.1 Tablas

La información cualitativa es normalmente se presenta en forma de tabla de frecuencias table()

Se puede utilizar la tabla de frequency table para crear varios tipos de tablas

Ejemplo 1 Suponga que las calificaciones con letras de un ensayo de inglés en una clase pequeña son A, D, C, D, C, C, C, C, F y B. Cree una tabla de frecuencias que muestre los números y un relativo.

Solución: Primero, los datos de los caracteres se leen en un vector llamado Grados. Entonces, la tabla de funciones() se aplica a los grados:

Grades <- c("A","D","C","D","C","C","C","C","F","B")
Grades
##  [1] "A" "D" "C" "D" "C" "C" "C" "C" "F" "B"
table(Grades)
## Grades
## A B C D F 
## 1 1 5 2 1

Dividimos sobre el total de datos

table(Grades)/10 #Tabla de frecuencias relativas
## Grades
##   A   B   C   D   F 
## 0.1 0.1 0.5 0.2 0.1

Ejemplo 2 El “quine” dataframe en la libreria(MASS) tiene información sobre niños de Walgett, Nueva Gales del Sur, Australia, clasificados por Cultura, Edad, Sexo y Estado del alumno que incluye el número de días ausentes de la escuela en un año escolar en particular.

Utilice table() para crear una tabla de frecuencias para la variable Edad:

library(MASS)
attach(quine)
table(Age)
## Age
## F0 F1 F2 F3 
## 27 46 40 33

2.3.2 Barplots

Uno de los mejores métodos gráficos para resumir datos categóricos es con un diagrama de barras.

Se utiliza la función barplot() para crear gráficos de barras utilizando una versión resumida de los datos.

Ejemplo 3 Construya gráficas de barras para las variables Grados usados en el Ejemplo anterior y Edad usando ambos frecuencias y proporciones.

par(mfrow=c(2,2))
barplot(table(Grades), col=3, xlab="Grades", ylab="Frequency")
barplot(table(Grades)/length(Grades), col=3, xlab="Grades", ylab="Proportion")
barplot(table(Age), col=7, xlab="Age", ylab="Frequency")
barplot(table(Age)/length(Age), col=7, xlab="Age", ylab="Proportion")

2.3.3 Gráficos de puntos

Una forma igualmente eficaz de mostrar datos cualitativos es mediante un gráfico de puntos

Los gráficos también se denominan gráficos de puntos de Cleveland.

Un gráfico de puntos muestra los valores de las variables de interés (niveles de la variable cualitativa) como puntos en una pantalla horizontal sobre el rango de los datos.

El comando para crear un gráfico de puntos es el dotchart(), donde los datos son un vector que contiene frecuencias para todos los diferentes niveles de una variable

Ejemplo Construya gráficos de puntos para las variables Calificaciones del Ejemplo 1 y Edad utilizado en el conjunto de datos quine de librery(MASS)

Antes de crear cualquier gráfico de puntos, la región del dispositivo se divide en dos regiones más pequeñas con el comando par (mfrow = c (2,1)):

par(mfrow=c(1,2))
dotchart(table(Grades))
## Warning in dotchart(table(Grades)): 'x' is neither a vector nor a matrix: using
## as.numeric(x)
dotchart(table(Age))
## Warning in dotchart(table(Age)): 'x' is neither a vector nor a matrix: using
## as.numeric(x)

2.3.4 Gráficos circulares

Los gráficos circulares representan las frecuencias relativas o los porcentajes de los niveles de una categoría variable con porciones de un pastel (círculo).

*Ejemplo: Construya gráficos circulares para las variables Calificaciones en el Ejemplo 1 y Edad a partir de quine

Antes de crear cualquier gráfico circular, la región del dispositivo se divide en dos regiones con el comando par (mfrow = c (2,1)):

par(mfrow=c(1,2))
pie(table(Grades))
title("Grades")
pie(table(Age))

title("Age")

2.4 Visualización de datos cuantitativos

Se necesita conocer tres datos: su forma, centro y extensión

2.4.1 Gráficos de tallo y hojas

Una forma de obtener una impresión rápida de los datos es utilizar un diagrama de tallo y hojas. Cuando se construye un diagrama de tallo y hojas, cada observación se divide en un tallo y una hoja. A pesar de todo de donde se divide la observación, la hoja en un diagrama de tallo y hojas se representa con un solo digito.

El comando para crear un diagrama de tallo y hojas es stem(x), donde x es un vector numérico

Ejemplo Utilice dataframe Baberuth para construir un diagrama de tallo y hojas para el número de jonrones (HR) Babe Ruth bateó mientras jugaba para los Yankees de Nueva York

Un vistazo rápido al marco de datos que Baberuth muestra para el que jugó Babe Ruth los Yankees de Nueva York por su séptima a vigésimo primera temporada. La información en RRHH es para toda la carrera profesional de Babe Ruth (22 temporadas). Para extraer los jonrones que acertó mientras era un Yankee de Nueva York, use HR[Team==“NY-A”] or HR[7:21]

library(PASWR)
## Loading required package: e1071
## Loading required package: lattice
## 
## Attaching package: 'PASWR'
## The following object is masked _by_ '.GlobalEnv':
## 
##     Grades
attach(Baberuth) # Assumes package PASWR is loaded
NYYHR <- HR[Team=="NY-A"]
NYYHR
##  [1] 54 59 35 41 46 25 47 60 54 46 49 46 41 34 22
stem(NYYHR)
## 
##   The decimal point is 1 digit(s) to the right of the |
## 
##   2 | 25
##   3 | 45
##   4 | 1166679
##   5 | 449
##   6 | 0

En este ejemplo, vea cómo las raíces 2–6 representan los valores de veinte a sesenta y las hojas representan el segundo dígito de los números en HR. Leyendo la primera fila del diagrama de tallo y hojas observe los valores 22 y 25. El diagrama de tallo y hojas revela una distribución simétrica.

2.4.2 Gráficos de bandas (solo R)

Una alternativa al diagrama de tallo y hojas es un gráfico de bandas (también conocido como diagrama de puntos por muchos autores). Un gráfico de bandas traza valores a lo largo de una línea.

La función stripchart() apilará las observaciones vinculadas en una columna en cada valor observado a lo largo de una línea que cubre el rango de los datos cuando se le da el argumento method=“stack”.

La función requiere que los datos deben ser un vector, una lista de vectores o una fórmula de la forma x∼g, donde los valores son en un vector xy los grupos están en un vector g.

Los gráficos de bandas suelen ser útiles para comparar distribución de una variable cuantitativa en diferentes niveles cualitativos (grupos)

Ejemplo:

Construya una gráfica de la cantidad de jonrones que BabeRuth conectó mientras jugaba los Yankees de Nueva York.

gráfica de la cantidad de jonrones Babe Ruth bateó mientras jugaba para los Yankees de Nueva York. El código para construir este gráfico es

attach(Baberuth)
## The following objects are masked from Baberuth (pos = 3):
## 
##     AB, BA, BB, G, H, HR, R, RBI, SB, SLG, Team, X2B, X3B, Year
Baberuth[1:5,]
NYYHR <- HR[7:21] #Extrae los valores de 7th de la temporada HR 7 a 21 
stripchart(NYYHR, xlab="Home runs per season", pch=1, method="stack", main="Dotplot of home runs while a New York Yankee")

Cree una gráfica de la cantidad de jonrones que Babe Ruth bateó por temporada de acuerdo con el equipo para el que jugaba. Según el gráfico de bandas, cuando BabeRuth tocó, ¿Para qué equipo en general bateó más jonrones por temporada? en la siguiente página hay una gráfica de la cantidad de jonrones que BabeRuth hits por temporada según el equipo para el que jugaba. El código para construir esto el gráfico es:

par(mfrow=c(1,2), pty="s")
stripchart(HR~Team, pch=1, method="stack", main="Dotplot of home runs \n by team", xlab="Home runs per season")
par(las=1) # Makes labels horizontal
stripchart(HR~Team, pch=19, col=c("red","green","blue"), method="stack", main="Color dotplot of home runs \n by team", xlab="Home runs per season")

par(mfrow=c(1,1), las=0, pty="m")
detach(Baberuth)

2.4.3 Histogramas

El histograma es un medio gráfico para ilustrar datos cuantitativos (numéricos).

Se crean con la función hist(x), donde x es un vector numérico.

al crear histogramas de densidad, utilice el argumento opcional prob = TRUE. Un histograma de densidad tiene un área total de uno.

Ejemplo: Construya un histograma que se parezca al diagrama de tallo y hojas del Ejemplo anterior usando los datos de Baberuth.

El primer histograma usa los argumentos predeterminados para hist(). Dado que son de la forma (], el histograma predeterminado no se parece al diagrama de tallo y hojas. cambie los contenedores a la forma [) en R, use el argumento right = FALSE:

attach(Baberuth)
## The following objects are masked from Baberuth (pos = 3):
## 
##     AB, BA, BB, G, H, HR, R, RBI, SB, SLG, Team, X2B, X3B, Year
par(mfrow=c(1,2))
bin <- seq(20,70,10) # Creating bins  20-70 by 10
hist(HR[7:21], breaks=bin, xlab="Home Runs")
hist(HR[7:21], breaks=bin, right=FALSE, xlab="Home Runs") # R

detach(Baberuth)

El resultado de la estimación de densidad se puede ver con la función plot() o lines(). Recuerde que plot() es una función de alto nivel mientras lines() es una función de bajo nivel. Es decir, plot() creará un gráfico mientras que las líneas() agregarán a un gráfico existente.

Ejemplo Construya un histograma de densidad del tiempo de espera hasta la próxima erupción utilizando el géiser de marco de datos disponible MASS.

Recuerde que los histogramas de densidad se producen con el argumento opcional prob = VERDADERO:

library(MASS)
par(mfrow=c(1,2)) # Divide la region 1 por 2
attach(geyser)
hist(waiting, prob=TRUE)
lines(density(waiting)) # Agregar densidad al histograma
plot(density(waiting)) # Crea densidad por sí mismo

detach(geyser)

2.5 Resumen de medidas

Los resúmenes numéricos de la población se denominan parámetros, mientras que los los resúmenes de la muestra se denominan estadísticas.

Primero se introducen las medidas de ubicación central. los Las medidas cubiertas son generalmente familiares para el lector por el uso diario. Específicamente, se introducen la media y la mediana. Otras medidas de ubicación abordados incluyen cuartiles, bisagras y cuantiles.

2.5.1 La media

Media aritmética (promedio, media muestral)**

La medida más común del centro es el promedio, que ubica el punto de equilibrio, de la distribución o los datos

La media es una medida apropiada de centro para simétricos distribuciones; sin embargo, no es apropiado para distribuciones sesgadas. En estadística, el el promedio de una muestra se denomina media muestral y se denota por .

\[{\mathbf{\overline{x}}}=\frac{x_{1}+x_{2}+...+x_{n}}{n}=\sum_{i=1}^{n}\frac{{x_{i}}}{n}\] La función mean(x) calculará la media de un vector de datos x. Argumentos adicionales para significar (x) incluye na.rm = TRUE, para eliminar los valores perdidos, y trim=

Ejemplo: Calcule el número medio de jonrones por temporada que bateó Babe Ruth mientras jugando para los Yankees de Nueva York. Calcule un 5%, un 10%, un 15% y un 50% recortado significa para el número de jonrones por temporada que BabeRuth bateó mientras jugaba para el Nueva York Yankees utilizando la información almacenada en el marco de datos Baberuth.

Respuesta: se creó la variable NYYHR que contenía la número de jonrones que hizo BabeRuth mientras jugaba para los Yankees de Nueva York. Si NYYHR ya no está disponible, vuelva a crearlo con el comando NYYHR <- HR [7:21] una vez que los datos Se ha adjuntado en los datos Baberuth. Dado que hay 15 valores en NYYHR, para calcular el 5%,15% y 50%. [0.05 × 15]=[0.75]=0,[0.10X15]=[1.5]=1, [0.15×15]=[2.25]=[2], and [0.50 × 15]=[7.5]=[7] respectivamente, deberán ser eliminado de los valores ordenados de NYYHR antes de calcular las medias en los valores restantes.

attach(Baberuth)
## The following objects are masked from Baberuth (pos = 3):
## 
##     AB, BA, BB, G, H, HR, R, RBI, SB, SLG, Team, X2B, X3B, Year
NYYHR <- HR[7:21]
NYYHR
##  [1] 54 59 35 41 46 25 47 60 54 46 49 46 41 34 22
SNYYHR <- sort(NYYHR)
SNYYHR
##  [1] 22 25 34 35 41 41 46 46 46 47 49 54 54 59 60
p.05 <- floor(.05*15)
p.10 <- floor(.10*15)
p.15 <- floor(.15*15)
p.50 <- floor(.50*15)
num.to.delete <-c(p.05, p.10, p.15, p.50)
num.to.delete
## [1] 0 1 2 7
m.05 <- mean(SNYYHR[(1+p.05):(15-p.05)])
m.10 <- mean(SNYYHR[(1+p.10):(15-p.10)])
m.15 <- mean(SNYYHR[(1+p.15):(15-p.15)])
m.50 <- mean(SNYYHR[(1+p.50):(15-p.50)])
t.m <- c(m.05, m.10, m.15, m.50)
names(t.m) <- c("5%tmean","10%tmean","15%tmean","50%tmean")
t.m
##  5%tmean 10%tmean 15%tmean 50%tmean 
## 43.93333 44.38462 44.81818 46.00000

También se presenta una segunda solución usando la función mean() usando el argumento trim =:

tm.05 <- mean(NYYHR, trim=.05)
tm.10 <- mean(NYYHR, trim=.10)
tm.15 <- mean(NYYHR, trim=.15)
tm.50 <- mean(NYYHR, trim=.50)
tms <- c(tm.05, tm.10, tm.15, tm.50)
names(tms) <- c("5%tmean","10%tmean","15%tmean","50%tmean")
tms
##  5%tmean 10%tmean 15%tmean 50%tmean 
## 43.93333 44.38462 44.81818 46.00000

Las medias aritmeticass son todas muy similares, lo que confirma una distribución bastante simétrica.

Nota que la media aritmetica al 50% es el valor en el medio de las observaciones ordenadas. Esta El valor también se conoce como mediana.

2.5.2 La mediana

La mediana es el valor medio de una distribución de números, denotados por la letra m.

Es el valor que divide al arreglo ordenado de datos en dos partes iguales, tales que el número de datos iguales o mayores que la mediana es igual al número de datos menores o iguales que ella. Su expresión matemática está dada por:

\[{\mathbf{m}}=\left\{\begin{matrix} x_{(k+1)} & ,\,\text{si $n= 2k+1$ impar}\\ \frac{1}{2}(x_{(k)}+x_{(k+1)})& \,\,\,\,\,\, ,\,\text{si $n=2k$ es par} \end{matrix}\right. \] Para encontrar la mediana muestral , use la función median(x), donde x es un vector numérico

Ejemplo Las calificaciones numéricas logradas por tres los estudiantes en cuatro exámenes durante el curso de un semestre se registran en la Tabla. Calcular medias y medianas para los estudiantes. ¿Podrían caracterizarse los tres estudiantes?

student
## $first.name
## [1] "John"
## 
## $last.name
## [1] "Smith"
## 
## $major
## [1] "Biology"
## 
## $semester.hours
## [1] 15

Primero, los puntajes del examen de los estudiantes se leen en vectores individuales denotados como Estudiante1, Student2 y Student3. La función median() se usa primero para encontrar la prueba de la mediana puntuación para cada estudiante. Es posible calcular la puntuación media de la prueba de cada estudiante en de forma similar a la utilizada para encontrar la puntuación media de la prueba de cada estudiante. Sin embargo, se proporciona otra solución mediante el uso de las funciones S rbind(), cbind() y apply():

Student1 <- c(73,75,74,74)
Student2 <- c(95,94,12,95)
Student3 <- c(66,67,63,100)
median(Student1)
## [1] 74
median(Student2)
## [1] 94.5
median(Student3)
## [1] 66.5

Ahora

SM <- rbind(Student1, Student2, Student3) # combine filas
colnames(SM) <- c("Test1","Test2","Test3", "Test4")
SM
##          Test1 Test2 Test3 Test4
## Student1    73    75    74    74
## Student2    95    94    12    95
## Student3    66    67    63   100

Para agregar a la tabla la media y mediana se realiza:

means <- apply(SM,1, mean) # mean of rows
medians <- apply(SM,1, median) # median of rows
TOT <- cbind(SM, means, medians) # combine columns
TOT
##          Test1 Test2 Test3 Test4 means medians
## Student1    73    75    74    74    74    74.0
## Student2    95    94    12    95    74    94.5
## Student3    66    67    63   100    74    66.5

Como se ve en la salida S, la puntuación media de la prueba para los tres estudiantes es 74. Una posible caracterización de los tres estudiantes podría ser: Estudiante 1: consistente; Estudiante 2: demasiado bueno; Estudiante 3: indeciso.

2.5.3 Cuantiles

El p-ésimo cuantil, \(0 ≤ p ≤ 1\), de una distribución es el valor xp tal que \(P (X ≤ xp) ≥ p\) y \(P (X ≥ xp) ≥ 1 − p\). Para datos discretos, a menudo hay muchos valores de xp que satisfacen el definición del p-ésimo cuantil.

Definición:

\[{\mathbf{p(k)}} =\frac{(k-1)}{(n-1)}, \,\, k≤ n\] Ejemplo Calcule Q1, Q2 y Q3 para los valores x_(1)=1, x_(2)=4, x_(3)=7, x_(4)=9, x_(5) = 10, x_(6) = 14, x_(7)= 15, x_(8)=16, x_(9)=20 y x_(10)=21.

x <- c(1,4,7,9,10,14,15,16,20,21)
p <- c(.25,.5,.75) # desired quantiles
n <- length(x) # number of values, n
order.stat <- p*(n-1)+1 # computing order statistics
order.stat # order statistics
## [1] 3.25 5.50 7.75
Q1 <- x[3]+.25*(x[4]-x[3]) # linear interpolation
Q2 <- x[5]+.50*(x[6]-x[5]) # linear interpolation
Q3 <- x[7]+.75*(x[8]-x[7]) # linear interpolation
QU <- c(Q1, Q2, Q3)
names(QU) <- c("Q1","Q2","Q3")
QU # quartiles
##    Q1    Q2    Q3 
##  7.50 12.00 15.75
quantile(x, probs=c(.25,.5,.75)) # la manera fácil
##   25%   50%   75% 
##  7.50 12.00 15.75

2.5.4 Resumen de bisagras

Un método alternativo para calcular los cuartiles es calcular las bisagras. La idea detrás tanto los cuartiles como las bisagras es dividir los datos en cuartos. Cuando no hay una computadora disponible, las bisagras son algo más fáciles de calcular a mano que los cuartiles. EjemploCalcule los cuantiles de 0,25, 0,50 y 0,75, así como un número de cinco resumen de la cantidad de carreras impulsadas (impulsadas) por Babe Ruth mientras jugaba para el Yankees de Nueva York. La variable RBI en el marco de datos Baberuth contiene las RBI por temporada para Babe Ruth sobre su carrera profesional en el béisbol

attach(Baberuth) # Assumes package PASWR is loaded
## The following objects are masked from Baberuth (pos = 3):
## 
##     AB, BA, BB, G, H, HR, R, RBI, SB, SLG, Team, X2B, X3B, Year
## The following objects are masked from Baberuth (pos = 4):
## 
##     AB, BA, BB, G, H, HR, R, RBI, SB, SLG, Team, X2B, X3B, Year
NYYRBI <- RBI[7:21] # Extract RBIs only while a NYY
SNYYRBI <- sort(NYYRBI)
p <- c(.25,.50,.75)
n <- length(NYYRBI)
n
## [1] 15
order.stat <- p*(n-1)+1
order.stat
## [1]  4.5  8.0 11.5
Q1 <- SNYYRBI[4]+.5*(SNYYRBI[5]-SNYYRBI[4])
Q2 <- SNYYRBI[8]
Q3 <- SNYYRBI[11]+.5*(SNYYRBI[12]-SNYYRBI[11])
QU <- c(Q1, Q2, Q3)
names(QU) <- c("Q1","Q2","Q3")
QU
##    Q1    Q2    Q3 
## 112.0 137.0 153.5
quantile(NYYRBI, probs=c(.25,.50,.75))
##   25%   50%   75% 
## 112.0 137.0 153.5
j <- (floor((n+1)/2)+1)/2 # Number to count in
j
## [1] 4.5
lower.hinge <- SNYYRBI[4]+.5*(SNYYRBI[5]-SNYYRBI[4])
upper.hinge <- SNYYRBI[11]+.5*(SNYYRBI[12]-SNYYRBI[11])
small <- min(NYYRBI)
large <- max(NYYRBI)
five.numbers <- c(small, lower.hinge, Q2, upper.hinge, large)
five.numbers
## [1]  66.0 112.0 137.0 153.5 171.0
fivenum(NYYRBI) # Only works in R
## [1]  66.0 112.0 137.0 153.5 171.0
detach(Baberuth)

En este ejemplo particular, el primer y tercer cuartil son iguales al inferior y al superior. bisagra, respectivamente.

2.5.5 Diagrama de bigotes

Un método popular de representar la información en un resumen de cinco números es el diagrama de caja. Para mostrar la extensión, se dibuja una caja desde la bisagra inferior (HL) hasta la bisagra superior (HU) con una línea vertical trazada a través del cuadro para indicar la mediana o el segundo cuartil (Q2).

Un “bigote” se extrae de HU al valor de datos más grande que no exceda el valla superior. Este valor se llama valor adyacente.

Para crear un diagrama de caja, use el comando diagrama de caja (). De forma predeterminada, los diagramas de caja en R tener una orientación vertical. Para crear una gráfica de caja horizontal con R, use el argumento opcional horizontal = TRUE.

Ejemplo Utilice los datos Cars93 de MASS para crear un diagrama de caja del variable Precio min. Utilice la función text() para etiquetar los valores de resumen de cinco números en el diagrama de caja.

library(MASS)
attach(Cars93)
## The following objects are masked from Cars93 (pos = 9):
## 
##     AirBags, Cylinders, DriveTrain, EngineSize, Fuel.tank.capacity,
##     Horsepower, Length, Luggage.room, Make, Man.trans.avail,
##     Manufacturer, Max.Price, Min.Price, Model, MPG.city, MPG.highway,
##     Origin, Passengers, Price, Rear.seat.room, Rev.per.mile, RPM,
##     Turn.circle, Type, Weight, Wheelbase, Width
boxplot(Min.Price, ylab="Minimum Price (in $1000) for basic version", col="gray")
f <- fivenum(Min.Price)
text(rep(1.25,5), f, labels=c("Min", expression(H[L]), expression(Q[2]) , expression(H[U]), "Max"), pos=4)

detach(Cars93) # Clean up

Los diagramas de caja son útiles para detectar sesgos, encontrar valores atípicos y comparar dos o más variables que se miden todas en la misma escala. Sin embargo, un diagrama de caja no detectará multimodalidad.

2.6 Medidas de dispersión

es posible tener dos conjuntos de datos con el mismas medias y / o medianas mientras todavía tienen diferentes diferenciales. Por esta razón, es importante medir no solo los valores típicos sino también la dispersión de los valores en una distribución para describir la distribución completamente.

Hay muchas maneras para medir la dispersión, algunas de las cuales incluyen rango, rango intercuartílico y varianza.

2.6. 1 Rango

Se refiere a la diferencia entre el valor más pequeño en un conjunto de datos y el valor más grande en el conjunto de datos.

Otras veces, el rango se refiere a los valores más pequeños y más grandes de un conjunto de datos como un par. los

La función range(x) devuelve los valores más pequeños y más grandes en x.

range(1:10)
## [1]  1 10

Si la distancia entre se desea el valor más grande y más pequeño, se puede usar diff (range (x)):

diff(range(1:10))
## [1] 9

2.6.2 Rango Intercuartil

En lugar de mirar el rango completo de datos, mirar el 50% medio a menudo resultan ser una medida útil de propagación, especialmente cuando los datos están sesgados. los

quantile(1:10)
##    0%   25%   50%   75%  100% 
##  1.00  3.25  5.50  7.75 10.00

El rango intercuartílico (IQR) se define como IQR = Q3 −Q1 y se puede encontrar con la función IQR ():

IQR(1:10)
## [1] 4.5

2.6.3 Varianza

La varianza muestral, s2, se puede considerar como la distancia al cuadrado promedio de valores muestrales de la media muestral. No es del todo el promedio porque la cantidad es dividido por n - 1 en lugar de n en la fórmula

\[{\mathbf{s^{2}}} =\sum_{i=1}^{N}\frac{{(x_{i}-\overline{x})}}{n-1}\] La desviación estándar es una medida adecuada de propagación para distribuciones normales:

x <- 1:5
x
## [1] 1 2 3 4 5
n <- length(x)
mean.x <- mean(x)
mean.x
## [1] 3
x-mean.x
## [1] -2 -1  0  1  2
(x-mean.x)^2
## [1] 4 1 0 1 4
NUM <- sum((x-mean.x)^2) # numerator of s^2 hard way
NUM
## [1] 10
DEN <- n-1 # denominator of s^2
DEN
## [1] 4
VAR <- NUM/DEN # variance hard way
VAR
## [1] 2.5
var(x) # variance easy way
## [1] 2.5
SD <- sqrt(VAR) # standard deviation hard way
SD
## [1] 1.581139
sd(x) # standard deviation with R
## [1] 1.581139

Una función interesante que devolverá diferentes resultados dependiendo de la clase del El objeto al que se aplica es la función summary(). Cuando el objeto es numérico vector, como es el caso de x, se devuelven seis estadísticos de resumen: el mínimo, el primero cuartil, la mediana, la media, el tercer cuartil y el máximo

summary(x)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##       1       2       3       3       4       5

2.7 Datos bivariados

Métodos para resumir y mostrar relaciones entre dos variables (datos bivariados)

2.7.1 Tablas de contingencia bidireccionales

El comando table(x) se utilizó para crear tablas de frecuencia con univariante, variables categóricas.

Para datos categóricos bivariados, el comando table(x, y) se usa para crear tablas de contingencia bidireccionales donde x e y representan las dos variables categóricas

Ejemplo Considere los datos EPIDURAL, que contiene información de estudiar para determinar si la posición tradicional para sentarse o la posición de estiramiento de los isquiotibiales es superior para administrar anestesia epidural a mujeres embarazadas en trabajo de parto según lo medido por el número de contactos obstructivos (aguja a hueso) (OC). La variable Doctor especifica cuál de los cuatro médicos del estudio administró el procedimiento. La facilidad es del médico evaluación antes de administrar la epidural de qué tan bien los puntos de referencia óseos para epidural la colocación se puede sentir. Producir una tabla de contingencia bidireccional para las variables Doctor y Facilidad

library(PASWR2) #Cargar la libreria 
## Loading required package: ggplot2
## 
## Attaching package: 'PASWR2'
## The following objects are masked from 'package:PASWR':
## 
##     bino.gen, checking.plots, EPIDURAL, EURD, FCD, interval.plot,
##     ksdist, normarea, nsize, ntester, oneway.plots, SBIQ, SDS4,
##     SIGN.test, tsum.test, twoway.plots, z.test, zsum.test
data(EPIDURAL) #Cargar datos EPIDURAL
head(EPIDURAL, n=5) # Muestra las primeras cinco filas de EPIDURAL

El objetivo es producir una tabla de dos factores. Los niveles de variables categóricas por defecto son alfabéticos. Como consecuencia, los niveles de Facilidad son Difícil, Fácil e Imposible. Preste especial atención a cómo Los niveles de una variable se pueden reorganizar en el código que sigue

attach(EPIDURAL)
## The following object is masked _by_ .GlobalEnv:
## 
##     treatment
table(doctor, ease) # Niveles de facilidad no en orden creciente
##        ease
## doctor  Difficult Easy Impossible
##   Dr. A         3   19          1
##   Dr. B        10    7          4
##   Dr. C         3   18          0
##   Dr. D         4   13          3
Teasy <- factor(ease, levels=c("Easy","Difficult","Impossible"))
table(doctor, Teasy) # Niveles de facilidad en orden creciente
##        Teasy
## doctor  Easy Difficult Impossible
##   Dr. A   19         3          1
##   Dr. B    7        10          4
##   Dr. C   18         3          0
##   Dr. D   13         4          3

2.7.2 Representaciones gráficas de tablas de contingencia bidireccionales

Los gráficos de barras se pueden utilizar para representar gráficamente la información de contingencia bidireccional mesas. Esto se logra eligiendo una de las variables para formar las categorías de la barplot. A continuación, los niveles de la segunda variable se grafican en una sola barra (apilados) o como varias barras (una al lado de la otra).

Ejemplo Producir gráficas de barras apiladas y una al lado de la otra de la información contenida

Primero se crean los gráficos de barras donde la variable de interés es Facilidad y luego Doctor.

Posteriormente, gráficos de barras lado a lado donde las variables de interés son Facilidad y luego Doctor son creados.

attach(EPIDURAL)
## The following object is masked _by_ .GlobalEnv:
## 
##     treatment
## The following objects are masked from EPIDURAL (pos = 3):
## 
##     cm, complications, doctor, ease, kg, oc, treatment
Teasy <- factor(ease, levels=c("Easy","Difficult","Impossible"))
X <- table(doctor, Teasy)
X
##        Teasy
## doctor  Easy Difficult Impossible
##   Dr. A   19         3          1
##   Dr. B    7        10          4
##   Dr. C   18         3          0
##   Dr. D   13         4          3
t(X) #transpone X
##             doctor
## Teasy        Dr. A Dr. B Dr. C Dr. D
##   Easy          19     7    18    13
##   Difficult      3    10     3     4
##   Impossible     1     4     0     3
par(mfrow=c(2,2))
barplot(X, main="Barplot where Doctor is Stacked \n within Levels of Palpitation")
barplot(t(X), main="Barplot where Levels of Palpitation \n is Stacked within Doctor")
barplot(X, beside=TRUE, main="Barplot where Doctor is Grouped \n within Levels of Palpitation")
barplot(t(X), beside=TRUE, main="Barplot where Levels of Palpitation \n is Grouped within Doctor")

par(mfrow=c(1,1))
detach(EPIDURAL)

Los anteriores gráficos de barras apilados y uno al lado del otro para los niveles de palpitación (Teasy) y médico (doctor)