Está en la página 1de 159

ESCUELA SUPERIOR POLITÉCNICA DE CHIMBORAZO

FACULTAD DE CIENCIAS, ESCUELA DE FÍSICA Y MATEMÁTICA


RIOBAMBA – ECUADOR
2015

PABLO FLORES MUÑOZ


1
ESTADÍSTICA DESCRIPTIVA
MEDIANTE EL USO DE R Y
MATLAB

Pablo Flores Muñoz


Escuela Superior Politécnica de Chimborazo

2
I
ÍNDICE
ÍNDICE ................................................................................... II
AGRADECIMIENTO............................................................... IV
PREFACIO ............................................................................. VI
1. CAPÍTULO 1: PRELIMINARES ESTADÍSTICOS ............. 1
1.1. BREVE HISTORIA DE LA ESTADÍSTICA................................................. 2
1.2. DEFINICIÓN Y CLASIFICACIÓN DE LA ESTADÍSTICA .............................. 3
1.3. CONCEPTOS PRELIMINARES .............................................................. 4
2. CAPÍTULO 2: FUNDAMENTOS DE R ............................. 8
2.1. ¿QUÉ ES R?..................................................................................... 8
2.2. R CONSOLE ..................................................................................... 9
2.3. RSTUDIO ....................................................................................... 11
2.4. LOS COMANDOS EN R......................................................................14
2.4.1. Argumento de los Comandos: ............................................................... 16
2.4.2. Visualización de los valores de los comandos ...................................... 22
2.5. LOS PAQUETES EN R ...................................................................... 24
2.6. INGRESANDO INFORMACIÓN EN R ................................................... 28
2.6.1. Variables .............................................................................................. 28
2.6.2. Vectores ................................................................................................ 29
2.6.3. Matrices................................................................................................ 32
2.6.4. Operaciones Básicas con Matrices y/o vectores.................................... 37
2.6.5. Ingresando una matriz de datos .......................................................... 39
2.6.6. Importando una matriz de datos desde otro tipo de archivo ............... 43
2.6.7. Matrices de Datos en R ......................................................................... 49
3. CAPÍTULO 3: FUNDAMENTOS DE MATLAB ................ 51
3.1. ¿QUÉ ES MATLAB?........................................................................ 51
3.2. EL ENTORNO DE MATLAB ............................................................. 52
3.3. LOS COMANDOS EN MATLAB......................................................... 54
3.4. INGRESANDO INFORMACIÓN EN MATLAB ....................................... 59
3.4.1. Variables ...............................................................................................59
3.4.2. Vectores ................................................................................................ 60

II
3.4.3. Operaciones Básicas con Vectores........................................................ 63
3.4.4. Matrices.................................................................................................65
3.4.5. Operaciones con matrices .....................................................................67
3.4.6. Importando una matriz de datos desde otro tipo de archivo ................67
4. CAPÍTULO 4: ANÁLISIS DE FRECUENCIAS Y
REPRESENTACIÓN GRÁFICA DE DATOS .............................. 75
4.1. VARIABLES Y DATOS....................................................................... 75
4.1.1. Clasificación de los datos....................................................................... 75
4.2. ANÁLISIS UNIVARIADO DE FRECUENCIAS ......................................... 79
4.2.1. Tablas de Frecuencias .......................................................................... 80
4.2.2. Análisis de frecuencias para datos simples o sin agrupar .................... 81
4.2.3. Gráficas para representar frecuencias de datos simples: .................... 83
4.2.4. Análisis de Frecuencias para datos agrupados .................................... 94
4.2.5. Gráficas para representar frecuencias de datos agrupados ............... 101
4.3. ANÁLISIS BIVARIADO DE FRECUENCIAS .......................................... 109
4.3.1. Tablas de Contingencia ....................................................................... 109
5. CAPÍTULO 5: DESCRIPCIÓN NUMÉRICA DE DATOS 114
5.1. DESCRIPCIÓN NUMÉRICA DE DATOS UNIVARIADOS.......................... 114
5.1.1. Medidas de Tendencia Central ............................................................ 114
5.1.2. Medidas de Dispersión ........................................................................ 123
5.1.3. Medidas de Posición ............................................................................ 133
5.2. DESCRIPCIÓN NUMÉRICA DE DATOS BIVARIADOS ............................142
5.2.1. Covarianza .......................................................................................... 143
5.2.2. Correlación .......................................................................................... 146

III
AGRADECIMIENTO
<<Porque todo, absolutamente todo en el cielo y en la tierra, visible e
invisible… todo comenzó con Él y para los propósitos de Él>>
Colosenses 1:16

Es así que agradezco infinitamente al Dios de la


Biblia, el cuál es el creador de todo el conocimiento
que existe en la tierra, y él cual me ha permitido para
su gloria realizar este aporte
A mi amada esposa Anita y mi amado hijo Pablito,
gracias por siempre creer en mí y construir juntos
nuestra historia, nuestros sueños, triunfos y fracasos,
en cada cosa que hacemos incluyendo este libro

IV
V
PREFACIO
EL PROPÓSITO DE ESTE LIBRO
El presente libro se convierte en un texto de ayuda para realizar un curso a nivel
superior de Estadística Descriptiva, además sirve como un referente práctico para
que el lector aprenda a manejar los software R y MATLAB, y de sus primeros pasos
utilizando estos paquetes, lo cual se constituye en una base para que luego pueda
realizar cálculos y gráficas en ramas más específicas o avanzadas dentro del
análisis estadístico. No es la intención profundizar en aspectos estadísticos
teóricos, ni tampoco en aspectos de programación avanzada mediante los software
descritos, sino más bien enfocarnos en definir, calcular (mediante el software) e
interpretar medidas y gráficos estadísticos que nos ayudan a realizar una
descripción de un conjunto de datos.

¿POR QUÉ R Y MATLAB?


A nivel de Ingeniería es de mucha utilidad el uso de estos paquetes en lo que al
análisis de datos se refiere, ya que a diferencia de la gran mayoría de paquetes
estadísticos que son muy limitados y solo permiten al usuario ingresar
información de entrada bajo ciertos lineamientos y de la misma forma hacer
cálculos específicos y restringidos, estos paquetes permiten que sea el usuario
quien utilice o de ser necesario incluso cree las funciones que le permitirán realizar
cálculos y gráficas, pudiendo ampliar la visión de su uso tanto como el usuario
tenga la necesidad y/o capacidad de hacerlo. Los cálculos que la mayoría de
paquetes realizan son limitados, siguen un formato único y no permiten que estos
cálculos puedan unirse mediante algoritmos con otros, por lo que a nivel avanzado
se hace imposible crear modelos para necesidades específicas. R y MATLAB se
convierte en la solución para este problema, permitiendo que el usuario sea quien
construya de acuerdo a sus necesidades los códigos que le servirán para realizar
cálculos y gráficos de manera secuencial sin ninguna restricción sino la que el
mismo realice

VI
VII
1. CAPÍTULO 1:
PRELIMINARES ESTADÍSTICOS
La estadística es una ciencia, nace de la necesidad que tiene el hombre de
comprender el mundo que nos rodea, su diario vivir, los hechos, sucesos o
procesos que marcan la historia y el desarrollo de la humanidad. La estadística
está plenamente involucrada con el proceso de planificación y toma de decisiones
en todos los ámbitos del quehacer cotidiano, sin ella no sabríamos de dónde
venimos, ni hacia dónde vamos. Cuando una persona, familia, empresa, estado o
cualquier otro tipo de organización no posee un registro acerca de las cosas que ha
hecho, está haciendo y de las que pretende hacer, solo será como un ciego que no
mira hacia dónde se encamina su quehacer diario, carecerá de un objetivo
definido, caerá en activismo y no será capaz de ser un aporte en el área que se esté
desarrollando.
Solo imaginemos a un atleta profesional en cuyo entrenamiento no se registre
constantemente sus marcas personales, su tiempo de dedicación, la cantidad de
nutrientes que debe consumir en su dieta, etc… Si no se lo hace sin duda su
entrenador no tendría idea del atleta que está formando, no sabría cuáles son los
aspectos físicos o biológicos que debe mejorar en él, ni siquiera tendría idea si
antes de la competencia tiene o no la posibilidad de ganar o perder frente a sus
adversarios, ya que no tendría ninguna medida que le permita evaluar y mucho
menos comparar el rendimiento de dicho atleta, su entrenamiento estaría vacío y
caminaría con gran probabilidad hacia un fracaso en su carrera como deportista.
O tal vez imaginemos a una nación sin estadísticas, un país donde no se registren
los hechos que sucede en la vida de una población. Qué decisiones o políticas
públicas acerca de educación sexual y planificación familiar para los habitantes se
podrían establecer sino sabemos cuál es la tasa de natalidad, o el índice de
embarazo adolescente. Cuál debería ser el presupuesto adecuado para salud sino
se conoce indicadores estadísticos de morbilidad, o tasas de mortalidad en la
población. Cómo asignar un presupuesto o establecer políticas públicas para la

1
educación sino conocemos indicadores estadísticos que nos muestren cuál es la
tasa de analfabetismo, abandono escolar, demanda educativa, etc… Cómo podría
una nación presupuestar en un futuro la justa distribución de su riqueza si no
cuenta con estadísticas que le indiquen cuál será el tamaño futuro de su población.
O tan solo imaginemos nuestra propia vida, qué pasaría si en el quehacer diario
no tendríamos una noción o un registro del tiempo, recursos, o dinero que
constantemente estamos utilizando ni de las cosas que estamos produciendo ya
sea en nuestro trabajo, hogar o demás lugares que nos desempeñamos. No
tendríamos ni sentido ni noción de las cosas que hacemos o dejamos de hacer.

Sin duda se nos hace difícil encontrar alguna actividad dentro de cualquier
entorno en la cual no esté presente algún tipo de información o registro. Cuando
esta información es debidamente procesada se convierte en estadísticas útiles para
el desarrollo y mejora continua.
Es por eso que antes de empezar con la teoría estadística propiamente dicha,
resulta interesante conocer brevemente algunos preliminares que nos ayudarán
de cierta manera a entender mejor a la razón de ser de esta ciencia.

1.1. Breve Historia de la Estadística


Es realmente difícil establecer con exactitud una fecha exacta donde pudo haber
comenzado el hombre a utilizar estadísticas, ciertas piezas arqueológicas de
distintos pueblos y tribus nos dan a entender que el hombre primitivo usaba
estadísticas para llevar cuentas acerca del ganado, la caza o la cosecha. La biblia
nos enseña en el antiguo testamento que cuando Dios liberó al pueblo de Israel de
su esclavitud en Egipto, Moisés realizó un censo de población “El Señor le dijo a
Moisés: Haz un censo de todos los primogénitos israelitas mayores de un mes, y
registra sus nombres << Números 3:40 >>”. Algunas civilizaciones antiguas
también se vieron en la necesidad de elaborar estadísticas, de algunas de ellas
hablamos a continuación:

2
 La cultura egipcia (3050 A.C.), donde continuamente, incluso antes
de la construcción de las pirámides se analizaban datos acerca de la
población, tal fue así que cuando los judíos fueron esclavos en Egipto, el
faraón supo que el número de egipcios era inferior al número de judíos, y
ordenó mandó a matar a todos los primogénitos varones recién nacidos de
este pueblo.
 La cultura Babilónica (3000 AC), donde se han encontrado restos de
tablas de arcilla, que se evidenció servían para recopilar datos de la
producción y el comercio que se realizaba
 La cultura China, donde en los años 2200 A.C. el emperador Tao ordenó
se censara todo el pueblo.
 La cultura Romana, donde en los años 500 A.C. existía un funcionario
del estado conocido con el nombre de “censor”, el cual controlaba el
número de habitantes y la distribución de la población en el territorio
 Por los años 1500 D.C. se registró en Inglaterra y Francia, los
bautismos, fallecimientos y matrimonios de la población, tales hechos se
publicaban semanalmente y continuó siendo una costumbre durante
mucho tiempo
 Durante los siglos XVII y XVIII, grandes matemáticos como Bernoulli,
Lagrange, Laplace entre otros, desarrollaron la denominada teoría de la
probabilidad, la cuál años más tarde sería el sustento de la mayoría de
teorías estadísticas hasta ahora existentes y que dieron origen a las
múltiples aplicaciones de esta ciencia.

1.2.Definición y Clasificación de la Estadística


La palabra Estadística procede del vocablo “Estado”, ya que precisamente en sus
orígenes era este ente el encargado de establecer registros e información de los
principales hechos que acontecían en el estado y la dinámica de la población

3
Estadística.- Se puede definir a la estadística como la ciencia encargada de
recolectar, analizar e interpretar la información, para aportar en el proceso de
toma de decisiones de una forma más efectiva
Además la estadística constituye una herramienta fundamental en la investigación
científica, busca explicar las relaciones y las dependencias que existen entre
fenómenos, ya sea que estos ocurran de manera aleatoria o condicional.
A la estadística para su comprensión se la puede clasificar en dos grandes grupos
que son:
La estadística Descriptiva.- Que se encarga de describir (ya sea gráfica o
numéricamente) la información obtenida, de tal manera que se la pueda resumir
y observar con la mayor claridad y exactitud posible
La Estadística Inferencial.- Que se encarga de realizar modelos que permitan
inferir y/o predecir parámetros de una población, a partir de la información
proporcionada por una muestra representativa. A la estadística inferencial para
distinguirla de acuerdo al tipo de información que utiliza en la muestra se la puede
clasificar en estadística paramétrica o no paramétrica
Figura 1.1

Estadística

Descriptiva Inferencial

No
Paramétrica
Paramétrica

1.3.Conceptos Preliminares
 Población.- Es el conjunto formado por N individuos, que son todos
aquellos sobre los cuales se desea realizar el estudio, normalmente es

4
demasiado grande para poder estudiarlo en su totalidad, por lo que se
extrae un subconjunto (muestra), para en base a ella realizar inferencias
 Muestra.- Es un subconjunto de la población, formado por n individuos,
a los cuales es posible acceder para realizar mediciones
Figura 1.2

Población

N Muestra
individuos

n
Individuos

 Muestra Aleatoria.- Es un subconjunto representativo de la población,


donde cada elemento de dicha población tiene la misma oportunidad de
ser parte de esta muestra, y es confiable para realizar inferencias acerca de
la población
 Muestreo.- Son todas aquellas técnicas que nos permiten seleccionar una
muestra representativa de la población en estudio
 Parámetro.- Es un resumen de la información sobre los individuos de la
población, por lo general un parámetro no se calcula, sino que se estima a
partir de las mediciones realizadas en la muestra aleatoria
 Estadístico.- O también llamado estimador, se lo localiza en la muestra
aleatoria, es posible calcular sus valores y se utiliza para estimar algún
parámetro de la población

5
Figura 1.3

Población

Parámetro Muestra
θ

Estadístico

 Unidades de Análisis.- Son los objetos o sujetos de la población de los


cuales nos interesa medir algunas características de tipo estadístico
 Variable.- Es una característica observable en las unidades de análisis,
que varía frecuentemente. Su clasificación se la puede apreciar en la
siguiente figura:
Figura 1.4

Variables

Cualitativas Cuantitativas

Ordinales Nominales Discretas Continuas

En el capítulo “Variables Aleatorias”, se trata a profundidad este tema.


 Dato.- Son los valores particulares que toma cada variable al ser medida
sobre los individuos, y se clasifican de acuerdo al tipo de variable de la cual
fueron tomados

6
 Experimento.- Es todo proceso a través del cual conseguimos un dato o
información
 Censo.- Es el proceso mediante el cual se recogen datos o información de
interés sobre el total de una población.
 Encuesta.- Es el proceso mediante el cual se recogen datos o información
de interés sobre la muestra representativa que se eligió mediante el
proceso de muestreo.
Figura 1.5

Población

Muestra
Censo

Encuesta

7
2. CAPÍTULO 2:
FUNDAMENTOS DE R

2.1.¿Qué es R?
R es un lenguaje de programación, principalmente encaminado a desarrollar
análisis estadístico de la información, sea esta cuantitativa o cualitativa, y su
respectiva representación gráfica en los casos que sea posible. Fue iniciado en 1995
por Robert Gentleman y Ross Ihaka (de sus nombres deriva el nombre de “R”) del
Statistics Department “University of Auckland”

Se trata de un lenguaje de programación orientado a objetos, y es por ello la gran


utilidad y potencia que tiene el uso de este programa, así mientras que en los
lenguajes de programación tradicionales se construye cada uno de los pasos para
la obtención de una ecuación, función, variable, etc…, y al final se muestran los
resultados, el R guarda estos resultados como un “objeto” en la memoria activa
del computador, para que después el usuario pueda manipular estos objetos en
un script con operadores (aritméticos, lógicos, y comparativos) y funciones (que
a su vez son objetos), de tal manera que se pueda crear un programa completo que
pueda desarrollar algún modelo que resuelve necesidades específicas del usuario.
De esta manera su aplicación también resulta más potente que los software
estadísticos tradicionales donde únicamente se ingresa la información, y luego de
un par de “clics” aparecen los resultados, sin tener más opciones de análisis de la
información más que las que ya se encuentran establecidas en estos paquetes.

La consola de trabajo del software R “R Console” tiene la siguiente apariencia

8
(Figura 2.1)
Figura 2.1

2.2. R Console
Es el lugar donde se desarrollará todo el trabajo “WorkSpace”, desde esta
consola el usuario podrá escribir todas las entradas que sean de interés, y así
mismo podrá visualizar todas las salidas que puedan producir dichas entradas. Sin
duda al escribir en la consola de R podemos hacer uso de la variedad de objetos
que posee este software. Con el afán de que el lector pueda visualizar muy
ligeramente este proceso, haremos una operación muy sencilla que consiste en
encontrar la media de un grupo de datos utilizando la función mean(). No es de
interés aún saber cómo ingresar datos y obtener resultados, más bien los
siguientes son tan solo ejemplos con el afán de visualizar la escritura en R Console:
Al ingresar los datos [3 5 6 7 12 4 11 7] de la siguiente forma

> x <- c(3, 5, 6, 7, 12, 4, 11, 7)

Luego al ejecutar el comando mean()

> media <- mean(x)

Se obtendrá como resultado

9
[1] 6.875

Tal como se puede visualizar en la figura 2.2:


Figura 2.2

Otro ejemplo de interés podría ser generar seiscientos números aleatorios que
sigan una distribución de poissón con parámetro λ = 7, tal proceso se muestra en
la figura 2.3 a través del comando rpois(600,7):
Figura 2.3

E inmediatamente podríamos estar interesados en generar el histograma de estos


600 datos con distribución de poissón. Esto mediante el comando
> hist(rpois(600,7))

Lo cual nos arrojará la siguiente gráfica (Gráfica 2.1):

10
Gráfica 2.1

Histogram of rpois(600, 7)

150
100
Frequency

50
0

0 5 10 15 20

rpois(600, 7)

En fin, podríamos ejecutar un sin número de objetos que nos ayudaría a resolver
diferente necesidades. Sin embargo resulta interesante saber que existe una
interfaz basada en el lenguaje R, en la cual podemos elaborar las mismas tareas
realizadas en la consola, pero con la diferencia que el proceso se encuentra mejor
organizado, es más amigable con el usuario, se puede observar todo el
procedimiento con sus distintos resultados (numéricos y gráficos), se puede
observar todo el historial de comandos ejecutados, etc… todo esto en diferentes
ventanas dentro de una misma área de trabajo, o lo que es conocido dentro de este
software como “R-Project”. Esta interfaz es conocida con el nombre RStudio, y
la cual se constituye en el centro de interés para el soporte de cálculos y gráficos
estadísticos desarrollados en el presente libro.

2.3. RStudio
El RStudio no es un lenguaje de programación, sino más bien se lo puede
considerar como una interfaz que está basada en el lenguaje R, del cual acabamos
de hablar.
Explicando un tanto mejor lo dicho, esto es similar a lo que ocurre con Microsoft
Excel, y el lenguaje de programación C. La mayoría de personas estamos
acostumbrados a aprovechar de todas las ventajas y facilidades (funciones,

11
gráficas, formatos, condicionantes, filtros etc…) que existe al momento de trabajar
con la hoja de cálculo, sin embargo no hay que olvidar que todas estas bondades
están programadas internamente en el lenguaje de programación “C”, por lo que
en realidad el Excel no es un lenguaje donde podamos programar, sino más bien,
este es considerado como una interfaz que se basa en “C”. Es similar lo que ocurre
con el lenguaje de programación orientado a objetos “R”, y la interfaz gráfica
basada en “R” que se denomina “RStudio”.
El entorno del RStudio es el que se muestra a continuación en la Figura 2.4:
Figura 2.4

Básicamente son cuatro ventanas las que se puede apreciar:


(1) En la parte superior izquierda una ventana donde se ubican los
scripts.- Es decir los guiones donde escribiremos el conjunto de
instrucciones o comandos (códigos) necesarios para encontrar respuestas
para resolver una necesidad estadística específica. Desde aquí el usuario
luego de escribir, deberá seleccionar todo o parte del código en el que esté
interesado y deberá mandarlo a correr1, para que de esta forma sus
resultados se puedan visualizar en la ventana 3. Además podemos observar

1
Correr (Run) un comando significa ejecutarlo una vez que se lo ha escrito, para hacer esto
debemos seleccionar la parte del script que queramos correr y aplastar el botón Run o a su vez
(CTRL+R). Por cuestiones pedagógicas escribiremos el comando en la ventana 1, y visualizaremos
su respuesta después de correrlo en la ventana 3

12
en esta ventana un conjunto de datos creados o exportados, si el usuario
así se lo ordena al programa.
(2) En la parte superior derecha donde entre otras cosas, podemos
observar el historial “History” de todos los procesos, objetos, funciones,
etc…que han sido utilizados y ejecutados ( Run (CTRL +R)), aun cuando
estos hayan sido borrados o modificados desde el Script. Así también se
puede observar desde “Enviroment” la lista de variables que han sido
ejecutadas correctamente, y además podemos importar desde un
directorio de nuestro computador una base de datos.
(3) En la parte inferior izquierda tenemos la “R Console”, de la cual ya
hemos hablado, pero que dentro de R Studio es conveniente que el uso esté
dirigido únicamente para observar todos los resultados provenientes de
los cálculos y de los objetos ejecutados desde el Script, esto debido a que
de esta forma el trabajo será más organizado.
(4) Finalmente, la parte inferior derecha, donde entre otras cosas nos
ayuda a observar: los archivos “Files” dentro de nuestro computador
desde los cuales estamos ejecutando y guardando nuestro trabajo, los
gráficos “Plots” que hemos realizado desde el Script, los paquetes
“Packages” que están instalados en R, los cuales al ser activados sirven
para que se pueda hacer uso de los comandos que poseen dichos paquetes,
que por lo general ayudan a procesar información para resolver un
problema específico, y la ayuda “help”, la cual nos muestra información
acerca de un objeto (comando o función) que se está utilizando, y cuyo
funcionamiento no queda claro para el usuario.
Así, para el ejemplo acerca de generar seiscientos números aleatorios que sigan
una distribución de poissón con parámetro λ = 7 y visualizar en un histograma su
distribución de probabilidad, la apariencia que tendría este pequeño ejercicio en
RStudio sería:

13
Figura 2.5

Y claramente podemos observar como después de escribir los comandos para este
pequeño ejercicio en la ventana 1, se puede visualizar en la ventana 3 los
resultados, es decir los 600 números aleatorios, y en la ventana 4 la gráfica
(histograma)
En adelante se escribirá únicamente el o los comandos y códigos que deben ir en
la ventana 1, y el lector deberá saber que sus resultados numéricos se muestran en
las ventanas correspondientes
Al momento de escribir un código podemos escribir luego del signo “#” cualquier
comentario, y al momento de mandar a correr el programa dichos comentarios no
serán tomados en cuenta, y no afectarán en el proceso de cálculo

x <- rpois(600,7) # Genera 600 números aleatorios que siguen una distribución de
Poisson con media lambda igual a 7
x # Muestra los 600 números
hist(x) # Grafica el histograma para los datos de x

2.4. Los Comandos en R


Un comando está elaborado por un algoritmo que contiene el procedimiento
necesario, de tal forma que al momento de ejecutarlo, en realidad se le está dando
una instrucción o una orden al programa para que muestre ciertos resultados

14
numéricos o gráficos que se necesita. De esta forma existen comandos que
necesitan de argumentos (datos de entrada), para poder mostrar los diferentes
resultados (datos de salida), que son necesarios al momento de resolver un
problema
Si alguien estuviera interesado en conocer el código con el que se encuentra
elaborado un comando específico solo tiene que seleccionar dicho comando y
aplastar la tecla “F2” en su teclado, y automáticamente aparecerá una pestaña en
la ventana 1 denominada “Source Viewer”, donde podrá apreciar el código con
el que está programado dicho comando. Por ejemplo existe un comando en R que
sirve para realizar la prueba de normalidad de “Shapiro Wilks”, shapiro.test( ), el
cual arrojará un estadístico de prueba con su respectivo valor P, el mismo que nos
ayudará a tomar una decisión respecto a la hipótesis de si un grupo de datos viene
o no de una población normal

> shapiro.test(x)
Shapiro-Wilk normality test
data: x
W = 0.9845, p-value = 0.2935

Sin lugar a duda debemos suponer que estos valores son calculados a partir de
ecuaciones y procedimientos matemáticos, los cuales para ser ejecutados dentro
de R (o cualquier otro lenguaje de programación) deben ser previamente escritos
como un algoritmo, este algoritmo es el que se mostrará al aplastar la tecla F2,
luego de seleccionar el comando (sin incluir los paréntesis), y es el que se muestra
a continuación:

15
Figura 2.6

Es importante recalcar que el código que se muestra es únicamente de lectura y el


usuario no cuenta con los permisos para modificarlo.
En la mayoría de ocasiones sucede que no conocemos cómo aprovechar en su
totalidad algún tipo de comando que sea de nuestro interés, en estos casos
conviene pedir ayuda al mismo programa, de tal forma que este nos pueda
facilitar entre otras cosas una breve descripción del comando, ejemplos de cómo
usarlo, descripción de los argumentos del comando, la forma de visualizar
diferentes resultados específicos que puedan ser de provecho, e incluso algún tipo
de manual en caso de existir.
En particular analizaremos a continuación la forma de utilizar los argumentos, y
la forma de visualizar resultados específicos que pueda proveer algún comando.

2.4.1. Argumento de los Comandos:


Un argumento o parámetro, son los distintos valores que el usuario puede escribir
en el comando (dentro de los paréntesis), y que constituyen la información de
entrada o valores independientes, en función de los cuales se calculan valores
específicos basados en una función de interés.

16
Por lo general suele suceder que no sabemos cómo ingresar en el comando toda la
información que desearíamos para que este pueda entender precisamente lo que
deseamos calcular, en este caso al seleccionar el comando y aplastar la tecla “F1”,
en la ventana 4, dentro de la pestaña “help” aparecerá la ayuda que se necesita
acerca de todos los argumentos (obligatorios y no obligatorios) que nos permite
ingresar el comando. Para explicar el uso que se le debe dar a esta ayuda lo
ilustraremos con el siguiente ejemplo:
Supongamos que deseamos dibujar una función cuadrática “2x 2 – 1”, para lo cual
utilizamos el comando “plot( )”, sin embargo, no conocemos cómo ingresar los
datos de entrada, por lo que seleccionamos el comando sin los paréntesis y
aplastamos la tecla F1 (otro modo de solicitar la ayuda es escribiendo el nombre
del comando en la parte superior derecha de la pestaña help), y entonces se
mostrará la siguiente información respecto a los argumentos:

17
Arguments

the coordinates of points in the plot. Alternatively, a single plotting structure, function or any Robject
with a plot method can be provided.
y the y coordinates of points in the plot, optional if x is an appropriate structure.
... Arguments to be passed to methods, such as graphical parameters (see par). Many methods will accept
the following arguments:

type

what type of plot should be drawn. Possible types are

 "p" for points,


 "l" for lines,
 "b" for both,
 "c" for the lines part alone of "b",
 "o" for both ‘overplotted’,
 "h" for ‘histogram’ like (or ‘high-density’) vertical lines,
 "s" for stair steps,
 "S" for other steps, see ‘Details’ below,
 "n" for no plotting.

All other types give a warning or an error; using, e.g., type = "punkte" being equivalent
to type = "p" for S compatibility. Note that some methods, e.g.plot.factor, do not accept this.

main

an overall title for the plot: see title.

sub

a sub title for the plot: see title.

xlab

a title for the x axis: see title.

ylab

a title for the y axis: see title.

asp
Donde podemos observar que la ayuda sugiere que todos los argumentos posibles
en la funciónthe y/x aspect ratio, see plot.window.
son: “x”, “y”, “type”, “main”, “sub”, “xlab”, “ylab” y “asp”; sin embargo
el único obligatorio es el argumento “x”, el cual al estar solo es el rango de la
función que toma valores en el eje de las y, por lo que bien se podría asignar un

18
vector “x” cualesquiera y graficarlo con este comando, en este caso generaremos
un vector de una secuencia desde -10 hasta 10:

> x <- seq(-10,10)


>x
[1] 10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10

Y al ejecutar el comando “plot(x)”, se genera el gráfico que se muestra en la figura


2.7

Figura 2.7

Sin embargo esta gráfica no es la que deseamos, es decir la gráfica de la función


“2x2 – 1”, que se plantea en el presente ejercicio, pero la ayuda de los argumentos
nos muestra que si al comando plot le aumentamos un argumento “y” con la
función que queremos graficar, obtendremos el resultado deseado. En este sentido
entonces escribimos

> x <- seq(-10,10)


> y <- 2*x^2 - 1
> plot(x,y)

El cual me mostrará la gráfica que se muestra en la figura 2.8

19
Figura 2.8

Como se puede apreciar hemos conseguido la gráfica de parábola de la función


cuadrática, que por defecto grafica los pares ordenados como puntos vacíos.
Es interesante ahora observar que el siguiente argumento es “type”, el cual como
dice en la ayuda, nos ayuda a definir con qué tipo de forma me interesa que sean
graficados los pares ordenados formados, en este caso “p” para puntos, “l” para
líneas, “b” para puntos y líneas (ambos), “c” para líneas entre cortadas, “o” para
puntos y líneas pero sobrepuestas,… etc. En este ejemplo escribiremos el guion de
tal forma que dibuje líneas entre cortadas, el cual nos dará como resultado el
gráfico de la figura 2.9

> plot(x,y,type = “c”)

20
Figura 2.9

Finalmente la ayuda me indica que los argumentos:


 “main”, servirá para poner un título a la gráfica
 “sub”, para un subtitulo
 “xlab”, para un título al eje de las “x”
 “y lab”, para un título al eje de las “y”
Por ejemplo, a continuación graficamos la función en puntos y líneas sobrepuestas
que como título tenga “Gráfica de una función cuadrática”, como subtítulo “2x^2
- 1”, como etiqueta en el eje de las x “eje x” y como etiqueta en el eje de las y “eje
y”; y entonces observamos la gráfica de la figura 2.10

> plot(x,y, type = "o",main="Gráfica de una función cuadrática",sub="2x^2-1",xlab="eje x",ylab="eje y")

21
Figura 2.10

2.4.2.Visualización de los valores de los comandos


Cuando ejecutamos un comando, éste puede darnos distintos resultados (o
valores) que son de interés para realizar algún tipo de análisis, sin embargo hay
ocasiones en que de toda la gama de resultados que nos podría ofrecer cierto
comando, tal vez estemos interesados tan solo en 1 o 2. La información acerca de
cuáles son todos los posibles resultados que un comando puede ofrecer, incluida
las especificaciones de cada uno de ellos, se la puede visualizar en la ayuda “help
(F1)”, dentro de la ventana 4, de la misma manera y en el mismo cuadro donde
aparecen los argumentos del comando (idéntico a lo visto en la sección 1.4.1), bajo
el subtítulo “Values”. Así entonces luego correr un cierto comando, éste por
defecto arrojará todos los resultados posibles, pero si después del comando se
escribe el símbolo de dólar “$”, y a continuación el nombre del valor que deseo que
aparezca, al mandar a correr, se visualizará únicamente la respuesta con el valor
que se escribió luego del símbolo $. Para aclarar lo dicho de una mejor manera a
continuación se realiza un ejemplo:
Existe un comando llamado “shapiro.test( )”, que sirve para realizar una prueba
de hipótesis con el propósito de verificar si un grupo de datos proviene o no de una

22
distribución normal2 , donde el único argumento que necesita este comando es un
vector que contenga los datos a ser probados, entonces cuando buscamos la ayuda
acerca de este comando, se muestra la siguiente información respecto a los
valores:

Value

A list with class "htest" containing the following components:

statistic the value of the Shapiro-Wilk statistic.

p.value an approximate p-value for the test. This is said in Royston (1995) to
be adequate forp.value < 0.1.
method the character string "Shapiro-Wilk normality test".

data.name a character string giving the name(s) of the data.

Si corremos este comando, sin tomar en cuenta ningún valor, sino únicamente el
comando con su argumento, observamos los siguientes resultados:

> a<-c(2,4,6,5,7,8,5,6,8,4)
> shapiro.test(a)

Shapiro-Wilk normality test

data: a
W = 0.9526, p-value = 0.6992

El nombre de la prueba (Shapiro-Wilk normality test), el vector del cual se hizo la


prueba (a), el estadístico de prueba (W = 0.9526), y el valor P (p-value = 0.6992);
es decir todos los que se muestra en los valores “value” del cuadro de ayuda.
Sin embargo si queremos visualizar únicamente el estadístico de prueba
escribimos:

2
No es de interés en el presente capítulo hablar o explicar a detalle esta prueba estadística, lo
único que nos interesa es tratar de explicar el correcto uso en general de los comandos, a partir
de este comando específico

23
> a<-c(2,4,6,5,7,8,5,6,8,4)
> shapiro.test(a) $ statistic
W
0.9525893

Si queremos visualizar únicamente el valor p:

> a<-c(2,4,6,5,7,8,5,6,8,4)
> shapiro.test(a)$ p.value
[1] 0.6991811

O tal vez tan solo quisiéramos saber el nombre de la prueba:

> a<-c(2,4,6,5,7,8,5,6,8,4)
> shapiro.test(a)$ method
[1] "Shapiro-Wilk normality test"

2.5. Los Paquetes en R


Un paquete o librería no es sino un conjunto de funciones o comandos
desarrollados, que tienen en común que están perfeccionados para resolver
problemas particulares, por lo que mediante su uso podemos obtener resultados
para necesidades específicas, según sea el ambiente de trabajo o área en la cual
nos estemos desenvolviendo. Así por ejemplo si alguien estuviera trabajando en
una rama específica de la estadística como las gráficas en el control estadístico de
calidad, la recomendación sería instalar y activar el paquete “qcc”, el cual ofrece
comandos para realizar por ejemplo cartas de control, diagramas de Pareto,
cálculo de límites de control, etc… y otros comandos que servirán específicamente
para esta especialidad, así dentro de esta librería encontramos el comando
pareto.chart(), el cuál será utilizado para dibujar diagramas de Pareto.
Dentro del computador los paquetes se descargan en una carpeta llamada
“library”, para visualizar el directorio de esta carpeta debemos ejecutar el comando
“.libPaths()” desde un script (ventana superior izquierda), e inmediatamente se
mostrará dicho directorio en la RConsole, tal como muestra la figura 2.11

24
Figura 2.11

Y de esta forma podemos saber que los paquetes instalados en el PC de nuestro


computador para R, los podemos encontrar en el directorio
"C:/ProgramFiles/R/R-3.1.2/library"
No es lo mismo instalar que activar un paquete.- Cuando instalamos R por
primera vez, se instalan por defecto un conjunto de paquetes tales como boot,
class, cluster, etc… sin embargo el usuario de R puede instalar otros paquetes que
son aportes de investigadores para ciertas áreas, principalmente relacionadas al
análisis de datos. Para instalar un paquete, simplemente tenemos que entrar a la
opción “Install”, que se encuentra en la ventana 3 del RStudio, y escribir el nombre
del paquete en el cuadro de diálogo que aparece (Figura 2.12), a continuación clic
en “Install” del cuadro de diálogo, y el paquete quedará automáticamente
instalado y se guardará en la carpeta “library” de su computador

25
Figura 2.12

Entonces, desde la pestaña “packages” de la ventana 4 del RStudio podemos


observar al paquete “car” el cual ya se encuentra en la lista. El usuario podrá hacer
uso de los distintos comandos con los que cuenta este paquete solo si lo activa. La
manera de activarlo es muy sencillo, solo tiene que seleccionar el paquete y poner
visto √ en el cuadro a su izquierda (Figura 2.13)
Figura 2.13

Si el usuario no activase el paquete, cuando corra los comandos que este posee, R
le dará el aviso que no ha podido encontrar dicho comando.

26
Es importante tener en cuenta que una vez que usted activa un comando y lo
utiliza, y luego de cerrar su sesión de RStudio regresa después de un tiempo para
intentar utilizarlo, usted debe volverlo a activar.
Algunos pocos ejemplos de paquetes existentes en R y que son de gran utilidad
son:
Rcmdr o también conocido como R Comander, que sirve para realizar
algunos gráficos y cálculos estadísticos sin necesidad de escribir en un
script ningún comando o función, sino que más bien tan solo ingresando
una matriz de datos, lo único que debemos hacer es seleccionar el cálculo
que queremos que se realice e inmediatamente los resultados aparecerán.
ggplot2, que es un paquete que contiene comandos que nos ayudará a
realizar gráficas complejas con varias capas para que sea más fácil de
interpretar y mejore la estética y didáctica de la presentación
rgl, que nos ayuda a realizar gráficos interactivos y figuras geométricas en
3D
qcc, que es un paquete que nos brinda comandos para realizar gráficos para
el control estadístico de la calidad, como diagramas de Pareto cartas de
control, de atributos… etc
SQLdf, que nos permite cargar bases de datos pero además realizar
consultas
foreing, que nos permitirá importar desde otros paquetes estadísticos una
base de datos que se encuentre ya realizada
aspect, que nos facilita comandos para realizar análisis multivariante de la
información
En fin, hasta la actualidad existen 6097 paquetes disponibles, para cada uno
de los cuales existe un manual de referencia en formato .pdf, y un grupo de
investigadores los cuales año tras año siguen realizando sus aportes (paquetes),
con el fin de enriquecer esta librería. Para cada uno de estos paquetes se podría
elaborar un libro tan solo para ver la relación entre las diversas técnicas
estadísticas existentes, y el soporte para cálculos y gráficas que tiene cada librería
con respecto a las técnicas, de hecho existen ya algunos libros basados en los
27
paquetes existentes. Es interesante hacer notar que cada uno de estos paquetes
son diseñados para resolver problemas que en su gran mayoría tienen que ver con
el análisis de la información, por lo que se podría decir que este software es
netamente estadístico.
La lista de todos los paquetes, así como la explicación respectiva acerca de su
funcionamiento se puede encontrar en la siguiente dirección http://cran.r-
project.org/web/packages/index.html
Para obtener ayuda acerca del paquete que queremos utilizar, basta con hacer clic
sobre el nombre de dicho paquete e inmediatamente en la pestaña “help”
aparecerá toda la ayuda disponible

2.6. Ingresando Información en R


2.6.1. Variables
Para asignar una variable, a cualquier objeto, utilizaremos el operador de
asignación “->”, o en sentido inverso “<-“. Es decir, si por ejemplo quisiéramos
asignar el número 2 a una variable que la llamaremos “x”, deberíamos escribir:

> 2 -> x

U otra opción sería:

> x <- 2

En general, se suele trabajar, y es la forma como lo haremos en este texto con la 2º


opción.
Si queremos que se muestre lo que se asignó a la variable debemos poner en una
línea aparte el nombre de la variable y mandar a correr, entonces en la consola se
mostrará dicha asignación

> x <- 2
>x

28
Y así para hacer por ejemplo una suma entre 2 variables x e y, o cualquier
operación matemática posible podríamos asignar:

> x <- 2
> y <- 5
> suma <- x + y
> suma

Cada una de las variables creadas se guardará en la pestaña “Enviroment” de la


ventana 2. Así como el historial de los procesos que se corran se guardarán en la
pestaña “History” de la misma ventana.

2.6.2.Vectores
Se trata de la estructura de datos más sencilla, puesto que es una matriz de
dimensión “1 x p”, si lo quisiéramos ver como un vector fila, o una matriz “p x 1”,
si se tratara de un vector columna. Existen varias formas en R de crear un vector,
las más comunes son:
 Con la función “c( )”, que en realidad se usa para concatenar objetos pero
que es muy útil al momento de proporcionar un vector. Así por ejemplo,
podríamos crear un vector que contenga los números “3 5 6 7 8 3 4”,
mediante

> x <- c(3, 5, 6, 7, 8, 3, 4)

Si quisiéramos encontrar por ejemplo el elemento en la 5º posición de este vector,


que como podemos observar es el número 8, escribimos:

> x[5]
[1] 8

Así mismo, en otra variable podríamos asignar un vector, pero ahora con
elementos no numéricos, como se muestra a continuación:

29
> y <- c("Pablo","Anita","Rosita","Paco","Carmen","Josué","Isaac")
>y
[1] "Pablo" "Anita" "Rosita" "Paco" "Carmen" "Josué" "David"

Y de igual forma para poder acceder a un elemento de un vector, por ejemplo el


2º, escribimos:

> y[2]
[1] "Anita"

 Creando un vector que sea una secuencia de números bajo un orden


establecido, esto lo podemos lograr a través del comando seq( ). Por
ejemplo podríamos interesarnos en generar una secuencia de números
que empiecen desde el 1 y terminen en 9, en saltos de 1 en 1 (1 2 3 4 5 6 7 8
9), mediante:

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

Otros ejemplos de sucesiones que nos podrían interesar son:


- Generación de una secuencia de números impares empezando en 7 y
terminando en 21:

> seq(7,21,by=2)
[1] 7 9 11 13 15 17 19 21

- Generación de una secuencia de números que empiecen en 5 y


terminen en 1, en saltos de 0.5:

> seq(5,1,by=-0.5)
[1] 5.0 4.5 4.0 3.5 3.0 2.5 2.0 1.5 1.0

- Números pares que empiecen en 10 y terminen en menos 10

> seq(10,-10,by= -2)


[1] 10 8 6 4 2 0 -2 – 4 -6 -8 -10

30
En todos estos casos, note que no hemos asignado ninguna variable a los
vectores, esto hará que los comandos se ejecuten automáticamente sin
necesidad de mandarlos a correr, esto podría parecer más práctico, pero
cuando se escribe un código grande es recomendable asignar variables a
todos los vectores que estemos creando. Una desventaja por ejemplo es que
no podemos encontrar un elemento de un vector si lo necesitamos, en
cambio sí para crear la última secuencia se le hubiese asignado una
variable, sería fácil por ejemplo encontrar su sexto elemento que es “-2”

> x <- seq(10,-10,by= -2)


>x
[1] 10 8 6 4 2 0 -2 -4 -6 -8 -10
> x[7]
[1] -2

Pueda que en este caso no resulte significativo encontrar o filtrar términos


que a simple vista los podríamos hallar, sin embargo existe ocasiones
donde se trabajará con miles de datos y será importante este tipo de
instrucciones
 Con la función numeric( ), que crea un vector de ceros, tantas veces como
se le indique al argumento de este comando. Por ejemplo si quisiéramos
crear un vector con 5 ceros, escribimos:

> numeric(5)
[1] 0 0 0 0 0

 Con la función rep( ), que crea un vector con un mismo número, tantas
veces como se lo indique en su argumento. Por ejemplo si quisiéramos
crear un vector que repita el número siete 12 veces, escribimos:

> rep(7,12)
[1] 7 7 7 7 7 7 7 7 7 7 7 7

Estas funciones que se han mostrado para crear vectores, están en su forma más
simple, es decir poniendo el argumento básico, sin embargo al pedir ayuda sobre

31
cada función podemos observar los diferentes argumentos que nos es posible
introducir en cada una de ellas, así como las distintas opciones de valores que nos
es posible visualizar, tal como se indicó en el apartado 1.4.

2.6.3.Matrices
Una matriz es un arreglo bidimensional de nxp elementos dentro de un conjunto
ordenado, donde n representa el número de filas y p el número de columnas.
Existen varias formas de crear matrices en R, sin embargo la más común es
utilizando la función “matrix( )”. Los argumentos que contiene esta función son:
“data”, “nrow”, “ncol”, “byrow” y “dimnames”, la forma de utilizar estos
argumentos para crear matrices se explica a continuación:
 data  en este argumento se colocarán todos los elementos que queremos
que sean parte de la matriz, para hacerlo podemos utilizar cualquiera de
las formas que hemos aprendido para crear un vector. Cuando utilizamos
únicamente el argumento “data”, por defecto la matriz se crea con una sola
columna y el número de filas igual al número de datos ingresados.

> p <- matrix(data = c(2,7,8,4,7,1,6,8,1,5))


>p
[,1]
[1,] 2
[2,] 7
[3,] 8
[4,] 4
[5,] 7
[6,] 1
[7,] 6
[8,] 8
[9,] 1
[10,] 5

 nrow  Del grupo de datos ingresados, podemos notar que el número de


filas es el número de elementos que se ingresa, sin embargo si solo
deseamos que por ejemplo el número de filas sean 2, y que los demás datos

32
se encuentren repartidos por columnas, el argumento nrow, nos ayudará a
definir lo dicho:

> p <- matrix(data = c(2,7,8,4,7,1,6,8,1,5), nrow=2)


>p
[,1] [,2] [,3] [,4] [,5]
[1,] 2 8 7 6 1
[2,] 7 4 1 8 5

Para este ejemplo por defecto se crean 5 columnas, para que de esta forma
se completen todos los datos que ingresamos, y de esta manera se crea una
matriz 2 x 5.
 ncol  Como podemos observar cuando definimos un número de filas, el
número de columnas que se forman por defecto son todas las necesarias
para que se puedan visualizar el número faltante de elementos ingresados,
sin embargo si quisiéramos restringir el número de columnas para que
sean por ejemplo solo 3, y de esta forma se ingresen solo los primeros
números correspondientes, entonces utilizamos el argumento “ncol”

> p <- matrix(data = c(2,7,8,4,7,1,6,8,1,5), nrow=2, ncol=3)


Warning message:
In matrix(data = c(2, 7, 8, 4, 7, 1, 6, 8, 1, 5), nrow = 2, ncol = 3) :
data length [10] is not a sub-multiple or multiple of the
number of columns [3]
>p
[,1] [,2] [,3]
[1,] 2 8 7
[2,] 7 4 1

Sin embargo nótese que existe un mensaje de advertencia escrito con rojo,
esto no quiere decir que hayamos utilizado mal el comando, solo nos
advierte que el número de datos ingresados que para nuestro caso son 10,
no es un múltiplo o submúltiplo del número de columnas indicadas, por
tal motivo para nuestro ejemplo en particular existen elementos que
ingresamos pero que al momento de formar la matriz no son tomados en

33
cuenta. El número de columnas perfectas para que se tome en cuenta todos
los elementos ingresados en nuestro ejemplo serían 5.
Si ingresáramos por ejemplo 6 columnas, nótese que los elementos se
agotarían, entonces lo que por defecto hace R, es volver a tomar los
primeros valores hasta que la matriz sea completada. Obviamente este
mensaje de advertencia nuevamente aparecerá de color rojo

> p <- matrix(data = c(2,7,8,4,7,1,6,8,1,5), nrow=2, ncol=6)


Warning message:
In matrix(data = c(2, 7, 8, 4, 7, 1, 6, 8, 1, 5), nrow = 2, ncol = 6) :
data length [10] is not a sub-multiple or multiple of the
number of columns [6]
>p
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 2 8 7 6 1 2
[2,] 7 4 1 8 5 7

 byrow  Note que siempre que usted crea una matriz, por defecto los datos
ingresados se ordenan por columnas.
Cuando al argumento byrow se le asigna un valor lógico verdadero, es decir
byrow = TRUE, estamos diciendo que los elementos se ingresen
ordenadamente en la matriz por filas.

> p <- matrix(data = c(2,7,8,4,7,1,6,8,1,5), nrow=2, ncol=5, byrow=TRUE)


>p
[,1] [,2] [,3] [,4] [,5]
[1,] 2 7 8 4 7
[2,] 1 6 8 1 5

Si quisiéramos que los datos se ingresen ordenadamente por columnas, lo


único que hacemos es asignar un valor lógico falso al argumento byrow, es
decir byrow = FALSE

34
> p <- matrix(data = c(2,7,8,4,7,1,6,8,1,5), nrow=2, ncol=5, byrow=FALSE)
>p
[,1] [,2] [,3] [,4] [,5]
[1,] 2 8 7 6 1
[2,] 7 4 1 8 5

 dimnames  Por defecto el nombre de las filas y columnas son únicamente


los números enteros ordenados que corresponden, sin embargo cuando
queremos dar un nombre específico como por ejemplo fila 1, fila2,… o col1,
col2,…. Utilizamos el agumento dimnames concatenando como una lista a
través del comando list( )

> p <- matrix(data = c(2,7,8,4,7,1,6,8,1,5), nrow=2, ncol=5, byrow=FALSE, dimnames =


list(c("fila1","fila2"),c("col1","col2","col3","col4","col5")))
>p
col1 col2 col3 col4 col5
fila1 2 8 7 6 1
fila2 7 4 1 8 5

Dimensión de una matriz.- Para conocer la dimensión de una matriz


ingresada, lo hacemos con el comando dim( ), el cual nos da como resultado un
vector fila con 2 elementos, el primero de ellos indica el número de filas y el 2º el
número de columnas:

>p
col1 col2 col3 col4 col5
fila1 2 8 7 6 1
fila2 7 4 1 8 5
> dim(p)
[1] 2 5

A través de este comando podemos convertir un vector en matriz: El


procedimiento es ingresar todos los datos que deseo que estén en la matriz como
un vector, a continuación en el comando dim(x) asigno el número de filas y
columnas que se desea obtener mediante el comando de concatenación c( ):

35
> x <- c(3,5,7,3,4,8)
> dim(x)<-c(2,3)
>x
[,1] [,2] [,3]
[1,] 3 7 4
[2,] 5 3 8

Para filtrar un elemento de una matriz tan solo hay que escribir el nombre
de la matriz seguido de corchetes, dentro de los cuales escribimos el par ordenado
que queremos localizar, y de esta forma el resultado nos arrojará el valor que se
encuentra en la coordenada ingresada. Por ejemplo para nuestra matriz x anterior
el par ordenado (2,3), está ocupado por el elemento 8:

>x
[,1] [,2] [,3]
[1,] 3 7 4
[2,] 5 3 8
> x[2,3]
[1] 8

Si lo que deseamos es filtrar toda una fila, lo que haremos es escribir dentro del
corchete el número de la fila que queremos filtrar en la posición correspondiente
a filas y dejamos en blanco la posición correspondiente a columnas. Por ejemplo
si en la matriz x queremos filtrar la 2º fila escribimos

> x[2,]
[1] 5 3 8

Análogamente, si lo que queremos es filtrar toda una columna, escribimos dentro


del corchete el número de la columna que queremos filtrar en la posición
correspondiente a columnas y dejamos en blanco la posición correspondiente a
filas. Por ejemplo si en la matriz x queremos filtrar la 1º columna escribimos:

> x[ ,1]
[1] 3 5

36
Para filtrar por ejemplo la 1º y 3º columna a la vez, escribimos:

> x[ ,c(1,3)]

[,1] [,2]
[1,] 3 4
[2,] 5 8

2.6.4. Operaciones Básicas con Matrices y/o vectores


En realidad un vector no es sino una matriz de dimensiones 1 x p, e inclusive un
solo número se lo considera como una matriz de dimensión 1 x 1. Por tal motivo
las operaciones que a continuación se detallan se consideran todas como
operaciones con matrices, suponiéndose que son válidas para el caso más
específico como son los vectores o números
Operaciones con una sola matriz:
Dentro de una misma matriz nos podría interesar, que entre sus elementos se
realicen operaciones básicas, como por ejemplo la suma, el producto, la media, la
varianza, la raíz cuadrada, el seno, coseno, o tangente de cada uno de sus
elementos, etc… Los comandos que nos ayudan a realizar estas operaciones
básicas son:
 sum(x)  Calcula la suma de todos los elementos de la matriz x
 prod(x)  Calcula el producto de todos los elementos de la matriz x
 max(x)  Calcula el máximo valor de entre todos los elementos de la
matriz x
 min(x)  Calcula el máximo valor de entre todos los elementos de la matriz
x
 which.max(x)  Devuelve la posición del máximo valor de la matriz x
 which.min(x)  Devuelve la posición del mínimo valor de la matriz x
 range(x)  Calcula el rango, es decir el valor máximo y el valor mínimo
 length(x) Calcula el número de elementos que contiene la matriz x
 mean(x)  Calcula la media de todos los valores de la matriz x
 median(x)  Calcula la media de todos los valores de la matriz x

37
 var(x)  Calcula la varianza de todos los valores de la matriz
 round(x,n)  Devuelve los valores de la matriz x, redondeados cada uno
en n cifras decimales
 rev(x)  Invierte el orden de los elementos de la matriz x
 sort(x)  Ordena los elementos de la matriz x de manera ascendente
 rev(sort(x))  Ordena los elementos de la matriz x de manera descendente
 cumsum(x)  Calcula la suma acumulada de los elementos de la matriz x
 cumprod(x)  Calcula el producto acumulado de los elementos de la
matriz x
 t(x)  Devuelve la transpuesta de la matriz x
 diag(x)  Devuelve la diagonal principal de la matriz x
 solve(x)  Calcula la inversa de la matriz x
 eigen(x)  Calcula los autovalores y autovectores de la matriz x
 sen(x)  Calcula el seno de cada uno de los elementos de la matriz x
 cos(x)  Calcula el coseno de cada uno de los elementos de la matriz x
 sin(x)  Calcula el seno de cada uno de los elementos de la matriz x (se
puede calcular también el coseno y tangente con cos( )y tan( )
respectivamente)
 asin(x)  Calcula el arcoseno de cada uno de los elementos de la matriz x
(se puede calcular también el arcocoseno y arcotangente con acos( )y atan(
) respectivamente)
 sqrt(x)  Calcula la raíz cuadrada de cada uno de los elementos de la
matriz x

Operaciones con 2 matrices:


Cuando se desea hacer operaciones básicas entre dos o en ocasiones más de dos
matrices, los operadores lógicos y algunos comandos que nos ayudan son:
 x + y  Calcula la suma de cada par de elementos de las matrices x e y
respectivamente, que ocupan la misma posición en ambas matrices
 x - y  Calcula la resta de cada par de elementos de las matrices x e y
respectivamente, que ocupan la misma posición en ambas matrices
38
 x * y  Calcula el producto de cada par de elementos de las matrices x e y
respectivamente, que ocupan la misma posición en ambas matrices
 x/y  Calcula el cociente de cada par de elementos de las matrices x e y
respectivamente, que ocupan la misma posición en ambas matrices
 x$*$y  Calcula el producto matricial entre las matrices x e y

2.6.5. Ingresando una matriz de datos


La forma más común que existe en R para ingresar una matriz de datos, donde las
filas representan a los individuos, mientras que las columnas son las variables que
se miden sobre cada uno de estos individuos es con la función data.frame( ). Por
ejemplo si quisiéramos ingresar la información que se encuentra en la tabla 1.1,
referente al peso (Kg), talla (cm) y sexo de 10 niños que acaban de nacer en un
hospital de la ciudad, los pasos a seguir son los siguientes:
Tabla 2.1 Información sobre recién nacidos

Ingresar cada una de las variables (x, y, z,…) como si fueran un vector. Se
debe tener muy en cuenta que como todas las variables van a ser medidas
sobre un mismo número de individuos, el número de datos que ingresemos
en cada variable debe ser el mismo
Escribir la función data.frame(x, y, z,…), en cuyo argumento se debe
escribir el nombre asignado a cada una de las variables de interés. Es de

39
gran utilidad asignar algún nombre a la matriz que se formará a través de
data.frame( ), en nuestro caso se llamará “datos”

> peso <- c(3.6,3.2,2.8,3.6,2.7,2.8,2.7,3.0,3.1,3.4)


> talla <- c(46.5,44.1,48.1,46.4,41.1,41.8,41.0,42.3,42.5,43.1)
> sexo <-c("hombre","hombre","mujer","hombre","mujer","mujer","mujer","mujer","hombre","hombre")
> datos <- data.frame(peso,talla,sexo)
> datos

peso talla sexo


1 3.6 46.5 hombre
2 3.2 44.1 hombre
3 2.8 48.1 mujer
4 3.6 46.4 hombre
5 2.7 41.1 mujer
6 2.8 41.8 mujer
7 2.7 41.0 mujer
8 3.0 42.3 mujer
9 3.1 42.5 hombre
10 3.4 43.1 hombre

Si por ejemplo quisiéramos ingresar una o más variables adicionales (por


ejemplo tipo de parto) en la misma base de datos, volvemos a ingresar
dichas variables como un vector y luego utilizando el mismo comando
data.frame( ), colocamos en su argumento el nombre asignado a la base de
datos anterior más la o las variables nuevas.

> parto <- c("normal","normal","normal","cesárea","cesárea","normal","normal","cesárea","cesárea","cesárea")


> datos <- data.frame(datos,parto)
> datos

peso talla sexo parto


1 3.6 46.5 hombre normal
2 3.2 44.1 hombre normal
3 2.8 48.1 mujer normal
4 3.6 46.4 hombre cesárea
5 2.7 41.1 mujer cesárea
6 2.8 41.8 mujer normal
7 2.7 41.0 mujer normal
8 3.0 42.3 mujer cesárea
9 3.1 42.5 hombre cesárea
10 3.4 43.1 hombre cesárea

40
Si queremos observar la matriz de datos, en una forma más ordenada como
la tenemos en la tabla 1.1, tan solo debemos escribir el comando View( ),
en cuyo argumento se debe escribir el nombre que se le asignó a la matriz
de datos creada
Si queremos filtrar una variable en particular de la matriz de datos
debemos escribir el nombre que asignamos a la matriz de datos, seguido
del símbolo $, y a continuación el nombre de la variable que deseo filtrar,
y adicional a esto podremos visualizar los niveles de esta variable. Por
ejemplo si queremos filtrar la variable sexo con sus dos niveles (hombre y
mujer);

> datos$sexo
[1] hombre hombre mujer hombre mujer mujer mujer mujer hombre hombre
Levels: hombre mujer

Si queremos filtrar la matriz, de tal forma que me muestre la observación


solo de hombres, procedemos de la siguiente forma:

> datos[datos$sexo=="hombre",]

peso talla sexo parto


1 3.6 46.5 hombre normal
2 3.2 44.1 hombre normal
4 3.6 46.4 hombre cesárea
9 3.1 42.5 hombre cesárea
10 3.4 43.1 hombre cesárea

Lo que estoy dando, es una instrucción que indica que se filtre todas
aquellas filas donde la variable sexo sea hombre en todas las columnas
Tablas de frecuencias
Para conocer el número de veces (frecuencia), con la que se repite una
información, utilizamos el comando table( ), en cuyo argumento se escribe el
nombre de la base de datos, seguido del símbolo “$”, y el nombre de la variable
que deseo se calcule la frecuencia. Si quisiera por ejemplo saber con qué frecuencia
ocurren tipos de parto de la matriz de datos que le denominamos “datos”:

41
> table(datos$parto)

cesárea normal
5 5

Lo cual nos indica que de los 10 partos que hubo, 5 fueron por cesárea, y 5 por
parto normal.
Además podríamos realizar una tabla de frecuencias cruzadas entre dos variables,
tan solo aumentando un segundo argumento que sería el nombre de la segunda
variable de interés. Por ejemplo para conocer el tipo de parto que se produjo según
si el recién nacido fue hombre o mujer.

> table(datos$parto,datos$sexo)

hombre mujer
cesárea 3 2
normal 2 3

Cuando queremos editar una matriz de datos lo podemos realizar directamente a


través del comando edit( ), y al momento de cerrar la matriz de datos que se
muestra en la figura 2.14, automáticamente la información editada se guardará

> edit(datos)

42
Figura 2.14

2.6.6. Importando una matriz de datos desde otro


tipo de archivo
Se puede importar una matriz de datos desde prácticamente todos los formatos de
datos como Excel (xlsx o xls), SPSS, MINITAB, ASCII, SQL, etc… Lo único que hay
que tomar muy en cuenta al momento de importar datos, es que estos se
encuentren almacenados en la ubicación donde se está guardando el workspace.
Para conocer la ubicación se digita el comando getwd( )

> getwd()
[1] "D:/Documents"

Por lo tanto siempre que quiera importar un documento, en el formato que sea,
debo guardar este archivo en la carpeta que está indicada. Si quisiéramos cambiar
de ubicación para guardar archivos debemos utilizar el comando setwd( ), en cuyo
argumento se debe escribir el directorio en el que deseo guardar los archivos. Por
ejemplo:

43
> setwd(C:/Usuarios/Pablo Flores/Mis documentos)

Aunque como ya mencionamos se puede importar información desde cualquier


tipo de archivo, a continuación analizaremos como hacerlo desde los dos más
comunes que son documentos de texto .txt, documentos de Excel .xlsx, y de SPSS
.sav

Importando Desde Un Archivo De Texto .txt


Para importar desde esta forma de archivo podemos utilizar el comando
“read.table( )”, el cual posee muchos argumentos, los cuales solucionan los
distintos problemas que se podrían presentar el momento de importar los datos.
A continuación se explicará los argumentos más importantes de este comando:
read.table(file, header = , sep=””, dec = “”,…)
file.- aquí se escribe el nombre del archivo que se desea importar
header.- se escribe un valor lógico verdadero o falso, escribiremos TRUE
cuando en el archivo de datos la primera columna corresponda al nombre
de las variables, caso contrario se escribe FALSE
sep.- se debe especificar cuál es el separados de una variable a otra, que por
lo general suele ser un espacio” ”, pero también podría ser un punto”.”, una
coma”,”, etc…
dec.- Es el carácter que se usa en el archivo que se desea importar para
separar los decimales que puede ser “.” “,” etc…
row.names.- Sirve para dar nombre a las filas ingresadas como un vector
col.names.- Sirve para dar nombre a las columnas ingresadas como un
vector
Por ejemplo en el directorio “C:/Usuarios/Pablo Flores/Mis documentos” de mi
computadora se encuentra una matriz de datos en un archivo de texto, que
contiene las variables cantón edad, sexo y número de habitantes medidas sobre
260 individuos, y se encuentran sin rótulos en las columnas; el archivo se
denomina “Datos_Poblacion.txt”, entonces para importar esta matriz prosigo

44
a <- read.table("Datos_Poblacion.txt", header = F,col.names=c("cantón","edad","sexo","habitantes"))
View(a)

Entonces luego de asignar a la matriz la letra “a”, con el comando View(a) puedo
visualizar la matriz de datos importada
Tabla 2.2

… la tabla continúa hasta el


individuo 260

Para editar la matriz de datos importada, filtrar algunas variables o determinar


frecuencias, se puede considerar a la matriz importada como un data.frame y darle
el mismo tratamiento ya aprendido en estos casos

Importando Desde Un Archivo De Excel .xlsx


La forma más sencilla de hacerlo es guardando el archivo de excel como formato
.csv (separador de comas), en el directorio y utilizar la función “read.csv( )”

a <- read.csv(“Nombre_del_Archivo.csv”)

Sin embargo existen otros métodos de hacerlo por ejemplo:


- Instalando y activando el paquete “RODBC”, y utilizando los
comandos “odbcConnectExcel( )” y “sqlFetch( )”
- Instalando y activando el paquete “xlsx”, y utilizando el comando
read.xlsx

45
Importando Desde Un Archivo De Spss .sav
Necesitamos instalar y activar previamente los paquetes “foreign”, y “Hmisc”.
Luego de guardar en el directorio adecuado el archivo (Nombre_Archivo.sav),
utilizamos el comando “spss.get( )”, en cuyo argumento colocamos el nombre
del archivo entre comillas, y si queremos que se use los valores de las etiquetas el
valor lógico verdadero en el argumento use.value.labels

>spss.get("Nombre_del_Archivo.sav",use.value.labels=TRUE)

Importando Desde Un Archivo De MATLAB .mat


Previamente necesitamos instalar el paquete “R.matlab”, y además hay que tener
en cuenta que el archivo creado en MATLAB y que se desea abrir con R debe estar
guardado en el directorio que muestra el software mediante el comando
“system.file( )”:

system.file("mat-files", package="R.matlab")
[1] "C:/Program Files/R/R-3.1.2/library/R.matlab/mat-files"

A continuación utilizaremos el comando “matRead( )”, de la forma que sigue:


 Asignamos a una variable cualquiera la ubicación de la carpeta donde se
deben guardar los archivos que se creen de MATLAB (como ya habíamos
dicho esta ubicación se la encuentra con el comando system.file)

> Directorio <- system.file("mat-files", package="R.matlab")


> Directorio
[1] "C:/Program Files/R/R-3.1.2/library/R.matlab/mat-files"

 Asignamos a otra variable cualquiera el nombre del archivo de MATLAB


que guardamos en el directorio antes descrito, esto lo hacemos mediante
el comando file.path( ), en cuyo primer y segundo argumento obligatorios
escribimos el directorio, y el nombre del archivo que queremos abrir con
la extensión .mat respectivamente

46
> Nombre <- file.path(path, "Nombre_Archivo.mat")
> Nombre
[1] "C:/Program Files/R/R-3.1.2/library/R.matlab/mat-files/Nombre_Archivo.mat"

 Finalmente, en otra variable cualquiera leemos la matriz de datos de


MATLAB, mediante el comando “matRead( )”, cuyo argumento es el
nombre de la variable anterior, donde se guardó el nombre del archivo que
se quiere importar (para nuestro caso “Nombre”):

> data <- readMat(Nombre)


> data

Ejemplo 2.1:
Se crea en MATLAB un archivo con el nombre “ejemplo.mat”, el cual tiene tres
matrices con los nombres X, Y, Z:
11
1 3 5 21 1 2
𝑋=4 6 7 𝑌 = 31 𝑍=0 1
8 10 11 41 3 5
51
Importe este archivo desde MATLAB a R, en una variable denominada datos, y a
continuación visualice las tres matrices en mención

Solución:
El código para realizar esta operación es el siguiente

47
> library(R.matlab) ## Activamos la librería R.matlab
> directorio <- system.file("mat-files", package="R.matlab") ## Llamamos el directorio donde está
guardado el archivo ejemplo.mat
> nombre <- file.path(directorio, "ejemplo.mat") ## LLamamos al archivo por su nombre
> datos <- readMat(nombre) ## Leemos el archivo (lo importamos)
> datos ##Imprimimos los datos importados

$X
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 4 6 7
[3,] 8 10 11

$Y
[,1]
[1,] 11
[2,] 21
[3,] 31
[4,] 41
[5,] 51

$Z
[,1] [,2]
[1,] 1 2
[2,] 0 1
[3,] 3 5

attr(,"header")
attr(,"header")$description
[1] "MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Wed May 13 09:27:48 2015
"

attr(,"header")$version
[1] "5"

attr(,"header")$endian
[1] "little"

Como podemos observar en la variable datos se muestran las tres matrices


importadas desde MATLAB. Finalmente si queremos visualizar una por una, solo
tenemos que filtrarlas:

48
> X <- datos$X
>X
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 4 6 7
[3,] 8 10 11

> Y <- datos$Y


>Y
[,1]
[1,] 11
[2,] 21
[3,] 31
[4,] 41
[5,] 51

> Z <- datos$Z


>Z
[,1] [,2]
[1,] 1 2
[2,] 0 1
[3,] 3 5

2.6.7. Matrices de Datos en R


R por defecto tiene matrices de datos, las cuales están formadas por variables
cuantitativas y/o cualitativas, y que pueden ser de ayuda para practicar diversas
técnicas con ellas.
Para saber cuáles son las matrices de datos existentes, procedemos a escribir el
comando data( ), el cual desplegará una lista de todas las matrices existentes en
la memoria dentro de una pestaña llamada “R Data Sets”:

>data( )

Data sets in package ‘datasets’:

AirPassengers Monthly Airline Passenger Numbers


1949-1960
BJsales Sales Data with Leading Indicator
BJsales.lead (BJsales) Sales Data with Leading Indicator
BOD Biochemical Oxygen Demand
CO2 Carbon Dioxide Uptake in Grass
Plants

49
ChickWeight Weight versus age of chicks on
different diets
DNase Elisa assay of DNase
EuStockMarkets Daily Closing Prices of Major
European Stock
Indices, 1991-1998

Use ‘data(package = .packages(all.available = TRUE))’


to list the data sets in all *available* packages.

En realidad son muchos más las bases de datos existentes, tan solo se muestral una pequeña parte
de la lista

Para visualizar alguna matriz de datos basta con escribir el nombre de dicha matriz
y mandarla a correr, inmediatamente aparecerán los datos que forman parte de la
misma. Por ejemplo existe una matriz de datos llamada “chickwts”, la cual consta
de 2 variables (peso y tipo de alimentación) medidas sobre 71 pollos. Para
visualizar esta matriz de datos únicamente escribimos chickwts, e
inmediatamente se despliega la siguiente matriz:

Tabla 2.3

En realidad son 71 individuos pero por cuestión de espacio solo se muestran los 1a primeros

50
3. CAPÍTULO 3:
FUNDAMENTOS DE MATLAB
3.1.¿Qué es MATLAB?
MATLAB, proviene de las siglas “Matrix Laboratory”, y se lo puede catalogar como
un programa interactivo, el cual posee múltiples aplicaciones para desarrollar
algoritmos matemáticos los cuales dan solución principalmente a problemas de
ingeniería.
Al igual que R, nosotros podemos obtener una gran ventaja del software MATLAB
en lo que análisis de datos se refiere, puesto que dentro de su parte programable
también funciona con objetos que ya están definidos, y los cuales pueden ser
manipulados o concatenados mediante operadores (aritméticos, lógicos, y/o
comparativos), lo que nos ayudará a crear un programa completo que resuelva
necesidades específicas. Por tanto a MATLAB, también lo veremos como un
lenguaje de programación orientado a objetos, sin embargo cabe aclarar que el
objetivo de este libro no es programar en el software, sino más bien utilizar los
objetos que existen por defecto para que sean un soporte al momento de realizar
un análisis estadístico (numérico y/o gráfico) de datos. MATLAB funciona
interactuando directamente con el usuario a través de comandos, los más básicos
para el manejo cotidiano del software son:
 clear  Borrará la lista de variables con las que se haya estado
trabajando sin que el usuario pueda dejar de visualizarlos
 clc  Limpiará por completo la pantalla
 exit  Saldrá del programa
 format long  Mostrará los números en formato largo (15 decimales)
 format short  Mostrará los números en formato corto (4 decimales),
este formato utiliza el software por defecto
 format rat  Muestra los números como fraciones
 format bank  Muestra los números como cantidades de dinero con 22
decimales
 format short e  Muestra los números en notación científica

51
 who  Muestra las variables que se están utilizando
 pwd  Muestra el directorio del computador donde se está almacenando
todo el trabajo realizado
 date  Muestra la fecha
 clock  Muestra la hora

3.2. El entorno de MATLAB


El entorno de MATLAB, tiene la apariencia que se muestra en la figura 2.1, en el
cual se muestran tres ventanas que son las principales “Commnad Window”,
“Workspace” y “Command History”. En realidad existen otras ventanas que
son muy importantes y de una gran utilidad, sin embargo no se hablará de ellas ya
que lo único que nos interesa en este software es conocer y utilizar correctamente
los comandos necesarios para los diversos análisis de datos que se abordará en los
capítulos siguientes, para lo cual es necesario únicamente utilizar las ventanas
que se mencionó.
Figura 3.1

52
(1) La ventana “Comand Window”, que es la ventana donde el usuario
puede interactuar con el programa, es decir se escriben los comandos
y además se muestran los diferentes resultados, a excepción de los
gráficos, puesto que estos aparecen en una ventana individual, en la
cual se los puede editar.
Es importante conocer que al escribir una instrucción en esta ventana,
basta con aplastar la tecla “Enter”, para que dicha instrucción se
ejecute o corra, sin embargo si quisiéramos que la instrucción se
ejecute internamente pero no se muestre en la pantalla, antes de
aplastar “Enter” debemos escribir la simbología punto y coma ( ; )
seguido de la instrucción. Por ejemplo tal vez si generamos un vector
con mil o más números para luego sacar su media, resultará fastidioso
que todos esos números se muestren, ya que lo que verdaderamente
nos interesa es su valor promedio, y por ello tapamos el vector con el
símbolo “;” y no hacemos lo mismo con el comando que mostrará la
media

>> x = 0:0.5:500;
>> mean(x)

ans =
250

(2) En la ventana “Workspace”, se guardarán todas las variables que


se introduzcan, así como los diferentes resultados
(3) En la ventana “Comand History”, se guardarán todos los
comandos que se hayan utilizado, incluso especificados según la fecha
de utilización
La ventana 1 “Command Window”, es la más importante de todas, y es la que se
utilizará en el presente texto, puesto que desde esta ventana podremos introducir
la información que tengamos disponible, visualizar los resultados deseados,
obtener ayuda acerca del funcionamiento de algún objeto, etc.

53
Cuando queremos hacer algún comentario acerca de lo que estamos haciendo, se
utiliza el símbolo de porcentaje “%”, y a continuación se escribe dicho comentario
con color verde, caso contrario el software producirá un error ya que lo
interpretará como un objeto y no como un comentario

>> x = 0:0.5:500; % al poner “;” no se visualiza el resultado


>> mean(x) % Calcula la media del vector x

ans =
250 % Respuesta de la operación

Es importante recalcar que aunque no lo haremos en el presente texto, dentro de


MATLAB, podemos realizar programación para desarrollar modelos, funciones o
incluso crear objetos que nos ayuden a resolver ciertas necesidades, esto se lo
puede hacer en la ventana de “Scripts”. El uso de esta ventana es una herramienta
potente de este software, puesto que al enlazar los objetos existentes o creados por
el usuario, construimos modelos, y para ejecutarlos basta llamarlos desde el
Comand Window, y como ya habíamos dicho los resultados se mostrarán en esta
misma ventana.

3.3. Los Comandos en MATLAB


El software MATLAB, posee comandos que son útiles para resolver muchos
problemas que se pueden suscitar en el campo de la ingeniería, principalmente
problemas matemáticos, de simulación y por supuesto dentro de ellos problemas
estadísticos, y aunque este no es un software estadístico, posee muchos objetos
que nos ayudan a realizar cálculos en este tópico.
Para visualizar los distintos tópicos o campos en los que el software tiene
comandos especializados, simplemente escribimos la palabra help en la ventana
de comandos y después de ejecutarla (únicamente ENTER), se despliega en la
misma pantalla todos los tópicos en los que MATLAB posee comandos. Son más
de 400 tópicos o áreas en los que el software puede contribuir, por cuestiones de
espacio a continuación solo se muestran un poco de ellos.

54
>> help
HELP topics:

sldo\sldoguis - (No table of contents file)


sloptim\sloptim - (No table of contents file)
sloptim\sloptguis - (No table of contents file)
sloptim\sloptobsolete - (No table of contents file)
slestim\slestguis - (No table of contents file)
slestim\slestim - (No table of contents file)
slestim\slestmex - Simulink Design Optimization Estimation S-Function MEX-files.
slestim\slestutil - (No table of contents file)
sldo\sldodemos - Simulink Design Optimization Demos.
sldodemos\optim - (No table of contents file)
sldodemos\estim - (No table of contents file)
sldo\examples - (No table of contents file)
sldv\sldv - Simulink Design Verifier
sldv\sldvdemos - (No table of contents file)
slvnv\slvnvdemos - (No table of contents file)
slvnv\rmidemos - (No table of contents file)
slvnv\simcovdemos - (No table of contents file)
iodata\iomap - (No table of contents file)
simulink\upgradeadvisor - (No table of contents file)
stats\stats - Statistics Toolbox
stats\classreg - (No table of contents file)
stats\statsdemos - Statistics Toolbox --- Demos
stm\stm - Simulation and Test Manager
symbolic\symbolic - Symbolic Math Toolbox
symbolic\symbolicdemos - (No table of contents file)
systemtest\systemtest - SystemTest
systemtest\systemtestdemos - SystemTest demonstrations and examples.
intelhost\tfl - (No table of contents file)
foundation\utils - (No table of contents file)

Sin lugar a duda los comandos que utilizaremos con mayor frecuencia en este texto
son los que pertenecen al tópico “stats”. Para conocer cuáles son los comandos
dentro de este o cualquier otro tópico, debemos ejecutar el comando help seguido
del nombre del tópico, para nuestro caso por ejemplo al interesarnos conocer los
comandos existentes en el tópico “stats” debemos escribir el comando “help
stats” y se desplegará la lista de comandos existentes en distintos campos de la
estadística

55
>> help stats
Statistics Toolbox
Version 8.2 (R2013a) 13-Feb-2013

Distributions.
Parameter estimation.
betafit - Beta parameter estimation.
binofit - Binomial parameter estimation.
dfittool - Distribution fitting tool.
evfit - Extreme value parameter estimation.
expfit - Exponential parameter estimation.
fitdist - Distribution fitting.
gamfit - Gamma parameter estimation.
gevfit - Generalized extreme value parameter estimation.
gmdistribution - Gaussian mixture model estimation.
gpfit - Generalized Pareto parameter estimation.
lognfit - Lognormal parameter estimation.
makedist - Make probability distribution.
mle - Maximum likelihood estimation (MLE).
mlecov - Asymptotic covariance matrix of MLE.
nbinfit - Negative binomial parameter estimation.
normfit - Normal parameter estimation.
paretotails - Empirical cdf with generalized Pareto tails.
poissfit - Poisson parameter estimation.
raylfit - Rayleigh parameter estimation.
unifit - Uniform parameter estimation.
wblfit - Weibull parameter estimation.

Probability density functions (pdf).


betapdf - Beta density.
binopdf - Binomial density.
chi2pdf - Chi square density.
evpdf - Extreme value density.
exppdf - Exponential density.
fpdf - F density.
gampdf - Gamma density.
geopdf - Geometric density.
gevpdf - Generalized extreme value density.
gppdf - Generalized Pareto density.
hygepdf - Hypergeometric density.
lognpdf - Lognormal density.
mnpdf - Multinomial probability density function.
mvnpdf - Multivariate normal density.
mvtpdf - Multivariate t density.
nbinpdf - Negative binomial density.
ncfpdf - Noncentral F density.
nctpdf - Noncentral t density.
ncx2pdf - Noncentral Chi-square density.
normpdf - Normal (Gaussian) density.
pdf - Density function for a specified distribution.
poisspdf - Poisson density.
raylpdf - Rayleigh density.
tpdf - T density.
unidpdf
56
- Discrete uniform density.
unifpdf - Uniform density.
wblpdf - Weibull density.
Por cuestiones de espacio solo se muestran los comandos existentes en el campo
de estimación de parámetros, y funciones de densidad de probabilidad, sin
embargo el software posee un sin número de comandos para otros campos de la
estadística tales como:
Distribuciones acumuladas de probabilidad
Valores críticos de las distribuciones de probabilidad
Generación de números aleatorios
Estadísticos (en general)
Estadísticos Descriptivos
Análisis de Varianza
Regresión Lineal
Regresión no lineal
Gráficas de regresión
Diseño de experimentos
Procesos de control estadístico de calidad
Análisis de Clúster
Técnicas de reducción de la dimensión
Gráficos estadísticos
Métodos Multivariados
Árboles de decisión
Pruebas de hipótesis
Funciones no paramétricas
Procesos de Markov
Etc…
Note que hasta ahora no conocemos como funciona un comando en particular, es
decir no conocemos cuáles son los argumentos necesarios ni los resultados que
este producirá. Para conocer específicamente el comando solo tenemos que
ejecutar help, seguido del comando, e inmediatamente se podrá visualizar la ayuda
disponible para dicho objeto, y en la gran mayoría de casos inclusive un
documento de ayuda donde no solo explica la forma de usar el comando, sino que

57
además también se puede apreciar las definiciones matemáticas estadísticas de la
función.
En MATLAB para separar los argumentos de un comando utilizamos el símbolo
de coma “,”.
Por ejemplo, dentro del campo de las funciones de distribución de probabilidad3,
encontramos el comando “normpdf”, el cual nos ayuda a estudiar la distribución
de probabilidad de una variable aleatoria normal o también llamad Gaussiana.
Para saber cómo funciona este comando entonces ejecutaremos “help normpdf”

>> help normpdf


normpdf Normal probability density function (pdf).
Y = normpdf(X,MU,SIGMA) returns the pdf of the normal distribution with
mean MU and standard deviation SIGMA, evaluated at the values in X.
The size of Y is the common size of the input arguments. A scalar
input functions as a constant matrix of the same size as the other
inputs.

Default values for MU and SIGMA are 0 and 1 respectively.

See also normcdf, normfit, norminv, normlike, normrnd, normstat.

Reference page in Help browser


doc normpdf

Como podemos apreciar la ayuda nos dice que este comando calculará la función
de densidad de probabilidad de un punto en una distribución normal con media
MU y desviación estándar SIGMA, para lo cual los argumentos necesarios son: el
valor o valores de los puntos que se desea calcular sus respectivas probabilidades,
el valor de MU y el de SIGMA, pero que cuando no se ingrese los valores de MU y
SIGMA, por defecto el software ingresará 0 y 1 respectivamente en estos
argumentos, además nos muestra un documento donde se explica la función
normal “doc normpdf”, así como una lista de otros comandos referentes a la
función de probabilidad normal.

3
Este tema se lo aborda con mayor amplitud en …….

58
Supongamos entonces que queremos conocer la densidad de probabilidad que
tiene el punto 63, en una variable que sigue una distribución normal con media
MU = 54 y desviación estándar SIGMA = 16

>> normpdf(63,54,16)

ans =

0.0213

3.4. Ingresando Información en MATLAB


3.4.1. Variables
Para asignar algún objeto a una variable, los hacemos mediante el símbolo de
igualdad, y a continuación con un ENTER, se guardará el objeto en la variable
asignada y además se mostrará en la misma pantalla. Por ejemplo si queremos
asignar el número 7 a la variable “a”

>> a = 7

a=

Para ingresar un objeto no numérico como por ejemplo el nombre de una persona
debemos escribirlos dentro de los caracteres de comillas simples ‘ ’.

>> b = ‘Pablo’

b=

Pablo

Al ejecutar objetos en las variables asignadas, estos automáticamente se guardan


dentro de la memoria del computador, de tal forma que si en adelante se desea
ejecutar alguna operación entre ellos simplemente se los vuelve a llamar y
enlazarlos mediante el operador correspondiente. Por ejemplo realizamos una
operación muy sencilla que consiste en asignar a 2 variables (“x” e “y”) 2 números
diferentes (3 y 4) y luego almacenar su suma (7) en una nueva variable R:

59
>> x = 3
x=
3

>> y = 4
y=
4

>> R = x + y
R=
7

Note sin embargo que lo que verdaderamente nos interesa visualizar es el


resultado final de la suma, y no es tan importante observar los sumandos, ya que
esto parece repetitivo e incluso resulta incómodo. La forma para que no se
visualicen estos números pero que si se guarden en la memoria interna para luego
realizar la operación es escribiendo el símbolo de punto y coma “;” después de
escribir la variable

>> x = 3;
>> y = 4;
>> R = x + y
R=
7

Note que se muestran los valores únicamente de la variable R, que es la que nos
interesa visualizar, y ya no se muestran los valores de los sumandos, pero si se
guardan dentro de la memoria.
3.4.2.Vectores
Existen diversas formas de ingresar un vector en MATLAB, pero las más comunes
son las que se presentan a continuación:
Generando un vector cuyos elementos son una secuencia numérica
aritmética. Para esto tan solo asignamos a una variable tres números
separados por el símbolo de dos puntos “:”, el primero es el número con el
que empieza la secuencia; el segundo es el número que va a indicar el
patrón que se va a ir sumando o restando progresivamente, y el tercero es
el número con el cual se termina la secuencia. Por ejemplo supongamos

60
que vamos genera un vector cuyos componentes son la secuencia de
números que empiezan en 20 y terminan en -20, pero van decreciendo de
5 en 5.

>> x = 20:-5:-20

x=

20 15 10 5 0 -5 -10 -15 -20

Cuando no existe el número intermedio, por defecto el software genera la


serie con saltos de uno en uno entre los dos límites que se declaren, así por
ejemplo si quisiéramos una serie de números del -5 al 5, en saltos de uno,
no será necesario declarar este salto, sino tan solo los límites de la serie:

>> x = -5:5

x=

-5 -4 -3 -2 -1 0 1 2 3 4 5

Creando directamente el vector, esto es escribiendo los elementos de dicho


vector dentro de corchetes, separados por un espacio o por una coma
(cualquiera de las dos opciones es válida).

>> x = [7,3,5,4,6,1]

x=

7 3 5 4 6 1

>> x = [7 3 5 4 6 1]

x=

7 3 5 4 6 1

Para insertar uno o más elementos adicionales al vector debemos volver a


declarar el nombre del vector y colocar entre corchetes nuevamente el

61
vector seguido del o los elementos que quisiéramos agregar, por ejemplo si
al vector x anterior queremos añadir los elementos 2 y 8, escribimos:

>> x = [x,2,8]

x=

7 3 5 4 6 1 2 8

Si lo que queremos es encontrar un elemento del vector, que está ocupando


cierta posición específica, lo que haremos es escribir el nombre de un
vector seguido de paréntesis dentro de los cuales escribiremos el índice de
la posición, por ejemplo en nuestro vector si quisiéramos encontrar cuál es
el elemento que ocupa la tercera posición:

>> x(3)

ans =

Si lo que quisiéramos no es visualizar el tercer elemento sino eliminarlo


escribimos:

>> x(3) = [ ]

x=

7 3 4 6 1 2 8

Para visualizar el vector como columna, únicamente separamos los


elementos con ; (punto y coma)

62
>> x = [7;3;5;4;6;1]

x=

7
3
5
4
6
1

Para ingresar en vector de caracteres, lo hacemos poniendo cada caracter


entre comillas simples, y en lugar de encerrar la información entre
corchetes lo hacemos entre llaves. Por ejemplo ingresemos un vector de
nombres:

>> n = {'Pablo', 'Isaac', 'Anita', 'Javier'}

n=

'Pablo' 'Isaac' 'Anita' 'Javier'

3.4.3.Operaciones Básicas con Vectores


Lo que mostraremos a continuación es una lista de comandos, mediante los cuales
se pueden realizar operaciones entre los elementos que contiene un vector y entre
vectores
 length(x)  Devuelve el número de datos del vector x
 max(x)  Devuelve el máximo valor existente en el vector x
 min(x)  Devuelve el mínimo valor existente en el vector x
 [t,p] = max(x)  Devuelve el máximo valor existente y su posición
 [t,p] = min(x)  Devuelve el mínimo valor existente y su posición
 ismember(valor,x)  Determina si el valor escrito pertenece al vector x, el
resultado será 1 si la respuesta es verdadera o 0 si es falsa
 sum(x)  Calcula la suma de los elementos del vector x
 cumsum(x)  Calcula la suma acumulada de los elementos del vector x
 prod(x)  Calcula el producto de los elementos del vector x

63
 cumprod(x)  Calcula el producto acumulado de los elementos del vector
x
 sqrt(x)  Calcula la raíz cuadrada de cada uno de los elementos del vector
x
 sin(x)  Calcula el seno de cada uno de los elementos del vector x
 cos(x)  Calcula el coseno de cada uno de los elementos del vector x
 tan(x)  Calcula la tangente de cada uno de los elementos del vector x
 mean(x)  Calcula la media de los elementos del vector x
 median(x)  Calcula la mediana de los elementos del vector x
 var(x)  Calcula la varianza de los elementos del vector x
 std(x)  Calcula la desviación estándar de los elementos del vector x
 round(x)  Redondea los elementos del vector x al entero más próximo
 roundn(x,-n)  Redondea los elementos del vector x a tantas cifras
decimales como se indica en n
 sort(x)  Ordena los elementos del vector x en forma ascendente
 dsort(x)  Ordena los elementos del vector x en forma descendente
 x’  Calcula la transpuesta de un vector
 k*x  Multiplica cada uno de los elementos del vector x por una constante
k
 x.^n  Calcula la n – ésima potencia de cada uno de los elemento del
vector x
Es muy importante tener en cuenta el uso del punto en este tipo de
operaciones, ya que si no se lo pusiera el software entendería que se quiere
sacar la n – ésima potencia de la matriz, la cual es una operación que no
existe
 x + y  Suma los elementos del vector x con sus correspondientes del
vector y, siempre que estos tengan la misma dimensión
 x – y  Resta los elementos del vector y de sus correspondientes del vector
x, siempre y cuando estos tengan la misma dimensión

64
 x. * y  Multiplica los elementos del vector x, con los correspondientes
elementos del vector y, siempre y cuando estos tengan la misma dimensión
 x./y  Divide los elementos del vector x para sus correspondientes
elementos del vector y

3.4.4. Matrices
En realidad todo la información que se ingresa en MATLAB, el software lo
interpreta como una matriz, de hecho cuando ingresamos un vector en realidad
estamos ingresando una matriz de dimensión “1 x p”, o “p x 1” según sea el caso, e
inclusive si ingresamos un solo número o carácter, lo que estamos haciendo es
ingresando una matriz de dimensión “1 x 1”
Las formas más comunes para ingresar matrices se presentan a continuación:
Directamente dentro de corchetes, separando el número de filas mediante
el símbolo punto y coma, y el número de elementos dentro de cada fila con
el símbolo de coma

>> X = [2,3,4;7,3,1]

X=

2 3 4
7 3 1

Utilizando ciertos comandos para formar matrices especiales:


Con el comando “ones( )”, en cuyo argumento se escriben el número de
filas seguido del número de columnas, y que produce una matriz de unos
con tantas filas y columnas como se hayan indicado

>> X = ones(2,3)

X=

1 1 1
1 1 1

65
Con el comando “zeros( )” en cuyo argumento se escriben el número de
filas seguido del número de columnas, y que produce una matriz de unos
con tantas filas y columnas como se hayan indicado

>> X = zeros(2,3)

X=

0 0 0
0 0 0

Con el comando “eye( )” el cual crea una matriz cuadrada identidad cuya
dimensión igual a la que se indica en su argumento

>> X = eye(3)

X=

1 0 0
0 1 0
0 0 1

Con el comando “magic( )”, el cual crea una matriz cuadrada cuya
dimensión se la indica en el argumento del comando, y cuyos elementos
están formados por los números que empiezan desde el 1 hasta el cuadrado
del argumento ingresado distribuidos de forma aleatoria

>> X = magic(4)

X=

16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1

Con el comando “rand( )”, en cuyo argumento se debe escribir el número


de filas seguido por el número de columnas, y forma una matriz que tiene
como elementos números aleatorios

66
X = rand(3,5)

X=

0.8147 0.9134 0.2785 0.9649 0.9572


0.9058 0.6324 0.5469 0.1576 0.4854
0.1270 0.0975 0.9575 0.9706 0.8003

3.4.5. Operaciones con matrices


Los comandos que se analizaron para realizar operaciones con vectores sirven de
la misma forma para el caso de las matrices, sin embargo existen unos pocos
comandos más que veremos a continuación, los cuales por su naturaleza sirven
solo para el caso de matrices:
 size(X)  Muestra la dimensión (filas y columnas) de una matriz X
 trace(X)  Calcula la traza de la matriz X
 det(X)  Calcula el determinante de la matriz X
 inv(X)  Calcula la matriz inversa de X
 diag(X)  Calcula el vector con la diagonal de la matriz X
 tril(X)  calcula la matriz triangular inferior de X
 triu(X)  calcula la matriz triangular superior de X
Cuando se desee editar una matriz, la manera más sencilla de hacerlo es dando
doble click sobre el nombre de dicha matriz, la cual aparece en la ventana
Workspace, e inmediatamente aparecerá una especie de hoja electrónica a través
de la cual se puede editar la información

3.4.6. Importando una matriz de datos desde otro


tipo de archivo
Importando desde un archivo de texto .txt o de Excel .xlsx
Los tipos de archivos que son más comunes para importar a MATLAB son los
archivos de texto .txt, y las hojas electrónicas de Excel .xlsx. Existen comandos que
sirven para realizar esta tarea, sin embargo es mucho más sencillo utilizar la
opción de importar texto que se encuentra en la barra de tareas del software.

67
Figura 3.2

A partir de esta opción podemos importar textos tanto con formato .txt como con
formato .xlsx. Por ejemplo vamos a importar los datos de la tabla 1.1 referentes a
los 10 niños a los cuales se les midió, su peso, talla, sexo y tipo de parto que se
registraron al nacer.
El primer paso será seleccionar el documento desde el directorio en el que se
encuentra dentro de su computador. A continuación aparecerá un cuadro de
diálogo donde se muestra además la matriz de datos a importarse
Figura 3.3

Al dar click sobre el botón verde los datos se importarán al workspace del software
variable por variable

68
Figura 3.4

Si usted desea observar una variable en especial tan solo debe escribir el nombre
de dicha variable en el comand window, y aparecerá el vector columna con los
datos de la variable en mención:

>> Sexo

Sexo =

'hombre'
'hombre'
'mujer'
'hombre'
'mujer'
'mujer'
'mujer'
'mujer'
'hombre'
'hombre'

Si desea observar toda la matriz de datos, simplemente escribimos una matriz


cuyos elementos son los nombres de las variables que se encuentran en el
Workspace:

69
>> X = [Nio,Peso,Talla]

X=

1.0000 3.6000 46.5000


2.0000 3.2000 44.1000
3.0000 2.8000 48.1000
4.0000 3.6000 46.4000
5.0000 2.7000 41.1000
6.0000 2.8000 41.8000
7.0000 2.7000 41.0000
8.0000 3.0000 42.3000
9.0000 3.1000 42.5000
10.0000 3.4000 43.1000

El defecto al ocupar esta opción es que solo se puede mostrar en una misma matriz
variables del mismo tipo, es decir no se podría mostrar las variables cuantitativas
y cualitativas a la vez

Además usted tiene la siguiente opcion para importar datos desde excel:
 Desde Excel podemos importar los datos utilizando el comando “xlsread(
)”, cuyo argumento es el nombre del archivo, pero siempre debemos cuidar
que dicho archivo se encuentre en la carpeta del directorio en el cual está
trabajando el software.
Para saber cuál es el directorio, este se lo puede observar bajo la barra de
herramientas en la parte superior izquierda o a su vez mediante el comando pwd

>> pwd

ans =

C:\Program Files\MATLAB\R2013a\bin

Al visualizar los datos usted notará que solo se ha importado las variables de tipo
cuantitativas
Para importar una matriz de datos desde R a MATLAB, se recomienda copiar dicha
matriz a un archivo de testo o de Excel y a continuación el procedimiento que ya
se indicó

70
Importando desde un archivo de R
En realidad no existe forma de importar directamente desde MATLAB un archivo
o una base de datos creado en R a este software, sin embargo desde R se puede
exportar datos al software MATLAB, con lo cual al final haremos lo mismo.
El requisito necesario es tener activado el paquete “R.matlab”, ya que
aprovecharemos el comando “writeMat( )” que es parte de este paquete. El
procedimiento a seguir se detalla a continuación:
En R, creamos una variable con los datos que deseamos exportar
datos <- matriz de datos
A continuación pegamos la variable creada en una directorio, mediante el
comando “paste( )”, en cuyo primer argumento escribimos el nombre del
directorio donde se pegará el archivo, el cual puede ser un directorio
temporal o ficticio, esto se lo consigue con el comando “tempfile( )”;
seguido de una coma, en el segundo argumento escribimos entre comillas
dobles la extensión del archivo, que en nuestro caso será “.mat”
filename <- paste(tempfile(), ".mat")
Utilizamos el comando “writeMat( )”, en cuyo primer argumento
escribimos el nombre de la variable asignada al directorio en que se pegó
la base de datos (realizado en el paso 2), y en el segundo argumento
escribimos un nombre asignado a los datos que queremos exportar
writeMat(filename, datos=datos)
Finalmente imprimimos el directorio (puede ser temporal), creado en el
paso 2, el cual lo tenemos que pegar en cualquier buscador de alguna
carpeta en nuestro computador, y automáticamente se abrirá MATLAB
con el archivo exportado.
Hay que tener muy en cuenta que el directorio que arroja R, tiene
separadores de raya oblicua doble, y por lo general las computadoras
admiten estos separadores pero en simples, por lo que antes de buscar este
directorio debemos borrar una raya oblicua:
Por ejemplo:
R dará esta dirección
71
“C:\\Users \\AppData\\Local\\Temp\\RtmpwpmriB\\file11401f1839f7 .mat”

A lo cual antes de buscarla deberé borrar una de las líneas:


“C:\Users\AppDat\Local\Temp\RtmpwpmriB\file11401f1839f7 .mat”

Una vez que estén los datos en MATLAB, el usuario solo tndrá que mandar a
llamar dicha información. Para explicar de mejor manera lo dicho se plantea el
siguiente ejemplo

Ejemplo 3.1.
En R Studio, existe una base llamada “BOD”, la cual contiene información de 2
variables: “time” y “demand” medidas en 6 individuos. Exporte a MATLAB esta
matriz de datos

Solución:
Escribimos el siguiente código desde R:

> library(R.matlab) # Activamos la librería R.matlab


> datos <- BOD # Asignamos a la variable datos la base
> filename <- paste(tempfile(), ".mat") # Pegamos la base en un archivo temporal
> writeMat(filename, datos=datos)
> filename # Imprimimos el directorio creado
[1] "C:\\Users\\Pablo\\AppData\\Local\\Temp\\RtmpwpmriB\\file11401e826214 .mat"

A continuación pegamos este directorio desde cualquier buscador de carpetas en


Windows, sin olvidar borrar la línea oblicua:

72
Automáticamente se abrirá el siguiente cuadro de diálogo:

Al aplastar “Finish”, desde MATLAB, es necesario tan solo mandar a llamar con el
nombre a nuestra matriz (en nuestro caso el nombre es “datos”):

>> datos

datos =

Time: [6x1 double]


demand: [6x1 double]

Como puede notar aparecen las dos variables que son parte de nuestra matriz de
datos exportada. Si queremos visualizar alguna de ellas, por ejemplo demand:

>> datos.demand

ans =

8.3000
10.3000
19.0000
16.0000
15.6000
19.8000

O si queremos visualizar la matriz de datos completa:

73
>> datos = [datos.Time,datos.demand]

datos =

1.0000 8.3000
2.0000 10.3000
3.0000 19.0000
4.0000 16.0000
5.0000 15.6000
7.0000 19.8000

74
4. CAPÍTULO 4:
ANÁLISIS DE FRECUENCIAS Y
REPRESENTACIÓN GRÁFICA DE DATOS
4.1. Variables y Datos
Recordemos que la estadística descriptiva se encarga de describir (ya sea gráfica o
numéricamente) los datos obtenidos, de tal forma que se puedan resumir y
observar con la mayor claridad y exactitud posible. Por tanto la materia prima, o
la razón de ser de la estadística descriptiva son los datos, sin ellos sería imposible
realizar cualquier tipo de estudio estadístico, es entonces esencial conocer más
acerca de ellos:

Se puede definir a un dato como la información recolectada o medida, acerca de


una propiedad que tiene un sujeto u objeto, por medio de algún plan de
muestreo. Por ejemplo nos podríamos interesar en conocer el peso, la estatura, el
sexo y la nacionalidad (propiedades) de un grupo de 30 estudiantes de una
Universidad (sujetos); en este caso los sujetos son considerados las unidades de
análisis sobre los cuales vamos a medir las propiedades ya descritas, y por medio
de aquello recopilar la información.
En el ejemplo dado, las propiedades (peso, estatura, sexo y nacionalidad) en
realidad son las variables de interés en el estudio estadístico y los datos vienen
a ser los distintos valores que pueden tomar estas variables, es así que los datos se
pueden clasificar de acuerdo al tipo de variable de la que fueron tomados:

4.1.1. Clasificación de los datos


Los datos, de acuerdo a la variable estadística de la cual provienen pueden ser de
tipo cuantitativo o cualitativo
Datos de tipo cuantitativo.- Son valores numéricos medidos sobre las
unidades de análisis, por ejemplo el peso, la estatura, la edad, el caudal,
temperatura, etc… Los datos cuantitativos pueden ser de tipo discreto o continuo

75
 Datos de tipo discretos.- Son valores numéricos que pueden contarse
en el campo de los números enteros. Por ejemplo la edad en años puede
ser 0, 1, 2 , 3, 10, 50, 60, etc…
 Datos de tipo continuo.- Son aquellos cuyos valores se encuentran
dentro de una escala continua o de un intervalo. Por ejemplo la estatura
medida en centímetros, el peso medido en gramos, etc…
Además, a los datos cuantitativos se los puede clasificar de acuerdo al nivel de
medición que presenten, en este sentido entonces pueden ser de intervalo o de
razón:
 Se denominan datos de intervalo cuando dentro de la escala en que se
están recogiendo los datos, el número cero no representa la ausencia de la
propiedad que se está midiendo. Por ejemplo si se está midiendo la
temperatura de una ciudad en grados Fahrenheit, cero grados Fahrenheit
(0ºF), no representa la ausencia de temperatura, sino más bien es un valor
de referencia para saber cuan frio o caliente se encuentra la ciudad
 Se denominan datos de razón cuando dentro de la escala en que se están
recogiendo los datos, el número cero si representa la ausencia de la
propiedad que se está midiendo. Por ejemplo, si estamos midiendo la
distancia que existe entre dos puntos determinados en centímetros, cero
centímetros (0 cm), representa la ausencia de distancia entre estos dos
puntos y en este caso lo que está ocurriendo es que los puntos se
encuentran en la misma posición. Otro ejemplo podría ser los datos que se
recogen del gasto diario en dólares que una persona hace en su vida
cotidiana, $0 representa que en ese día la persona no gastó nada, es decir
representa la ausencia de gastos

Datos de tipo cualitativo.- Son valores que no representan una cantidad sino
más bien una cualidad o un atributo de las unidades de análisis, por ejemplo la
información recolectada en las variables sexo, nacionalidad, etc… Estos datos se
pueden clasificar de acuerdo a sus categorías en nominales u ordinales:

76
 Los datos nominales son aquellos donde las categorías posibles de las
variables son nombres o etiquetas usados para diferenciar un individuo de
otro, no poseen ningún tipo de jerarquía ni ordenación. Por ejemplo los
datos respecto al color de ojos de un grupo de estudiantes universitarios,
pueden tener categorías como “negros”, “café”, “verdes”, “celestes”; note
que las categorías no representan un orden alguno sino tan solo un
nombre, una identificación.
 Los datos ordinales son aquellos cuyas categorías posibles representan
un orden de jerarquía. Por ejemplo los datos respecto a las calificaciones
obtenidas en las categorías de “Sobresaliente”, “Bueno”, “Regular” y
“Pésimo” muestran que aquellos estudiantes pertenecientes a la categoría
“Sobresaliente”, son los más destacados de la clase, mientras que los que
pertenecen a la categoría “Pésimo”, son aquellos con el menor rendimiento
académico

Es importante tener en cuenta que aunque en algunos casos se pueden asignar


números a los datos de una variable cualitativa (Por ejemplo en “sexo” se puede
asignar el número 0 para mujeres y el número 1 para hombres), esto no pasa de
ser una codificación, y no tiene ningún sentido o significado realizar algún tipo de
operación con estos números, por ejemplo al sacar la media me dará un número
comprendido entre 0 y 1 que carecerá de significado. Contrario a esto en las
variables de tipo cuantitativo (Por ejemplo estatura), es posible realizar
operaciones como por ejemplo encontrar una media aritmética.

Reconociendo el tipo de datos con ayuda del software


Tomemos como ejemplo la pequeña base de datos de la tabla 2.1 que tiene 3
variables (peso, talla y sexo), medido sobre 10 individuos. Recordemos que a esta
base de datos la habíamos llamado “Datos4”, por lo que este será el nombre con la
que la ingresaremos. Como nos damos cuenta los datos resultan de las

4
La manera en cómo se crea esta base de datos la analizamos ya en el capítulo 2

77
observaciones y mediciones que se hacen a estos 10 individuos en las distintas 3
variables. Si por ejemplo queremos saber qué tipo de datos son los que se
encuentran en la variable “peso”, el comando “mode( )”, del software R nos
ayuda:

> datos
peso talla sexo
1 3.6 46.5 hombre
2 3.2 44.1 hombre
3 2.8 48.1 mujer
4 3.6 46.4 hombre
5 2.7 41.1 mujer
6 2.8 41.8 mujer
7 2.7 41.0 mujer
8 3.0 42.3 mujer
9 3.1 42.5 hombre
10 3.4 43.1 hombre

y <- datos$peso # filtramos la variable peso en una nueva "y"


[1] 3.6 3.2 2.8 3.6 2.7 2.8 2.7 3.0 3.1 3.4

mode(y) # Con el comando "mode" determinamos que tipo de datos tiene la variable filtrada
[1] "numeric"

Con lo que podemos concluir que los datos referidos a la variable “peso” son de
tipo numérico.
Probemos ahora a ver qué tipo de datos son los que se encuentran en la variable
“sexo”:

y <- datos$sexo
[1] hombre hombre mujer hombre mujer mujer mujer mujer hombre hombre
Levels: hombre mujer

mode(y)
[1] "character"

Podemos así observar que la variable “sexo”, contiene datos de tipo cualitativo
(character), pero además cuando se filtra la variable nos permite observar las
categorías que tiene la variable (hombre, mujer)

78
4.2. Análisis Univariado de Frecuencias
Cuando manejamos datos de una variable y queremos resumirlos, una manera de
hacerlo es describir con qué frecuencia estos ocurren. Se trata de determinar cuan
repetitivos (en valor absoluto y porcentaje) son los distintos valores o categorías
que toma dicha variable, tal vez este análisis sea sencillo e incluso innecesario
mientras tengamos poca cantidad de información a analizar, pero mientras más
grande sea el conjunto de datos con el que estemos trabajando más importante
será tener un resumen de esta información, la cual nos muestre cuáles son los
datos que están apareciendo en el conjunto y con qué frecuencia lo hacen. Para
realizar una tabla donde se pueda observar un análisis de frecuencia de la
información es necesario tener en cuenta los siguientes conceptos preliminares:
Frecuencia absoluta.- En un conjunto de N datos, se denomina
frecuencia absoluta ni del i-ésimo dato, al número total de veces que se
repite dicho dato. Si existen un total de h datos distintos en todo el
conjunto, se cumple:

∑ 𝑛𝑖 = 𝑁
𝑖=1

Frecuencia Absoluta Acumulada.- Se denomina frecuencia absoluta


acumulada Ni del i-ésimo dato, al número de observaciones menores o
iguales a dicho valor. Por lo que se verifica que:
N1 = n1, N2 = n1 + n2, … Ni = n1 + n2 +… + ni.
Frecuencia Relativa.- Se denomina frecuencia relativa fi del i-ésimo
dato a la proporción que representa su respectiva frecuencia absoluta
dentro de todo el conjunto de observaciones. Matemáticamente queda
definido como:
𝑛𝑖
𝑓𝑖 = ; 0 ≤ 𝑓𝑖 ≤ 1
𝑁
La sumatoria de todas las frecuencias relativas cubrirá el 100% de las
observaciones

79

∑ 𝑓𝑖 = 1
𝑖=1

Frecuencia Relativa Acumulada.- Se denomina frecuencia relativa


acumulada Fi del i- ésimo dato, a la proporción de la información que es
menor o igual a dicho dato. Por lo que se verifica que:
F1 = f1, F2 = f1 + f2 … Fi = F1 + F2 +…. + Fi
Se debe cumplir por tanto que la última frecuencia relativa acumulada
debe ser igual al 100%

4.2.1. Tablas de Frecuencias


Se trata de una tabla donde se describe la información recolectada mediante el
análisis de frecuencias. Consta de 5 columnas; en la 1º se colocan los datos
ordenados de menor a mayor sin repetición, en la 2º columna se escribe la
frecuencia absoluta de los datos, la 3º es para las frecuencias absolutas
acumuladas, la 4º para las frecuencias relativas y la 5º para las frecuencias
relativas acumuladas.

Frecuencia Frecuencia absoluta Frecuencia Frecuencia Relativa


Datos
absoluta acumulada Relativa Acumulada
xi ni Ni fi Fi
x1 n1 N1 = n 1 f1 = n1/N F1 = f 1
x2 n2 N2 = n1 + n2 f2 = n2/N F2 = f 1 + f 2
. . . . .
. . . . .
. . . . .
xh nh Nh = n1+n2+ … +nh = N fh = nh/N Fh = f1+f2+ … +fh = 1
TOTAL N

80
4.2.2.Análisis de frecuencias para datos simples o sin
agrupar
Cuando existen pocos datos, o por lo general cuando estos provienen de una
variable discreta, se detalla la frecuencia de cada uno. Ya que no existen muchos
datos distintos, la información no se amontona y es fácil resumir uno a uno estos
datos en una tabla de análisis de frecuencia.
Ejemplo 4.1.
En la base de datos de R, existe una matriz llamada “mtcars” (tal como se indicó
para visualizarla basta con escribir el nombre y mandar a correr), que reúne la
información referente a 32 tipos de automóviles de los cuales se miden 11
características, entre ellas se mide la variable <<Número de carburadores>>,
denominada “carb”. Filtrando esta variable halle las frecuencias absolutas y
relativas.
Solución:
R nos proporciona el comando table( ), para calcular las frecuencias
absolutas, mediante el cual podemos ver cuantos datos existen en la
variable, y la frecuencia de cada uno, así como también el comando
prop.table( ), con el cual calculamos las frecuencias relativas, además
podemos utilizar el comando cumsum( ) para calcular las frecuencias
absolutas acumuladas y relativas acumuladas

81
> x <- mtcars$carb
> x # variable Nº de carburadores
[1] 4 4 1 1 2 1 4 2 2 4 4 3 3 3 4 4 4 1 2 1 1 2 2 4 2 1 2 2 4 6 8 2
> fa<-table(x) # frecuencia absoluta de x
> fa
x
1 2 3 4 6 8
7 10 3 10 1 1
> fr<-prop.table(fa) # frecuencia relativa de x
> fr
x
1 2 3 4 6 8
0.21875 0.31250 0.09375 0.31250 0.03125 0.03125
> faa <- cumsum(fa) # frecuencia absoluta acumulada de x
> faa
1 2 3 4 6 8
7 17 20 30 31 32
> fra <- cumsum(fr) # frecuencia relativa acumulada de x
> fra
1 2 3 4 6 8
0.21875 0.53125 0.62500 0.93750 0.96875 1.00000

Podemos entonces observar que en los 32 automóviles existen 1, 2, 3, 4, 6


y hasta 8 carburadores, y que por ejemplo existen 7 autos con un
carburador, 10 con 2 carburadores, etc… Además para cada uno de los
datos se puede observar las frecuencias relativas. Ambas frecuencias se
puede comprobar cumplen con las propiedades descritas al inicio, así la
suma de todas las frecuencias absolutas es igual al número de datos que
tiene la variable (32), y la suma de las frecuencias relativas es igual a 1.

MATLAB posee el comando tabulate( ), con el cual podemos determinar


la frecuencia absoluta y relativa de un conjunto de datos, y el comando
cumsum( ), el cual nos ayudará a calcular las frecuencias absolutas y
relativas acumuladas:

82
>> x = [4, 4, 1, 1, 2, 1, 4, 2, 2, 4, 4, 3, 3, 3, 4, 4, 4, 1, 2, 1, 1, 2, 2, 4, 2, 1, 2, 2, 4, 6, 8, 2];
>> f = tabulate(x)
Value Count Percent
1 7 21.88%
2 10 31.25%
3 3 9.38%
4 10 31.25%
5 0 0.00%
6 1 3.13%
7 0 0.00%
8 1 3.13%

>> cumsum(f)
ans =
1.0000 7.0000 21.8750
3.0000 17.0000 53.1250
6.0000 20.0000 62.5000
10.0000 30.0000 93.7500
15.0000 30.0000 93.7500
21.0000 31.0000 96.8750
28.0000 31.0000 96.8750
36.0000 32.0000 100.0000

4.2.3.Gráficas para representar frecuencias de datos


simples:
Las gráficas más comunes que se utilizan para describir las frecuencias de datos
son: Gráfico de pastel y Gráfica de Barras. A continuación vamos a mostrar los
comandos respectivos tanto en R como en MATLAB para realizar estos gráficos
tomando como base los datos y los resultados del Ejemplo 4.1

Gráfica De Pastel
Se trata de un gráfico circular subdividido en tantas partes como el número de
datos distintos o categorías de la variable existan, donde cada subdivisión
representa la frecuencia absoluta o relativa que tienen estas categorías, dando al
final la suma de todo el pastel el número total de datos o el 100% de las
subdivisiones según corresponda
En R utilizamos el comando pie( )

83
> x <- mtcars$carb
> fa <- table(x)
> pie(fa, main = "Gráfica de pastel de las frecuencias absolutas fa", labels = c("1 carb.","2
carb.","3 carb.","4 carb.","6 carb.","8 carb."))

Gráfica 4.1. Salida En R De Un Diagrama De Pastel

Además podemos realizar el gráfico de pastel 3D mediante el comando pie3D( ),


para lo cual debemos previamente instalar y activar el paquete “plotrix”

> library("plotrix")
> pie3D(fa, main = "Gráfica de pastel de las frecuencias", labels = c("1 carb.","2 carb.","3
carb.","4 carb.","6 carb.","8 carb."))

Gráfica 4.2 Salida En R De Un Diagrama De Pastel en 3D

84
En MATLAB el comando también es pie( ). Note que en este software
dado que el resultado de tabulate( ) es una matriz, antes de utilizar el
comando debemos filtrar la 2º columna y a continuación dibujar el
diagrama de pastel

>> x = [4, 4, 1, 1, 2, 1, 4, 2, 2, 4, 4, 3, 3, 3, 4, 4, 4, 1, 2, 1, 1, 2, 2, 4, 2, 1, 2, 2, 4, 6, 8, 2];


>> f = tabulate(x);
>> fa = f(1:8,2)'

fa =
7 10 3 10 0 1 0 1
>> pie (fa)

85
Gráfica 4.3 Salida En MATLAB De Un Diagrama De Pastel

Gráfica de pastel de frecuencias


3% data1
3%
2 carb
22% 3 carb
4 carb
6 carb
8 carb

31%

31%

9%

Si el gráfico lo queremos hacer en 3D utilizamos la misma dinámica con el


comando pie3( )

>> x = [4, 4, 1, 1, 2, 1, 4, 2, 2, 4, 4, 3, 3, 3, 4, 4, 4, 1, 2, 1, 1, 2, 2, 4, 2, 1, 2, 2, 4, 6, 8, 2];


>> f = tabulate(x);
>> fa = f(1:8,2)'

fa =
7 10 3 10 0 1 0 1
>> pie3(fa)

86
Gráfica 4.4 Salida En MATLAB De Un Diagrama De Pastel en 3D

Gráfica de Pastel en 3D de las frecuencias

3%
3% 1 carb
31%
2 carb
22% 3 carb
4 carb
6 carb
8 carb

9%

31%

Es importante recalcar que la edición (título, etiquetas, etc...) de los gráficos en


MATLAB, se lo puede realizar desde la ventana de gráficos en forma manual con
todas las opciones que ahí se proporcionan.

Gráfica De Barras
Es una gráfica donde en el eje de las “x”, se ubican cada una de las distintas
categorías, o distintos datos que tiene una variable; para cada una de estas
categorías se levanta una barra sobre el eje de las “y”, tan alta como su respectiva
frecuencia absoluta o relativa:
En R el comando para graficar un diagrama de barras es barplot( ), cuyo
argumento principal es el vector con los datos. El siguiente comando
grafica un diagrama de barras incluyendo el título, aunque es importante
recordar que hay muchos más argumentos que se pueden modificar como
las etiquetas para los ejes, el color de las barras, el ancho de las barras, el
espacio entre barra y barra, etc…

87
x <- mtcars$carb
fa<-table(x)
barplot(fa, main = "Gráfica de barras de las frecuencias absolutas")

Gráfica 4.5 Salida en R de un Diagrama de barras

En MATLAB el comando es bar( ), que de igual forma el argumento


principal es el vector de datos de frecuencia, pudiendo editarse este gráfico
utilizando los demás argumentos para el comando, o directamente desde
la ventana de editior de gráficos en donde este aparece

>> x = [4, 4, 1, 1, 2, 1, 4, 2, 2, 4, 4, 3, 3, 3, 4, 4, 4, 1, 2, 1, 1, 2, 2, 4, 2, 1, 2, 2, 4, 6, 8, 2];


>> f = tabulate(x);
>> fa = f(1:8,2)';
>> bar(fa)

88
Gráfica 4.6 Salida en MATLAB de un diagrama de barras

10

0
1 2 3 4 5 6 7 8

Ejemplo 4.2.
En la base de datos de R existe una matriz de datos llamada <<chickwts>>, de las
siglas “Chicken Weights by Feed Type”, donde se miden dos variables: “Weight”
que es una variable numérica que nos proporciona el peso de 71 pollos; y “feed”
que es una variable categórica que proporciona el tipo de alimento suministrado a
estos animales. Después de filtrar la variable “feed”, halle una tabla de frecuencia
para resumir esta información, grafique la frecuencia absoluta en un diagrama de
barras y la frecuencia relativa en un diagrama de pastel
Solución:
En R:

89
> datos <- chickwts$feed
> datos
> x <- table(datos)
> y <- cumsum(x)
> z <- prop.table(x)
> t <- cumsum(z)
> s <- data.frame(x,y,z,t)
## Hasta aquí el data frame “s” muestra ya los resultados pero en una forma desordenada,
a continuación lo que haremos es únicamente ordenar en una tabla

> d <- s[,-1]


> m <- d[,-3]
> names(m)<-gsub("Freq","Frec_abs",names(m))
> names(m)<-gsub("y","Frec_abs_acum",names(m))
> names(m)<-gsub("Frec_abs.1","Frec_rel",names(m))
> names(m)<-gsub("t","Frec_rel_acum",names(m))
>m
Frec_abs Frec_abs_acum Frec_rel Frec_rel_acum
casein 12 12 0.1690141 0.1690141
horsebean 10 22 0.1408451 0.3098592
linseed 12 34 0.1690141 0.4788732
meatmeal 11 45 0.1549296 0.6338028
soybean 14 59 0.1971831 0.8309859
sunflower 12 71 0.1690141 1.0000000
> library(plotrix)
> barplot(x)
> pie3D(t,radius = 2,main="Gráfica de pastel para las frecuencias relativas")

Todos los comandos utilizados en este código han sido ya analizados, a excepción
de names( ), que lo que hace es arrojar los nombres de las variables que se
encuentran en un data.frame, para lo cual solo necesita como argumento el
nombre del data.frame.
De la misma forma, el comando gsub( ) puede resultar nuevo para el lector, éste
se encarga de cambiar los nombres a las columnas de un data.frame, para lo cual
los argumentos principales son el antiguo nombre, el nuevo nombre, y el comando
names( ), cuyo argumento debe ser el nombre de la matriz de datos que se desea
cambiar sus rótulos en las columnas

90
Gráfica 4.7 Gráfica de Barras en R para las frecuencias absolutas del ejercicio 4.2

Gráfica 4.8 Gráfica de Pastel en R para las frecuencias relativas del ejercicio 4.2

En MATLAB:
Lo que haremos en primer lugar es copiar la matriz de datos “chickwts” a un
documento de testo, para a partir de esto importar dicha matriz al software, tal

91
como ya se lo indicó en el capítulo 3. A continuación el código nos ayudará a
determinar el resultado para el ejemplo 4.2.

>> tabulate(feed) %Calcula la frecuencia relativa y acumulada


Value Count Percent
horsebean 10 14.08%
linseed 12 16.90%
soybean 14 19.72%
sunflower 12 16.90%
meatmeal 11 15.49%
casein 12 16.90%

>> x = tabulate(feed); % Asignamos la tabulación a una matriz


>> f.abs = [x{:,2}]; %Filtramos la 2º columna que en nuestro caso es la frecuencia absoluta
>> frec_abs_acm = cumsum(f.abs)’ % Esto nos permite calcular la frecuencia absoluta acumulada
frec_abs_acm =

10
22
36
48
59
71

>> f.rel = [x{:,3}]; %Filtramos la 3º columna que en nuestro caso es la frecuencia relativa
>> frec_rel_ac = cumsum(f.rel)' % Esto nos permite calcular la frecuencia relativa acumulada

frec_rel_ac =

14.0845
30.9859
50.7042
67.6056
83.0986
100.0000

>> bar(f.abs)

92
Gráfica 4.9: Gráfica de Barras en MATLAB para las frecuencias absolutas del ejercicio 4.2

Gráfica de barras de las frecuencias relativas


14

12

10

0
horsebean linseed soybean sunflower meatmeal casein

Gráfica 4.10 Gráfica de Pastel en MATLAB para las frecuencias relativas del ejercicio 4.2

Gráfica de pastel de las frecuencias relativas

17% horsebean
linseed
soybean
15%
sunflower
14% meatmeal
casein

17%
17%

20%

Diagrama de tallo y hojas


Este diagrama muestra los datos de una forma ordenada ascendente, donde en los
llamados “tallos”, se colocan los principales dígitos o cifras del dato, y en las

93
“hojas” los restantes. Este gráfico sirve cuando por lo menos se cuenta con dos
dígitos por dato, por ejemplo si tenemos el dato 47, el tallo sería el dígito 4 y la
hoja el dígito 7; o si por ejemplo tenemos el dato 325, el tallo sería 32 y la hoja 5.
Ejemplo 4.3.
En R existe una base de datos llamada “attitude”, en donde se encuentra la
variable “rating”, la cual tiene los siguientes datos: 43, 63, 71, 61, 81, 43, 58, 71,
72, 67, 64, 67, 69, 68, 77, 81, 74, 65, 65, 50, 50, 64, 53, 40, 63, 66, 78, 48, 85, 82.
Dibuje un Diagrama de Tallo y Hojas para resumir esta información.
Solución
En R tenemos el comando “stem( )”, el cual nos ayuda a graficar este diagrama,
cuyos argumentos más importantes son x en donde se debe indicar los datos de
los cuales deseo realizar el diagrama; y scale que debe indicar cuantos dígitos
deseamos tenga el tallo del diagrama, que para nuestro caso es 1

> stem(x = attitude$rating,scale = 1)

The decimal point is 1 digit(s) to the right of the |

4 | 033
4|8
5 | 003
5|8
6 | 13344
6 | 5567789
7 | 1124
7 | 78
8 | 112
8|5

4.2.4. Análisis de Frecuencias para datos agrupados


Cuando una variable posee una gran cantidad de datos, y además las categorías o
distintos datos son muchos, es conveniente agrupar esta información por
intervalos y determinar la frecuencia o repitencia de datos que existe dentro de
dicho intervalo. Se suele utilizar con mayor frecuencia este análisis en variables de
tipo cuantitativas continuas.

94
La tabla de frecuencias cuando agrupamos los datos es la misma que se presentó
en la sección 4.2.1 con la única diferencia que en la primera columna no se coloca
los datos simples sino los datos agrupados.
La forma de crear los intervalos se detalla a continuación:
a) Determinar el valor máximo y mínimo de los datos y calcular el rango o
amplitud total, que es el valor máximo encontrado en la base de datos
menos el valor mínimo
𝑅 = 𝑥𝑚𝑎𝑥 − 𝑥𝑚𝑖𝑛
b) Determinar el número de intervalos que se desea obtener.- El número de
intervalos suele ser determinado a menudo por conveniencia del analista,
sin embargo se recomienda que no sea menor que 5 ni mayor que 12. Si el
analista no tiene claro el número de intervalos a generar puede aplicar la
regla de Sturges: <<𝑛𝑖 = 1 + 3.32 ∗ log(𝑛)>>, donde n es el número de
datos.
c) Calcular el ancho del intervalo que se obtiene dividiendo el rango para el
número de intervalos
𝑅
𝑎=
𝑛𝑖

Ejemplo 4.4.
En R existe una base de datos llamada “BJSales”, la cual posee 150 datos acerca de
la venta en dólares que ha hecho una tienda en ciertos periodos no especificados.
Los datos son los que se muestran a continuación:

95
200.1 199.5 199.4 198.9 199.0 200.2 198.6 200.0 200.3 201.2 201.6 201.5
201.5 203.5 204.9 207.1 210.5 210.5 209.8 208.8 209.5 213.2 213.7 215.1
218.7 219.8 220.5 223.8 222.8 223.8 221.7 222.3 220.8 219.4 220.1 220.6
218.9 217.8 217.7 215.0 215.3 215.9 216.7 216.7 217.7 218.7 222.9 224.9
222.2 220.7 220.0 218.7 217.0 215.9 215.8 214.1 212.3 213.9 214.6 213.6
212.1 211.4 213.1 212.9 213.3 211.5 212.3 213.0 211.0 210.7 210.1 211.4
210.0 209.7 208.8 208.8 208.8 210.6 211.9 212.8 212.5 214.8 215.3 217.5
218.8 220.7 222.2 226.7 228.4 233.2 235.7 237.1 240.6 243.8 245.3 246.0
246.3 247.7 247.6 247.8 249.4 249.0 249.9 250.5 251.5 249.0 247.6 248.8
250.4 250.7 253.0 253.7 255.0 256.2 256.0 257.4 260.4 260.0 261.3 260.4
261.6 260.8 259.8 259.0 258.9 257.4 257.7 257.9 257.4 257.3 257.6 258.9
257.8 257.7 257.2 257.5 256.8 257.5 257.0 257.6 257.3 257.5 259.6 261.1
262.9 263.3 262.8 261.8 262.2 262.7

Con base a esta información genere una tabla de frecuencias para resumir la
información:
Solución:
Como podemos observar existen muchos datos, los cuales en su gran mayoría se
repiten una sola vez, por lo que hacer un análisis de frecuencia para cada uno de
ellos no resumiría la información, es así que procedemos a agrupar los datos
creando los intervalos de acuerdo a los pasos ya mencionados:
a) Calculamos el rango:
xmax = 198.6
xmin = 263.3
R = 198.6 -263.3 = 64.7
b) Determinamos el número de intervalos
ni = 1+3.32*log(150)
ni = 8.22 ≈ 8
Lo cual me sugiere que lo conveniente es construir 8 intervalos de clase.
Hay que tener muy en cuenta que esta solo es una recomendación y que el

96
analista puede decidir tener el número de intervalos que más le pareciera
conveniente
c) Calculamos el ancho del intervalo:
64.7
𝑎=
8
𝑎 = 7.9 ≈ 8
Lo que me sugiere que el ancho de intervalo es 8
Los intervalos que se forman son por tanto deben ser 8 con un ancho de 8, y
estos son:
198.6 – 206.6
206.7 – 214.7
214.8 – 222.8
222.9 – 230.9
231.0 – 239.0
239.1 – 247.1
247.2 – 255.2
255.3 – 263.3
Con los cuales puedo crear la tabla de frecuencias para datos agrupados:

Frecuencia Frecuencia
Frecuencia absoluta Frecuencia Relativa
absoluta acumulada Relativa acumulada
Datos (fa) (faa) (Fr) (Fra)
198.6 – 206.6 15 15 0,100 0,100
206.7 – 214.7 34 49 0,227 0,327
214.8 – 222.8 34 83 0,227 0,553
222.9 – 230.9 6 89 0,040 0,593
231.0 – 239.0 3 92 0,020 0,613
239.1 – 247.1 5 97 0,033 0,647
247.2 – 255.2 16 113 0,107 0,753
255.3 – 263.3 37 150 0,247 1,000
TOTAL 150 1,000

97
Haciendo el ejercicio en R:
Para obtener resultados acerca de la frecuencia relativa para datos
agrupados utilizaremos el comando “hist( )”, el cual realmente sirve para
crear un histograma, pero internamente lo que hace es agrupar los datos y
crear intervalos de tal forma que sirvan para hacer el gráfico. El comando
posee un argumento denominado <<plot>>, el cual admite valores lógicos,
y al poner en este argumento falso, aparecerán resultados de la frecuencia
relativa de estos datos, específicamente bajo el valor <<$counts>>.

> datos <- BJsales


> fa <- hist(datos,plot = F)
> fa

$breaks
[1] 190 200 210 220 230 240 250 260 270

$counts
[1] 6 18 48 17 3 14 32 12

$density
[1] 0.004000000 0.012000000 0.032000000 0.011333333 0.002000000
[6] 0.009333333 0.021333333 0.008000000

$mids
[1] 195 205 215 225 235 245 255 265

$xname
[1] "datos"

$equidist
[1] TRUE

attr(,"class")
[1] "histogram"

El valor <<$breaks>> es un vector que indica los límites de los intervalos


creados por defecto en el software, en este caso lo que hace es un cálculo
interno para crear estos intervalos. Como se puede apreciar los 8 intervalos
que por defectos se crearon son:

98
“190 – 200”, “200 - 210”, “210 - 220”, “220 - 230”, “230 - 240”, “240 -
250”, “250 - 260” y “260 - 270”. Bajo el valor <<$counts>> podemos notar
que las frecuencias relativas en cada uno de estos intervalos son 6, 18, 48,
17, 3, 14, 32, y 12 respectivamente; las cuales no son las mismas que
calculamos manualmente en un inicio, esto lógicamente se debe a que los
intervalos creados por el software no son los mismos que nosotros
habíamos planteado en un comienzo.
Sin embargo bajo el argumento <<breaks>> podemos ingresar un vector
con los intervalos que deseemos, por ejemplo con el intervalo que
originalmente lo hicimos en nuestro ejemplo, y además como solo nos
interesa determinar las frecuencias escribimos:

> datos <- BJsales


> a <- c(198.6,206.6,214.7,222.8,230.9,239,247.1,255.2,263.3)
>a
[1] 198.6 206.6 214.7 222.8 230.9 239.0 247.1 255.2 263.3
> fa <- hist(datos,breaks = a,plot = F)$counts
> fa
[1] 15 34 34 6 3 5 16 37

Con lo cual tal como podemos apreciar tenemos las mismas frecuencias en
los intervalos que planteamos desde un comienzo. Finalmente un código
que serviría para encontrar toda la tabla de frecuencia viene dado por:

99
> datos <- BJsales
> a <- c(198.6,206.6,214.7,222.8,230.9,239,247.1,255.2,263.3)
> Intervalos <- c("198.6-206.6", "206.7-214.7", "214.8-222.8","222.9-230.9",
“231.0-239.0", "239.1-247.1","247.2-255.2","255.3-263.3")
> frec_abs <- hist(datos,breaks = a,plot = F)$counts
> frec_abs_ac <- cumsum(frec_abs)
> frec_rel <- prop.table(frec_abs)
> frec_rel_ac <- cumsum(frec_rel)
> data.frame(Intervalos,frec_abs,frec_abs_ac,frec_rel,frec_rel_ac)

Intervalos frec_abs frec_abs_ac frec_rel frec_rel_ac


1 198.6-206.6 15 15 0.10000000 0.1000000
2 206.7-214.7 34 49 0.22666667 0.3266667
3 214.8-222.8 34 83 0.22666667 0.5533333
4 222.9-230.9 6 89 0.04000000 0.5933333
5 231.0-239.0 3 92 0.02000000 0.6133333
6 239.1-247.1 5 97 0.03333333 0.6466667
7 247.2-255.2 16 113 0.10666667 0.7533333
8 255.3-263.3 37 150 0.24666667 1.0000000

Haciendo el ejercicio en MATLAB


Para calcular las frecuencias de datos agrupados en MATLAB, previamente
debemos crear un vector con las marcas de clase5 de cada intervalo.
Para obtener la frecuencia para datos acumulados utilizaremos el comando
“hist( )”, que en realidad sirve para realizar un histograma, pero cuando se
asigna este comando a una variable cualquiera, calcula las frecuencias
absolutas asociadas a cada intervalo correspondiente a su marca de clase;
en el argumento además de poner los datos ponemos un vector con las
marcas de clase, en caso de que el usuario desee definir sus propios
intervalos, caso contrario el software lo calculará automáticamente:

5
Una marca de clase es el punto medio de cada intervalo creado, por ejemplo la marca de clase
para el intervalo [198.6 – 206.6] es 202.6

100
>> datos; %% Exporto los datos desde R
>> mc = [202.6,210.7, 218.8, 226.9, 235, 243.1, 251.2, 259.3]; %% Vector con las marces de clase
>> frec_abs = hist(datos,mc)

frec_abs =

15 34 34 6 3 5 16 37

Como podemos observar cada número resultante es la frecuencia absoluta


asociada a cada intervalo planteado en un principio. Para obtener toda la
tabla de frecuencias escribimos el siguiente código:

>> datos; %% Exporto los datos desde R


>> mc = [202.6,210.7, 218.8, 226.9, 235, 243.1, 251.2, 259.3]; %% Vector con las marces de clase
>> frec_abs = hist(datos,mc); %% Cálculo de frecuencias absolutas
>> frec_abs_ac = cumsum(frec_abs); %% Cálculo de frecuencias absolutas acumuladas
>> frec_rel = frec_abs/150; %% Cálculo de frecuencias relativas
>> frec_rel_ac = cumsum(frec_rel); %% Cálculo de frecuencias relativas acumuladas
>> tabla = [frec_abs;frec_abs_ac;frec_rel;frec_rel_ac]'

tabla =

15.0000 15.0000 0.1000 0.1000


34.0000 49.0000 0.2267 0.3267
34.0000 83.0000 0.2267 0.5533
6.0000 89.0000 0.0400 0.5933
3.0000 92.0000 0.0200 0.6133
5.0000 97.0000 0.0333 0.6467
16.0000 113.0000 0.1067 0.7533
37.0000 150.0000 0.2467 1.0000

4.2.5. Gráficas para representar frecuencias de datos


agrupados
Al igual que para datos simples, las frecuencias de datos agrupados se las puede
representar en un gráfico de pastel, cuyo procedimiento para su construcción ya
se indicó. Sin embargo existen otras gráficas que son interesantes al momento de
representar las frecuencias de los datos para datos agrupados, entre ellas tenemos:

101
Histogramas, Polígono de frecuencias, Diagrama de Pareto y Ojivas.
Histograma
Un histograma es un gráfico de barras, en donde en la escala horizontal se
representan los distintos intervalos creados, en cada uno de los cuales se levantan
barras sin separación verticales tan altas como las frecuencias correspondientes a
cada intervalo, dichas frecuencias están representadas sobre el eje vertical.
Ejemplo 4.4.1
Con los resultados de las frecuencias absolutas para datos agrupados en intervalos
de la matriz de datos BJSales que se realizó en el ejemplo 4.3, realice un
histograma
Solución:
Solución en R:
Para crear el histograma en R, utilizamos el comando “hist( )” como lo hicimos
para calcular las frecuencias de cada intervalo, pero con la diferencia que para
el argumento “plot” asignamos un valor lógico verdadero (True). Como
queremos los mismos intervalos creados y no los que el software calcula por
defecto, escribimos:

datos <- BJsales


a <- c(198.6,206.6,214.7,222.8,230.9,239,247.1,255.2,263.3)
hist(datos,breaks = a,plot = T,freq = T,main = "Histograma de BJSales")

102
Gráfica 4.11 Salida en R de un histograma para representar datos agrupados

Solución en MATLAB
En MATLAB utilizamos el comando hist( ), de la misma forma que lo hicimos
para calcular las frecuencias de cada intervalo, pero con la diferencia que no se
debe asignar a ninguna variable el histograma. Como queremos los mismos
intervalos creados y no los que el software calcula por defecto, escribimos:

>> datos;
>> mc = [202.6,210.7, 218.8, 226.9, 235, 243.1, 251.2, 259.3];
>> hist(datos,mc)

103
Gráfica 4.12 Salida en MATLAB de un histograma para representar datos agrupados

Histograma de BJSales
40

35

30

25

20

15

10

0
190 200 210 220 230 240 250 260 270

Polígono de Frecuencia
Es un gráfico que se genera a partir del histograma, se trata de un polígono cuyos
vértices coinciden con la marca de clase de cada intervalo, es decir con el punto
medio de cada barra que tiene el histograma, sirve para detectar el dato promedio
existente en cada intervalo de frecuencia.
Ejemplo 4.4.2
Con los resultados de las frecuencias absolutas para datos agrupados en intervalos
de la matriz de datos BJSales que se realizó en el ejemplo 4.3, realice un polígono
de frecuencias
Solución:
Solución en R:
En R utilizaremos el comando “lines( )”, el cual me permite crear líneas que
unen puntos dentro de un gráfico ya establecido, que en nuestro caso es el
histograma. Los argumentos obligatorios que en este caso debemos poner en
este comando son:
x = que denota los puntos sobre el eje de las “x”, y que para nuestro caso será
el mínimo valor de los intervalos, seguido en orden del valor medio de los
intervalos y el valor máximo

104
y = que denota hasta que altura en el eje de las “y” llega las líneas creadas, en
nuestro caso desde el punto cero hasta la altura de las frecuencias absolutas.
Estos dos primeros argumentos crearan los puntos formados por los pares
ordenados (x,y), que luego serán unidos por líneas:

> datos <- BJsales


> a <- c(198.6,206.6,214.7,222.8,230.9,239,247.1,255.2,263.3) # límite de los intervalos creados
> frec_abs <- hist(datos,breaks = a,plot = F)$counts # frecuencias absolutas
> mc = c(202.6,210.7, 218.8, 226.9, 235, 243.1, 251.2, 259.3) # marcas de clase
> hist(datos,breaks = a,plot = T,freq = T,main = "Histograma de BJSales") #histograma
> lines(x = c(min(a),mc,max(a)),y = c(0,frec_abs,0),col="red") # polígono
> title(sub = "Polígono de Frecuencia") # agrego un subtítulo al gráfico

Gráfica 4.13 Salida en R de un Polígono de frecuencias para representar datos agrupados

Solución en MATLAB:
En MATLAB, luego de exportar los datos desde R, procedemos a escribir
el siguiente código:

105
>> plot(mc,h)
>> x=datos; % Datos exportados desde R de BJSales
>> mc = [202.6,210.7, 218.8, 226.9, 235, 243.1, 251.2, 259.3]; % Marcas de clase
>> h = hist(x,mc); % Histograma
>> mc = [195,mc,265]; %Añadimos dos puntos a los extremos
>> h = [0,h,0]; % Agregamos cero a los bordes para que el polígono parta y termine en cero
>> plot(mc,h,'o') % Hacemos un gráfico de puntos
>> hold on % Sobrescribir otro gráfico encima
>> plot(mc,h) % Dibujamos las líneas por encima de los puntos
>> grid on % Dibujamos la cuadrícula

La gráfica resultante es:


Gráfica 4.14 Salida en MATLAB de un Polígono de frecuencias para representar datos agrupados

40

35

30

25

20

15

10

0
190 200 210 220 230 240 250 260 270

106
Ojiva
Es un polígono que representa las frecuencias acumuladas absolutas o
relativas. Lo útil de esta gráfica es que nos permite observar cuantos valores se
encuentran por encima o por debajo de dichos valores
Ejemplo 4.4.3
Utilizando la base de datos BJSales cree una Ojiva
Solución:
Solución en R:
En R utilizaremos el comando “ogive.freq()”, que se encuentra dentro de la
librería “agricolae”. Lo único que necesita este comando es tener
previamente construido el histograma de los datos, para a partir de ello
construir la ojiva, tal como se muestra en el siguiente código:

library(agricolae)
datos <- BJsales
h<-hist(datos,plot = T) #histograma
ojiva<-ogive.freq(h,col="red",xlab="Datos", ylab="Frecuencia Relativa Acumulada", main="OJIVA")

Gráfica 4.15 Salida en R de una Ojiva para representar frecuencias relativas acumuladas

107
Solución en MATLAB:
A fin de que la gráfica en MATLAB tenga los mismos intervalos que la
realizada en R, utilizaremos las marcas de clase que por default son
calculadas en este software, con lo cual definiremos el dominio con los
mismos intervalos propuestos, tal como se muestra en el siguiente código:

>> d = datos; % Exporto los datos


>> mc = [195, 205, 215, 225, 235, 245, 255, 265]; % Marcas de clase o puntos medios
>> f_rel = hist(d,mc)/150; % Frecuencias relativas
>> f_rel_ac = cumsum(f_rel); % Frecuencia Relativa Acumulada
>> x = [190, 200, 210, 220, 230, 240, 250, 270,280]; %Establezco un dominio para la gráfica cuyos
valores son los extremos de los intervalos basándome en las marcas de clase definidas en mc
>> y = [0, f_rel_ac,1]; %Establezco el rango de la gráfica, esto es los valores de las frecuencias
relativas acumuladas, agregando en los extremos el 0 y el 1
>> plot(x,y,'o') % Hacemos un gráfico de puntos
>> hold on % Sobrescribir otro gráfico encima
>> plot(x,y) % Dibujamos las líneas por encima de los puntos
>> grid on % Dibujamos la cuadrícula

Gráfica 4.16 Salida en MATLAB de una Ojiva para representar frecuencias relativas acumuladas

0.9

0.8

0.7

0.6

0.5

0.4

0.3

0.2

0.1

0
190 200 210 220 230 240 250 260 270 280

108
Como habíamos mencionado, la ojiva nos ayuda a determinar qué cantidad de
datos se encuentran por encima o por debajo de algún valor específico; así por
ejemplo podemos notar que aproximadamente el 60% de los datos son menores o
se encuentran por debajo de 230; o que el 30% de los datos son mayores o se
encuentran por encima del valor 250.

4.3. Análisis Bivariado de Frecuencias


En la sección 4.2, lo que hicimos fue realizar un estudio con el fin de analizar las
frecuencias para un grupo de datos de una sola variable. A diferencia de esto en la
presente sección estudiaremos como analizar la frecuencia de dos grupos de datos,
que lógicamente se encuentran dentro de dos distintas variables.
De igual manera que para el análisis univariado de frecuencias se puede calcular
las frecuencias absolutas, relativas y acumuladas de cada una de las dos variables
por separado, la diferencia está en la forma de representar estas frecuencias. Las
tablas que utilizamos para realizar esta representación son las denominadas
“Tablas de Contingencia”.

4.3.1. Tablas de Contingencia


Llamadas también tablas de doble entrada, son aquellas donde se representa la
frecuencia cruzada de dos variables X e Y. Donde por filas se define las categorías
de la primera variable, por columnas las categorías de la segunda variable, y los
datos con los que se rellena esta tabla son las frecuencias cruzadas:
X
X1 X2 … Xn SUMA
Y1 f11 f12 … f1n f1.
Y2 f21 f22 … f2n f2.
. . . . . .
Y
. . . . . .
. . . . . .
Ym fm1 fm2 … fmn
SUMA f.1 f.2 … f.n f..

Donde:

109
fij  Representa la frecuencia para la i – ésima categoría de la variable Y, y la j –
ésima categoría de la variable X. O dicho de otra forma el número de individuos
que cumple con la condición Yi y Xj al mismo tiempo.
f.j  Representa la sumatoria de la columna j, o dicho de otra forma la frecuencia
de individuos que están en la categoría j de la variable X
fi.  Representa la sumatoria de la fila i, o dicho de otra forma la frecuencia de
individuos que están en la categoría i de la variable Y.
f..  Es la sumatoria total por filas y columnas, que para el caso es el número total
de individuos sobre los cuales se está midiendo las dos variables

Las tablas de contingencia se pueden construir tanto para datos cuantitativos


como para cualitativos, pero en el caso cuantitativo se recomienda la agrupación
por intervalos, sobre todo cuando la variable presenta muchos datos diferentes
Un ejemplo de una tabla de contingencia es la que se muestra a continuación:

Rendimiento SEXO
Escolar Masculino Femenino TOTAL
Alto 0 8 8
Bajo 5 16 21
Medio 4 11 15
TOTAL 9 35 44

Como podemos observar esta tabla de contingencia cruza la información acerca de


la frecuencia de 2 variables “Sexo” con sus dos categorías: Masculino y Femenino;
y “Rendimiento Escolar” con sus tres categorías Alto, Bajo y Medio, medidas sobre
44 individuos. Y por ejemplo se evidencia 16 individuos de sexo femenino que
tienen un rendimiento escolar bajo, en total 35 Individuos de sexo femenino, 8
estudiantes que tienen un rendimiento escolar alto, etc…
Ejemplo 4.5
Se eligieron en total 44 estudiantes de la carrera de Estadística, para que elaboren
una prueba aptitudinal, la calificación de esta prueba se detalla en la siguiente
tabla.

110
Estudiante Calificación Sexo Estudiante Calificación Sexo
1 Alto MASCULINO 23 Medio MASCULINO
2 Medio FEMENINO 24 Alto MASCULINO
3 Alto MASCULINO 25 Bajo FEMENINO

4 Medio MASCULINO 26 Medio MASCULINO


5 Medio MASCULINO 27 Bajo MASCULINO
6 Alto MASCULINO 28 Alto MASCULINO

7 Bajo MASCULINO 29 Medio FEMENINO

8 Medio MASCULINO 30 Alto MASCULINO


9 Medio MASCULINO 31 Bajo MASCULINO
10 Bajo FEMENINO 32 Bajo MASCULINO
11 Medio MASCULINO 33 Bajo MASCULINO
12 Medio FEMENINO 34 Medio MASCULINO
13 Bajo MASCULINO 35 Bajo MASCULINO

14 Bajo MASCULINO 36 Alto MASCULINO

15 Bajo MASCULINO 37 Alto MASCULINO

16 Bajo MASCULINO 38 Bajo MASCULINO


17 Medio MASCULINO 39 Bajo FEMENINO
18 Medio MASCULINO 40 Medio MASCULINO
19 Bajo FEMENINO 41 Bajo MASCULINO

20 Bajo MASCULINO 42 Bajo FEMENINO

21 Bajo MASCULINO 43 Bajo MASCULINO

22 Bajo MASCULINO 44 Medio FEMENINO

Como se puede observar existen 2 variables (Calificación, y Sexo) medidas sobre


los 44 individuos: Realice una tabla de contingencia, donde se cruce información
acerca de la frecuencia para Calificación obtenida y el Sexo de los estudiantes
Solución:
Solución en R:
En R utilizaremos el comando “table( )” al igual que lo hacíamos para construir
una tabla de frecuencia para una sola variable, con la diferencia que en esta
ocasión en el argumento irán las dos variables que se quieren analizar
separadas por una coma.

111
> data <- read.csv(file = "D:/Documents/data.csv",header = T,sep = ";") # importo los
datos desde un archivo .csv
> X <- data$Rendimiento.Académico # Filtro la variable Rendimiento Académico
> Y <- data$Sexo # Filtro la variable Sexo
> t <- table(X,Y) # Construyo la tabla de contingencia
>t # Imprimo la tabla de contingencia
Y
X FEMENINO MASCULINO
Alto 0 8
Bajo 5 16
Medio 4 11

Como podemos observar se forma nuestra tabla de contingencia, aunque para


que se vea completa falta los totales por filas, por columnas y el total de los
totales. Tal procedimiento se desarrolla a través del siguiente código:

> data <- read.csv(file = "D:/Documents/data.csv",header = T,sep = ";")


> X <- data$Rendimiento.Académico
> Y <- data$Sexo
> t <- table(X,Y) #Hasta aquí tenemos la tabla ya obtenida
> suma <- sum(t) # Suma de todas las observaciones (total de individuos)
> Sum_Col<-colSums(t) # Suma las columnas de las tablas de contingencia
> Sum_Fila <- rowSums(t) # Suma las filas de las tablas de contingencia
> t <- cbind(t,Sum_Fila) # Agregamos la suma por columnas a la tabla
> t <- rbind(t,Sum_Col) # Agregamos la suma por filas a la tabla
> t[4,3] <- suma # Agregamos la suma total a la posición correspondiente
>t # Imprimo la tabla de contingencia

FEMENINO MASCULINO Sum_Fila


Alto 0 8 8
Bajo 5 16 21
Medio 4 11 15
Sum_Col 9 35 44

Solución en MATLAB
En MATLAB utilizaremos el comando “crosstab( )”, este nos dará las
frecuencias cruzadas de las variables que ingresemos:

112
>> x = Rendimiento; % Exporto la variable Rendimiento Académico
>> y = Sexo; % Exporto la variable Sexo
>> t = crosstab(x,y) % Creo la tabla de frecuencia

t=

8 0
11 4
16 5

Como se puede observar, al igual que en R, se forma la tabla de contingencia


aunque falta aún los totales por filas, por columnas y el total de los totales. Para
ello seguimos el siguiente código:

>> x = Rendimiento;
>> y = Sexo;
>> t = crosstab(x,y); % Hasta aquí tenemos la tabla ya obtenida
>> suma = sum(sum(t)) % Suma total de toda la matriz (Total de individuos)
>> sum_col = sum(t,1) % Suma de cada columna que luego se agregará en una 4º fila
de la matriz t
sum_col =

35 9
>> sum_filas = sum(t,2) % Suma de cada fila que luego se agregará en una 3º columna
de la matriz t

sum_filas =

8
15
21
>> t(4,:) = sum_col; % Asignación de la suma de columnas a la 4º fila de la matriz t
>> t(:,3) = [sum_filas;suma]; % Asignación de la suma de filas a la 3º columna de la matriz t
y además el valor de la suma total a la posición correspondiente
(4,3)
t=

8 0 8
11 4 15
16 5 21
35 9 44

113
5. CAPÍTULO 5:
DESCRIPCIÓN NUMÉRICA DE DATOS
Además de realizar un análisis de frecuencia (aprendido en el capítulo 4) que nos
ayude a resumir y presentar visualmente la distribución de los datos, es
importante estudiar algunos estadísticos o medidas estadísticas que son
substanciales al momento de describir un conjunto de datos.
Las distribuciones de frecuencias son importantes al momento de analizar la
información, nos permite tener un panorama general de este conjunto, sin
embargo dejamos a un lado aspectos importantes como la tendencia central, la
variabilidad, la posición, y la manera de medir ciertas relaciones que se puedan
dar entre dos o más variables, especialmente cuando son de tipo cuantitativo; y es
precisamente por eso que se estudian a continuación algunas medidas estadísticas
que nos ayuden a analizar con mayor claridad la información recolectada.

5.1. Descripción Numérica De Datos Univariados


En el presente apartado estudiaremos la manera de describir los datos
pertenecientes a una sola variable de manera independiente, básicamente el
estudio que se hará sobre estos datos es acerca de las medidas que nos ayuden a
describir o resumir el centro, la variabilidad y la posición de la información que se
encuentre en una variable.

5.1.1. Medidas de Tendencia Central


Las medidas de tendencia central son aquellas que nos ayudan a determinar el
valor que se encuentra ubicado en el centro o la mitad de un grupo de datos, este
valor es aquel, alrededor del cual está concentrada la información. Este solo
número es de mucha utilidad el momento de resumir información recolectada, por
ejemplo cuando un maestro da a conocer el rendimiento académico de uno de sus
estudiantes, es más fácil informar que tal estudiante obtuvo una calificación
promedio de 8, en lugar de detallar de una forma poco entendible y hasta aburrida

114
las 20 calificaciones que obtuvo durante todo el año en los distintos instrumentos
de evaluación, que al final se resumirá en la calificación promedio obtenida de 8.
Las medidas de tendencia central más utilizadas en estadística son las que se
detallan a continuación:

Media Aritmética
La media o más conocida como promedio de los datos se la representa con la letra
̅ , y se la obtiene sumando los datos existentes, y dividiendo para el número n
"𝑥"
de datos sumados:
∑𝑛𝑖=1 𝑥𝑖
𝑥̅ =
𝑛
La media aritmética tiene la deficiencia de ser sensible a los valores que toma la
variable, así cuando por ejemplo dentro del conjunto de datos se encuentra uno
que sea demasiadamente grande o pequeño, la media se ve seriamente afectada
por ese valor, y pudiera no resumir de manera adecuada el verdadero centro de la
información.
Ejemplo 5.1.
Los siguientes son los valores de las calificaciones sobre 10, obtenidas por un
grupo de 15 estudiantes de estadística:
Estudiante 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Calificación 8.3 8.1 7.7 8.5 9.3 7.8 8.5 7.9 8.2 0.5 8.2 9.1 8.6 9.2 8.0

Obtenga el promedio de las calificaciones obtenidas en este curso:


Solución
8.3 + 8.1 + 7.7 + 8.5 + 9.3 + 7.8 + 8.5 + 7.9 + 8.2 + 0.5 + 8.2 + 9.1 + 8.6 + 9.2 + 8.0
𝑥̅ =
15
𝑥̅ = 7.86

La calificación promedio de este grupo de estudiantes es de 7.86. Pero vale la pena


antes de publicar esta estadística acerca de la calificación promedio de los
estudiantes, hacernos la interrogante: ¿Es este promedio, un número que resume
adecuadamente todos los datos? La respuesta es NO:

115
Si nos fijamos en las calificaciones de los 15 estudiantes, la mayoría de estas
(específicamente 14) se encuentran en un intervalo de 7.7 a 9.3, a excepción de la
obtenida por el 10º estudiante que es de 0.5. Esta calificación es lo que en
estadística se conoce como un dato atípico, es decir numéricamente esta
observación es diferente del resto, por lo que al ser la media una medida sensible
a este tipo de datos, la calificación de este 10º estudiante está afectando el valor de
la media, y se recomienda en este caso utilizar otra medida que no sea sensible a
este tipo de valores atípicos, una opción es la mediana que la estudiaremos más
adelante.
Así, si eliminamos este valor atípico y calculamos el promedio o media, vamos a
obtener un valor mucho más real de la tendencia central del grupo de datos, y que
si puede servir como un estadístico que resuma correctamente las calificaciones.
8.3 + 8.1 + 7.7 + 8.5 + 9.3 + 7.8 + 8.5 + 7.9 + 8.2 + 8.2 + 9.1 + 8.6 + 9.2 + 8.0
𝑥̅ =
14
𝑥̅ = 8.4
Con una mayor seguridad podemos decir que en promedio la calificación del grupo
de estudiantes es de 8.4.
En R utilizamos el comando “mean( )” para calcular la media de un grupo
de datos:

> x <- c(8.3,8.1,7.7,8.5,9.3,7.8,8.5,7.9,8.2,0.5,8.2,9.1,8.6,9.2,8.0)


> mean(x)
[1] 7.86

En MATLAB utilizamos el comando “mean( )” para calcular la media de


un grupo de datos:

>> x = [8.3,8.1,7.7,8.5,9.3,7.8,8.5,7.9,8.2,0.5,8.2,9.1,8.6,9.2,8.0];
>> mean(x)

ans =

7.8600

116
Media Para Datos Agrupados
Para calcular la media de datos agrupados, debemos sumar los productos de las
marcas de clase de intervalo por la frecuencia obtenida en el mismo, y este
resultado dividirlo para el número de datos existentes. Para explicar esto de mejor
manera nos basamos en el siguiente ejemplo:
Ejemplo 5.2.
Luego de hacer un análisis agrupado de frecuencias para los datos de “Bjsales”,
calcule la media
Solución
El proceso de hallar la media se lo resume en la siguiente tabla:

MC f Media
Intervalo (1) (2) (3) = (1)*(2) (4)
190 - 200 195 6 1170 229,87
200 - 210 205 18 3690
210 - 220 215 48 10320
220 - 230 225 17 3825
230 - 240 235 3 705
240 - 250 245 14 3430
250 - 260 255 32 8160
260 - 270 265 12 3180
TOTAL 150 34480

(1)  Calculamos las marcas de clase de cada intervalo formado


(2)  Calculamos las frecuencias absolutas de cada intervalo formado
(3)  Multiplicamos cada marca de clase por la respectiva frecuencia en cada
uno de los intervalos. Por ejemplo para el 1º intervalo: 195*6 = 1170.
(4)  Finalmente la media es la división entre la suma total de la columna 3, y
la suma total de la columna 2:
34480
𝑥̅ = = 229.87
150
En R ponemos a consideración el siguiente código que nos ayudará a
calcular la media para datos agrupados:

117
> datos <- BJsales # Guardo los datos
> f <- hist(datos,plot = F)$counts # Calculo las frecuencias agrupadas por intervalos
> mc <- hist(datos,plot = F)$mids # Calculo las marcas de clase de los intervalos
formados
> mult <- f*mc # Multiplico la marca de clase por su respectiva frecuencia
> sum_f <- sum(f) # Suma de las frecuencias (Número de datos)
> sum_mult <- sum(mult) # Suma de las multiplicaciones
> media <- sum_mult/sum_f # Finalmente obtengo la media
> media
[1] 229.8667

De igual manera en MATLAB podemos escribir el siguiente código

>> datos; % Exporto los datos


>> mc = [195, 205, 215, 225, 235, 245, 255, 265]; %Defino marcas de clase
>> f = hist(datos,mc); % Calculo las frecuencias agrupadas por intervalos
>> mult = f.*mc; % Multiplico la marca de clase por su respectiva frecuencia
>> sum_f = sum(f); % Suma de las frecuencias (Número de datos)
>> sum_mult = sum(mult); % Suma de las multiplicaciones
>> media = sum_mult/sum_f % Finalmente obtengo la media

media =

229.8667

Mediana
Es otra medida estadística que nos ayuda a determinar la tendencia central de un
grupo de datos, a diferencia de la media, este estadístico no es sensible a valores
atípicos que se pudieran presentar.
La mediana se la representa con 𝑥̃, y se define como el valor que ocupa la posición
central de un grupo de datos cuando estos están ordenados. Si el número de datos
n es impar la mediana será exactamente la posición central, es decir
𝑥̃ = 𝑥(𝑛+1)⁄
2
Pero si n es par la mediana es la media aritmética entre los dos valores que ocupan
la posición central, es decir:

118
𝑥𝑛 + 𝑥𝑛+1
2 2
𝑥̃ =
2
Ejemplo 5.3.
Encuentre la mediana de los datos correspondientes a las 15 calificaciones de los
estudiantes de estadística del Ejemplo 5.1. Compare este valor con la media
calculada en el mismo ejemplo, a continuación vuelva a calcular la mediana
eliminando el dato atípico de 0.5
Solución:
Recordemos que los datos eran:
8.3, 8.1, 7.7, 8.5, 9.3, 7.8, 8.5, 7.9, 8.2, 0.5, 8.2, 9.1, 8.6, 9.2, y 8.0
Lo primero que haremos es ordenar los datos:

Posición 1º 2º 3º 4º 5º 6º 7º 8º 9º 10º 11º 12º 13º 14º 15º


Calificación 0,5 7,7 7,8 7,9 8 8,1 8,2 8,2
8,3 8,5 8,5 8,6 9,1 9,2 9,3
Como el número de datos n = 15 es impar entonces directamente la posición
central, que en este caso sería la 8º posición (puesto que deja 7 números a la
izquierda y 7 a la derecha), es la mediana para este grupo de datos, es decir:
𝑥̃ = 𝑥(15+1)⁄ = 𝑥8 = 8.2
2
Note que el valor de la mediana 𝑥̃ = 8.2, no se acerca al valor de la media de 7.86
para el mismo grupo de datos, esto debido a que la mediana no se ve afectada por
el valor atípico de 0.5; así podríamos decir que cuando la media se ve afectada por
ciertos valores extremos se recomienda utilizar la mediana.
A continuación vamos a eliminar el valor atípico de 0.5 y volvemos a calcular la
mediana:

Posición 1º 2º 3º 4º 5º 6º 7º 8º 9º 10º 11º 12º 13º 14º


Calificación 7,7 7,8 7,9 8 8,1 8,2 8,2 8,3
8,5 8,5 8,6 9,1 9,2 9,3
Como el número de datos n = 14 es par, entonces lo que hacemos es encontrar las
dos posiciones centrales que para nuestro caso sería la 7º y 8º posición; a
continuación la mediana es la media de estos dos valores 8.2 y 8.3, es decir:

119
𝑥14 + 𝑥14+1
2 2 𝑥7 + 𝑥8 8.2 + 8.3
𝑥̃ = = = = 8.25
2 2 2
Si recordamos, la media para este grupo de datos era de 8.4, este valor está muy
cerca de la mediana calculada 𝑥̃ = 8.25, con lo cual una vez más corroboramos que
cuando no existen datos atípicos en una muestra la media es un buen indicador
del centro de la información.
En R utilizamos el comando “median( )” para calcular la media de un
grupo de datos:

> x <- c(8.3,8.1,7.7,8.5,9.3,7.8,8.5,7.9,8.2,0.5,8.2,9.1,8.6,9.2,8.0)


> median(x)
[1] 8.2

En MATLAB utilizamos el comando “median( )” para calcular la media


de un grupo de datos:

>> x = [8.3,8.1,7.7,8.5,9.3,7.8,8.5,7.9,8.2,0.5,8.2,9.1,8.6,9.2,8.0];
>> median(x)

ans =

8.2000

Mediana Para Datos Agrupados


Cuando tenemos datos agrupados en intervalos, para calcular la mediana
utilizamos la siguiente ecuación
𝑛
− 𝐹𝑖−1
𝑥̃ = 𝐿𝑖 + 𝑎 [2 ]
𝑓𝑖

Donde:
Li  Es el límite inferior del intervalo que contiene el valor medio
a  Es el ancho del intervalo que contiene el valor medio
n  Es el número de datos (Suma de las frecuencias absolutas)
Fi-1  Es la frecuencia acumulada absoluta del intervalo anterior al que se

120
encuentra el valor medio
fi  Es la frecuencia absoluta del intervalo donde se encuentra el valor medio
Para saber cuál es el intervalo donde se encuentra el valor medio debemos dividir
el número de datos para dos (n/2), en el intervalo cuya frecuencia acumulada
contenga dicho valor es aquel que contiene el valor medio.
Ejemplo 5.4.
Para los datos agrupados de la base “BJsales” encuentre la mediana:
Solución:
El procedimiento para hallar la mediana se lo detalla en la siguiente tabla
Intervalo f F
190 - 200 6 6
200 - 210 18 24
210 - 220 48 72
220 - 230 17 89
230 - 240 3 92
240 - 250 14 106
250 - 260 32 138
260 - 270 12 150
Como n/2 = 75, el intervalo que contiene este valor es [220 - 230] (pintado de
rojo), a partir de esto calculamos la mediana con la ecuación propuesta:
150
− 72
𝑥̃ = 220 + 10 [ 2 ]
17

𝑥̃ = 221.765
Se omiten los cálculos en los software R y MATLAB, puesto que son simplemente
la aplicación de la ecuación que se ha aplicado, y el cálculo de las frecuencias
absolutas y acumuladas ya se las explicó en su debido momento.

Moda
La moda es el dato dentro de la muestra que se repite con mayor frecuencia. Se la
utiliza mayormente para variables cualitativas, puesto que para estas no se pueden
hacer cálculos numéricos para determinar la media o la mediana; sin embargo es

121
posible también determinar la moda de una variable cuantitativa aunque no es
muy común hacerlo
Ejemplo 5.5.
Calcule la moda del siguiente grupo de datos cualitativos: “a, e, o, a, i, e, a, u, a, i,
u”
Solución:
En R:

> a <- c("a","e","o","a","i","e","a","u","a","i","u")


> f <- table(a) # Calculamos las frecuencias de los datos
> f[which.max(f)] # Determinamos el valor con máxima frecuencia
a
4

La moda es “a”, puesto que es el dato que se repite con mayor frecuencia, en este
caso se repite 4 veces.
En MATLAB se utiliza directamente el comando “mode( )”, el problema es
que este comando sirve únicamente para datos de tipo cuantitativo; en este
caso lo recomendable es codificar la variable con números y luego asociar
el dato que se repite con mayor frecuencia al código que en un principio se
le asignó a dicho dato.
Para nuestro ejemplo, podemos observar claramente que la variable es
“Las vocales del alfabeto”, por lo que codificaremos de la siguiente manera:
a = 1, e = 2, i = 3, o =4, u=5. De esta forma la moda queda calculada así:

>> a = {'a','e','o','a','i','e','a','u','a','i','u'}; # Datos originales


>> a = [1,2,4,1,3,2,1,5,1,3,5]; # Datos codificados
>> [dato,frecuencia]=mode(a) # Moda

dato =

frecuencia =

122
Este resultado muestra que el dato 1 se repite 4 veces, y es el dato que tiene
una mayor frecuencia. Como el dato 1 se codificó con la letra “a”, entonces
es precisamente ese dato la moda, la cual se repite 4 veces.

5.1.2. Medidas de Dispersión


En la mayoría de análisis descriptivos, la tendencia central de la muestra resulta
insuficiente para poder describir numéricamente un conjunto de datos, puesto
que esta solo nos muestra donde está centrada la información, pero no nos dice
nada acerca del comportamiento de todos los demás datos alrededor de esta
posición central, es decir de cuán lejos o cerca se encuentran todos los datos con
respecto a la media.
El solo cálculo de la media para resumir un grupo de datos muchas veces podría
llevarnos a realizar una mala interpretación de la información. Considere el
siguiente ejemplo:

Supongamos que existen dos estudiantes, los cuales a lo largo de sus 10 años de
Educación General Básica demostraron siempre ser los mejores, y obtuvieron las
siguientes calificaciones:
Año EGB 1º 2º 3º 4º 5º 6º 7º 8º 9º 10º
Estudiante A 8,7 8,8 8,9 8,3 8,8 8,4 8,5 8,7 8,7 8,6
Estudiante B 10 9,9 10 8,9 8,9 7,9 7,7 7,6 7,7 7,8
Si quisiéramos dar un galardón a uno de ellos: ¿A cuál de los dos estudiantes
escogeríamos? Seguramente lo que primero vendría a nuestra mente es sacar un
promedio de ambos y compararlos:
𝑥̅𝐴 = 8.64
𝑥̅ 𝐵 = 8.64
Sin embargo, al calcular el promedio de calificaciones obtenidas por estos dos
estudiantes, observamos que es exactamente el mismo valor, así que sería
sumamente difícil tomar una decisión acerca de a qué estudiante dar el galardón,
basados en esta medida de tendencia central.

123
En este caso sería muy importante realizar un análisis acerca de la dispersión de
los datos, puesto que si observamos las calificaciones tanto del estudiante “A”
como del estudiante “B”, nos podemos dar cuenta que “A” siempre tuvo sus
calificaciones muy agrupadas alrededor de su calificación promedio, es decir fue
muy constante en su vida estudiantil; mientras que “B” en los primeros años tuvo
muy buenas calificaciones, sin embargo en los últimos estas bajaron
considerablemente, lo cual nos muestra que su constancia no fue tan relevante
como la del estudiante A. Existen medidas estadísticas como la desviación típica,
desviación estándar, varianza y rango que nos ayudan a medir la dispersión de un
grupo de datos.
Al final para dar una solución al problema de los estudiantes, lo que se debería
hacer es calcular una medida que nos ayude a determinar la dispersión de las
calificaciones de cada uno de los dos estudiantes; al final, para este caso será mejor
el estudiante que posea menos dispersión en sus calificaciones. La medida de
dispersión será la desviación estándar (más adelante se mostrará su cálculo).
Desviación estándar para estudiante A = 0.18
Desviación estándar para estudiante B = 0.98
Por lo que decidiremos entonces que el estudiante galardonado sea “A”, es decir el
que tuvo menos dispersión en sus calificaciones, lo que significa que este
estudiante tuvo más uniformidad en sus calificaciones que “B”.
A continuación se muestran las principales medidas de dispersión:

Rango
O también llamado Recorrido, se lo representa con la letra R, y se define como la
diferencia entre el dato mayor y el dato menor. Mientras más grande sea el rango,
mayor será la dispersión de la información recolectada.
𝑅 = 𝑥𝑚𝑎𝑥 − 𝑥𝑚𝑖𝑛
Ejemplo 5.6
Calcule el rango del grupo de datos referente a las calificaciones obtenidas por un
grupo de 15 estudiantes en el ejercicio 5.1.

124
Solución:
En R:
En este software podemos utilizar el comando “range( )”, el cual nos dará
realmente un vector con 2 elementos indicando el valor mínimo y máximo
del conjunto de datos. Sin embargo si queremos el valor del rango como tal
lo que debemos hacer es restar estos dos valores

> x <- c(8.3,8.1,7.7,8.5,9.3,7.8,8.5,7.9,8.2,0.5,8.2,9.1,8.6,9.2,8.0)


> r<-range(x) # Calcula los valores máximo y mínimo
>r
[1] 0.5 9.3

> r <- max(x)-min(x) #Rango


>r
[1] 8.8

En MATLAB:
Utilizamos el comando “range( )”, el cual directamente nos proporciona
el valor del rango.

>> x = [8.3,8.1,7.7,8.5,9.3,7.8,8.5,7.9,8.2,0.5,8.2,9.1,8.6,9.2,8.0];
>> range(x)

ans =

8.8000

El rango de 8.8, es un valor grande con relación a los datos, por lo que de acuerdo
a este valor podemos decir que existe una gran dispersión entre la información.
Hay que tener en cuenta que el valor del rango puede ser afectado por los datos
atípicos existentes.

Desviación Típica
La desviación típica mide la distancia existente entre un dato con respecto a la
media del grupo de datos al cual pertenece. Se calcula restando dicho dato menos
la media, mientras más grande sea la desviación típica en valor absoluto, mayor

125
será la distancia o la dispersión de ese dato con respecto a la media aritmética
calculada.
𝐷𝑇 = 𝑥𝑖 − 𝑥̅
Ejemplo 5.7.
Calcule las desviaciones típicas de los datos referentes a las calificaciones
obtenidas por un grupo de 15 estudiantes en el ejercicio 5.1.
Solución:
En R:

> x <- c(8.3,8.1,7.7,8.5,9.3,7.8,8.5,7.9,8.2,0.5,8.2,9.1,8.6,9.2,8.0)


> DT <- x-mean(x)
> DT
[1] 0.44 0.24 -0.16 0.64 1.44 -0.06 0.64 0.04 0.34 -7.36 0.34 1.24 0.74 1.34
[15] 0.14

Como podemos observar, la mayoría de las desviaciones no tienen valores


demasiado altos, a excepción de la que corresponde al valor -7.36; esta desviación
extremadamente grande nos indica que el correspondiente dato (específicamente
𝑥10 = 0.5), es el valor que más se aleja de la media. Así mismo la desviación de -
0.06, correspondiente al sexto dato (𝑥6 = 7.8), que es el más pequeño nos indica
que este es el dato que más cercano está de la media, es decir no se encuentra
disperso sino más bien cercano a esta medida de tendencia central.

Varianza y Desviación Estándar


Es de mucha importancia conocer la dispersión que tienen los datos mediante la
desviación típica, puesto que esto muestra claramente mediante las distancias
medidas cuán lejos o cerca se encuentran cada uno de los datos respecto a la
tendencia central. Sin embargo, el tener un registro de cada una de las
desviaciones típicas pertenecientes a cada dato no resume la información
referente a la dispersión existente, por lo que se hace necesario simplificar en un
solo número estas desviaciones. La mejor forma de conseguirlo es calculando un

126
promedio de las desviaciones típicas; a esta medida estadística de dispersión se la
conoce con el nombre de Desviación Estándar.
La desviación estándar “S” es el promedio o la media aritmética de las
desviaciones típicas

∑𝑛𝑖=1(𝑥𝑖 − 𝑥̅ )
̅̅̅̅ =
𝑆 = 𝐷𝑇
𝑛
Matemáticamente esta ecuación tiene el problema que al sumar todas las
desviaciones típicas estas se anulan, por lo que al calcular la desviación estándar
de cualquier grupo de datos existentes esta medida siempre será igual a cero, y no
sería posible resumir mediante esta forma la dispersión.
Como alternativa a este problema se elevan al cuadrado cada una de las
desviaciones típicas, y estos valores se lo suman. A esta forma de resumir el
cuadrado de las desviaciones típicas se la conoce con el nombre de Varianza, que
matemáticamente es el cuadrado de la desviación estándar.
La Varianza “S2”, es el promedio o la media aritmética de los cuadrados de las
desviaciones típicas

∑𝑛𝑖=1(𝑥𝑖 − 𝑥̅ )2
𝑆2 =
𝑛
Donde:
𝑥𝑖  Representa cada uno de los datos
𝑥̅  Representa la media del grupo de datos
n  Número total de datos

Es fácil a partir de esto entonces deducir que la desviación estándar simplemente


se la puede calcular extrayendo la raíz cuadrada de la varianza.

𝑆 = √𝑆 2
Pero ¿Cómo podemos interpretar los valores de la varianza o
desviación estándar? Puesto que lo que realmente se está encontrando, es en

127
promedio la distancia de cada uno de los datos con respecto a la media, mientras
más grandes san estas medidas con respecto a los datos de los cuales están siendo
calculadas, mayor será la dispersión de los datos con respecto a la media, y por
ende mayor la irregularidad que presentan.
Cuando la varianza y/o desviación estándar toma valores relativamente muy
pequeños, se puede concluir diciendo que la media es un buen indicador del centro
de la información. Mientras que si estas medidas de dispersión son relativamente
grandes, la media no es un buen indicador del centro de los datos (puesto que esta
medida de tendencia central como habíamos dicho es susceptible a valores
extremos), y sería conveniente utilizar otra medida para resumir la tendencia
central del conjunto, como por ejemplo la mediana.
Ejemplo 5.8
Calcule la varianza y desviación estándar de los datos correspondientes a las
calificaciones obtenidas por un grupo de 15 estudiantes en el ejercicio 5.1. En una
primera parte incluya todos los 15 datos, y luego excluya el atípico x10 = 0.5. Saque
sus conclusiones
Solución:
En R: Utilizaremos los comandos “var( )” y “sd( )” para calcular la
varianza y desviación estándar respectivamente

128
> x <- c(8.3,8.1,7.7,8.5,9.3,7.8,8.5,7.9,8.2,0.5,8.2,9.1,8.6,9.2,8.0) # Ingreso todos los
15 datos
> varianza <- var(x) # Calculo la varianza
> varianza
[1] 4.391143
> desv_est <- sd(x) # Calculo la desviación estándar
> desv_est
[1] 2.095505

> y <- c(8.3,8.1,7.7,8.5,9.3,7.8,8.5,7.9,8.2,8.2,9.1,8.6,9.2,8.0) # Ingreso los datos


excluyendo el atípico
> varianza <- var(y) # Calculo la varianza del nuevo grupo de datos
> varianza
[1] 0.2643956
> desv_est <- sd(y) # Calculo la desviación estándar del nuevo grupo de datos
> desv_est
[1] 0.5141941

En MATLAB: Utilizaremos los comandos “var( )” y “std( )” para calcular


la varianza y desviación estándar respectivamente

>> x = [8.3,8.1,7.7,8.5,9.3,7.8,8.5,7.9,8.2,0.5,8.2,9.1,8.6,9.2,8.0]; % Ingreso todos los 15


datos
>> var(x) % Calculo la varianza
ans =
4.3911
>> std(x) % Calculo la desviación estándar
ans =
2.0955

>> y = [8.3,8.1,7.7,8.5,9.3,7.8,8.5,7.9,8.2,8.2,9.1,8.6,9.2,8.0]; % Ingreso los datos excluyendo


el atípico
>> var(y) % Calculo la varianza del nuevo grupo de datos
ans =
0.2644
>> std(y) % Calculo la desviación estándar del nuevo grupo de datos
ans =
0.5142

Cuando calculamos la varianza y desviación estándar de todos los datos


(incluido el atípico x10 = 0.5), nos damos cuenta que estas medidas de
dispersión calculadas (S2 = 4.3911 y S = 2.0955) son valores altos con

129
respecto a los datos, por lo que podemos concluir que existe una
considerable dispersión de los datos con respecto a la media, y no podría
considerarse esta medida como un buen indicador de la tendencia central.
Sin embargo hay que tener mucho cuidado en dar apresuradamente una
conclusión como la dada, puesto esta varianza grande puede ser producto
de un solo dato atípico que se encuentre en el conjunto, tal como sucede en
este caso, donde al retirar dicho dato observamos como las medidas de
dispersión reducen considerablemente (S 2 = 0.2644 y S = 0.5142), por lo
sin este dato, la dispersión es muy pequeña y podemos decir que la media
es un buen indicador del centro de la información.

Varianza y Desviación Estándar Para Datos Agrupados


La forma de calcular la Varianza y Desviación estándar para datos agrupados, es a
través de las siguientes ecuaciones
∑𝑚 2
𝑖=1(𝑥𝑖 −𝑥̅ ) ∗𝑓𝑖
Varianza  𝑆2 =
𝑛

Desviación Estándar  𝑆 = √𝑆 2
Donde:
m  Es el número de intervalos formados
xi  Representa las distintas marcas de clase en cada intervalo
𝑥̅  Representa la media de datos agrupados (Cuyo cálculo ya se explicó en el
apartado 5.1.1)
fi  Representa la frecuencia absoluta en cada intervalo
n  El número total de datos

Ejemplo 5.9.
A partir de la base de datos “BJSales” encuentre la varianza y desviación estándar
agrupando este conjunto de datos.
Solución

130
Previamente conocemos ya por el Ejemplo 5.2, que la media para datos agrupados
en este conjunto es de 229,87; por lo que para calcular la varianza procedemos a
aplicar la ecuación planteada a través del siguiente cuadro:
xi fi (𝒙𝒊 − ̅𝒙)𝟐 ̅)𝟐 ∗ 𝒇𝒊
(𝒙𝒊 − 𝒙
Intervalo (1) (2) (3) (4)
190 - 200 195 6 1215.92 7295.50
200 - 210 205 18 618.52 11133.30
210 - 220 215 48 221.12 10613.61
220 - 230 225 17 23.72 403.19
230 - 240 235 3 26.32 78.95
240 - 250 245 14 228.92 3204.84
250 - 260 255 32 631.52 20208.54
260 - 270 265 12 1234.12 14809.40
TOTAL 150 67747.34

(1)  Calculamos las marcas de clase de cada intervalo formado


(2)  Calculamos las frecuencias absolutas de cada intervalo formado
(3)  Calculamos los cuadrados de las desviaciones típicas de cada uno de las
marcas de clase respecto a la media de datos agrupados 𝑥̅ = 229.87
(4)  Multiplicamos cada una de estas desviaciones típicas por la frecuencia
correspondiente a cada intervalo formado
Finalmente sumamos los valores correspondientes, y obtenemos la varianza
mediante la ecuación planteada:
∑𝑚 2
𝑖=1(𝑥𝑖 − 𝑥̅ ) ∗ 𝑓𝑖
𝑆2 =
𝑛
67747.34
𝑆2 =
150
𝑆 2 = 451.65
Finalmente la desviación estándar:

𝑆 = √451.65
𝑆 = 21.25
El valor de la desviación estándar S = 21.25, es un valor relativamente pequeño
con respecto al grupo de datos al que pertenece por lo que podemos concluir que

131
existe poca dispersión en los datos con respecto a la media, y esta es un buen
indicador de la tendencia central o lo que es lo mismo resume de una forma
adecuada a la información.
En R ponemos a consideración el siguiente código que nos ayudará a
calcular la media para datos agrupados:

> datos <- BJsales


> mc <- hist(datos,plot = F)$mids # Calculo las marcas de clase
> f <- hist(datos,plot = F)$counts # Calculo las frecuencias agrupadas por intervalos
> desv <- (mc - 229.87)^2 # Calculo los cuadrados de las desviaciones
> mult <- desv*f # Multiplico las desviaciones por la correspondiente
frecuencia
> num <- sum(mult) # Calculo el numerador según la ecuación planteada
> n <- sum(f) # Calculo el número total de datos (denominador)
> var <- num/n # Calculo la varianza según la ecuación
> var
[1] 451.6489
> desv <- sqrt(var) # Calculo la desviación estándar (raíz de la varianza)
> desv
[1] 21.25203

De igual manera en MATLAB podemos escribir el siguiente código

>> datos; % Exporto los datos


>> mc = [195, 205, 215, 225, 235, 245, 255, 265]; % Calculo las marcas de clase
>> f = hist(datos,mc); % Calculo las frecuencias agrupadas por intervalos
>> desv = (mc - 229.87).^2; % Calculo los cuadrados de las desviaciones
>> mult = desv.*f; % Multiplico las desviaciones por la correspondiente frecuencia
>> num = sum(mult); % Calculo el numerador según la ecuación planteada
>> n = sum(f); % Calculo el número total de datos (denominador)
>> var = num/n % Calculo la varianza según la ecuación

var =

451.6489

>> desv = sqrt(var) % Calculo la desviación estándar (raíz de la varianza)

desv =

21.2520

132
5.1.3. Medidas de Posición
Estas medidas permiten conocer posiciones no necesariamente centrales en el
conjunto de datos que los dividen de igual forma. Las medidas de este tipo más
comunes son los Cuartiles, Quintiles y Deciles.
Se puede por ejemplo decir que la mediana a más de ser una medida de tendencia
central es una medida de posición, puesto que divide al conjunto de datos en dos
partes exactamente iguales, ya que por encima de la mediana se ubica
exactamente el 50% de la información y por debajo de ella el otro 50% restante.

Cuartiles
Son valores que dividen a un conjunto de datos en 4 grupos, los cuales poseen la
misma cantidad de información. Existen tres cuartiles que dividen al conjunto de
datos en 4 partes iguales que representan la cuarta parte de la información cada
uno
Hasta 1º Cuartil “Q1” se determina el 25% de la información; hasta el 2º cuartil
“Q2”, que coincide con el valor de la mediana se determina el 50% de la
información; y hasta el 3º cuartil “Q3”, se determina el 75% de la información.

Para calcular los cuartiles debemos ordenar en 1º lugar los datos de menor a
mayor; existen casos donde resulta un poco más sencillo determinar la posición
de cada uno de los cuartiles, ya que podemos observar claramente aquellos tres
datos que dividen en cuatro grupos del mismo tamaño a todo el conjunto. Por
ejemplo con 7 o 15 datos cualesquiera:

133
Sin embargo existen situaciones en las que para dividir al conjunto de datos en
partes iguales, se debe tomar el valor medio entre dos datos. Por ejemplo si
tenemos 8 o 16 datos

En este caso podemos observar por ejemplo como el 1º cuartil Q1 es el promedio


entre los datos x2 y x3, Q2 el promedio entre x4 y x5, etc…
Para 16 datos

Boxplot
Para representar gráficamente los cuartiles existentes en un grupo de datos
utilizamos el llamado “boxplot” o diagrama de cajas, donde las líneas que se
encuentra en la mitad de la caja representa el 2º cuartil (mediana), y las líneas que
son límites de la misma representan el 1º y 3º cuartil respectivamente.

134
Cuando conjunto de datos presenta datos atípicos, el boxplot lo representa como
un punto fuera de la gráfica.

Como es de suponerse a continuación nos ayudaremos del software para calcular


los cuartiles y graficar el boxplot. Esto lo ilustramos de mejor manera con el
siguiente ejemplo:
Ejemplo 5.10
En R, existe una base de datos denominada “trees”, la cual contiene información
recolectada para 31 árboles distintos, en los cuales se midieron tres características,
por lo que existen tres variables que son: El Diámetro de su circunferencia “Girth”,

135
Su altura “Height”, y su volumen “Volume”. Encuentre los cuartiles en cada
Variable y grafique el respectivo Boxplot en cada caso:
Solución:
En R: Utilizaremos los comandos “quantile( )” y “boxplot( )” para
determinar los cuartiles y graficar el diagrama de caja respectivamente

> Diametro <- trees$Girth # Filtramos la variable Girth


> quantile(Diametro) # Calculo de los cuartiles
0% 25% 50% 75% 100%
8.30 11.05 12.90 15.25 20.60

> boxplot(Diametro,main = "Boxplot Girth")


________________________________________________________________________

> Altura <- trees$Height # Filtramos la variable Height


> quantile(Altura) # Calculo de los cuartiles
0% 25% 50% 75% 100%
63 72 76 80 87
> boxplot(Altura,main = "Boxplot Height")
_______________________________________________________________________
> Volumen <- trees$Volume # Filtramos la variable Volume
> quantile(Volumen) # Calculo de los cuartiles
0% 25% 50% 75% 100%
10.2 19.4 24.2 37.3 77.0
> boxplot(Volumen,main = "Boxplot Volume")

Los valores correspondientes al 0% y 100% son los mínimos y máximos


respectivamente. Como ya se dijo el 25% representa Q1, el 50% el Q2
(mediana), y el 75% representa a Q3.
Por ejemplo para la variable “Height”, podemos concluir que el valor más
pequeño es 63 (árbol con la altura más baja), el valor más grande es 87
(árbol con la mayor altura); Q1 = 72, quiere decir que exactamente 25% de
los árboles analizados tienen una altura inferior a este valor; Q2= 76 quiere
decir que 50% de los árboles analizados tiene una altura inferior y/o
superior a este valor; y Q3 = 80 nos dice que el 75% de los árboles
analizados tienen una altura por debajo de este valor.

136
Estos valores se los puede observar gráficamente en un boxplot. Los
boxplot que R realizó mediante el código propuesto son:
Gráfico 5.1 Salida en R De un Diagrama de Caja

Estos gráficos se los realizó por separado, uno para cada variable, sin
embargo se puede realizar los tres en uno solo

137
Gráfico 5.2 Salida en R de 3 boxplot en un solo gráfico

En el Boxplot podemos notar que la Variable “Volume” posee un dato atípico, es


decir mucho más grande que el resto, este dato es 70.

En MATLAB: Después de exportar la base de datos desde R, utilizaremos


el comando “prctile( )”, el cual calcula los percentiles que el usuario le
indique; así el primer argumento son los datos que se va analizar, y el 2º
argumento corresponde a un vector indicando los percentiles que se desee
calcular, para nuestro caso siempre serán el 25, 75 y 50.

138
>> datos % Exporto los datos

datos =

Girth: [31x1 double]


Height: [31x1 double]
Volume: [31x1 double]
_________________________________________________________________________________
>> Diam = datos.Girth; % Filtro la variable
>> cuartiles = prctile(Diam,[25,50,75]) % Calculo los cuartiles

cuartiles =

11.0250 12.9000 15.6250


_________________________________________________________________________________

>> Altura = datos.Height; % Filtro la variable


>> cuartiles = prctile(Altura,[25,50,75]) % Calculo los cuartiles

cuartiles =

72 76 80
_________________________________________________________________________________

>> Volumen = datos.Volume; % Filtro la variable


>> cuartiles = prctile(Volumen,[25,50,75]) % Calculo los cuartiles

cuartiles =

19.2500 24.2000 37.8000

Como se mostró este es el cálculo de los cuartiles variable por variable, se


podría sin embargo calcular de una sola vez los cuartiles para las tres
variables, esto transformando los datos a matriz y utilizando el mismo
comando:

>> datos % Exporto los datos


>> X = [datos.Girth,datos.Height,datos.Volume]; % Convierto los datos a matriz
>> cuartiles = prctile(X,[25,50,75]) % Calculo los cuartiles

cuartiles =

11.0250 72.0000 19.2500


12.9000 76.0000 24.2000
15.6250 80.0000 37.8000

139
De la matriz encontrada, la 1º columna corresponde a los cuartiles 1, 2 y 3
respectivamente de la 1º variable “Girth”; la 2º columna de la variable
“Height”, y la 3º columna de la variable “Volume”

El boxplot lo hacemos con el comando boxplot:

>> boxplot(datos.Girth) % Construye un boxplot solo para la variable “Height”

>> boxplot(datos.Height) % Construye un boxplot solo para la variable “Height”

>> boxplot(datos.Volume) % Construye un boxplot solo para la variable “Volume”

>> X = [datos.Girth,datos.Height,datos.Volume]; % Convierto los datos a matriz


>> boxplot(datos.Volume) % Construye un boxplot para las tres variables (3 en 1)

Gráfico 5.3 Salida en MATLAB de un Boxplot para la Variable Height

85

80
Values

75

70

65

1
Column Number

140
Gráfico 5.4 Salida en MATLAB de un Boxplot para las tres variables

90

80

70

60
Values

50

40

30

20

10

1 2 3
Column Number

Quintiles y Deciles
Quintil.- Son los 4 valores que dividen a un grupo de datos en cinco partes iguales.
Cada parte representa el 20% de la información.

Deciles.- Son los 9 valores que dividen a un grupo de datos en diez partes iguales.
Cada parte representa el 10% de la información.

Ejemplo 5.11.
Determine los quintiles y deciles de la variable “Height”, en la base de datos “trees”
Solución:
En R utilizaremos el mismo comando que para los cuartiles “quantile( )”,
con la diferencia que haremos uso del argumento <<probs>> el cual nos
permite en un rango de 0 a 1 determinar cuáles son los percentiles que
deseamos calcular. Para nuestro caso específico de los quintiles los
percentiles que se desea son los correspondientes al 20%, 40%, 60% y

141
80%; así mismo en el caso de los deciles tenderemos que indicar los puntos
correspondientes al 10%, 20%, 30%, 40%, 50%, 60%, 70%, 80% y 90%

> Altura <- trees$Height


> quantile(Altura,probs = seq(0.2,0.8,0.2)) # Calculo de los quintiles
20% 40% 60% 80%
71 75 79 81
> quantile(Altura,probs = seq(0.1,0.9,0.1)) # Calculo de los deciles
10% 20% 30% 40% 50% 60% 70% 80% 90%
66 71 74 75 76 79 80 81 83

Por ejemplo el quintil 75, que corresponde al 40% de la información,


significa que por debajo de este datos se encuentra el 40% de la
información y que análogamente por encima está el 60% de la misma;
además entre cada uno de estos valores de quintiles se encuentra 20% de
la información. La misma manera de interpretar tienen los deciles

En MATLAB, utilizaremos el mismo comando “prctile( )”, indicando en


los argumentos los percentiles correspondientes a los quintiles y a los
deciles. Luego de exportar los datos desde R entonces:

>> Altura = datos.Height;


>> quintiles = prctile(Altura,[20,40,60,80]) % Calculo quintiles

quintiles =

70.7000 75.0000 79.1000 81.0000

>> deciles = prctile(Altura,10:10:90) % Calculo deciles

deciles =

65.6000 70.7000 73.6000 75.0000 76.0000 79.1000 80.0000 81.0000 83.8000

5.2. Descripción Numérica de Datos Bivariados


En este corto apartado estudiaremos la manera de describir numéricamente la
relación existente entre dos variables. Denominamos análisis bivariado debido a

142
la existencia de dos variables necesarias para determinar las relaciones existentes
entre ellas, y la influencia que tiene la una sobre la otra. Básicamente para estudiar
aquello analizaremos dos medidas estadísticas que son la covarianza y el
coeficiente de correlación.

5.2.1. Covarianza
Dadas dos variables estadísticas X e Y, matemáticamente la covarianza “SXY”
existente entre estas dos variables queda definida por:
𝑛
1
𝑆𝑋𝑌 = ∑(𝑥𝑖 − 𝑥̅ )(𝑦𝑖 − 𝑦̅)
𝑛
𝑖=1

Donde:
SXY  Representa la Covarianza
n  es el número total de datos o individuos
xi  son los datos de la primera variable
yi  son los datos de la segunda variable
𝑥̅  la media de la primera variable
𝑦̅  la media de la segunda variable
La covarianza mide el tipo de relación conjunta que existe entre las dos variables
en estudio, de esta forma si:
 SXY > 0, esto mostrará una relación directamente proporcional entre las
dos variables, es decir que a mayor incremento (o decremento) de la una,
habrá mayor incremento (o decremento) de la otra también. Suelen ser por
ejemplo variables muy comunes que muestran una covarianza positiva
<<Edad de un grupo de niños>> con la <<Estatura de un grupo de
niños>>; en la gran mayoría de casos suele suceder que a mayor edad,
mayor es la estatura correspondiente, o análogamente a menor edad
menor estatura. Sin duda cuando ocurre esto tendremos una covarianza
positiva
 SXY < 0, esto mostrará una relación inversamente proporcional entre las
dos variables, es decir que al ir aumentando la una, la otra tomará un

143
sentido contrario, es decir irá disminuyendo. Suelen ser por ejemplo
variables muy comunes que muestran una covarianza negativa <<Edad de
un grupo de personas de 25 a 100 años>> con la <<Fuerza que posee un
grupo de personas de 25 a 100 años>>; en la gran mayoría de los casos
suele suceder (en los individuos pertenecientes a este grupo de edad) que
a mayor edad que tenga una persona menor fuerza posee.
 SXY = 0, esto mostrará que no existe ningún tipo de relación entre las dos
variables, es decir estas son independientes, por lo que la una no influye en
nada en la otra. Suelen ser por ejemplo variables muy comunes que
muestran una covarianza nula <<Coeficiente intelectual de una persona>>
con el <<Color de ojos de una persona>>; en la gran mayoría de casos suele
suceder que el coeficiente intelectual que tenga persona no dependa o se
vea influido de su color de ojos

Ejemplo 5.12
En R existe una base de datos denominada “mtcars”, en la cual se recoge
información acerca de 32 automóviles. Se miden 11 características, es decir existen
datos para estos automóviles acerca de 11 variables; 3 de estas variables por
ejemplo son <<mpg>>, que mide las millas por galón de gasolina que consume
cada auto, <<Displacement>> que mide el desplazamiento que cada auto tiene, y
<<hp>> que mide los caballos de fuerza que posee cada auto. Determine a través
de la covarianza el tipo de relación existente entre “mpg - disp” y “disp - hp”.
Solución
En R utilizaremos el comando “cov( )”, cuyos dos argumentos principales
<<x>> e <<y>> son los datos correspondientes a las dos variables que se
desean comparar. Note que existe un argumento denominado
<<method>>, en el cual podemos elegir las opciones pearson, spearman,
o kendall. El que viene por defecto si no especificamos nada en este
argumento es el método de Pearson que es precisamente el que coincide
con la ecuación planteada en este texto, por tanto será el que siempre

144
utilizaremos, y al venir por defecto este método en el comando podemos o
no especificarlo.

> d <- mtcars


> cov(x = d$mpg,y = d$disp) #Covarianza mpg - disp
[1] -633.0972

> cov(x = d$disp,y = d$hp,) #Covarianza disp. - hp


[1] 6721.159

En MATLAB, luego de exportar los datos desde R utilizamos el comando


“cov( )”, el cual nos va a devolver una matriz 2x2, cuya diagonal principal
indica los valores de la varianza de la 1º y la 2º variable respectivamente;
y la diagonal secundaria siempre se observará el mismo valor, y
precisamente es el valor de la covarianza entre las dos variables.

>> format shortg


>> datos; % Exporto los datos mtcars
>> cov(datos.mpg,datos.disp) % Covarianza mpg - disp

ans =

36.324 -633.1
-633.1 15361

>> cov(datos.disp,datos.hp) % Covarianza disp. - hp

ans =

15361 6721.2
6721.2 4700.9

Nota.- Posiblemente los resultados debido a que los números son cifras
grandes, se presenten de la siguiente forma:

145
>> cov(datos.disp,datos.hp)

ans =

1.0e+004 *

1.5361 0.6721
0.6721 0.4701

Note que es el mismo resultado pero presentado de distinta


forma. Para que los datos se visualicen de la forma como
inicialmente son presentados debemos escribir antes la
instrucción “format shortg”. Esto solo en el caso de ser
necesario

Del ejercicio lo que nos interesa es conocer el tipo de relación existente entre las
variables. Al respecto y basándonos en la covarianza calculada podemos decir:
- La covarianza entre “mpg” y “disp” de -633.1 nos indica que existe
una relación inversamente proporcional entre estas dos variables, es
decir que mientras las millas por galón registradas por los autos
aumenta, el desplazamiento de los mismos disminuye y viceversa.
- La covarianza entre “disp” y “hp” de -633.1 nos indica que existe una
relación directamente proporcional entre estas dos variables, es decir
que mientras más potencia tenga el automóvil medido en caballos de
fuerza, mayor es el desplazamiento que realizan los autos y viceversa.

5.2.2. Correlación
Si bien es cierto la covarianza nos indica el tipo de relación que existe entre dos
variables, sin embargo nada nos dice acerca de la fuerza de esta relación, es por
eso que se propone un coeficiente de correlación (de Pearson), el cual se encuentra
en un rango de -1 a 1, y que mide la fuerza con la que dos variables se relacionan.

146
Es importante conocer no solo el tipo de relación entre dos variables, puesto que
es posible que dos pares de variables tengan el mismo tipo de relación, pero tal vez
un par se relacione con más o menos fuerza que otro.

Matemáticamente el coeficiente de correlación de Pearson “r” queda definido por


la ecuación:
𝑆𝑋𝑌
𝑟=
𝑆𝑥 𝑆𝑌
Donde:
r  Coeficiente de Correlación de Pearson
SXY  Covarianza entre las dos variables
Sx  Desviación estándar de la primera variable
SY  Desviación estándar de la segunda variable

El coeficiente tomará valores entre -1 y 1. Mientras más se acerque a estos


extremos mayor será la fuerza de la relación que presenten estas variables,
análogamente mientras más se acerque a cero menor será la fuerza de esta relación

De este coeficiente de correlación analizamos dos aspectos importantes:


1) El signo del coeficiente:
Si el signo del coeficiente es el mismo que tiene la covarianza de las dos
variables que se estudien, este determina el tipo de relación existente entre
las dos variables, es decir un signo positivo indicará una relación
directamente proporcional, mientras que un signo negativo mostrará una
relación inversamente proporcional
2) El valor absoluto:
En valor absoluto este coeficiente estará en un rango de 0 a 1
Si 0 < |r | < 0.25, existe una relación débil
Si 0.25 < |r | < 0.50, existe una relación moderadamente débil
Si 0.50 < |r | < 0.75, existe una relación moderadamente fuerte

147
Si 0.75 < |r | < 1, existe una relación fuerte

Ejemplo 5.13
A partir de la base de datos “mtcars”, encuentre e interprete el coeficiente de
correlación de los mismos pares de variables para los que se encontró la covarianza
en el ejercicio 5.12, es decir “mpg - disp” y “disp - hp”.
Solución
En R utilizamos el comando “cor( )”, cuyos dos argumentos principales
<<x>> e <<y>> son los datos correspondientes a las dos variables que se
desean comparar. El comando <<method>> usa por defecto el coeficiente
de correlación de Pearson, por lo que se puede o no aclarar.

> d <- mtcars


> cor(x = d$mpg,y = d$disp) #Correlación mpg - disp
[1] -0.8475514
> cor(x = d$disp,y = d$hp) #Correlación disp. - hp
[1] 0.7909486

En MATLAB utilizamos el comando “corrcoef( )”, cuyos dos argumentos


principales son los dos vectores que contienen los datos de las dos variables
que se desean analizar. El resultado es una matriz 2x2, cuya diagonal
secundaria contiene el mismo valor perteneciente al coeficiente de
correlación de Pearson; la diagonal principal es el coeficiente de
correlación de cada variable consigo mismo por lo que este valor siempre
será igual a 1

148
>> datos; % Exporto los datos mtcars
>> corrcoef(datos.mpg,datos.disp) % Correlación mpg - disp

ans =

1.0000 -0.8476
-0.8476 1.0000

>> corrcoef(datos.disp,datos.hp) % Correlación disp. - hp

ans =

1.0000 0.7909
0.7909 1.0000

- El coeficiente de correlación existente entre las variables mpg y disp, al


tener un signo negativo indica que la relación existente entre las dos
variables es inversamente proporcional (tal como ya se analizó en la
covarianza), mientras que su valor absoluto de 0.8476 nos indica que
entre ambas variables existe una fuerte relación. En conclusión mpg y
disp presentan una relación inversamente proporcional fuerte
- El coeficiente de correlación existente entre las variables disp y hp, al
tener un signo positivo indica que la relación existente entre las dos
variables es directamente proporcional (tal como ya se analizó en la
covarianza), mientras que su valor absoluto de 0.7909 nos indica que
entre ambas variables existe una fuerte relación. En conclusión disp y
hp presentan una relación directamente proporcional fuerte.

149

También podría gustarte