En este Rpbs tratamos el libro “PROBABILITY and STATISTICS WITH R” con una descripción de todas sus funciones.
Desarrollo de operaciones matemáticas
(7*3)+12/2-7^2+sqrt(4)
## [1] -20
Reducir los decimales de una variable
x <- 0.28354
round(x,2)
## [1] 0.28
Cuando se trabaja con datos univariados, a menudo almacenan información en vectores.
Creación de un vector
x <- c(1.5,2,3)
x
## [1] 1.5 2.0 3.0
Elevar un vector al cuadrado
x^2
## [1] 2.25 4.00 9.00
Para buscar la posición de un dato en especifico(4) dentro de un vector(x^2)
which(x^2==4)
## [1] 2
Se puede trabajar con datos numericos y string
y <- c("A","table","book")
y
## [1] "A" "table" "book"
El comando cbind me permite convertir un vector de fila en columna
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
El comando rbind me permite convertir un vector de columna en fila
rbind(x, y)
## [,1] [,2] [,3] [,4]
## x 2 3 4 1
## y 1 1 3 7
Las secuencias de números se utilizan a menudo al crear gráficos personalizados.
Con el comando seq(a,b) creamos una secuencia desde a hasta b
seq(0,1,0.2)
## [1] 0.0 0.2 0.4 0.6 0.8 1.0
seq(0,8)
## [1] 0 1 2 3 4 5 6 7 8
Con el comando rep(a,b) creamos una secuencia de a que se repite b veces
rep(1,5)
## [1] 1 1 1 1 1
Con la siguiente linea repetimos la secuencia (0,“x”) tres veces
rep(c(0,"x"), 3)
## [1] "0" "x" "0" "x" "0" "x"
Con la siguiente linea repetimos la secuencia (1,3,2) hasta que la secuencia tenga 10 datos
rep(c(1,3,2), length=10)
## [1] 1 3 2 1 3 2 1 3 2 1
Con la siguiente linea repetimos cada una de las secuencias
c(rep(1,3), rep(2,3), rep(3,3))
## [1] 1 1 1 2 2 2 3 3 3
rep(1:3, rep(3,3))
## [1] 1 1 1 2 2 2 3 3 3
#Los valores específicos de un vector se referencian mediante llaves cuadradas []. #Es importante mantener en cuenta que S 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.).
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
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/DOCTORADO/MATERIAS/PROFUNDIZACION_I/R/ESTADISTICA CON R/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
## NULL
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
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
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
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
Una lista es un objeto S 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
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
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
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
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 la S 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)
Las funciones del sistema en S 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 S 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
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
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)
Lo titulan “Exploración de datos”, cubre importantes métodos descriptivos gráficos y numéricos de estadistica basica.
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.
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.
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
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")
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)
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")
Se necesita conocer tres datos: su forma, centro y extensión
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 S 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.
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)
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)
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.
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 S 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 S 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.
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 con S, 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 S 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.
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
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.
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 con S, 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.
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.
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 S 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
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
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 S 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