Practica DESCRIPCION DE RSTUDIO Objeti

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 150

Práctica 1

DESCRIPCIÓN DE RSTUDIO
Objetivos
• Instalar R y RStudio
• Familiarizarse con el entorno de RStudio
• Introducir, almacenar e importar datos
• Funciones en RStudio.

Descripción e instalación de R
RStudio es una interfaz que permite acceder de manera sencilla a toda la potencia
de R, para utilizar RStudio se requiere haber instalado R previamente.
R es un lenguaje orientado a objetos, es un lenguaje para el cálculo estadístico y la
generación de gráficos, que ofrece una gran variedad de técnicas estadísticas y
gráficas. Es un entorno de análisis y programación estadísticos que, en su aspecto
externo, es similar a S. Es un lenguaje de programación completo con el que se
añaden nuevas técnicas mediante la definición de funciones.
Aunque comenzar a trabajar con R es más complejo que hacerlo con programas
como SPSS, Statgraphics,…, sin embargo tiene muchas ventajas sobre ellos una de la
más importante es que es un software libre en el que colaboran muchos usuarios
para ampliar sus funciones.

A lo largo del texto veremos cómo utilizar R para realizar análisis convencionales,
como los que se encuentran en BMDP, SAS, SPSS o Statgraphics, y dejaremos patente
en algunos momentos sus posibilidades de análisis más complejos, como GLIM o
GENSTAT, así como el desarrollo de nuevos análisis. R se distribuye de acuerdo a
GNU GENERAL PUBLIC LICENSE.

R se puede conseguir gratuitamente en varias direcciones de internet, una de ellas,


es http://www.r-project.org

En el sitio web: http://cran.es.project.org se encuentra todo el proyecto R. Este


proyecto incluye las fuentes para construir R, lo que permite saber cómo está
construido el programa, así como las direcciones donde se pueden conseguir las
herramientas necesarias para hacerlo.
Para instalar R, en el sistema operativo Windows, elegir Dowload R for Windows.
La instalación se encuentra en un ejecutable. Descargar el archivo de instalación y
se muestra la siguiente pantalla

La instalación sólo realiza cambios mínimos en windows y copia los archivos


necesarios en un directorio. Su desinstalación es sencilla y completa.

El directorio habitual donde realiza la instalación es C:/Archivos de programa. El


programa crea en él un subdirectorio, R, y por cada versión un subdirectorio de este
último donde copia todos los archivos, por ejemplo R-3.0.2. para la versión 3.0.2. En
la instalación es conveniente seleccionar todas las opciones que se ofrecen, de tal
modo que siempre se disponga de todas las ayudas posibles.
El programa de instalación puede crear en el directorio un acceso directo al
programa, que se encuentra en el directorio de instalación, en bin/Rgui.s. También
se encuentra allí otro programa, bin/Rterm.s, utilizado para ejecución asíncrona del
programa.

Resumen: En el sitio web: http://www.r-project.org: Ir a “Download”, elegir país de


descarga (España) y seleccionar la versión correspondiente a nuestro sistema
operativo (Linus, Windows o Mac) y seguir las instrucciones de instalación.
Descripción e instalación de RStudio
RStudio es una interfaz que permite acceder de manera sencilla a toda la potencia
de R. Para utilizar RStudio se requiere haber instalado R previamente. Al igual que
R-project, RStudio es software libre.

El objetivo de los creadores de RStudio es desarrollar una herramienta potente que


soporte los procedimientos y las técnicas requeridas para realizar análisis de
calidad y dignos de confianza. Al mismo tiempo, pretenden que RStudio sea tan
sencillo e intuitivo como sea posible para proporcionar un entorno amigable, tanto
para los ya experimentados como para los nuevos usuarios

La instalación de RStudio se puede realizar desde la página oficial del programa


http://www.rstudio.org
Pinchar en Download now y se muestra la siguiente pantalla

Seleccionar Download RStudio Desktop


Elegir la versión correspondiente a nuestro sistema operativo (Linux, Windows o
Mac)

y seguir las instrucciones de instalación.

Resumen: En el sitio web: http:// www.rstudio.org, seleccionar Download now y a


continuación seleccionar Download RStudio Desktop, elegir la versión
correspondiente a nuestro sistema operativo (Linus, Windows o Mac) y seguir las
instrucciones de instalación.
Introducción a RStudio
Una vez instalados R y RStudio procedemos a ejecutar el programa RStudio desde
cualquiera de los iconos que genera y se mostrará la siguiente pantalla
Esta pantalla está dividida en tres partes:

• La ventana de la izquierda donde está el prompt “>” , llamada Consola, es el


espacio de trabajo
• La ventana de la derecha se divide en dos:
• En la ventana superior derecha se encuentra el historial de objetos almacenados en
memoria. Desde esta ventana también podemos:
• Limpiar nuestro historial
• Importar datos
• Muestra los comandos y funciones implementadas de los informes con los que se
han trabajado
• En la ventana inferior de la derecha RStudio muestra el directorio de trabajo, los
gráficos que se van generando, paquetes para cargarlos e instalarlos directamente,
ayuda y un visor HTML. Estas pestañas se irán describiendo a lo largo del
documento.
Barra del menú principal: Opciones
Desde la barra del Menú principal se puede acceder a todos los menús de
RStudio. Los primeros menús: Archivo, Edición, Ver y Ayuda son habituales en los
programas bajo Windows. El resto de menús son específicos de RStudio estos
permiten realizar cambios en los datos, obtener resultados estadísticos, numéricos,
gráficos……A continuación se muestran los distintos menús desplegables, así como
la finalidad de alguna de las opciones.

Cada uno de estos menús contiene distintas opciones que se muestran pulsando en
cada una de ellos.
El menú FILE

Este menú contiene las opciones más generales que suelen tener todos los
programas como abrir un archivo, guardar, cerrar…

Unas de las principales características de RStudio es la flexibilidad para trabajar con


diferentes archivos que podemos generar desde New file.
• New File->R Script: Permite abrir una nueva ventana en la interfaz de RStudio, la
ventana de Edición. Aunque se puede desarrollar todo el trabajo en el espacio de
trabajo, en la consola, esta no es la forma más eficiente de trabajar en RStudio. Es
muy útil tener un entorno donde manipular (corregir, repetir, guardar, …) las
entradas de código que solicitemos a R. Este entorno de trabajo es el Editor de

R.
En la ventana de edición se escriben las instrucciones y para ejecutar estas
instrucciones se pulsa (Ctrl+Intro); (Ctrl+r) o pinchando en el icono Run (en la
parte superior derecha de la ventana de edición).
• New File->Text File: Permite abrir la ventana de texto, en los archivos tipo texto no
se pueden ejecutar ninguna función a menos que se copien y se peguen en el espacio
de trabajo.
• New File->C++ File: Permite compilar funciones de C++ en R.
• New File->R Sweave: Crea un archivo que permite trabajar con LaTeX.
• New File->R Markdown y New File->R HTML: Herramientas de RStudio para la
creación de informes web. Markdown es un lenguaje simple de marcas diseñado
para hacer que el contenido web sea fácil. En lugar de escribir el código HTML y CSS,
Markdown permite el uso de una sintaxis mucho más cómoda (leer más).
• New File->R Presentation. Herramientas de RStudio para hacer presentaciones
sencillas. El objetivo de las presentaciones es hacer diapositivas que hacen uso del
código R y ecuaciones LaTeX lo más sencillo posible.
• New File->Rd File. Uno de los requisitos básicos para los paquetes de R es que todas
las funciones exportadas, objetos y conjuntos de datos tienen la documentación
completa. RStudio también incluye un amplio soporte para la edición de
documentación de R, (Los archivos Rd utilizan un formato simple de marcas que se
asemeja sintácticamente LaTeX).
• New Project: Permite crear proyectos que hacen que sea más fácil dividir el trabajo
en múltiples contextos, cada uno con su propio directorio de trabajo, espacio de
trabajo, historial y los documentos de origen. Los proyectos de RStudio están
asociados a los directorios de trabajo.

Al crear un proyecto RStudio:


• Se crea un archivo de proyecto (con una extensión Rproj.) dentro del directorio del
proyecto. Este archivo contiene diversas opciones de proyecto.
• Se crea un directorio oculto (nombrado Rproj.user) donde se almacenan los
archivos específicos de un proyecto de carácter temporal (por ejemplo, los
documentos originales guardados automáticamente, estado de la ventana, etc.). Este
directorio también se agrega automáticamente a Rbuildignore, Gitignore, etc, si es
necesario.
• Se carga el proyecto en RStudio y se muestra su nombre en la barra de herramientas
de Proyectos.
Seleccionando File/New Project se muestra la siguiente ventana con las siguientes
opciones:

• Open Proyect…: Permite buscar y seleccionar un archivo de un proyecto existente.


• Open Project in New Window…: Permite trabajar con varios proyectos RStudio
simultaneamente. También se puede hacer abriendo varios archivos de proyecto a
través de la shell del sistema (es decir, doble clic en el archivo de proyecto).
• Recent Project: Permire seleccionar un proyecto de la lista de proyectos abiertos
recientemente.
El menú EDIT
• Undo/Redo: Deshace/Rehace la última acción realizada/rechazada en la ventana
del editor.
• Cut/Copy/Paste: Corta/ copia/pega cualquiere conjunto de texto de la ventana del
editor.
• Folding: Permite mostrar y ocultar fácilmente los bloques de código para que sea
más fácil navegar por el archivo del código fuente.
• Folding/Collapse: Permite duplicar una selección arbitraria de códigoLas regiones
plegadas se conservan durante la edición de un documento, sin embargo cuando un
archivo se cierra y se vuelve a abrir todas las regiones plegables son por defecto
regiones no plegables.
• Go to line…: Permite ir rápidamente a una línea concreta del texto que se esté
utilizando en la ventana del editor.
• Find…: Permie buscar alguna palabra o conjunto de palabras del texto que se esté
utilizando en la ventana del editor.
• Find Next/Find Previous: Encuentra el siguiente/anterior conjunto de letras
idéntico al buscado anteriormente en la misma ventana del editor.
• Replace and Find: Busca alguna palabra o conjunto de palabras del texto que se
esté utilizando en la ventana del editor, y además reemplaza el conjunto de texto
buscado por otro que elijamos.
• Find in Files…: Permite buscar de forma recursiva todos los archivos para cada
ocurrencia de una cadena dada en un directorio específico.

Se puede personalizar aún más la búsqueda con expresiones regulares y filtros para
tipos de archivos específicos. El resultado de la búsqueda se mostrará en el panel
junto a la consola (por defecto).

• Clear Console: Limpia por completo la consola, pero no borra los objetos que se
hayan almacenado anteriormente en la memoria.
El menú CODE
En este menú están las opciones más directas con el espacio de trabajo.

• Back/Fordward: Rehacer/Deshacer una acción hecha en el script de trabajo.


• Insert Section…: Escribe un comentario en el script con el título de la sección (útil
para ir directamente a una parte del trabajo).
• Jump To...: Permite ir directamente a una función creada anteriormente en el script
de trabajo o ir a una sección.
• Go To File Function: Permite acceder rápidamente a cualquier archivo o función
creada con RStudio.
• Go To Help: Muestra la ayuda del objeto donde esté situado el cursor.
• Go To Function Definition: Muestra la definición interna de la función que utiliza
el programa para la ejecución de ésta.
• Extract Function: Permite crear funciones, para ello se tiene que seleccionar el
texto que se quiere incluir en ésta.
• Reident Lines: Lleva el cursor al principio de la línea siguiente.
• Coment/Uncoment Lines: Permite transformar líneas de código en comentarios.
• Run Line(s): Ejecuta la línea donde está situado el cursor o un trozo de código que
se seleccione.
• Re-Run Previous: Ejecuta de nuevo todo el código ejecutado por última vez.
• Run Region: Permite ejecutar una sección de código.
• Source: Almacena en la memoria los objetos definidos en la ventana de edición.
• Source with Echo: Ejecuta en la consola los objetos definidos en la ventana de
edición.
• Source File: Almacena en la memoria los objetos definidos de cualquier archivo
creado con RStudio aunque no estén abiertos.
El menú VIEW
• Hide/Show Toolbar: Muestra/Oculta la barra de herramientas.
• Zoom In/Zoom Out: Realiza un zoom sobre cada una de las ventanas
aumentando/disminuyendo el tamaño de su contenido.
• Switch To Tab: Permite cambiar de pestaña para visualizar cualquier hoja de
edición.
• Next Tab/Previous Tab: Permite cambiar a la pestaña siguiente/anterior para
visualizar la hoja de edición siguiente/anterior.
• First Tab/Last Tab: Permite cambiar a la primera/última pestaña para visualizar
la primera/última hoja de edición.
• Move Focus To Source/Move Focus To Console: Mueve el cursor a la ventana de
edición/consola de trabajo desde cualquier otra ventana.
• Move Focus To Help: Mueve el cursor a la pestaña de ayuda que por defecto se
muestra en la ventana auxiliar número 2.
• Show History: Muestra todo el código que se ha ejecutado en la consola desde la
última vez que se eliminó el historial. Por defecto el historial se muestra en la
ventana auxiliar número 1.
• Show Files/Show Plots/ Show Packages: Muestra el conjunto de ficheros
existentes en el directorio de trabajo/conjunto de gráficos que se han
generado/conjunto de paquetes que el programa tiene instalados hasta el momento.
Por defecto se muestra en la ventana auxiliar número 2.
• Show Environment: Muestra el conjunto de objetos que se han guardado en la
memoria del programa. Por defecto se muestra en la ventana auxiliar número 1.
El menú PLOTS
• Next Plot/ Previous Plot: Muestra el gráfico siguiente/anterior.
• Zoom Plot…: Abre una nueva ventana en la que se muestra el gráfico seleccionado.
• Save Plot as Image…/Save Plot as PDF…: Guarda el gráfico seleccionado como una
imagen (.png, .jpg, .tiff, .bmp, .metafile, .svg, .eps)/en pdf
• Copy Plot to Clipboard: Copia el gráfico en un portapapeles.
• Remove Plo…t: Elimina el gráfico seleccionado
• Clear All…: Elimina todos los gráficos creados.
El menú SESSION

• Interrupt R: Permite interrumpir algún proceso interno que no queremos que


finalice.
• Restart R: Permite actualizar la sesión en la que estemos trabajando.
• Terminate R: Permite eliminar toda la información creada en una sesión, pero sin
eliminar lo escrito en la ventana de edición.
• Set Working Directory: Permite configurar el directorio de trabajo.
• Load Workspace/Save Workspace As/Clear Workspace: Permite
cargar/guardar/eliminar un determinado espacio de trabajo. Por defecto los objetos
contenidos en un espacio de trabajo se visualizan en la ventana auxiliar número 1.

El menú BUILD
• Configure Build Tools: Permite construir paquetes y herramientas dentro de un
proyecto creado por el usuario.
El menú DEBUG
• Toggle Breakpoint: Permite introducir un punto de interrupción en el texto de la
ventana de edición con la finalidad de averiguar si, hasta la línea donde se coloca
dicho punto, la ejecución del texto es correcta.
• Clear All Breakpoints: Permite eliminar todos los puntos de interrupción que se
hayan utilizado hasta el momento.
• Execute Next Line: Permite ejecutar texto colocado después de la línea donde se ha
introducido un punto de interrupción.
• Continue: Permite continuar con la ejecución una vez que se ha detenido dicha
ejecución en el punto de interrupción.
• Stop Debugging: Detiene la depuración.
• On Error: En caso de error, permite elegir entre que sólo salga un mensaje de aviso,
que se inspeccione el error o que no ejecute más código a partir del error.
• Debugging Help: Muestra la página web del programa con la ayuda sobre la
depuración de errores.
El menú TOOLS

• Import Dataset: Importa un conjunto de datos desde un archivo .txt guardado en


nuestro directorio (From Text File…) o desde cualquier página web (From Web
URL…).
• Install Packages…: Permite instalar paquetes. Es importante que dentro de esta
opción esté marcada la opción de Install dependencies.
• Check for Packages Updates…: Permite actualizar los paquetes seleccionados.
• Version Control: Permite controlar varios proyectos a la vez, hacer copias de
seguridad de los proyectos…

• Shell…: Es una interfaz para las operaciones más comunes de control de


versiones.

• Global Options…: Muestra las opciones generales de RStudio


Nota: Una vez instalado el paquete hay que cargar dicho paquete, para
ello desde el panel de paquetes simplemente se selecciona dicho paquete
El menú HELP

• R Help: Muestra la ayuda del programa. Por defecto se puede visualizar en la


ventana auxiliar número 2.
• About RStudio: Muestra información sobre RStudio.
• Check For Updates: Permite realizar una búsqueda en la última versión con la
finalidad de obtener la última actualización de dicho programa.
• RStudio Docs: Muestra la página web del programa en la que se explica la
documentación con la que se puede trabajar en RStudio.
• RStudio Support: Muestra la página web del programa en la que hay un soporte de
ayuda para cualquier duda sobre RStudio.
• Keyboard Shortcuts: Muestra la página web del programa, en la que se puede
consultar todas los posibles métodos abreviados de teclado (combinaciones de
teclas) para ejecutar los comandos en RStudio.
• Diagnostics: Permite realizar algunas opciones sobre diagnósticos del programa.
Conceptos de interés
• demo(): Abre una ventana con funciones de R para que se observe cómo se
ejecutan y el resultado que devuelve
• help():Para una información más detallada utilizamos la función help() (ayuda).
RStudio no necesita conectarse a la web para mostrar la ayuda, mientras que R sí.
• apropos(” “): Si no nos acordamos del nombre exacto de una función podemos
usar la función apropos(” “) y entre paréntesis algunas letras de la función entre
comillas.
• example(): Muestra un ejemplo práctico de una función.
> demo()

> help()
> apropos(“med”)
[1] “.__C__namedList” “.rs.emptyNamedList”
[3] “.rs.namedVectorAsList” “elNamed”
[5] “elNamed<-” “median”
[7] “median.default” “medpolish”
[9] “runmed”
> example(median)
> example(median)
median> median(1:4) # = 2.5 [even number]
[1] 2.5

median> median(c(1:3, 100, 1000)) # = 3 [odd, robust]


[1] 3

Estructura de datos fundamentales


• Variables
La siguiente instrucción asigna el valor 25 a la variable años
> años=25
También se puede utilizar el símbolo “<-”
> años <- 25
Si el valor asignado es alfanumérico, se especifica entre comillas
> ciudad = “Granada”
> ciudad
[1] “Granada”
• Vectores
El primer tipo de objeto que vamos a introducir es el vector.
* Se puede crear un vector utilizando la función c(), que concatena
todos los elementos que recibe como argumentos.
>c(2,7,1,6)
[1] 2 7 1 6
>c(1:10)
[1] 1 2 3 4 5 6 7 8 9 10
>c(1:10,2,7,1,6,2:-5)
[1] 1 2 3 4 5 6 7 8 9 10 2 7 1 6 2 1 0 -1 -2 -3 -4 -5
>c()
NULL
En el último caso, el resultado es el objeto NULL.
En el caso de vectores alfanuméricos, los elementos van entrecomillados
>nombre.mes=c(“Enero”,”Febrero”,”Marzo”,”Abril”,”Mayo”,”Junio”,”Julio”,”Agosto”,
”Septiembre”,”Octubre”,”Noviembre”,”Diciembre”)
>nombre.mes
[1] “Enero” “Febrero” “Marzo” “Abril”
[5] “Mayo” “Junio” “Julio” “Agosto”
[9] “Septiembre” “Octubre” “Noviembre” “Diciembre”
>c(“Hola”, “Uno”, “Dos”)
[1] “Hola” “Uno” “Dos”

Un vector está formado por elementos del mismo tipo. Si se mezclan números y
cadenas de caracteres, se obtendrá un vector alfanumérico. Si se mezclan números
reales y complejos, se obtendrá un vector de números complejos.

* Para acceder a los elementos de unvector se utilizan los corchetes


> nombre.mes[3]
[1] “Marzo”
> nombre.mes[6]
[1] “Junio”
> nombre.mes[2:6]
[1] “Febrero” “Marzo” “Abril” “Mayo” “Junio”
> nombre.mes[c(1, 4, 6, 8)]
[1] “Enero” “Abril” “Junio” “Agosto”
* El símbolo de dos puntos, situado entre dos números, construye un
vector de modo sencillo, tanto en orden ascendente como
descendente.
>1:10
[1] 1 2 3 4 5 6 7 8 9 10
>1:3.5
[1] 1 2 3
>1.9:3.5
[1] 1.9 2.9
El vector comienza en el primer número suministrado y finaliza en el segundo o en
un número anterior sin sobrepasarlo, tanto en orden ascendente como
descendente.
♦ Algunas funciones de utilidad sobre los vectores
* Names()
Mediante la función names() podemos asignar nombre a los elementos de un
vector. De hecho, esta función permite dar nombre a los elementos de cualquier
objeto. Aplicada a un vector se hace de la siguiente forma:
> x<-1:5
>x
[1] 1 2 3 4 5
>names(x)<-c(“I”,”II”,”III”,”IV”,”V”)
>x
I II III IV V
* Seq()
La función seq() permite construir vectores que son sucesiones equiespaciadas,
esta función posee los siguientes argumentos:
• from Valor inicial de la sucesión
• to Valor final de la sucesión
• by Espaciado entre los elementos
• length Longitud del valor resultante
• along Un objeto cuya longitud se usará para el objeto a construir.

Si no se indica algún argumento, por defecto vale 1

> seq(1, 100, length = 5)


[1] 1.00 25.75 50.50 75.25 100.00
> x <- c (1: 7)
> x [seq (1, 7, by = 2)]
[1] 1 3 5 7
* Mode()
La función mode() devuelve o modifica el tipo de un objeto.
> x = 1:5
>mode(x)
[1] “numeric”
♦ Operaciones básicas con vectores
Las operaciones básicas que podemos realizar con vectores las podemos resumir
en la siguiente tabla.
Esta tabla se puede
visualizar ejecutando la función demo(plotmath)
> demo(plotmath)
• Factor
La función “factor” crea un vector de variables cualitativas, donde el atributo levels
indica los valores numéricos posibles.Un factor corresponde a una variable
nominal u ordinal, dividida en categorías, y que se utiliza, por ejemplo, para dividir
una población en grupos. Esta función será de vital importancia en las próximas
prácticas.
factor (x, levels =, labels =, exclude = , ordered = )

Siendo sus argumentos los siguientes:

• x son los datos a partir de los cuales se genera el factor


• levels es un vector de niveles opcional. Los valores de x que no correspondan a uno
de los indicados se sustituyen por NA. El valor predeterminado de este parámetro
es la lista ordenada de valores distintos de x
• labels es un vector de valores que se utiliza como etiqueta de los niveles. El valor
predeterminadoes as.character(levels)
• exclude es un vector de valores que deben excluirse de la formación de niveles y
sustituirse por NA
• ordered es un valor lógico que indica si lo es el factor.
> sexo <- c (“Hombre”, “Mujer”, “Mujer”,”Hombre”, “Hombre” ,”Mujer”, “Hombre”)
> nombre <-c (“Pedro”, “Alicia”, “Ana”, “Manolo”, “Germán”, “María”, “Juan”)
> sexo <- factor (sexo)
> sexo
[1] Hombre Mujer Mujer Hombre Hombre Mujer Hombre
Levels: Hombre Mujer
• Matrices
En R hay varias formas de crear una matriz:

♦ Mediante la función matrix(), cuyos parámetros son:


♦ data Vector que contiene los valores que formarán la matriz. Debe tener en
cuenta que si no es suficientemente grande, se repetirá las veces que sea
necesario
♦ nrow Número de filas.Si no especifica, se toma nrow =1
♦ ncol Número de columnas
♦ byrow Variable lógica que indica si la matriz debe construirse por filas o por
columnas. El valor predeterminado es F
♦ dimnames Lista de longitud 2 con los nombres de las filas y las columnas.
♦ Mediante los operadores rbind() (para pegar vectores por filas) y cbind() (para
pegar vectores por columnas)
matriz = rbind (x1, x2,…)
matriz = cbind (x1, x2…)
donde en la función rbind(), x1 y x2, son las filas de la matriz, y en la
función cbind() las columnas.
> M = matrix( 1: 9, nrow = 3, byrow = TRUE) # la matriz se rrellena por filas
>M
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
> N = matrix( 1: 9, nrow = 3, byrow = FALSE) # la matriz se rrellena por columnas
>N
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
> matrix(1:10, 5, 2, dimnames = list (c (“fila1”, “fila2”, “fila3”, “fila4”,
“fila5”), c(“columna1”, “columna2”)))
columna1 columna2
fila1 1 6
fila2 2 7
fila3 3 8
fila4 4 9
fila5 5 10
> matrix(1:15, 3, 5)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 4 7 10 13
[2,] 2 5 8 11 14
[3,] 3 6 9 12 15
Nota: Cuando la longitud del vector no coincide con el número de filas y columnas,
los elementos de la matriz se repiten, por lo que R te da un warning advirtiendo que
las salidas pueden no ser las deseadas.
> matrix( 1:15, 4, 6)
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 5 9 13 2 6
[2,] 2 6 10 14 3 7
[3,] 3 7 11 15 4 8
[4,] 4 8 12 1 5 9
Warning message
In matrix(1:15, 4, 6) :
data length [15] is not a sub-multiple or multiple of the number of rows [4]

También podemos utilizar las funciones cbind y rbind para construir matrices:

> v1 = c(1,2,3,4)
> v2 = c(5,6,7,8)
> v3= c(9,10,11,12)
> FA = rbind(v1,v2,v3)
> FA
[,1] [,2] [,3] [,4]
v1 1 2 3 4
v2 5 6 7 8
v3 9 10 11 12
>QA = cbind (v1, v2, v3)
> QA
v1 v2 v3
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
> matriz= rbind (c(1,2,3), c(4,5,6), c(7,8,9))
> matriz
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
> matriz = cbind (c(1,2,3), c(4,5,6), c(7,8,9))
>matriz
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
◊ Seleccionar los ementos de una matriz
• Seleccionar el término que ocupa la posición primera fila, segunda columna, [1, 2]
de la matriz N:
La matriz N es la siguiente
>N
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
> N[1, 2]
[1] 4
• Para seleccionar sólo una fila (columna), dejamos en blanco la posición de la
columna (fila)

Por ejemplo: Seleccionar

La segunda fila de la matriz N


> N[2, ]
[1] 2 5 8
La tercera columna de la matriz N
> N[ , 3 ]
[1] 7 8 9
• Seleccionar la segunda y tercera fila
> N[2:3, ]
[,1] [,2] [,3]
[1,] 2 5 8
[2,] 3 6 9
• Seleccionar la segunda y tercera fila de las dos primeras columnas
> N[2:3, 1:2]
[,1] [,2]
[1,] 2 5
[2,] 3 6
Ejemplos
Construir una matriz de 14×3 donde los nombres de las columnas son las variables
peso, altura y edad
> datos= c (77, 58, 89,
55,47,60,54,58,75,65,82,85,75,65,1.63,1.63,1.85,1.62,1.60,1.63,1.70,1.65,1.78,1.70,
1.77,1.83,1.74,1.65,23,23,26,23,26,26,22,23,26,24,28,42,25,26)
> matriz = matrix(datos, 14, 3, dimnames = list(c(), c(“Peso”,”Altura”,”Edad”)))
>matriz
Peso Altura Edad
[1,] 77 1.63 23
[2,] 58 1.63 23
[3,] 89 1.85 26
[4,] 55 1.62 23
[5,] 47 1.60 26
[6,] 60 1.63 26
[7,] 54 1.70 22
[8,] 58 1.65 23
[9,] 75 1.78 26
[10,] 65 1.70 24
[11,] 82 1.77 28
[12,] 85 1.83 42
[13,] 75 1.74 25
[14,] 65 1.65 26
• Seleccionar la primera columna
> matriz[ ,1]
[1] 77 58 89 55 47 60 54 58 75 65 82 85 75 65
También
> matriz [ ,”Peso”]
[1] 77 58 89 55 47 60 54 58 75 65 82 85 75 65
• Seleccionar un elemento
> matriz[4 , 2]
Altura
1.62
• Seleccionar una fila
> matriz[9, ]
Peso Altura Edad
75.00 1.78 26.00
• Añadir a la matriz la variable sexo.
>sexo<-factor(c(“H”,”M”,”H”,”H”,”M”,”M”,”H”,”M”,”M”,”H”,”H”,”H”,”M”,”M”))
>sexo
[1] H M H H M M H M M H H H M M
Levels: H M
>matriz<-c(matriz,sexo)
>matriz
[1] 77.00 58.00 89.00 55.00 47.00 60.00 54.00 58.00 75.00 65.00 82.00 85.00
75.00 65.00 1.63 1.63 1.85 1.62 1.60
[20] 1.63 1.70 1.65 1.78 1.70 1.77 1.83 1.74 1.65 23.00 23.00 26.00 23.00 26.00
26.00 22.00 23.00 26.00 24.00
[39] 28.00 42.00 25.00 26.00 1.00 2.00 1.00 1.00 2.00 2.00 1.00 2.00 2.00 1.00 1.00
1.00 2.00 2.00
>matriz<-matrix(matriz,14,4,dimnames=list(c(),c(“Peso”,”Altura”,”Edad”,”Sexo”)))
>matriz
Peso Altura Edad Sexo
[1,] 77 1.63 23 1
[2,] 58 1.63 23 2
[3,] 89 1.85 26 1
[4,] 55 1.62 23 1
[5,] 47 1.60 26 2
[6,] 60 1.63 26 2
[7,] 54 1.70 22 1
[8,] 58 1.65 23 2
[9,] 75 1.78 26 2
[10,] 65 1.70 24 1
[11,] 82 1.77 28 1
[12,] 85 1.83 42 1
[13,] 75 1.74 25 2
[14,] 65 1.65 26 2
• Hoja de datos
La adaptación de la matriz de datos al uso habitual en Estadística es el
objeto data.frame().
• La diferencia fundamental con la matrix() de datos es que data.frame() no tiene
por qué estar compuesto de elementos del mismo tipo. Los objetos pueden ser
vectores, factores, matrices, listas e incluso hojas de datos.
• Las matrices, listas y hojas de datos, contribuyen con tantas variables como
columnas tengan.
• Los vectores numéricos y los factores se incluyen directamente y los vectores no
numéricos se fuerzan como factores.
• Para referirnos a cualquier elemento de la hoja de datos utilizaremos dos índices,
de modo similar a una matriz.
En el ejemplo anterior, al añadirle a la matrix() la variable sexo, la transforma en
tipo numérico asignándole el valor 1 para hombre 2 para mujeres.
>mode(matriz)
[1] “numeric”
Vamos a transformar la matriz en un data.frame().
>dataframe<-data.frame(matriz)
>dataframe
Peso Altura Edad Sexo
1 77 1.63 23 1
2 58 1.63 23 2
3 89 1.85 26 1
4 55 1.62 23 1
5 47 1.60 26 2
6 60 1.63 26 2
7 54 1.70 22 1
8 58 1.65 23 2
9 75 1.78 26 2
10 65 1.70 24 1
11 82 1.77 28 1
12 85 1.83 42 1
13 75 1.74 25 2
14 65 1.65 26 2
De esta forma, hemos convertido la matriz de tipo numérico en un conjunto de
datos con 4 variables y cada una con 14 observaciones.

Para añadir una variable de tipo carácter, como por ejemplo los nombres de los
individuos, en el data.frame, se puede hacer de la siguiente forma:

> Nombres = c
(“Pepe”,”Ana”,”Manolo”,”Rafa”,”María”,”Auxi”,”Germán”,”Celia”,”Carmen”,”Juan”,”D
ani”,”Antonio”,”Belinda”,”Sara”)
>Nombres
[1]
“Pepe” “Ana” “Manolo” “Rafa” “María” “Auxi” “Germán” “Celia” “Carmen”
[10] “Juan” “Dani” “Antonio” “Belinda” “Sara”
> dataframe1 <- data.frame(dataframe, Nombres)
> dataframe1
Peso Altura Edad Sexo Nombres
1 77 1.63 23 1 Pepe
2 58 1.63 23 2 Ana
3 89 1.85 26 1 Manolo
4 55 1.62 23 1 Rafa
5 47 1.60 26 2 María
6 60 1.63 26 2 Auxi
7 54 1.70 22 1 Germán
8 58 1.65 23 2 Celia
9 75 1.78 26 2 Carmen
10 65 1.70 24 1 Juan
11 82 1.77 28 1 Dani
12 85 1.83 42 1 Antonio
13 75 1.74 25 2 Belinda
14 65 1.65 26 2 Sara
• Listas
Una lista es un objeto formado por objetos de varias clases. Una colección de
elementos que pueden ser de distintos tipos y que generalmente están identificados
por un nombre. Para crear una lista se utiliza la función list()
> milista = list(números = 1:5, A = matrix(1:6, nrow =3), B = matrix(1:8, ncol = 2),
ciudades = c(“Sevilla”, “Granada”, “Málaga”))
> milista
$números
[1] 1 2 3 4 5

$A
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6

$B
[,1] [,2]
[1,] 1 5
[2,] 2 6
[3,] 3 7
[4,] 4 8

$ciudades
[1] “Sevilla” “Granada” “Málaga”

◊ Seleccionar elementos de una lista


Se puede acceder a los elementos de una lista de varias formas:

> milista$números
[1] 1 2 3 4 5
> milista[[“números”]]
[1] 1 2 3 4 5
> milista[[1]]
[1] 1 2 3 4 5
> milista[c(1,3,4)] # Acceder a una sublista NombreDeLaLista[c(Posicion1,
Posicion2, …)]
$números
[1] 1 2 3 4 5

$B
[,1] [,2]
[1,] 1 5
[2,] 2 6
[3,] 3 7
[4,] 4 8

$ciudades
[1] “Sevilla” “Granada” “Málaga”

> milista[c(-1,-3,-4)] # Índices negativos que indican los elementos que no se


obtienen. NombreDeLaLista[c(-Posicion1, -Posicion2,…)]
$A
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
Ejemplo
Dada la siguiente lista
> ejem.lista = list(nom.alumno1=”Manolo”, nom.alumno2=”German”,
nom.profesora=”Ana”, ProyectoInnovacionDocente=TRUE, NumeroDeAlumnos = 2,
EdadAlumnos = c(21, 23))
>ejem.lista
$nom.alumno1
[1] “Manolo”

$nom.alumno2
[1] “German”

$nom.profesora
[1] “Ana”

$ProyectoInnovacionDocente
[1] TRUE

$NumeroDeAlumnos
[1] 2

$EdadAlumnos
[1] 21 23

Obtener elementos de la lista utilizando diferentes procedimientos


a) Utilizando el operador $ de la siguiente forma
> ejem.lista$nom.alumno1
[1] “Manolo”
> ejem.lista$nom.alumno2
[1] “German”
>ejem.lista$nom.profesora
[1] “Ana”
>ejem.lista$EdadAlumnos
[1] 21 23
b) Indicando entre dobles corchetes la posición del
elemento. NombreDeLaLista[[PosiciónDelElemento]]
> ejem.lista[[2]]
[1] “German”
>ejem.lista[[4]]
[1] TRUE
c) Indicando entre dobles corchetes y comillas el nombre del
elemento. NombreDeLaLista[[“Nombre”]]
> ejem.lista[[“nom.profesora”]]
[1] “Ana”
>ejem.lista[c(1,2,4,5)] # Acceder a una sublista NombreDeLaLista[c(Posicion1,
Posicion2, …)]
$nom.alumno1
[1] “Manolo”

$nom.alumno2
[1] “German”

$ProyectoInnovacionDocente
[1] TRUE

$NumeroDeAlumnos
[1] 2

Por último podemos poner índices negativos para no obtener elementos no


deseados. NombreDeLaLista[c(-Posicion1, -Posicion2,…)]

>ejem.lista[c(-4,-5)] # Índices negativos que indican los elementos que no se


obtienen. NombreDeLaLista[c(-Posicion1, -Posicion2,…)]
$nom.alumno1
[1] “Manolo”

$nom.alumno2
[1] “German”

$nom.profesora
[1] “Ana”

$EdadAlumnos
[1] 21 23

Para describir un conjunto de datos la estructura que se debe utilizar es la lista,


mientras que para devolver datos desde una función se debe utilizar la hoja de datos.
Ya que esta última permite devolver datos de varios tipos y, además, de modo
estructurado, lo que facilita utilizar el resultado de una función como entrada de
otra.

◊ Seleccionar variables según un condicional, de forma


aleatoria, según un rango o según una variable filtro
Mediante la fucnción subset() se selecciona subconjunto en vectores y en una hoja
de datos
La sintaxis en vectores es: subset(x, subset, …)
La sintaxis en hojas de datos es: subset(x, subset,select, drop = FALSE, …)

donde los argumentos son:

• x El objeto al que se aplica la selección


• subset La condición que se aplica para seleccionar un subconjunto
• select Columnas que se desea conservar en una hoja de datos
• drop Este argumento se pasa al método de indexación de hojas de datos.

Recordemos los datos del ejemplo

> datos= c (77, 58, 89,


55,47,60,54,58,75,65,82,85,75,65,1.63,1.63,1.85,1.62,1.60,1.63,1.70,1.65,1.78,1.70,
1.77,1.83,1.74,1.65,23,23,26,23,26,26,22,23,26,24,28,42,25,26)
> matriz = matrix(datos, 14, 3, dimnames = list(c(), c(“Peso”,”Altura”,”Edad”)))
>Sexo<-factor(c(“H”,”M”,”H”,”H”,”M”,”M”,”H”,”M”,”M”,”H”,”H”,”H”,”M”,”M”))
> matriz<-c(matriz,Sexo)
> matriz <-
matrix(matriz,14,4,dimnames=list(c(),c(“Peso”,”Altura”,”Edad”,”Sexo”)))
> dataframe<-data.frame(matriz)
> Nombres = c
(“Pepe”,”Ana”,”Manolo”,”Rafa”,”María”,”Auxi”,”Germán”,”Celia”,”Carmen”,”Juan”,”D
ani”,”Antonio”,”Belinda”,”Sara”)
> dataframe1 <- data.frame(dataframe, Nombres)
♦ Seleccionar variables
> subset(dataframe1,select=c(Sexo,Nombres))
Sexo Nombres
1 1 Pepe
2 2 Ana
3 1 Manolo
4 1 Rafa
5 2 María
6 2 Auxi
7 1 Germán
8 2 Celia
9 2 Carmen
10 1 Juan
11 1 Dani
12 1 Antonio
13 2 Belinda
14 2 Sara
> subset(dataframe1, select = c(Peso,Altura))
Peso Altura
[1,] 77 1.63
[2,] 58 1.63
[3,] 89 1.85
[4,] 55 1.62
[5,] 47 1.60
[6,] 60 1.63
[7,] 54 1.70
[8,] 58 1.65
[9,] 75 1.78
[10,] 65 1.70
[11,] 82 1.77
[12,] 85 1.83
[13,] 75 1.74
[14,] 65 1.65
♦ Seleccionar un subconjunto de variable
> subset(dataframe1, Altura > 1.70)
Peso Altura Edad Sexo
3 89 1.85 26 1 Manolo
9 75 1.78 26 2 Carmen
11 82 1.77 28 1 Dani
12 85 1.83 42 1 Antonio
13 75 1.74 25 2 Belinda
>subset(dataframe1, Altura > 1.71 & Peso > 60)
Peso Altura Edad Sexo Nombres
3 89 1.85 26 1 Manolo
9 75 1.78 26 2 Carmen
11 82 1.77 28 1 Dani
12 85 1.83 42 1 Antonio
13 75 1.74 25 2 Belinda
>subset(dataframe1, Altura > 1.71 & Peso> 60 & Sexo==”1″)
Peso Altura Edad Sexo Nombres
3 89 1.85 26 1 Manolo
11 82 1.77 28 1 Dani
12 85 1.83 42 1 Antonio
>subset(dataframe1, Altura>1.71 & Peso>60 & Sexo==”1″,select=Nombres)
Nombres
3 Manolo
11 Dani
12 Antonio
>subset(dataframe1, Altura>1.71 & Peso >60 & Sexo==”1″,
select=c(Edad,Nombres))
Edad Nombres
3 26 Manolo
11 28 Dani
12 42 Antonio
♦ Seleccionar variables usando una variable auxiliar filtro.
> filtro = dataframe1[,”Altura”] < 1.80
> filtro
[1] TRUE TRUE FALSE TRUE TRUETRUETRUETRUETRUETRUETRUE
FALSE TRUE TRUE
>dataframe1[filtro,”Altura”] = NA
>dataframe1

Peso Altura Edad Sexo Nombres


1 77 NA 23 1 Pepe
2 58 NA 23 2 Ana
3 89 1.85 26 1 Manolo
4 55 NA 23 1 Rafa
5 47 NA 26 2 María
6 60 NA 26 2 Auxi
7 54 NA 22 1 Germán
8 58 NA 23 2 Celia
9 75 NA 26 2 Carmen
10 65 NA 24 1 Juan
11 82 NA 28 1 Dani
12 85 1.83 42 1 Antonio
13 75 NA 25 2 Belinda
14 65 NA 26 2 Sara

Comparamos con el comando anterior (subset) para ver que los resultados
coinciden.

>subset(dataframe1, Altura>1.80)
Peso Altura Edad Sexo Nombres
3 89 1.85 26 1 Manolo
12 85 1.83 42 1 Antonio
◊ Creción de variables a partir de otras existentes
>transform(dataframe1,logPeso=log(Peso))
Peso Altura Edad Sexo Nombres logPeso
1 77 1.63 23 1 Pepe 4.343805
2 58 1.63 23 2 Ana 4.060443
3 89 1.85 26 1 Manolo 4.488636
4 55 1.62 23 1 Rafa 4.007333
5 47 1.60 26 2 María 3.850148
6 60 1.63 26 2 Auxi 4.094345
7 54 1.70 22 1 Germán 3.988984
8 58 1.65 23 2 Celia 4.060443
9 75 1.78 26 2 Carmen 4.317488
10 65 1.70 24 1 Juan 4.174387
11 82 1.77 28 1 Dani 4.406719
12 85 1.83 42 1 Antonio 4.442651
13 75 1.74 25 2 Belinda 4.317488
14 65 1.65 26 2 Sara 4.174387
Nota: Ver también Estructura de datos con R en la Práctica 1 de la Guía R
Lectura de datos desde ficheros externos
♦ readtable()
Para leer un fichero .txt en R se emplea la función read.table
read.table (file, header, sep, quote, dec , row.names, col.names,
as.is, na.strings, skip)
• file: Nombre del archivo a leer, que debe tener una línea por individuo

• header: Es un valor lógico. Si es TRUE, la primera línea del archivo contiene los
nombres de las variables. Es conveniente especificar este campo explícitamente
• sep: Separador entre campos. El valor predeterminado es uno o varios espacios en
blanco
• dec: Separador decimal
• quote: Conjunto de caracteres que delimitan cadenas de caracteres
• row.names: Especifica los nombres para las filas. Se puede especificar de dos formas:
Con un vector de cadenas de caracteres de la misma longitud que el número de filas o
mediante un nombre o número que indica un campo del archivo que contiene los
nombres.Si se deja en blanco, los nombres dependen de la existencia o no de un campo
de caracteres con valores distintos. Si lo hay, los utiliza como nombres, en caso contrario
utiliza como nombres los números de orden de cada fila. Esta última opción puede
forzarse dando a este parámetro el valor NULL.
• col.names: Especifica los nombres para las columnas o variables. Si no los indica aquí,
ni están incluidos en la primera fila del archivo, se construyen con la letra V y el
número de columna.
• as.is:Vector de valores lógicos que indica cómo tratar los campos no numéricos. El
valor predeterminado es FALSE con el cual dichos campos se transforman en factores,
salvo que se utilicen como nombres de filas. Si este vector es de longitud inferior al
número de campos no numéricos se repetirá las veces necesarias. También puede ser un
vector numérico que indica que columnas deben conservarse como caracteres.
• na.strings: Vector de caracteres y controla con qué valor se indica un valor NA. Así,
podrá utilizar * para leer este tipo de datos procedentes de BMDP.
• colClasses: Vector de caracteres que indica la clase de cada columna.
• nrows:Número máximo de filas que se leerán.
• skip:Indica el número de líneas del principio del archivo que deben saltarse sin leer.
• check.names: De tipo lógico, si es TRUE se comprueba que los nombres de variables
son correctos y que no hay duplicados.
• fill: De tipo lógico, si es TRUE se completan las filas con blancos si es necesario.
• strip.white: De tipo lógico, si es TRUE y se ha definido un separador, se eliminan los
espacios.
• blank.lines.skip: De tipo lógico, si es TRUE se ignoran las líneas en blanco.
• comment.char:Indica un carácter a partir del cual no se lee la línea, interpretándose
comoun comentario.
♦ write()
La función write permite escribir un vector o una matriz en un archivo. La matriz debe
ser traspuesta para que coincida con la representación internade R.

write(x, file, ncolumns, append)


• x: Objeto (vector o matriz)
• file: Nombre del archivo
• ncolumns:Número de columnas
• append:Valor lógico que indica si los datos deben añadirse a los existentes en el
archivo.
♦ Paquete “foreign”
Este paquete permite leer y escribir archivos existentes de otros formatosde EpiInfo,
Minitab, S, SAS, SPSS, Stata, Systat y Weka. Algunas funciones que permite hacer con
esta librería son:
◊ read.spss
Exporta una hoja de datos en formato .sav para poder abrirlo y trabajar con él en
SPSS. Sus argumentos son:
read.spss(file, use.value.labels = TRUE, to.data.frame =
FALSE, max.value.labels = Inf, trim.factor.names = FALSE, trim_values =
TRUE, reencode = NA, use.missings = to.data.frame)
• file: Cadena de caracteres, el nombre del archivo o la dirección donde está
guardado
• use.value.labels: Convierte variables con etiquetas de valor a factores con esos
niveles
• to.data.frame: Devuelve una hoja de datos
• max.value.label: Si value.labels = TRUE, entonces convierte en factores las
variables con etiquetas de valor, utilizando
• trim.factor.names: Valor lógico, recorta los espacios finales de los niveles de factor
• reencode: valor lógico, cadenas de caracteres se vuelven a codificar a la localización
actual.
Otras funciones de este paquete son read.dbf, read.dta, read.octave, write.dbf,
write.dta, ect. Para más información de este paquete consultar http://cran.r-
project.org/web/packages/foreign/foreign.pdf
Nota: Ver también Lectura de datos desde ficheros externos con R en la
Práctica 1 de la Guía R
Funciones en RStudio
Las funciones permiten realizar las diferentes acciones. Existen muchas funciones
ya definidas, algunas incluso pueden ser modificadas, pero una de las capacidades
más interesante es la posibilidad de crear nuevas funciones que realicen tareas que
no estaban definidas en el momento de instalar el programa.Estas nuevas funciones
se incorporan al lenguaje y, desde ese momento, se utilizan como las previamente
existentes.

Una función se define asignando a un objeto la palabra function seguida de los


argumentos, escritos entre paréntesis y separados por comas y seguida de la orden,
entre llaves si son varias órdenes, que se quiera asignar.

♦ Elementos de una función


NombreFuncion = funtion (argumentos función) {órdenes de la
función return(Valor que ha de devolver la función) }
• NombreFuncion: Nombre que le daremos a la función
• Argumentos función: Parámetros que debe de tener la función
• órdenes de la función: Las líneas de órdenes que van a llevar a cabo que la
función dé el resultado deseado. Pueden ser condicionales, operadores lógicos,
bucles, ect.
• return( ): Es el valor que devuelve la función. Normalmente suele ser una lista.
Operadores de relación
• ! : Indica la negación
• &: Indica la conjunción
• | : Indica la disyunción
• <,>, <= , >= , == son respectivamente los símbolos de menor, mayor, menor o igual,
mayor o igual, e igual.
Condicionales
if (condición) acción1 [else acción2]
Esta estructura es escalar, ya que si la condición está formada por más de un
elemento, sólo considera el primero. En R yRStudio la función para los
condicionales es
ifelse(parámetro1, parámetro2, parámetro3)
• parámetro1 es la condición que se quiere avaluar
• parámetro2 es la acción que se quiere hacer en el caso de que se cumpla la
condición
• parámetro3 es la acción se que realiza en el caso en que no se cumpla la condición.
> ejemplo = function(x){
+ suma = sum(x)
+ resultado = ifelse(suma < 100, TRUE, FALSE)
+ return(resultado)
+}
> x = c(1:50)
> y = c(1:10)
> ejemplo(x)
[1] FALSE
> ejemplo(y)
[1] TRUE

Esta función devuelve el valor lógico TRUE si la suma de los elementos del vector es
menor que 100 y FALSE en caso contrario.

Bucles
• for: Contador (recorre cada elemento del vector o matriz y efectúa una operación
con dicho elemento)
• while: Condición (evalúa la condición y mientras esta es cierta se evalúa la acción)
• repeat: Repetición (evalúa la acción indefinidamente)
> x <- c(1:5)
> for (i in 1: length (x) ) {
+ cat ( ‘El cuadrado de ‘, i, ‘ es: ‘, i^2, ‘\n’ )
+}

El cuadrado de 1 es: 1
El cuadrado de 2 es: 4
El cuadrado de 3 es: 9
El cuadrado de 4 es: 16
El cuadrado de 5 es: 25

Este ejemplo imprime los cuadrados del vector x formado por los elementos del 1
al 5.

>x=1
> while (x <= 10 ){
+ cat (‘El cuadrado de ‘, x, ‘ es: ‘, x^2, ‘\n’)
+x=x+1
+}
El cuadrado de 1 es: 1
El cuadrado de 2 es: 4
El cuadrado de 3 es: 9
El cuadrado de 4 es: 16
El cuadrado de 5 es: 25
El cuadrado de 6 es: 36
El cuadrado de 7 es: 49
El cuadrado de 8 es: 64
El cuadrado de 9 es: 81
El cuadrado de 10 es: 100

¿POR QUÉ UTILIZAR RStudio?


• Respeta la filosofía tradicional de la consola de R.
• Muestra los objetos del workspace.
• Muestra el historial de comandos.
• Tiene un visor de gráficos que unifica entornos.
• Integra un visor de paquetes instalados y/o cargados (library).
• Permite ejecutar trozos de código con sólo marcarlo en los scripts.
• Dispone de autocompletado de código.
• Presentaciones en HTML5
• Presentaciones con Sweave.
• Facilidad para trabajar con varios proyectos a la vez.
Autores: Manuel Hidalgo Arjona y Ana María Lara Porras. Universidad de
Granada. (2016)
………………………………………………………………………………………………………………..

Práctica 2
ESTADÍSTICA DESCRIPTIVA:
REPRESENTACIONES GRÁFICAS
Objetivos
• Resumir, ordenar y analizar conjuntos de datos
• Calcular medidas de posición, de dispersión y de forma de un conjunto de datos
• Representar gráficamente la distribución de frecuencias
• Realizar análisis exploratorios de datos.

Introducción al Análisis Descriptivo


En estadística, el análisis de datos es una mezcla de conocimientos estadísticos y
sentido común. No existen unas pautas constantes para obtener unos resultados
óptimos ya que cada base de datos es un problema diferente, con variables y
objetivos diferentes. Sin embargo, cuando se abarca un análisis de cualquier base de
datos es obligatorio estudiar la estructura de los datos, un análisis descriptivo, tanto
analítico como gráfico, de los datos, etc.

El análisis exploratorio de datos es fundamental en cualquier estudio estadístico,


por encima de análisis de aprendizaje de modelos estadísticos que sean capaces de
predecir valores futuros, ya que si este paso no se hace con cautela no se tendrán
datos de calidad y, por tanto, el modelo aprenderá de forma ineficiente.

En esta práctica tomaremos un primer contacto con las técnicas estadísticas que se
utilizan para ordenar, analizar y representar un conjunto de datos, con el fin de
describir apropiadamente sus características. El primer paso en el análisis de datos,
una vez introducidos los mismos, es realizar un análisis descriptivo o análisis
exploratorio de datos. Los principales objetivos de un análisis descriptivo o análisis
exploratorio de datos son la descripción y la síntesis de los datos. Para ello, los datos
se organizan en tablas, se calculan medidas que describen sus características más
importantes y se realizan representaciones gráficas.

Este análisis inicial proporciona una idea de la forma que tiene la distribución de las
observaciones y permite obtener estadísticos de tendencia central (media, mediana
y moda), de dispersión (varianza, desviación típica, rango), de forma (asimetría,
curtosis), de posición (percentiles), así como gráficos de barras, de sectores e
histograma.

R y RStudio disponen de un amplio conjunto de herramientas para el análisis


descriptivo de un conjunto de datos.
Estadísticos descriptivos con R-Studio
Tabla de Frecuencias
Para crear tablas de frecuencia en R y R Studio se emplea la función table o la
función prop.table, dependiendo de si la tabla muestra las frecuencias absolutas o
las frecuencias relativas. La sintaxis de estas órdenes es la siguiente:

> table(x) # para frecuencias absolutas

> prop.table(tab) # para las frecuencias relativas

La principal diferencia entre las dos funciones reside en el tipo de los argumentos
que necesita cada una.

• table construye la tabla de frecuencias absolutas a partir de la variable que recibe


como argumento
• prop.table recibe como argumento una tabla o una matriz que representa una
tabla de frecuencias absolutas, y a partir de ella construye la tabla de frecuencias
relativas asociada. Es decir, prop.table recibe como argumento el resultado que
devuelve la función table.
Ejemplo1:
En la siguiente tabla se recogen 14 datos sobre el peso, altura, edad, sexo y
nombres

Tabla1. Datos del ejemplo 1

En el menú principal de RStudio elegir Session/Set Working Directory/Choose


Directory o bien con las teclas Ctrl+Shift+H, elegir el directorio de trabajo donde
estan los datos.

Y en la Consola de RStudio se muestra el comando

>setwd(“F:/Desktop/EJEMPLOS”)
A continuación seleccionamos el fichero de trabajo, al que llamamo datos. Para ello
en el edtiroe de RStudio escribimos
Figura 1: read.table(“F:/Desktop/EJEMPLOS/ejemplo 1-RStudio.txt”, header =
TRUE)
>datos <- read.table(“F:/Desktop/EJEMPLOS/ejemplo 1-RStudio.txt”, header =
TRUE)
Ejecutar la sentencia, para ello Click en la tecla Run o bien presionar las teclas Ctrl+
Enter y se ejecuta, mostrándose en la Consola de RStudio
Figura 2: >datos <- read.table(“F:/Desktop/EJEMPLOS/ejemplo 1-RStudio.txt”,
header = TRUE)
Nota: Se aconseja trabajar en el Editor de RStudio y ejecutar con el comando Run o
bien con Ctrl+ Enter
> datos <- read.table(“F:/Desktop/EJEMPLOS/ejemplo 1-RStudio.txt”, header =
TRUE)
> datos
Peso Altura Edad Sexo Nombres
1 77 1.63 23 1 Pepe
2 58 1.63 23 2 Ana
3 89 1.85 26 1 Manolo
4 55 1.62 23 1 Rafa
5 47 1.60 26 2 María
6 60 1.63 26 2 Auxi
7 54 1.70 22 1 Germán
8 58 1.65 23 2 Celia
9 75 1.78 26 2 Carmen
10 65 1.70 24 1 Juan
11 82 1.77 28 1 Dani
12 85 1.83 42 1 Antonio
13 75 1.74 25 2 Belinda
14 65 1.65 26 2 Sara
Calculamos las frecuencias absolutas y relativas de las variables peso y nombre
> tabla_peso <- table(datos$Peso)
> tabla_peso
47 54 55 58 60 65 75 77 82 85 89
1 1 1 2 1 2 2 1 1 1 1
> prop.table(tabla_peso)
47 54 55 58 60 65 75
0.07142857 0.07142857 0.07142857 0.14285714 0.07142857 0.14285714
0.14285714
77 82 85 89
0.07142857 0.07142857 0.07142857 0.07142857
> tabla_nombre <- table(datos$Nombres)
> tabla_nombre
Ana Antonio Auxi Belinda Carmen Celia Dani Germán Juan Manolo
1 1 1 1 1 1 1 1 1 1
María Pepe Rafa Sara
1 1 1 1
> prop.table(tabla_nombre)
Ana Antonio Auxi Belinda Carmen Celia Dani
0.07142857 0.07142857 0.07142857 0.07142857 0.07142857 0.07142857
0.07142857
Germán Juan Manolo María Pepe Rafa Sara
0.07142857 0.07142857 0.07142857 0.07142857 0.07142857 0.07142857
0.07142857
Representaciones gráficas
RStudio y R ofrecen una gran variedad de gráficos, el
comando demo(graphics) muestra dichos gráficos. Atendiendo al tipo de datos
vamos a utilizar varios tipos de gráficos.
• Variables cualitativas o variables cuantitativas de tipo discreto: Se pueden
considerar gráficos de sectores o gráficos de barras, los cuales se obtienen
en R mediante las funciones pie y barplot, respectivamente. Los argumentos más
importantes de estas funciones son:
pie(x, labels = names(x), clockwise = FALSE, init.angle = if(clockwise) 90 else
0, col = NULL, main = NULL)
barplot(x, horiz = FALSE, height, col = NULL, width space, names.arg, beside,
main = NULL, sub = NULL, xlab = NULL, ylab = NULL)

donde

x es un vector con las frecuencias de las observaciones. Igualmente, puede ser una
tabla de frecuencia (de las obtenidas con table o prop.table)
labels es un vector de cadenas de caracteres que indican los nombres de cada una
de las categorías que aparecen en el gráfico de sectores
clockwise es un argumento lógico que indica si los sectores se dibujan en sentido
horario (clockwise = TRUE) o en sentido antihorario (clockwise = FALSE, que es la
opción por defecto).
init.angle es un valor numérico que indica el ángulo (en grados) en el que se sitúa
el primer sector. Por defecto, el primer sector empieza a dibujarse a los 90 grados (-
a las 12 en punto -, cuando clockwise es igual a TRUE) o a los 0 grados (- a las 3 en
punto -, cuando clockwise es igual a FALSE)
horiz es un argumento lógico que indica si las barras del gráfico de barras se dibujan
de forma vertical (horiz = FALSE, que es la opción por defecto) u horizontal (horiz =
TRUE)
height: vector de frecuencias para cada valor
width: especifica mediante un vector el ancho de las barras
space: fija el espacio entre las barras
names.arg: vector de nombres para colocarlos bajo las barras
beside: valor lógico, FALSE indica barras apiladas y TRUE yuxtapuestas
col es un vector en el que se indican los colores de las barras o los sectores del
gráfico
main y sub son cadenas de caracteres en la que se especifican el título y el subtítulo
del gráfico
xlab e ylab son cadenas de caracteres en las que se especifican los nombres de los
ejes X e Y.
• Variables cuantitativas: Los gráficos que se suelen emplear con más frecuencia
son el histograma, el diagrama de tallos y hojas y el diagrama de caja y bigotes.
En R, se utilizan las órdenes hist, stem y boxplot para la obtención de histogramas,
de diagramas de tallos y hojas y de diagramas de caja y bigotes, respectivamente.
Éstas son las principales opciones de estas funciones:
hist(x, breaks = “Sturges”, freq=TRUE, right = TRUE, col = NULL, main =
paste(“Histogram of” , xname))
stem(x)
boxplot(x, range = 1.5, col = NULL, main = NULL)

donde, en este caso,

x es el vector de valores de la variable a partir de los cuales se dibujará el gráfico.


breaks indica la forma en la que se calcularán los intervalos en el histograma. Las
opciones disponibles para este parámetro son “Sturges” (que es la opción por
defecto) “Scott” y “FD” “Freedman-Diaconis“. Para más información sobre estos
métodos, así como la fórmula que emplea cada uno de ellos para determinar el
número de intervalos, se puede consultar el siguiente enlace (en
inglés): http://www.mas.ncl.ac.uk/~nlf8/teaching/mas1343/notes/chap4-5.pdf
freq si es TRUE determina que el intervalo se represente con las frecuencias
absolutas
range es un valor numérico que determina la extensión de los bigotes de la caja.
Para un valor positivo de range, los bigotes se extienden hasta el último dato que
no supere 1.5 veces la longitud de la caja (el rango intercuartílico). Para un valor
de 0, los bigotes se extienden hasta el dato más lejano
right es un argumento lógico que indica si los intervalos son cerrados por la
izquierda y abiertos por la derecha (en cuyo caso, right = TRUE, que es la opción por
defecto) o viceversa (right = FALSE).
Las opciones col y paste funcionan igual que en los gráficos de barras y sectores.
Ejemplos:
> pie(table(datos$Edad), col = c(“yellow”, “white”, “green”, “orange”,”purple”,
“red”, “pink”), main = “Diagrama de sectores para la variable Edad”)

Se muestra la siguiente gráfica


Figura 2: Diagrama
de sectores para la variable edad
> barplot(table(datos$Edad), col=c(“yellow”, “white”, “green”, “orange”,”purple”,
“red”, “pink”), xlab=”Edad”, ylab=”Frecuencias absolutas”, main =”Diagrama de
barras para la variable Edad”)

Se muestra la siguiente gráfica

Figura 3: Diagrama
de barras para la variable Edad
> barplot(table(datos$Sexo,datos$Edad),col=c(2,3))

Se muestra la siguiente gráfica


Figura 4: Diagrama de barras
para las variables Sexo y Edad
> hist(table(datos$Edad), col = “purple”, main = “Histograma para la variable Edad”,
xlab=”Edad”, ylab=”Frecuencia”)

Se muestra la siguiente gráfica

Figura 5: Histograma
para la variable Edad
> stem(table(datos$Peso))
The decimal point is at the |
1 | 00000000
1|
2 | 000
> boxplot(datos$Edad, xlab=”Edad”, main = “Cajas y bigotes para la variable edad”)
Figura 6: Caja y bigotes para la
variable Edad

En el Editor de RStudio hemos realizado las siguientes instrucciones

datos <- read.table(“F:/Desktop/EJEMPLOS/ejemplo 1-RStudio.txt”, header = TRUE)


datos

tabla_peso<-table(datos$Peso)
tabla_peso

prop.table(tabla_peso)

tabla_nombre<-table(datos$Nombres)
tabla_nombre

prop.table(tabla_nombre)

pie(table(datos$Edad), col = c(“yellow”, “white”, “green”, “orange”,”purple”, “red”, “pink”),


main=“Diagrama de sectores para la variable Edad”)

barplot(table(datos$Edad), col=c(“yellow”, “white”, “green”, “orange”,”purple”, “red”,


“pink”), xlab=”Edad”, ylab=”Frecuencias absolutas”,main =”Diagrama de barras para la
variable Edad”)

barplot(table(datos$Sexo,datos$Edad),col=c(2,3))

hist(table(datos$Edad), col = “purple”, main = “Histograma para la variable Edad”,


xlab=”Edad”, ylab=”Frecuencia”)

stem(table(datos$Peso))

boxplot(datos$Edad, xlab=”Edad”, main = “Cajas y bigotes para la variable edad”)


Características o Medidas de una variable estadística
En las secciones anteriores se han planteado técnicas gráficas, tablas estadísticas
y representaciones gráficas, que han proporcionado una representación visual de
las variables estadísticas. Dichas técnicas gráficas nos dan una idea de la
composición de la población en estudio. En esta sección vamos a resumir todos los
datos recogidos en una tabla estadística en unos valores, medidas numéricas,
llamadas Características o Medidas que representen o sinteticen el conjunto de
datos. Son medidas que proporcionan información sobre puntos importantes de la
distribución, completando la información que nos ha proporcionado las tablas
estadísticas y las representaciones gráficas.
Estudiaremos las Características o medidas de posición, de dispersión, y
de forma
Medidas de posición
En muchas ocasiones el interés reside en localizar el centro de la distribución (para
lo cual se calculan las medidas de tendencia central), existen casos en los que los
puntos que se desean estudiar distan mucho de este centro (en cuyo caso se recurre
al cálculo de las medidas de tendencia no central).

Algunas de las medidas más populares dentro del grupo de medidas de tendencia
central son la media, la mediana y la moda.Las funciones que calculan las dos
primeras medidas en R son mean y median.
mean (x, na.rm = FALSE)
median (x, na.rm = FALSE)

donde:

x: vector con los valores de la variable


na.rm: un argumento lógico que indica si hay que eliminar los valores faltantes del
conjunto de datos.
Las observaciones faltantes o no disponibles de un conjunto de datos son codificadas
en R como NA (que son las iniciales de Not Available). Cuando una función
de R encuentra algún NA entre los valores de las observaciones que trata de analizar
devuelve como resultado NA, indicando así que los cálculos no se han podido
realizar. No obstante, asignando el valor TRUEal argumento na.rm se pueden
eliminar los valores faltantes y obtener así un valor para la media o la mediana,
basado en las observaciones restantes.
> mean(datos$Peso)
[1] 67.5
> median(datos$Peso)
[1] 65
En cuanto a la moda, R y RStudio no tienen implementada ninguna función que la
calcule. Por lo que vamos a definir una función que calcule la moda de un conjunto
de datos. Así, tendremos que copiar y pegar el siguiente código en el Editor
de RStudio y pulsamos Run

Mode <- function(x) {


ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}
Una vez hecho esto, podremos calcular la moda de un conjunto de datos tal y como
sigue:

Mode (x)

En el caso de que existan varias modas (es decir, cuando estemos ante una
distribución plurimodal), esta función mostrará únicamente la menor de ellas (o la
primera en orden alfabético, si se está analizando una variable cualitativa).

> Mode(datos$Edad)
[1] 26
Entre las medidas de posición de tendencia no central, los cuantiles figuran
entre las más utilizadas. Para obtener los cuantiles de una variable en R se emplea
la función quantile.
quantile(x, probs = seq(0, 1, 0.25), na.rm = FALSE)

donde:

x: vector que incluye los valores de la variable


seq: Argumento que indica los cuantiles que se van a calcular. Por defecto, se
muestran los siguiente cuantiles:
• 0, que coincide con el valor mínimo
• 25, que coincide con el primer cuartil
• 50, que coincide con el segundo cuartil y con la mediana
• 75, que coincide con el tercer cuartil
• 100, que coincide con el valor máximo
na.rm: un argumento lógico que indica si hay que eliminar los valores faltantes del
conjunto de datos.
> quantile(datos$Peso, probs = c(0.25, 0.75))
25% 75%
58.0 76.5
El mínimo y el máximo de un conjunto de datos, además de poder calcularse como
los cuantiles 0 y 100, pueden obtenerse utilizando las funciones de R min y max.
min (x, na.rm = FALSE)
max (x, na.rm = FALSE)
> min(datos$Peso)
[1] 47
> max(datos$Peso)
[1] 89
Medidas de dispersión
Tratan de cuantificar la variabilidad o esparcimiento de los datos informando
acerca de la mayor o menor representatividad de las medidas de tendencia central.

Entre las medidas de dispersión más utilizadas se encuentran la cuasi-varianza,


la cuasi-desviación típica y el rango intercuartílico, que en R y RStudio se
calculan a través de las funciones var, sd e IQR, respectivamente.
var(x, na.rm = FALSE)
sd(x, na.rm = FALSE)
IQR(x, na.rm = FALSE)
Los dos argumentos principales de estas funciones son x, que es el vector con los
valores de la variable que se está estudiando y na.rm que, como ya se ha comentado,
indica si los valores faltantes han de ser eliminados antes del análisis.
Como se ha especificado, las funciones var y sd no calculan la varianza y la
desviación típica de una variable, sino su cuasi-varianza y su cuasi-desviación típica.
En caso de necesitar la varianza o la desviación típica, basta con multiplicar el
resultado de las funciones var y sd por (n – 1)/n, siendo n el número total de datos
con el que se está trabajando.
> var(datos$Peso, na.rm = TRUE)
[1] 168.4231
> sd(datos$Peso, na.rm = TRUE)
[1] 12.97779
> IQR(datos$Peso, na.rm = TRUE)
[1] 18.5
> var_Edad <- 13/14 * var(datos$Edad)
> var_Edad
[1] 22.63776
> desvt_Edad <- sqrt(var_Edad)
> desvt_Edad
[1] 4.757915
A partir de las funciones anteriores se pueden calcular otras medidas, como
el coeficiente de variación de Pearson o el rango. El coeficiente de variación se
emplea para comparar la representatividad de la media entre distintas variables y
se obtiene dividiendo la desviación típica de una variable entre su media. Por su
parte, el rango es una medida de dispersión muy sencilla que se obtiene como la
diferencia entre los valores máximo y mínimo.
> media_Edad <- mean(datos$Edad)
> media_Edad
[1] 25.92857
> CV_Edad <- desvt_Edad/media_Edad
> CV_Edad
[1] 0.1835009
Para ordenar los datos en forma creciente o decreciente se utiliza el comando sort
sort(x, decreasing = FALSE, …)

donde sus posibles argumentos son:

• x vector numérico
• na.rm valor lógico que indica si los valores de NA deben ser despojados antes de
que continúe la computación
• decreasing se utiliza para indicar orden decreciente o creciente
>sort(datos$Peso)
[1] 47 54 55 58 58 60 65 65 75 75 77 82 85 89
> sort(datos$Peso, decreasing = FALSE)
[1] 47 54 55 58 58 60 65 65 75 75 77 82 85 89
> sort(datos$Peso, decreasing = TRUE)
[1] 89 85 82 77 75 75 65 65 60 58 58 55 54 47
Medidas de forma
Como su propio nombre indica, estas medidas se centran en el estudio de la forma
que presenta una distribución a través del análisis de la simetría y la curtosis o el
apuntamiento de la distribución en cuestión.

Para determinar la simetría de una distribución se emplea la función skewness,


contenida en el paquete moments. En R y RStudio, un paquete no es más que un
conjunto de funciones con un propósito común. Para poder utilizar las funciones
incluidas en un determinado paquete, es necesario instalar el paquete y,
posteriormente cargarlo.
Para instalar el paquete, seleccionamos en el menú principal Tools/Install Packages,
y se muestra la siguiente ventana donde escribimos moments

Figura 6: Instalación del


paquete “moments”
y pulsamos Install
También podemo escribir en el Editor de RStudio
install.packages(“moments”) y pulsamos Run
trying URL
‘https://cran.rstudio.com/bin/windows/contrib/3.2/moments_0.14.zip’
Content type ‘application/zip’ length 40696 bytes (39 KB) downloaded 39 KB
package ‘moments’ successfully unpacked and MD5 sums checked
The downloaded binary packages are in
C:\Users\Usuario\AppData\Local\Temp\RtmpEXGVQk\downloaded_packages
Una vez que el paquete se ha instalado de forma correcta en nuestro ordenador no
será necesario volver a instalarlo nunca más, siempre que no cambiemos la versión
de R. Tras instalar el paquete, procederemos a cargarlo para ello desde el panel de
paquetes simplemente se selecciona dicho paquete
Figura 7:
Cargar el paquete “moments”
o bien utilizar la función library.
> library(“moments”)
A diferencia de la instalación, la carga de los paquetes es necesaria cada vez
que se inicia una nueva sesión de R o deRstudio. Una vez instalado y cargado el
paquete moments, ya podemos utilizar la función skewness. Su sintaxis es:
skewness(x, na.rm = FALSE)

donde

x: es el vector que incluye los valores de la variable


na.rm: es un argumento lógico que indica si hay que eliminar los valores faltantes
del conjunto de datos.
> skewness(datos$Peso)
[1] 0.177165
De forma análoga, para estudiar la curtosis de un conjunto de datos emplearemos
la función kurtosis que también está contenida en el paquete moments.
kurtosis(x, na.rm = FALSE)
donde los parámetros x y na.rm se definen forma similar al caso anterior.
> kurtosis(datos$Peso)
[1] 1.810379
Algunas funciones resumen
Existen funciones en R que calculan, a la vez, algunas de las medidas que se han
descrito hasta ahora, summary es un buen ejemplo de este tipo de funciones, ya que
cuando se aplica a una variable cuantitativa devuelve el mínimo, el máximo, la
media, la mediana y los cuartiles primero y tercero de la variable. La sintaxis de esta
función es la siguiente:
summary(object)
object: es el objeto (la variable en nuestro caso) del cual queremos obtener el
resumen.
> summary(datos$Peso)
Min. 1st Qu. Median Mean 3rd Qu. Max.
47.0 58.0 65.0 67.5 76.5 89.0

En el Editor de RStudio hemos realizado las siguientes instrucciones

datos <- read.table(“F:/Desktop/EJEMPLOS/ejemplo 1-RStudio.txt”, header =


TRUE)
mean(datos$Peso)
median(datos$Peso)
Mode(datos$Edad)
quantile(datos$Peso, probs = c(0.25, 0.75))
min(datos$Peso)
max(datos$Peso)
var(datos$Peso, na.rm = TRUE)
sd(datos$Peso, na.rm = TRUE)
IQR(datos$Peso, na.rm = TRUE)
var_Edad <- 13/14 * var(datos$Edad)
var_Edad
desvt_Edad <- sqrt(var_Edad)
desvt_Edad
media_Edad <- mean(datos$Edad)
CV_Edad <- desvt_Edad/media_Edad
CV_Edad
sort(datos$Peso)
sort(datos$Peso, decreasing = TRUE)
install.packages(“moments”) # Es necesario si aún no se ha instalado
library(“moments”)
skewness(datos$Peso)
kurtosis(datos$Peso)
summary(datos$Peso)

Ejercicios
Ejercicios Guiados
Ejercicio guiado
Considérese el siguiente conjunto de datos que contiene información acerca
del sexo, edad, estatura, puntuación y calificación de 20 estudiantes:
Tabla2. Datos del
Ejercicio Guiado 1

a) Realiza una tabla de frecuencias absolutas y otra de frecuencias relativas


para la variable Calificación. Almacena las tablas anteriores en dos variables y
llámalas absolutas y relativas.
b) Representa la variable Calificación mediante un diagrama de barras y un
diagrama de sectores. Incluye un título adecuado para cada gráfico y colorea
las barras y los sectores de colores diferentes.
c) Para la variable Edad, realiza un histograma y un diagrama de caja y bigotes
considerando la opción range = 1.5. Incluye un título apropiado para cada
gráfico y colorea las barras del histograma de color amarillo. ¿Existe algún
valor atípico en esta variable? Reduce el valor del argumento range hasta 0.5.
¿Varían las conclusiones?
d) Realiza un resumen de la variable Puntuación mediante la orden summary.
Comprueba que las medidas que proporciona summary coinciden con las
medidas calculadas de forma individual usando su función específica.
e) Calcula la estatura media de los estudiantes y proporciona, al menos, dos
medidas que indiquen la dispersión de esta variable.
f) ¿Qué variable es más homogénea: la Edad o la Estatura?

Ejercicio Guiado (Resuelto)


Considérese el siguiente conjunto de datos que contiene información acerca
del sexo, edad, estatura, puntuación y calificación de 20 estudiantes:
a) Realiza una tabla de frecuencias absolutas y otra de frecuencias relativas
para la variable Calificación. Almacena las tablas anteriores en dos variables
y llámalas absolutas y relativas.
En primer lugar, nos situamos en el directorio de trabajo. Para ello, en el menú
principal de RStudio, seleccionamos Session/Set Working Directory/Choose
Directory o bien con las teclas Ctrl+Shift+H,
Y en la Consola de RStudio se muestra el comando
>setwd(“F:/Desktop/EJEMPLOS”)
Utilizamos la función read.table para leer un fichero .txt en R y llamamos al
fichero datos1
> datos1 <- read.table(“C:/Users/Usuario/Desktop/EJEMPLOS/Ej_Guiado1.txt”,
header = TRUE)
> datos1
Sexo Edad Estatura Puntuación Calificación
1 Mujer 21 1.82 5 Aprobado
2 Hombre 19 1.83 6 Aprobado
3 Mujer 18 1.78 7 Notable
4 Mujer 20 1.79 5 Aprobado
5 Mujer 23 1.80 9 Sobresaliente
6 Hombre 22 1.90 7 Notable
7 Mujer 22 1.79 8 Notable
8 Hombre 20 1.83 3 Suspenso
9 Hombre 21 NP 9 Sobresaliente
10 Mujer 21 1.65 2 Suspenso
11 Mujer 22 1.73 5 Aprobado
12 Hombre 20 1.79 8 Notable
13 Hombre 22 1.80 7 Notable
14 Mujer 19 1.77 6 Aprobado
15 Mujer 19 1.69 3 Suspenso
16 Hombre 21 1.75 4 Suspenso
17 Mujer 20 1.66 5 Aprobado
18 Mujer 21 NP 6 Aprobado
19 Mujer 22 1.79 2 Suspenso
20 Mujer 23 1.80 8 Notable
> absolutas <- table(datos1$Calificación)
> absolutas
Aprobado Notable Sobresaliente Suspenso
7625
> relativas <- prop.table(absolutas)
> relativas
Aprobado Notable Sobresaliente Suspenso
0.35 0.30 0.10 0.25
b) Representa la variable Calificación mediante un diagrama de barras y un
diagrama de sectores. Incluye un título adecuado para cada gráfico y colorea
las barras y los sectores de colores diferentes.
> barplot(absolutas, col = c(“red”, “blue”, “yellow”, “green”), main = “Diagrama de
barras para la variable Calificación”)
Figura 8: Diagrama de barras de la variable Calificación
> pie(absolutas, col = c(“red”, “blue”, “yellow”, “green”), main = “Diagrama de
barras para la variable Calificación”)
Figura 9:
Diagrama de sectores de la variable Calificación
c) Para la variable Edad, realiza un histograma y un diagrama de caja y bigotes
considerando la opción range = 1.5. Incluye un título apropiado para cada
gráfico y colorea las barras del histograma de color amarillo. ¿Existe algún
valor atípico en esta variable? Reduce el valor del argumento range hasta 0.5.
¿Varían las conclusiones?
> hist(datos1$Edad, col = “yellow”, main = “Histograma para la variable Edad”, xlab
= “Edades”, ylab = “Frecuencia”)
Figura
10: Histograma de la variable Edad
> boxplot(datos1$Edad, main = “Cajas y bigotes para la variable Edad (range =
1.5)”)

Figura 11: Caja y Bigotes de la variable Edad (range = 1.5)

En este caso no se aprecia ningún valor atípico en el diagrama de caja y bigotes, ya


que no aparece ningún valor más allá de los bigotes.
> boxplot(datos1$Edad, main = “Cajas y bigotes para la variable Edad (range =
0.5)”)

Figura 12: Caja y Bigotes de la variable Edad (range = 0.5)


Cuando se reduce el valor de range a 0.5 tampoco se observa ningún valor atípico.
d) Realiza un resumen de la variable Puntuación mediante la orden summary.
Comprueba que las medidas que proporciona summary coinciden con las
medidas calculadas de forma individual usando su función específica.
Si aplicamos la función summary a la variable Puntuación, obtenemos el siguiente
resultado
> summary(datos1$Puntuación)
Min. 1st Qu. Median Mean 3rd Qu. Max.
2.00 4.75 6.00 5.75 7.25 9.00

Calculemos cada medida por separado

> min(datos1$Puntuación)
[1] 2
> max(datos1$Puntuación)
[1] 9
> quantile(datos1$Puntuación, probs = c(0.25, 0.75))
25% 75%
4.75 7.25
> mean(datos1$Puntuación )
[1] 5.75
> median(datos1$Puntuación)
[1] 6
e) Calcula la estatura media de los estudiantes y proporciona, al menos, dos
medidas que indiquen la dispersión de esta variable.
Para calcular la estatura media de los estudiantes, tenemos que tener en cuenta que
la variable Estatura incluye dos valores faltantes entre sus observaciones. Este
hecho tiene que ser indicado estableciendo como TRUE el valor del parámetro na.rm
> mean(datos1$Estatura, na.rm = TRUE)
[1] 1.776111
La estatura media de los estudiantes es de 1.776 cm..

Como medidas de dispersión, se van a calcular la cuasi-varianza y el recorrido


intercuartílico.

> var(datos1$Estatura, na.rm = TRUE)


[1] 0.003836928
> IQR(datos1$Estatura, na.rm = TRUE)
[1] 0.045
f) ¿Qué variable es más homogénea: la edad o la estatura?
Para determinar la homogeneidad de una variable (o, lo que es lo mismo, la
representatividad de su media), calculamos el Coeficiente de Variación de
Pearson para cada una de ellas, el cual se define como el cociente entre la desviación
típica y la media de la variable.
Vamos a comenzar con la variable Edad. En primer lugar, calculemos la edad
media de los estudiantes.
> media_Edad <- mean(datos1$Edad)
> media_Edad
[1] 20.8
A continuaciñon obtenemos la desviación típica. Para ello, calcularemos en primer
lugar la varianza de la variable Edadmediante la función var, que recordemos
calcula la cuasi-varianza de una variable.
> var_Edad <- 19/20 * var(datos1$Edad)
> var_Edad
[1] 1.86

Una vez obtenida la varianza, la desviación típica se obtiene como su raíz cuadrada
positiva.

> dt_Edad <- sqrt(var_Edad)


> dt_Edad
[1] 1.363818

Por último, calculamos el Coeficiente de Variación de la Edad y mostramos su


valor.

> CV_Edad <- dt_Edad/media_Edad


> CV_Edad
[1] 0.06556818

Repetimos el mismo proceso con la variable Estatura.

> media_Altura <- mean(datos1$Estatura, na.rm = TRUE)


> var_Altura <- 19/20 * var(datos1$Estatura, na.rm = TRUE)
> dt_Altura <- sqrt(var_Altura)
> CV_Altura <- dt_Altura/media_Altura
> CV_Altura
[1] 0.03399253
La variable más homogénea es la variable Estatura, ya que presenta un coeficiente
de variación más próximo a 0.

En el Editor de RStudio hemos realizado las siguientes instrucciones

datos1 <- read.table(“C:/Users/Usuario/Desktop/EJEMPLOS/Ej_Guiado1.txt”,


header = TRUE)
datos1
absolutas <- table(datos1$Calificación)
absolutas
relativas <- prop.table(absolutas)
relativas
barplot(absolutas, col = c(“red”, “blue”, “yellow”, “green”), main = “Diagrama de
barras para la variable Calificación”)
pie(absolutas, col = c(“red”, “blue”, “yellow”, “green”), main = “Diagrama de barras
para la variable Calificación”)
hist(datos1$Edad, col = “yellow”, main = “Histograma para la variable Edad”, xlab =
“Edades”, ylab = “Frecuencia”)
boxplot(datos1$Edad, main = “Cajas y bigotes para la variable Edad (range = 1.5)”)
boxplot(datos1$Edad, main = “Cajas y bigotes para la variable Edad (range = 0.5)”)
summary(datos1$Puntuación)
min(datos1$Puntuación)
max(datos1$Puntuación)
quantile(datos1$Puntuación, probs = c(0.25, 0.75))
mean(datos1$Puntuación )
median(datos1$Puntuación)
mean(datos1$Estatura, na.rm = TRUE)
var(datos1$Estatura, na.rm = TRUE)
IQR(datos1$Estatura, na.rm = TRUE)
media_Edad <- mean(datos1$Edad)
media_Edad
var_Edad <- 19/20 * var(datos1$Edad)
var_Edad
dt_Edad <- sqrt(var_Edad)
dt_Edad
CV_Edad <- dt_Edad/media_Edad
CV_Edad
media_Altura <- mean(datos1$Estatura, na.rm = TRUE)
var_Altura <- 19/20 * var(datos1$Estatura, na.rm = TRUE)
dt_Altura <- sqrt(var_Altura)
CV_Altura <- dt_Altura/media_Altura
CV_Altura

Ejercicios Propuestos
Ejercicio Propuesto
Se está realizando un estudio sobre los niveles de glucosa en una población
con el objetivo de estudiar si dichos niveles varían en función del sexo, edad,
estatura y grupo sanguíneo de la persona. Para ello se toman dos muestras de
20 individuos cada una

Ta
bla3. Datos del Ejercicio Propuesto 1
Se pide:
a) Crear dos conjuntos de datos, de nombre GrA y GrB que contengan la
información recogida en las tablas anteriores.
b) Representar la variable Gr_Sang mediante un diagrama de sectores en cada
uno de los grupos. Incluir un título descriptivo en cada gráfico y colorear los
sectores de azul, amarillo, rosa y verde.
c) Representar la variable Estatura mediante un histograma en cada uno de
los grupos.
d) ¿Existe algún dato atípico en la variable Edad en el grupo A? ¿Y en el grupo
B?
e) ¿Cuál es el valor máximo del 40% de las estaturas más pequeñas de los
individuos en el grupo A? ¿Y el valor mínimo del 30% de las estaturas
mayores de los individuos en el grupo B?
f) ¿Dónde son las variables edad y estatura más homogénea: en el grupo A o
en el B?

g) ¿En qué grupo presentan los individuos una altura media mayor? ¿En qué
grupo presentan los individuos una altura mediana menor?
h) Estudia la asimetría y la curtosis de la variable Estatura en en el grupo A.
Ejercicio Propuesto (Resuelto)
a) Crear dos conjuntos de datos, de nombre GrA y GrB que contengan la
información recogida en las tablas anteriores.
>Sexo_A <- factor(c(“Mujer”, “Hombre”, “Mujer”, “Mujer”, “Mujer”, “Hombre”,
“Mujer”, “Hombre”, “Hombre”, “Mujer”, “Mujer” ,”Hombre”, “Hombre”, “Mujer”,
“Mujer”, “Hombre”, “Mujer”, “Mujer”, “Mujer”, “Mujer” ), levels = c(“Mujer”,
“Hombre”))
>Edad_A <- c(25, 30, 28, 20, 23, 22, 22, 22, 21, 21, 22, 20, 22, 29, 29, 21, 30, 21, 22,
23)
>Estatura_A <- c(1.82, 1.83, 1.78, 1.79, 1.80, 1.90, 1.79, 1.83, NA, 1.65, 1.73, 1.79,
1.80, 1.77, 1.69, 1.75, 1.66, NA, 1.79, 1.80)
>Gr_Sang_A <- c(“A”, “B”, “A”, “AB”, “0”, “A”, “B”, “A”, “B”, “AB”, “A”, “B”, “0”, “0”, “A”,
“B”, “AB”, “B”, “B”, “B”)

> GrA<- data.frame (Sexo_A,Edad_A, Estatura_A, Gr_Sang_A)


> GrA
Sexo_A Edad_A Estatura_A Gr_Sang_A
1 Mujer 25 1.82 A
2 Hombre 30 1.83 B
3 Mujer 28 1.78 A
4 Mujer 20 1.79 AB
5 Mujer 23 1.80 0
6 Hombre 22 1.90 A
7 Mujer 22 1.79 B
8 Hombre 22 1.83 A
9 Hombre 21 NA B
10 Mujer 21 1.65 AB
11 Mujer 22 1.73 A
12 Hombre 20 1.79 B
13 Hombre 22 1.80 0
14 Mujer 29 1.77 0
15 Mujer 29 1.69 A
16 Hombre 21 1.75 B
17 Mujer 30 1.66 AB
18 Mujer 21 NA B
19 Mujer 22 1.79 B
20 Mujer 23 1.80 B
Repetir para el grupo B
b) Representar la variable Gr_Sang mediante un diagrama de sectores en cada
uno de los grupos. Incluir un título descriptivo en cada gráfico y colorear los
sectores de azul, amarillo, rosa y verde.
> pie(table(GrA$Gr_Sang_A), col = c( “blue”, “yellow”, “pink”, “green”), main =
“Diagrama de sectores para Grupo Sanguineo (Gr A)”)
Figura 14:
Diagrama de Sectores del Grupo Sanguíneo (Grupo A)

Figura 15:
Diagrama de Sectores del Grupo Sanguíneo (Grupo B)
c) Representar la variable Estatura mediante un histograma en cada uno de
los grupos.
Histograma de Altura en el Grupo A

Figura 16:
Histograma de la estatura (Grupo A)
Histograma de la Estatura para el Grupo B

Figura 17:
Histograma de la estatura (Grupo B)
d) ¿Existe algún dato atípico en la variable Edad en el grupo A? ¿Y en el grupo
B?

Para responder a esta pregunta, vamos a calcular los gráficos de caja y bigotes para
la variable Edad en ambos grupos.

Boxplot de Edad para el Grupo A

Figura 18: Caja y


Bigotes de la edad (Grupo A)
Boxplot de Edad para el Grupo B
Figura 19: Caja y
Bigotes de la edad (Grupo B)

No hay valores atípicos (datos más allá de los extremos de los bigotes) para la
variable Edad en ninguno de los grupos.

e) ¿Cuál es el valor máximo del 40% de las estaturas más pequeñas de los
individuos en el grupo A? ¿Y el valor mínimo del 30% de las estaturas
mayores de los individuos en el grupo B?

Los valores que nos están pidiendo son el percentil 40 de la variable Estatura en la
región A y el percentil 70 de la variable Altura en la región B, respectivamente.

Percentil 40 de Estatura en el Grupo A = 1.79


Percentil 70 de Estatura en el Grupo B = 1.79
f) ¿Dónde son las variablea edad y estatura más homogénea: en el grupo A o
en el B?

Para contestar a esta pregunta, vamos a calcular el Coeficiente de Variación de


Pearson para la variable Estatura en cada uno de los grupos. Recordemos que la
fórmula para el cómputo del coeficiente de variación es

Por lo tanto,
CV de la Estatura del Grupo A = 0.5813903
CV de la Estatura del Grupo B =0.02937938

Atendiendo a los resultados que hemos obtenido, podemos afirmar que la variable
Estatura es más homogénea en el Grupo B dado que es en esta región donde el
coeficiente de variación para la variable Estatura está más próximo a 0.
g) ¿En qué grupo presentan los individuos una altura media mayor? ¿En qué
grupo presentan los individuos una altura mediana menor?

Media y mediana de la estatura en el grupo A (2.066667 y 1.79, respectivamente) y


en el grupo B (1.785556 y 1.79, respectivamente)

Como se puede apreciar, la estatura media mayor es en el Grupo A.

h) Estudia la asimetría y la curtosis de la variable Estatura en en el grupo A.


Asimetría de la Estatura en el Grupo A = 3.863992
Kurtosis de la Estatura en el Grupo A = 15.97886

Como el coeficiente de asimetría es mayor que 0, concluiremos que la distribución


de la variable Estatura en el Grupo A es asimétrica a la derecha. Igualmente, dado
que el coeficiente de curtosis es también positivo, la distribución de esta variable es
más apuntada que la distribución normal es decir, leptocúrtica.

Ejercicio Propuesto 1 (Resuelto *.txt)


Autora: Ana María Lara Porras. Universidad de Granada. (2017)
……………………………………………………………………………………………………………..

Práctica 3
Métodos de regresión

REGRESIÓN Y CORRELACIÓN
Objetivos
• Ajustar modelos de regresión lineal simple y múltiple estimando los valores de sus
parámetros
• Obtener información adicional sobre los modelos de regresión (contrastes de
significación de los parámetros, test de bondad de ajuste,…)
• Contrastar las hipótesis del modelo de regresión lineal
• Ajustar un modelo de regresión cuadrático
• Estudiar la correlación entre variables.

Regresión
El objetivo del Análisis de regresión es determinar una función matemática sencilla
que describa el comportamiento de una variable dados los valores de otra u otras
variables. En el Análisis de regresión simple, se pretende estudiar y explicar el
comportamiento de una variable que notamos y, y que
llamaremos variable explicada, variable dependiente o variable de interés, a
partir de otra variable, que notamos x, y que llamamos variable
explicativa, variable independiente o variable de predicción. El
principal objetivo de la regresión es encontrar la función que mejor explique
la relación entre la variable dependiente y las independientes.

Para cumplir dicho objetivo, el primer paso que debe realizar el investigador, es
representar las observaciones de ambas variables en un gráfico llamado diagrama
de dispersión o nube de puntos. A partir de esta representación el investigador
puede especificar la forma funcional de la función de regresión.

A menudo se supone que la relación que guardan la variable dependiente y las


independientes es lineal. En estos casos, se utlizan los modelos de regresión lineal.
Aunque las relaciones lineales aparecen de forma frecuente, también es posible
considerar otro tipo de relación entre las variables, que se modelizan mediante otros
modelos de regresión, como pueden ser el modelo de regresión
cuadrático o parabólico o el modelo de regresión hiperbólico.
Teoría de la Regresión: Consiste en la búsqueda de una “función” que exprese lo
mejor posible el tipo de relación entre dos o más variables.
Correlación
La correlación está íntimamente ligada con la regresión en el sentido de que se
centra en el estudio del grado de asociación entre variables. Por lo tanto, una
variable independiente que presente un alto grado de correlación con una variable
dependiente será muy útil para predecir los valores de ésta última. Cuando la
relación entre las variables es lineal, se habla de correlación lineal. Una de las
medidas más utilizadas para medir la correlación lineal entre variables es
el coeficiente de correlación lineal de Pearson.
Teoría de la Correlación: Estudia el grado de dependencia entre las variables, es
decir su objetivo es medir el grado de ajuste existente entre la función teórica
(función ajustada) y la nube de puntos.
En esta práctica se mostrará cómo ajustar un modelo de regresión
con RStudio, prestando especial atención a los modelos de regresión lineal. Además,
enseñaremos como calcular e interpretar algunas medidas de correlación.
Regresión lineal simple
La regresión lineal simple supone que los valores de la variable dependiente, a los
que llamaremos yi, pueden escribirse en función de los valores de una única variable
independiente, los cuales notaremos por xi, según el siguiente modelo lineal:

donde y , son los parámetros desconocidos que


vamos a estimar.
Habitualmente, al iniciar un estudio de regresión lineal simple se suelen representar
los valores de la variable dependiente y de la variable independiente de forma
conjunta mediante un diagrama de dispersión para determinar si realmente existe
una relación lineal entre ambas. Para realizar un diagrama de dispersión
en R y RStudio utilizaremos la orden plot
> plot(x,y)
donde x e y son los valores de las variables independiente y dependiente,
respectivamente. En caso de que en el diagrama de dispersión se aprecie un patrón
lineal entre las dos variables, se podrá asumir una cierta relación lineal entre ambas
variables y se procederá a ajustar el modelo de regresión lineal simple.
Después de comprobar gráficamente la relación lineal entre las variables, el
siguiente paso es la estimación de los valores de los parámetros y que
aparecen en la fórmula (1) a partir de un conjunto de datos. Para ello, podemos
utilizar la función lm de R, cuya sintaxis es la siguiente
> lm(formula, data)
donde formula indica la relación que guardan la variable dependiente y la variable
independiente.

Por ejemplo:

> lm(formula = y ~ x, data=midataset)

Algunas peculiaridades sobre este argumento:

• Las partes izquierda (variable dependiente) y derecha (variable independiente) de


la fórmula vienen separadas por el símbolo ~ , que puede escribirse con la secuencia
de comandos Alt + 126.
• Por defecto, la función devuelve un valor para . En determinadas ocasiones,
interesa que dicho valor sea igual a 0, lo cual se indica en la fórmula del siguiente
modo:
> lm(formula = y ~0 + x, data=midataset)
• data es el conjunto de datos en el que se encuentran las variables que se utilizan en
la fórmula. Este argumento es optativo, aunque es muy recomendable usarlo para
una mayor claridad en la fórmula. Para ver la diferencia, observemos las siguientes
llamadas a la función lm:
> lm(formula = y ~ x, data=midataset)
> lm(formula =midataset$y ~ midataset$x)

Ambas llamadas son equivalentes, pero en la primera de ellas se aprecia mucho


mejor cuál es la expresión que indica la relación entre las variables.

Ejemplo 1
La siguiente tabla muestra información sobre la edad y la presión sanguínea de 10
mujeres:

Tabla1: Datos del Ejemplo 1


En primer lugar, vamos a almacenar los datos de las dos variables en dos vectores.
Para ello, en primer lugar abrimos un nuevo Script en el Editor de datos de RStudio,
seleccionando File/New File/R Script (o las teclas Ctrl + Shift + N) y escribimos
edad <- c(56, 42, 72, 36, 63, 47, 55, 47, 38, 42)
presion <- c(148, 126, 159, 118, 149, 130, 151, 142, 114, 141)
edad
presion
Seleccionanos las sentencias y pulsamos la tecla Run o bien Ctrl + Enter y se
muestran las siguientes órdenes en la Consola de RStudio
> edad <- c(56, 42, 72, 36, 63, 47, 55, 47, 38, 42)
> presion <- c(148, 126, 159, 118, 149, 130, 151, 142, 114, 141)
> edad
[1] 56 42 72 36 63 47 55 47 38 42
> presion
[1] 148 126 159 118 149 130 151 142 114 141
Otra opción es:

> setwd(“F:/Desktop/EJEMPLOSRS3”)
> datos <- read.table(“F:/Desktop/EJEMPLOSRS3/ejemplo1.txt”, header = TRUE)
> datos
edad Presión
1 56 148
2 42 126
3 72 159
4 36 118
5 63 149
6 47 130
7 55 151
8 47 142
9 38 114
10 42 141
Supongamos que nuestro objetivo es determinar la edad de una mujer a partir de su
presión sanguínea o, lo que es lo mismo, supongamos que la variable dependiente
es edad y que la variable independiente es presión. Vamos a representar el
diagrama de dispersión de las dos variables para determinar si la relación existente
entre ambas puede considerarse lineal, y por tanto, tiene sentido plantear un
modelo de regresión lineal simple.
> plot(presion, edad)

Figura 1: Diagrama de
Dispersión

A la vista del gráfico de dispersión, se puede asumir un cierto grado de relación lineal
entre ambas variables, por lo que procedemos al ajuste del modelo lineal.

> reg_lin <- lm(edad ~ presion)


> reg_lin
Call:
lm(formula = edad ~ presion)
Coefficients:
(Intercept) presion
-43.5440 0.6774
Por defecto, la salida que muestra la función lm incluye únicamente las estimaciones

para los parámetros, en nuestro caso y . Por tanto, el modelo lineal puede
escribirse del siguiente modo:
edadi = -43.5440 + 0.6774 presioni
Estos dos parámetros pueden interpretarse del siguiente modo: –43.5440 es el
valor de la edad para una persona de presión sanguínea 0, lo cual no tiene sentido.

De hecho, en multitud de ocasiones la interpretación del parámetro no es


relevante y todo el interés recae sobre la interpretación del resto de parámetros.

El parámetro es igual a 0.6774 indica que, por término medio, cada mmHg
(milímetros de mercurio) de incremento en la presión sanguínea de una persona
supone un incremento de 0.6774. en su edad.
Podemos obtener más información sobre el modelo de regresión que hemos
calculado aplicando la función summary al objeto que contiene los datos de la
regresión, al cual hemos llamado reg_lin en este ejemplo.
> summary(reg_lin)
Call:
lm(formula = edad ~ presion)
Residuals:
Min 1Q Median 3Q Max
-9.9676 -2.9835 -0.0973 3.8623 7.8394
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -43.5440 17.6126 -2.472 0.038571 *
presion 0.6774 0.1271 5.328 0.000704 ***

Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 5.742 on 8 degrees of freedom
Multiple R-squared: 0.7802, Adjusted R-squared: 0.7527
F-statistic: 28.39 on 1 and 8 DF, p-value: 0.000704
Esta salida contiene una información más completa sobre el análisis. Así, por
ejemplo, encontramos información sobre los residuos (en el apartado Residuals),
que se definen como la diferencia entre el verdadero valor de la variable
dependiente y el valor que pronostica el modelo de regresión. Cuanto más pequeños
sean estos residuos mejor será el ajuste del modelo a los datos y más acertadas serán
las predicciones que se realicen a partir de dicho modelo.
En la tabla Coefficients encontramos los valores de los parámetros que aparecían
en la salida por defecto junto a su error estándar. Cada parámetro aparece
acompañado del valor de un estadístico t de Student y un p-valor que sirven para
contrastar la significación del parámetro en cuestión, es decir, para resolver los
siguientes contrastes de hipótesis:
Lo que se pretende mediante estos contrastes,
es determinar si los efectos de la constante y de la variable independiente son
realmente importantes para explicar la variable dependiente o si, por el contario,
pueden considerarse nulos.
En nuestro ejemplo, los p-valores que nos ayudan a resolver estos contrastes
son 0.038571 y 0.000704 ambos menores que 0.05. Así, considerando un nivel del
significación del 5%, rechazamos la hipótesis nula en ambos contrastes, de manera
que podemos suponer ambos parámetros significativamente distintos de 0.
Por último, en la parte final de la salida, encontramos el valor de R² (Multiple R-
squared) y de R² ajustado (Adjusted R-squared), que son indicadores de la bondad
del ajuste de nuestro modelo a los datos. R² oscila entre 0 y 1, de manera que,
valores de R² próximos a 1 indican un buen ajuste del modelo lineal a los datos. Por
otro lado, R² ajustado es similar a R², pero penaliza la introducción en el modelo de
variables independientes poco relevantes a la hora de explicar la variable
dependiente. Por tanto, R² ajustado <= R². En nuestro
ejemplo, R² = 0.7802 y R² ajustado = 0.7527, por lo que podemos concluir que el
modelo lineal se ajusta de forma aceptable a nuestros datos. La última línea de la
salida incluye un estadístico F de Snedecor y el p-valor correspondiente que se
utilizan para resolver el siguiente contraste:

que se conoce habitualmente como contraste


ómnibus. Mediante este contraste se comprueba si, de forma global, el modelo lineal
es apropiado para modelizar los datos. En nuestro ejemplo, el p-valor asociado a este
contraste es inferior a 0.05 por lo que, al 5% de significación podemos rechazar la
hipótesis nula y afirmar que, efectivamente, el modelo lineal es adecuado para
nuestro conjunto de datos.
R y RStudio nos permiten dibujar la recta de regresión lineal sobre el diagrama de
dispersión mediante la orden abline. De este modo podemos visualizar la distancia
existente entre los valores observados y los valores que el modelo pronostica (esto
es, los residuos).
> plot(presion, edad)
> abline(reg_lin)
Figura 2: Diagrama de
Dispersión y recta de regresión

Un aspecto importante cuando se trabaja con modelos de regresión lineal es la


comprobación de las hipótesis que deben de cumplirse para poder utilizar este tipo
de modelos. Estas suposiciones hacen referencia a los residuos y pueden resumirse
en los siguientes puntos:

• Normalidad de los residuos


• Independencia de los residuos
• Homocedasticidad (igualdad de las varianzas de los residuos)
• Linealidad de los residuos

Al aplicar la función plot sobre el objeto que contiene la información del modelo
obtenemos 4 gráficos que nos ayudan para la validación del modelo. Estos gráficos
son:

• Valores predichos frente a residuos


• Gráfico Q-Q de normalidad
• Valores predichos frente a raíz cuadrada de los residuos estandarizados (en
valor absoluto)
• Residuos estandarizados frente a leverages
> plot(reg_lin)
Hit <Return> to see next plot:
Nota: Para pasar de un gráfico al siguiente basta con hacer Clik con el ratón o
presionar Enter sobre el gráfico en cuestión
Figura 3,4,5 y 6: Gráficos para la validación del modelo

Los gráficos 4 y 6 se utilizan para contrastar gráficamente la independencia, la


homocedasticidad y la linealidad de los residuos. Idealmente, los residuos deben
estar aleatoriamente distribuidos a lo largo del gráfico, sin formar ningún tipo de
patrón.

El gráfico Q- Q, (Gráfico 5) por su parte, se utiliza para contrastar la normalidad de


los residuos. Lo deseable es que los residuos estandarizados estén lo más cerca
posible a la línea punteada que aparece en el gráfico.

El gráfico de residuos estandarizados frente a leverages (Gráfico 3) se utiliza para


detectar puntos con una influencia importante en el cálculo de las estimaciones de
los parámetros. En caso de detectarse algún punto fuera de los límites que
establecen las líneas discontinuas debe estudiarse este punto de forma aislada para
detectar, por ejemplo, si la elevada importancia de esa observación se debe a un
error.

Los gráficos parecen indicar que los residuos son aleatorios, independientes y
homocedásticos. Sin embargo, no parece que los residuos sigan una distribución
Normal. Vamos a confirmar si esto es así mediante métodos analíticos.

Para comprobar la normalidad, aplicaremos a los residuos el test de normalidad


de Kolmogorov-Smirnov, que en R y Rstudiose calcula a través de la
función ks.test, cuya sintaxis es la siguiente:
ks.test (x, distrib)

donde

• x es un vector numérico con los datos a los que vamos a aplicar el test (en nuestro
caso, los residuos)
• distrib indica la distribución de referencia que se usará en el contraste (en nuestro
caso, la distribución Normal, por lo que distrib = pnorm)
Al realizar un análisis de regresión lineal, R y RStudio guardan automáticamente los
residuos en el objeto que almacena la información de la regresión (y que nosotros
hemos llamado reg_lin). Para acceder a estos residuos, escribiremos $residuals a
continuación del nombre del objeto que contiene la información del análisis. Por
tanto, podemos realizar el contraste de Kolmogorov-Smirnov del siguiente modo:
> ks.test(reg_lin$residuals, “pnorm”)
One-sample Kolmogorov-Smirnov test
data: reg_lin$residuals
D = 0.3935, p-value = 0.06608
alternative hypothesis: two-sided

Los resultados del test nos confirman lo que se intuía en el gráfico Q-Q: a un 10% de
significación los residuos no siguen una distribución normal, puesto que el p-valor
que se obtiene (0.06608) es menor que 0.1. Sin embargo para una significación del
5% no se debe rechazar la hipótesis nula.

Por último, contrastemos la independencia de los residuos mediante el test


de Durbin-Watson. La función que calcula este test se llama dwtest y se encuentra
dentro del paquete lmtest. Por lo que lo primero que tenemos que hacer es instalar
y cargar dicho paquete. Puedes encontrar más información sobre la instalación y
cargas de paquetes en la práctica 2.

Para ello elegir en el menú principal Tools/Install Packages


Figura 7: Tools/Install
Packages
En la consola de RStudio se muestra
> install.packages(“lmtest”)
trying URL ‘https://cran.rstudio.com/bin/windows/contrib/3.2/lmtest_0.9-34.zip’
Content type ‘application/zip’ length 283498 bytes (276 KB)
downloaded 276 KB
package ‘lmtest’ successfully unpacked and MD5 sums checked
The downloaded binary packages are in
C:\Users\Usuario\AppData\Local\Temp\RtmpMtPgAz\downloaded_packages

A continuación se debe Cargar el paquete, para ello desde el panel de paquetes


simplemente se selecciona dicho paquete
Figura 8: Cargar el
paquete lmtest
En la consola de RStudio se muestra
> library(“lmtest”, lib.loc=”C:/Program Files/R/R-3.2.5/library”)
Loading required package: zoo
Attaching package: ‘zoo’
The following objects are masked from ‘package:base’:
as.Date, as.Date.numeric

También se puede utilizar las instrucciones

> install.packages(“lmtest”) #Instalación del paquete


> library(lmtest) #Carga del paquete
Ahora ya podemos utilizar la función dwtest, cuya sintaxis es
dwtest (formula)

donde

• formula indica la relación que guardan la variable dependiente y la independiente,


y debe coincidir con la que se ha empleado en la función lm.
> dwtest(edad~presion)
Durbin-Watson test
data: edad ~ presion
DW = 1.9667, p-value = 0.5879
alternative hypothesis: true autocorrelation is greater than 0

En este caso, con un p-valor de 0.5879 no podemos rechazar la hipótesis de que los
residuos son independientes.
Regresión lineal múltiple
El modelo de regresión múltiple es la extensión a k variables explicativas del modelo
de regresión simple. En general, una variable de interés y depende de varias
variables x1, x2, …, xk y no sólo de una única variable de predicción x. Por ejemplo, para
estudiar la contaminación atmosférica, parece razonable considerar más de una
variable explicativa, como pueden la temperatura media anual, el número de
fábricas, el número de habitantes, etc. Además de las variables observables, la
variable de interés puede depender de otras desconocidas para el investigador. Un
modelo de regresión representa el efecto de estas variables en lo que se conoce
como error aleatorio o perturbación.
Un modelo de regresión teórico en el que las variables se pueden relacionar
mediante una función de tipo lineal, podemos expresarlo de la siguiente forma:

Figura 9: Expresión del modelo de


regresión múltiple

donde

• y es la variable de interés que vamos a predecir, también llamada variable


respuesta o variable dependiente
• x1, x2, …, xk son variables independientes, explicativas o de predicción
• β1, β2, …, βk son los parámetros desconocidos que vamos a estimar
• ε es el error aleatorio o perturbación, que representa el efecto de todas las
variables que pueden afectar a la variable dependiente y no están incluidas en el
modelo de regresión.
En R y Rstudio, el paso de un modelo de regresión lineal simple a un modelo de
regresión lineal múltiple es muy sencillo: basta con añadir variables independientes
al argumento formula de la función lm separadas por el signo +. Veamos un
ejemplo:
Ejemplo 2
Se desea conocer el gasto de alimentación mensual de una familia en función del
ingreso mensual, el tamaño de la familia y el número de hijos en la universidad. Los
datos se muestran en la tabla adjunta

Tabla 2: Gastos de alimentación mensual


Vamos a ajustar un nuevo modelo de regresión lineal múltiple que explique el gasto
de alimentación mensual en función de las variables descritas anteriormente. En
primer lugar, vamos a crear cuatro vectores numéricos, uno para cada variable

> gastos <- c(1000, 580, 520, 500, 600, 550, 400)
> ingresos <- c(50000, 2500, 2000, 1900, 3000, 4000, 2000)
> tamaño <- c(7, 4, 3, 3, 6, 5, 2)
> hijosU <- c(3,1,1,0,1,2,0)
Y vamos a agrupar la información relativa a las 4 variables de las que disponemos
en un data frame al que pondremos por nombre datos2:
> datos2 <- data.frame(gastos, ingresos, tamaño, hijosU)
Comprobemos que, efectivamente, el data frame que hemos creado contiene la
información sobre las 4 variables:
> datos2
gastos ingresos tamaño hijosU
1 1000 50000 7 3
2 580 2500 4 1
3 520 2000 3 1
4 500 1900 3 0
5 600 3000 6 1
6 550 4000 5 2
7 400 2000 2 0
A continuación ajustamos el modelo de regresión lineal múltiple
> reg_lin_mul <- lm(gastos ~ ingresos + tamaño + hijosU)
> summary(reg_lin_mul)
Call:
lm(formula = gastos ~ ingresos + tamaño + hijosU)
Residuals:
1234567
1.216 48.164 29.125 15.209 -10.134 -35.402 -48.178
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.590e+02 6.291e+01 5.706 0.0107 *
ingresos 7.247e-03 1.802e-03 4.021 0.0276 *
tamaño 3.734e+01 2.046e+01 1.825 0.1655
hijosU 5.359e+00 4.061e+01 0.132 0.9034

Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 48.57 on 3 degrees of freedom
Multiple R-squared: 0.9677, Adjusted R-squared: 0.9353
F-statistic: 29.93 on 3 and 3 DF, p-value: 0.009772

En Coefficients se muestran los parámetros estimados de regresión β0 = 3.590e,


β01/sub>=7.247e, β = 3.734e y 2 β = 5.359e
3

La ecuación de regresión ajustada está dada por:


gastosi = 3.590e02 + 7.247e-03 * ingresosi + 3.734e01 * tamañoi + 5.359 *hijosUi .
• Los gastos estimados son iguales a 3.590e02 euros (constantes las demás variables)
• Por cada mil euros de ingresos, los gastos aumentan en 7.247e-03, supuesto que
permanecen constantes las otras variables.
• Por cada aumento del tamaño de la familia en un familiar, los gastos estimados
aumentan en 3.734e01e, suponiendo que se mantienen constantes las otras
variables
• Por cada aumento del número de hijos estudiando en la Universidad, los gastos
estimados aumentan en 5.359, suponiendo que se mantienen constantes las otras
variables

Tanto la interpretación como la comprobación de la significación de los parámetros


se realizan de forma similar al caso en que se cuenta con una única variable
independiente. Igualmente, la validación se lleva a cabo del mismo modo que para
la regresión lineal simple.

El p-valor asociado al contraste (0.009772) es menor que a = 0.05 , por lo que


rechazamos la hipótesis nula. Esto implica que al menos una de las variables
independientes contribuye de forma significativa a la explicación de la variable
respuesta.
Para las variables tamaño familiar y número de hijos en la Universidad, los p-
valores son 0.1655 y 0.9034, respectivamente. Ambos mayores que 0.05, por lo que
no rechazamos la hipótesis nula de significación de ambas variables. Estas variables
no son válidas para predecir los gastos alimentación mensual de una familia y por
tanto se pueden eliminar del modelo.
Con respecto a las representaciones gráficas, se pueden representar gráficos de
dispersión de la variable dependiente con respecto a cada una de las variables
independientes mediante el comando plot, como se ha mostrado anteriormente.
Correlación lineal
Para calcular el coeficiente de correlación lineal entre dos variables en R y
RStudio utilizan la orden cor, cuya sintaxis es la siguiente:
cor (x, y, method = c(“pearson” “kendall”, “spearman”))

donde

• x hace referencia a la primera de las variables


• y hace referencia a la segunda de las variables
• method indica el método que se va a utilizar para calcular el coeficiente de
correlación lineal. Las posibles opciones son: pearson (método que se considera por
defecto), kendall y spearman. Puedes encontrar más información sobre estos 3
métodos de cálculo del coeficiente de correlación lineal en el siguiente
enlace: http://www.napce.org/documents/research-design-
yount/22_correlation_4th.pdf
Ejemplo 3
Vamos a calcular el coeficiente de correlación lineal de Pearson entre las variables
gastos e ingresos:
> cor(gastos, ingresos)
[1] 0.9465675

El 94.65% de los gastos de alimentación mensual de una familia es explicada por


sus ingresos mensuales.
También es posible calcular de forma simultánea la correlación entre un conjunto
de variables almacenada en un data frame. Por ejemplo:

> cor(datos2)
gastos ingresos tamaño hijosU
gastos 1.0000000 0.9465675 0.8457301 0.8627733
ingresos 0.9465675 1.0000000 0.6886470 0.7885404
tamaño 0.8457301 0.6886470 1.0000000 0.8416254
hijosU 0.8627733 0.7885404 0.8416254 1.0000000
En este caso, en lugar de un único valor numérico, la función cor devuelve una
matriz simétrica con las correlaciones entre las variables.
Habitualmente, se está interesado en contrastar si la correlación lineal entre pares
de variables puede considerarse 0 o no. Es decir, se quiere resolver el contraste

donde ρ representa el coeficiente de correlación lineal. Este


contraste se resuelve en R y Rstudio usando la función cor.test
cor.test(x, y, alternative = c(“two.sided”, “less”, “greater”), method =
c(“pearson”, “kendall”, “spearman”), conf.level = 0.95)

donde

• x, y, method son los mismos parámetros que se usan en la función cor


• alternative indica cuál va a ser la hipótesis alternativa del contraste. Por defecto se
considera que la hipótesis alternativa es (two.sided), aunque también pueden
considerarse las hipótesis alternativas (less) o (greater).
• conf.level indica el nivel de confianza que se usará en el contraste (por defecto,
0.95)

En el Ejemplo 3 vamos a contrastar la significación de la correlación entre las


variables gastos e ingresos:

> cor.test (gastos, ingresos)


Pearson’s product-moment correlation
data: gastos and ingresos
t = 6.5629, df = 5, p-value = 0.001231
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.6738267 0.9922965
sample estimates:
cor
0.9465675

El p-valor asociado a este contraste es de 0.001231 < 0.05, por lo que rechazamos la
hipótesis de que la correlación lineal entre estas dos variables sea 0.

Otros modelos de regresión: regresión cuadrática


Aunque los modelos de regresión lineal (tanto simple como múltiple) funcionan bien
en una amplia mayoría de situaciones, en ocasiones es necesario considerar
modelos más complejos para conseguir un mejor ajuste a los datos.

Un ejemplo de este tipo de modelos es la regresión cuadrática. El modelo más


sencillo de regresión cuadrática es el siguiente:

Para ajustar un modelo de regresión cuadrático en R y RStudio basta con indicar en


el argumento formula de la función lmque una de las variables independientes está
elevada al cuadrado mediante el símbolo ^2.
Ejemplo 4
Calcular los valores de las estimaciones , y en el modelo de
regresión:
> lm(formula = gastos ~ ingresos +
tamaño^2)
Call:
lm(formula = gastos ~ ingresos + tamaño^2)
Coefficients:
(Intercept) ingresos tamaño
3.562e+02 7.374e-03 3.915e+01
gastos = 3.562e+02 + 7.374e-03 * ingresos + 3.915e+01 * tamaño2

Ejercicios
Ejercicios Guiados
Ejercicio guiado
Una empresa fabricante de cereales está interesada en conocer cómo afecta a
las ventas del producto, la publicidad en la televisión, en la radio y en los
periódicos. Para ello, realiza un estudio de los gastos mensuales (en miles de
euros) correspondientes a los últimos 20 meses. Estos datos se presentan en
la siguiente tabla.

Tabla3: Datos del Ejemplo Guiado 1

Ventas Pub(tv) Pub(radio) Pub(peri�d.)


10 13 56 40
12 14 55 40
11 15 60 42
13 17 65 50
12 17.5 69 40
14 13 67 44
16 14.5 68 40
12 9 67 44
14 8 97 46
11 9 66 46
10 8 65 45
19 10 60 110
8.5 17 70 30
8 18 110 50
9 18.5 75 45
13 19 80 40
16 20 85 80
18 20 90 90
20 13 56 90
22 14 55 110

a) Crea 4 vectores numéricos, de manera que cada uno contenga los datos de
una columna y un data frame llamado Cerealescon los 4 vectores que acabas
de crear

b) Representa el diagrama de dispersión de las ventas y la publicidad en tv


c) Escribe la recta de regresión lineal que surge de considerar las ventas como
variable dependiente y la publicidad en tvcomo variable independiente
d) ¿Son significativos los dos parámetros anteriores? ¿Qué puede decirse del
ajuste del modelo a los datos?
e) ¿Cuál sería la recta de regresión en el caso de que se considere un modelo
de regresión lineal simple sin constante?
f) Calcula el coeficiente de correlación lineal de Pearson entre ambas
variables. ¿Es significativa esta correlación?
g) ¿Cuál sería la recta de regresión lineal si se incluye la publicidad en radio
como variable independiente?
h) Ajustar un modelo de regresión lineal múltiple. Obtener una estimación de
los parámetros del modelo y su interpretación
i) Contrastar la significación del modelo propuesto
j) ¿Puede eliminarse alguna variable del modelo? Realiza los contrastes de
significación individuales
k) Coeficiente de determinación

Ejercicio Guiado (Resuelto)


a) Crea 4 vectores numéricos, de manera que cada uno contenga los datos de
una columna y un data frame llamado Cerealescon los 4 vectores que acabas
de crear
> ventas <- c(10,12,11,13,12,14,16,12,14,11,10,19,8.5,8,9,13,16,18,20,22)

> tv <- c(13,14,15,17,17.5,13,14.5,9,8,9,8,10,17,18,18.5,19,20,20,13,14)

> radio <-c(56,55,60,65,69,67,68,67,97,66,65,60,70,110,75,80,85,90,56,55)


> periodicos <- c(40,40,42,50,40,44,40,44,46,46,45,110,30,50,45,40,80,90,90, 110)
> cereales <- data.frame(ventas, tv, radio, periodicos)

Comprobemos que los datos se han guardado correctamente

> cereales
ventas tv radio periodicos
1 10.0 13.0 56 40
2 12.0 14.0 55 40
3 11.0 15.0 60 42
4 13.0 17.0 65 50
5 12.0 17.5 69 40
6 14.0 13.0 67 44
7 16.0 14.5 68 40
8 12.0 9.0 67 44
9 14.0 8.0 97 46
10 11.0 9.0 66 46
11 10.0 8.0 65 45
12 19.0 10.0 60 110
13 8.5 17.0 70 30
14 8.0 18.0 110 50
15 9.0 18.5 75 45
16 13.0 19.0 80 40
17 16.0 20.0 85 80
18 18.0 20.0 90 90
19 20.0 13.0 56 90
20 22.0 14.0 55 110
Otra opción es, Seleccionar en el menú principal: Session/Set Working
Directory/Choose Directory (Ctrl+Shift+H) y en la Consola de RStudio se muestra la
siguiente orden:
> setwd(“F:/Desktop/EJEMPLOSRS3”)
A continuación leemos el fichero utilizando read.table
> cereales <- read.table(“F:/Desktop/EJEMPLOSRS3/cereales.txt”, header = TRUE).
b) Representa el diagrama de dispersión de las ventas y la publicidad en tv

> plot(cereales$ventas, cereales$tv)

Figura 10: Diagrama de Dispersión


c) Escribe la recta de regresión lineal que surge de considerar las ventas como
variable dependiente y la publicidad en tv como variable independiente

> reg_lin <- lm(ventas ~ tv, data = cereales)


> reg_lin
Call:
lm(formula = ventas ~ tv, data = cereales)
Coefficients:
(Intercept) tv
14.02705 -0.04188

Por tanto, la recta de regresión es:

ventasi = 14.0275 -0.04188 tvi


d) ¿Son significativos los dos parámetros anteriores? ¿Qué puede decirse del
ajuste del modelo a los datos?
> summary(reg_lin)
Call:
lm(formula = ventas ~ tv, data = cereales)
Residuals:
Min 1Q Median 3Q Max
-5.2732 -2.8582 -0.8046 2.6378 8.5593
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 14.02705 3.47625 4.035 0.000777 ***
tv -0.04188 0.23342 -0.179 0.859609

Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 4.063 on 18 degrees of freedom
Multiple R-squared: 0.001785, Adjusted R-squared: -0.05367
F-statistic: 0.03219 on 1 and 18 DF, p-value: 0.8596

Los p-valores asociados al contraste t de Student para ambos parámetros (0.000777


y 0.859609). El intercepto tiene un p-valor menor que 0.05, por lo
es significativamente distintos de 0 y el p-valor correspondiente al parámetro
publicidad en tv tiene un p-valor mayor que 0.05, por lo tanto no es
significativamente distintos de 0.

Por otra parte, el valor de R² (0.001785) nos lleva a concluir que el ajuste del
modelo a los datos es muy malo.
e) ¿Cuál sería la recta de regresión en el caso de que se considere un modelo
de regresión lineal simple sin constante?
> reg_lin2 <- lm(ventas ~ 0 + tv, data = cereales)
> reg_lin2
Call:
lm(formula = ventas ~ 0 + tv, data = cereales)
Coefficients:
tv
0.8673

En este caso, el modelo sería: ventasi = 0.8673 tvi


f) Calcula el coeficiente de correlación lineal de Pearson entre ambas
variables. ¿Es significativa esta correlación?
> cor.test(cereales$ventas, cereales$tv)
Pearson’s product-moment correlation
data: cereales$ventas and cereales$tv
t = -0.17942, df = 18, p-value = 0.8596
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.4758758 0.4078947
sample estimates:
cor
-0.04225282
Puesto que el p-valor del contraste es de 0.8596 y, por lo tanto, mayor que 0.05,
podemos concluir que la correlación no es significativa, y podría considerarse 0.
g) ¿Cuál sería la recta de regresión lineal si se incluye la publicidad en radio
como variable independiente?
> reg_lin_mul <- lm(ventas ~ tv + radio, data = cereales)
> reg_lin_mul

Call:
lm(formula = ventas ~ tv + radio, data = cereales)
Coefficients:
(Intercept) tv radio
17.38543 0.03823 -0.06370

En este caso, la recta de regresión lineal múltiple podría escribirse


como: ventasi = 17.38543 + 0.03823 tvi – 0.06370 radioi
h) Ajustar un modelo de regresión lineal múltiple. Obtener una estimación de
los parámetros del modelo y su interpretación

> reg_lin_mul2 <- lm(ventas ~ tv + radio + periodicos, data = cereales)


> reg_lin_mul2
Call:
lm(formula = ventas ~ tv + radio + periodicos, data = cereales)
Coefficients:
(Intercept) tv radio periodicos
8.775929 -0.008508 -0.038358 0.133460

La ecuación de la recta de regresión ajustada es: ventasi = 8.775929 – 0.008508


tvi – 0.038358 radioi + 0.133460 periodicosi
Las ventas estimadas son de 8775.929 euros si no se produce inversión en ninguno
de los tres tipos de publicidad.
Por cada mil euros invertidos en publicidad en televisión las ventas esperadas
disminuyen en 8.508 euros, supuesto que permanecen constantes las otras
variables
Por cada mil euros invertidos en publicidad en radio las ventas esperadas
disminuyen en 38.358 euros, supuesto que permanecen constantes las otras
variables
Por cada mil euros invertidos en publicidad en periódicos las ventas esperadas
aumentan en 133.460 euros, supuesto que permanecen constantes las otras
variables.

A la vista de estos resultados parece únicamente recomendable la publicidad en


periódicos.

i) Contrastar la significación del modelo propuesto


> summary(reg_lin_mul2)
Call:
lm(formula = ventas ~ tv + radio + periodicos, data = cereales)
Residuals:
Min 1Q Median 3Q Max
-3.0764 -1.5515 0.0564 0.9941 4.6174
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 8.775929 2.967301 2.958 0.00926 **
tv -0.008508 0.133711 -0.064 0.95005
radio -0.038358 0.036079 -1.063 0.30349
periodicos 0.133460 0.020365 6.554 6.64e-06 ***

Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2.187 on 16 degrees of freedom
Multiple R-squared: 0.7428, Adjusted R-squared: 0.6946
F-statistic: 15.4 on 3 and 16 DF, p-value: 5.61e-05
Mediante los contrastes de hipótesis:

podemos determinar si los efectos de la constante y de las variables independientes


son realmente importantes para explicar la variable dependiente o si, por el
contario, pueden considerarse nulos.

En nuestro ejemplo, el p-valor 5.61e-05 es menor que 0.05. Considerando un nivel


del significación del 5%, rechazamos la hipótesis nula, de manera que podemos
suponer que al menos una de las variables independiente contribuye de forma
significativa a la explicación de la variable respuesta.

j) ¿Puede eliminarse alguna variable del modelo? Realiza los contrastes de


significación individuales
Realizamos tres contrastes de hipótesis, uno para cada coeficiente de cada variable
explicativa

Los p-valores asociados a cada uno de los contrastes de


las variable independientes son 0.95005, 0.30349 y 6.64e-06 para publicidad en tv,
radio y periódicos, respectivamente. Los p-valores para publicidad en tv y en radio
son mayores que 0.05, por lo que no rechazamos la hipótesis nula de significación
de ambas variables. Estas variables no son válidas para predecir las ventas de
cereales y por tanto las eliminamos del estudio
k) Coeficiente de determinación
El coeficiente de determinación es igual a 0.7428 y el coeficiente de determinación
corregido es 0.6946. En este caso no se aprecian grandes diferencias entre ambos
coeficientes. El 74.28% de la variación en las ventas de cereales se explican por su
relación lineal con el modelo propuesto. Este valor del 74.28% lo podemos
considerar satisfactorio.

Solución:

ventas <- c(10,12,11,13,12,14,16,12,14,11,10,19,8.5,8,9,13,16,18,20,22)


tv <- c(13,14,15,17,17.5,13,14.5,9,8,9,8,10,17,18,18.5,19,20,20,13,14)
radio <-c(56,55,60,65,69,67,68,67,97,66,65,60,70,110,75,80,85,90,56,55)
periodicos <- c(40,40,42,50,40,44,40,44,46,46,45,110,30,50,45,40,80,90,90, 110)
cereales <- data.frame(ventas, tv, radio, periodicos)
cereales
plot(cereales$ventas,cereales$tv)
reg_lin <- lm(ventas ~ tv, data = cereales)
reg_lin
summary(reg_lin)
reg_lin2 <- lm(ventas ~ 0 + tv, data = cereales)
reg_lin2
cor(cereales$ventas, cereales$tv)
cor.test(cereales$ventas, cereales$tv)
reg_lin_mul <- lm(ventas ~ tv + radio, data = cereales)
reg_lin_mul
reg_lin_mul2 <- lm(ventas ~ tv + radio + periodicos, data = cereales)
reg_lin_mul2
summary(reg_lin_mul2)

Ejercicios Propuestos
Ejercicio Propuesto
Con el objetivo de realizar un estudio de mercado sobre el precio de los pisos,
se seleccionan de forma aleatoria una muestra estratificada representativa de
los distintos barrios de una ciudad. Los datos sobre el precio de los pisos en
miles de euros, la superficie en m² y la antigüedad del inmueble en años, se
muestran en la siguiente tabla.
Tabla4. Datos del Ejemplo Propuesto 1
Se pide:
a) Crear un data frame de nombre pisos que almacene los datos del ejemplo
propuesto
b) Dibujar el diagrama de dispersión de las variables precio y superficie y
determinar si puede existir una cierta relación lineal entre ambas
c) ¿Cuál es la recta de regresión lineal simple que considera a la precio como
variable dependiente y a la superficie como variable independiente?
Interpreta los parámetros de esa recta
d) ¿Son significativos estos parámetros? ¿Qué puede decirse del ajuste del
modelo a los datos?
e) ¿Cuál es la correlación lineal de Pearson entre ambas variables? ¿Es
significativa?
f) ¿Cuál es la recta de regresión lineal si se considera también como variable
independiente la antigüedad?
g) Ajustar un modelo de regresión lineal múltiple. Obtener una estimación de
los parámetros del modelo y su interpretación
h) Contrastar la significación del modelo propuesto
i) ¿Puede eliminarse alguna variable del modelo? Razona la respuesta
j) Coeficiente de determinación y de determinación corregido. Interpretación

k) Calcular los valores de las estimaciones , y en el modelo de


regresión:

Ejercicio Propuesto (Resuelto)


a) Crear un data frame de nombre pisos que almacene los datos del ejemplo
propuesto
> pisos
precio superficie antiguedad
1 250 120 15
2 130 80 20
3 165 100 30
4 310 180 15
5 320 190 12
6 400 250 40
7 200 99 30
8 80 90 27
9 69 60 14
10 179 100 20
11 120 110 22
12 223 120 25
13 300 180 21
14 198 130 33
15 165 90 5
16 69 50 12
17 73 60 6
18 123 70 10
19 356 120 28
20 183 130 30
b) Dibujar el diagrama de dispersión de las variables precio y superficie y
determinar si puede existir una cierta relación lineal entre ambas

En el gráfico se aprecia un cierto patrón lineal entre las variables, aunque esto
debe confirmarse mediante métodos analíticos.

c) ¿Cuál es la recta de regresión lineal simple que considera a la precio como


variable dependiente y a la superficie como variable independiente?
Interpreta los parámetros de esa recta
Call:
lm(formula = precio ~ superficie, data = pisos)
Coefficients:
(Intercept) superficie
-7.813 1.747
La recta de regresión lineal simple es: precio = -7.813 + 1.747 superficie

Los dos parámetros de la recta se interpretan del siguiente modo: -7.8136 es el


precio esperado para un piso que tiene 0 de superficie (que no tiene ningún sentido).
Por otra parte, por cada metro cuadrado de incremento en la superficie de un piso,
se espera un aumento en el precio del piso de 1747 euros.

d) ¿Son significativos estos parámetros? ¿Qué puede decirse del ajuste del
modelo a los datos?
Call:
lm(formula = precio ~ superficie, data = pisos)
Residuals:
Min 1Q Median 3Q Max
-69.436 -25.020 -3.061 12.960 154.147
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -7.8131 27.5629 -0.283 0.78
superficie 1.7472 0.2181 8.012 2.4e-07 ***

Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 47.92 on 18 degrees of freedom
Multiple R-squared: 0.781, Adjusted R-squared: 0.7688
F-statistic: 64.19 on 1 and 18 DF, p-value: 2.399e-07
Considerando un nivel de significación del 5%, sólo es significativamente distintos
de 0 el parámetro superficie, ya que su p-valor (2.4e-07 ) es inferior a 0.05.
El ajuste del modelo a los datos es aceptable, ya que el valor de R² es de 0.781
e) ¿Cuál es la correlación lineal de Pearson entre ambas variables? ¿Es
significativa?
Pearson’s product-moment correlation
data: pisos$precio and pisos$superficie
t = 8.012, df = 18, p-value = 2.399e-07
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.7245916 0.9534095
sample estimates:
cor
0.883743
El coeficiente de correlación lineal de Pearson entre las dos variables es
de 0.883743
Con un p-valor de 2.399e-07 < 0.05, rechazamos la hipótesis de que el coeficiente de
correlación lineal de Pearson entre ambas variables pueda considerarse 0.
f) ¿Cuál es la recta de regresión lineal si se considera también como variable
independiente la antigüedad?
Call:
lm(formula = precio ~ antiguedad, data = pisos)
Coefficients:
(Intercept) antiguedad
110.423 4.107
En este caso, la recta de regresión lineales: precio = 110.423 + 4.107 antiguedad
g) Ajustar un modelo de regresión lineal múltiple. Obtener una estimación de
los parámetros del modelo y su interpretación
Call:
lm(formula = precio ~ superficie + antiguedad, data = pisos)
Coefficients:
(Intercept) superficie antiguedad
-6.82133 1.75516 -0.09239
En este caso, la recta de regresión lineal múltiple es: precio = -6.82133 + 1.75516
superficie – 0.09239 antiguedad
h) Contrastar la significación del modelo propuesto
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -6.82133 31.73892 -0.215 0.832
superficie 1.75516 0.25176 6.972 2.25e-06 ***
antiguedad -0.09239 1.32791 -0.070 0.945

Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 49.3 on 17 degrees of freedom
Multiple R-squared: 0.7811, Adjusted R-squared: 0.7553
F-statistic: 30.32 on 2 and 17 DF, p-value: 2.47e-06
El único parámetro significativamente distinto de cero es superficie (P-valor
= 2.25e-06)
i) ¿Puede eliminarse alguna variable del modelo? Razona la respuesta
Se puede eliminar la variable antiguedad ya que su p-valor es 0.945 > α = 0.05, por
lo que no rechazamos la hipótesis nula de significación de dicha variable. Esta
variable no es válida para predecir el precio de los pisos
j) Coeficiente de determinación y de determinación corregido. Interpretación
El coeficiente de determinaciónes 0.7811 y el de determinación corregido es 0.7553.
No se aprecian grandes diferencias entre ambos coeficientes.

El 78.11% de la variación en el precio de los pisos se explican por su relación lineal


con el modelo propuesto. El valor de este coeficiente es satisfactorio.

k) Calcular los valores de las estimaciones , y en el modelo de


regresión:

Call:
lm(formula = precio ~ superficie + antiguedad^2, data = pisos)
Coefficients:
(Intercept) superficie antiguedad
-6.82133 1.75516 -0.09239

En este caso, el modelo de regresión cuadrático puede escribirse del siguiente


modo:

precio = -6.82133 + 1.75516 superficie – 0.09239 antiguedad

Solución del Ejercicio Propuesto

precio <- c(250, 130, 165, 310, 320, 400, 200, 80, 69, 179, 120, 223,
300, 198, 165, 69, 73, 123, 356, 183)
superficie <- c(120, 80, 100, 180, 190, 250, 99, 90, 60, 100, 110,
120, 180, 130, 90, 50, 60, 70, 120, 130)
antiguedad <-c(15, 20, 30, 15, 12, 40, 30, 27, 14, 20, 22, 25, 21, 33,
5, 12, 6, 10, 28, 30)
pisos <- data.frame(precio, superficie, antiguedad)
pisos
plot(pisos$precio,pisos$superficie)
reg_lin <- lm(precio ~ superficie, data = pisos)
reg_lin
summary(reg_lin)
cor(pisos$precio, pisos$superficie)
reg_lin2 <- lm(ventas ~ 0 + tv, data = cereales)
reg_lin2
cor(pisos$precio, pisos$superficie)
cor.test(pisos$precio, pisos$superficie)
reg_lin1 <- lm(precio ~ antiguedad, data = pisos)
reg_lin1
reg_lin_mul <- lm(precio ~ superficie + antiguedad, data = pisos)
reg_lin_mul
summary(reg_lin_mul)
reg_lin_mul2 <- lm(precio ~ superficie + antiguedad^2, data = pisos)
reg_lin_mul2

Autora: Ana María Lara Porras. Universidad de Granada. (2017)


……………………………………………………………………………………………………………

Práctica 4
DISTRIBUCIONES DE PROBABILIDAD:
BINOMIAL, POISSON Y NORMAL
Objetivos
• Seleccionar la distribución de probabilidad para modelizar un experimento
aleatorio
• Calcular probabilidades de las distribuciones Binomial, Poisson y Normal
• Calcular cuantiles
• Generar valores aleatorios de una distribución determinada.

Introducción
Una variable aleatoria se puede definirse, intuitivamente, como una cantidad cuyo
valor no es fijo pero puede tomar diferentes valores. La distribución de
probabilidad se utiliza para describir la probabilidad de que se den los diferentes
valores.

La distribución de probabilidad de una variable aleatoria modeliza un experimento


aleatorio, describiendo teóricamente la forma en que varían los resultados de dicho
experimento. Intuitivamente es una lista de los resultados posibles del experimento
junto con las probabilidades que se esperarían ver asociadas con cada resultado.

En la teoría de la probabilidad existen muchos modelos teóricos que resultan de


utilidad en una gran variedad de situaciones prácticas, ya que sirven para modelizar
gran número de situaciones reales. Estas distribuciones o modelos de probabilidad
se dividen en dos grandes grupos dependiendo del tipo de la variable aleatoria que
modelizan. Así, distinguimos entre distribuciones de probabilidad discretas, si la
variable aleatoria que modelizan es de naturaleza discreta y distribuciones de
probabilidad continuas, cuando la variable aleatoria es continua.
Existen muchas distribuciones de probabilidad pero, dado el carácter introductorio
de esta práctica, nos limitaremos a estudiar la distribución binomial y la
distribución de Poisson como ejemplos de distribuciones discretas y la
distribución Normal para ilustrar las distribuciones continuas.
Distribución Binomial

Consideremos repeticiones independientes de un experimento aleatorio con dos


posibles resultados a los cuales nos referiremos genéricamente
como “éxito” y “fracaso”. El éxito ocurre con una probabilidad p y el fracaso, por
tanto, con una probabilidad q = 1-p .
En este contexto, interesa estudiar el número de éxitos en estas repeticiones del
experimento aleatorio y, para ello, se define la siguiente variable aleatoria, X =
“Número de éxitos en n ensayos independientes con probabilidad de éxito
constante p ”.
Entonces decimos que X sigue una distribución binomial de parámetros n y p, y lo
representamos como X→B(n, p).
La distribución binomial es una distribución de probabilidad discreta, mide el
número de éxitos en una secuencia de nensayos independientes, con una
probabilidad fija p de ocurrencia de éxitos entre los ensayos.

Es evidente que los posibles valores que puede tomar la variable aleatoria (o, lo que
es lo mismo, el número de ensayos exitosos de los que se realizan) son los valores
comprendidos entre 0 y n.

A continuación vamos a definir y calcular:

1. La probabilidad de que la variable aleatoria X tome cada valor concreto o,


equivalentemente, el valor de la función masa de probabilidad en cada uno de estos
puntos
2. La probabilidad que acumula cada uno de los valores de la variable aleatoria X, es
decir, el valor de la función de distribución en cada punto de la variable
3. Cuantiles de la distribución binomial
4. Valores aleatorios de la distribución binomial.
Función masa de probabilidad
La función masa de probabilidad de una variable aleatoria discreta, la cual suele
representarse por pi, es una función que asigna una determinada probabilidad a
cada uno de los puntos de la variable.
pi = P [X = xi]
En R y RStudio, los valores de la función masa de probabilidad de una variable con
distribución binomial se obtienen a través de la función dbinom, la cual necesita los
siguientes argumentos:
dbinom(x, size, prob)

donde:

• x: es el valor (o los valores) de la variable para el cual (o los cuales) queremos


calcular la función masa de probabilidad
• size y prob: son los dos parámetros de la distribución binomial (n y p,
respectivamente). En caso de que el argumento esté formado por dos o más valores,
éstos vendrán concatenados mediante la función c(,).
Función de distribución
La función de distribución evaluada en un punto xi de una variable aleatoria discreta
se denota por F(xi) y viene dada por
F(xi) = P[ X ≤ xi ] = P[ X = 0 ] + P[ X = ] + … + P[ X=xi ]
Para calcular valores de la función de distribución de una distribución binomial
con R y RStudio utilizaremos la función pbinom, que tiene los siguientes
argumentos:
pbinom(q, size, prob)
siendo q el valor (o los valores) de la variable en el cual (o los cuales) queremos
calcular la función de distribución y size y prob, los parámetros de la distribución.
Cuantiles de la distribución binomial
Por definición, el cuantil de orden α de una distribución de probabilidad es aquel
valor de la distribución que deja a su izquierda una proporción de valores α (o,
equivalentemente, un porcentaje del (α x100)% ). Esto es, el cuantil de orden α, será
aquel valor k tal que
P[ X ≤ k ] = α
Para calcular cuantiles de una distribución binomial en R y RStudio recurriremos a
la función qbinom, que tiene los siguientes argumentos:
qbinom(p, size, prob)
siendo p el orden del cuantil que queremos calcular (en tanto por uno)
y, size y prob los dos parámetros que identifican a la distribución binomial.
Generar valores aleatorios de la distribución binomial
Por último, calcular muestras de valores aleatorios generados a partir de una
distribución binomial. Esta opción puede resultar de mucho interés en
experimentos de simulación en los que se conoce de antemano que la variable de
interés sigue una distribución binomial. Para generar estos valores utilizamos la
función rbinom de R, la cual requiere los siguientes argumentos:
rbinom(n, size, prob)
donde n es el número de valores aleatorios a generar y size y prob son los dos
parámetros de la distribución.

Veamos un ejemplo sencillo en el que se utilizan estas 4 funciones.

Supuesto Práctico 1
Se ha comprobado que la probabilidad de que se funda la lámpara de un
televisor en un mes es 0.02. Si el televisor tiene 5 años. Se pide:

a) Definir una variable aleatoria que cuente el número de roturas en un mes.


Identificar la distribución de probabilidad que sigue esta variable aleatoria
b) Calcula la Esperanza y varianza de la variable aleatoria
c) Calcular la probabilidad de que no haya ninguna rotura
d) Calcular la probabilidad de que exactamente haya 5 roturas
e) Obtener la probabilidad de que al menos haya 5 roturas
f) Obtener la probabilidad de que haya entre 5 y 25 roturas (ambos inclusive)

g) Calcular el valor de la variable tal que deja a su derecha el 32% de las


observaciones
h) Generar una muestra de 30 valores aleatorios de esta distribución.
Solución
a) Definir una variable aleatoria que cuente el número de roturas en un mes.
Identificar la distribución de probabilidad que sigue esta variable aleatoria

En primer lugar, definimos la variable aleatoria X = “Número de roturas en un


mes”.
A partir de la información que nos proporciona el enunciado podemos afirmar
que X→B(60, 0.02).
b) Calcular la Esperanza y varianza de la variable aleatoria

E[X] = np = 60×0.02 = 12
σ² = npq = 60×0.02×0.98 = 1.176
c) Calcular la probabilidad de que no haya ninguna rotura
En este apartado nos piden la probabilidad de que la variable aleatoria tome,
exactamente, un valor o, lo que es lo mismo, el valor de la función masa de
probabilidad evaluada en el punto xi = 0. Debemos, por tanto, calcular P[X=0]. Para
ello, utilizaremos la función dbinom del siguiente modo
> dbinom(0, 60, 0.02)
[1] 0.2975531

La probabilidad que buscamos es, por tanto, 0.2975531.


d) Calcular la probabilidad de que exactamente haya 5 roturas
Hay que calcular P[X=5]
> dbinom(5, 60, 0.02)
[1] 0.005753035

La probabilidad que buscamos es, por tanto, 0.005753035


e) Obtener la probabilidad de que al menos haya 5 roturas
En este caso, la probabilidad que nos piden calcular es P[X ≥ 5]. Como P[X ≥ 5] =
P[X=5] + P[X=6] + … + P[X=20 ], podríamos pensar en utilizar de nuevo la
función dbinom para obtener cada una de estas probabilidades puntuales y después
sumarlas. Sin embargo, esto sería un proceso bastante tedioso, pues implicaría el
cálculo de muchas probabilidades.
Por lo tanto, sabiendo que la probabilidad puede expresarse como P[X ≥ 5] = 1
– P[X ≤ 4]. Y que la función de distribución evaluada en un punto xi se define
como F(xi) = P[X ≤ xi]. Tenemos que calcular
P[X ≥ 5] = 1 – P[X ≤ 4] = 1 – F(4).
De manera que para calcular la probabilidad que nos pide el enunciado únicamente
debemos hacer una llamada a la función pbinom tal y como se muestra a
continuación:
1 – pbinom(4, 60, 0.02)
[1] 0.007024641
Concluimos, por tanto, que P[X ≥ 5] = 0.007024641.
f) Obtener la probabilidad de que haya entre 5 y 25 roturas (ambos
inclusive)
En esta ocasión, nos piden calcular la probabilidad en un intervalo. Más
concretamente, la probabilidad que necesitamos calcular es P[5 ≤ X ≤ 25] . De nuevo,
teniendo en cuenta que: P[5 ≤ X ≤ 25] = P[X=5] + P[X=6] + … + P[X=25], podríamos
usar la función dbinom para obtener el valor de la función masa de probabilidad en
cada uno de estos puntos y después sumarlos. Pero existe una alternativa más
sencilla. La probabilidad P[5 ≤ X ≤ 25] puede reescribirse como
P[5 ≤ X ≤ 25] = P[X ≤ 25] – P[ X ≤ 5] = F(25) – F(4)
por lo que el cálculo de dicha probabilidad se reduce al cálculo del valor de la función
de distribución en los puntos 4 y 75. Podemos calcular ambos valores de forma
simultánea mediante la función pbinom del siguiente modo:
> pbinom(c(4, 25), 60, 0.02)
[1] 0.9929754 1.0000000
De manera que la probabilidad que buscamos es:
> 1.0000000 – 0.99297547
[1] 0.0070246

Concluimos, por tanto, que P[5 ≤ X ≤ 25] = 0.0070246.


g) Calcular el valor de la variable tal que deja a su derecha el 32% de las
observaciones
El valor de la variable que deja a su derecha un 32% de las observaciones es el
mismo que deja a su izquierda el 68% restante. Por tanto, debemos calcular
el cuantil de orden 0.68 de una distribución binomial de parámetros 60 y 0.02.
Utilizaremos, para ello, la función qbinom.
> qbinom(0.68, 60, 0.02)
[1] 2

h) Generar una muestra de 30 valores aleatorios de esta distribución.


En este último apartado vamos a utilizar la función rbinom para generar la
muestra de 30 valores aleatorios.
> rbinom(30, 60, 0.02)
[1] 2 1 0 0 0 1 0 0 2 1 1 0 1 0 4 1 1 2 1 1 2 0 0 0 0 1 2 0 0 4

Nota: Dado el carácter aleatorio de los valores generados en este apartado, dichos
valores pueden no coincidir con los que se obtengan a través de otra llamada a la
función rbinom.
Solución
Supuesto Pr�ctico 1

dbinom(0, 60, 0.02)


dbinom(5, 60, 0.02)
1 - pbinom(4, 60, 0.02)
pbinom(c(4, 25), 60, 0.02)
1.0000000 - 0.9929754
qbinom(0.68, 60, 0.02)
rbinom(30, 60, 0.02)

Distribución de Poisson
La distribución de Poisson es una distribución de probabilidad discreta que sirve
para modelizar la probabilidad de que ocurra un determinado número de eventos
durante cierto período de tiempo. A modo de ejemplo, la distribución de Poisson se
utiliza frecuentemente para contar el número de llamadas que una centralita
telefónica recibe por unidad de tiempo o el número de clientes que llegan a un
determinado establecimiento en un período de tiempo dado.

A diferencia de la distribución binomial, la cual necesita dos parámetros para ser


correctamente identificada, la distribución de Poisson se define a partir de un único
parámetro, que suele notarse por λ. Generalmente, el parámetro λ representa el
número medio de sucesos que ocurren por unidad de tiempo. Entonces, podemos
definir la variable aleatoria X = “Número de sucesos aleatorios que ocurren en un
determinado periodo de tiempo” e identificar su distribución, X → P(λ). Los
posibles valores que puede tomar una variable con distribución de Poisson van
desde 0 a infinito.

Puesto que la distribución de Poisson también es una distribución discreta, los


valores que podemos calcular son los mismos que ya estudiamos para la
distribución binomial. Por lo tanto, para la distribución de Poisson obtendremos
valores de la función masa de probabilidad, de la función de distribución y de los
cuantiles. También generaremos muestras de valores aleatorios que siguen
distribuciones de Poisson.

El tratamiento computacional con R de la distribución de Poisson es similar al que


hemos empleado con la distribución binomial. La diferencia más notable es que el
sufijo “binom” de las funciones dbinom, pbinom, qbinom y rbinom se sustituye
por el sufijo “pois”, de manera que dbinom, pbinom, qbinom y rbinom se
sustituyen por dpois, ppois, qpois y rpois cuando trabajamos con una distribución
de Poisson.
Función masa de probabilidad
La función dpois calcula valores de la función masa de probabilidad de una
distribución de Poisson. Sus argumentos son:
dpois(x, lambda)

dond:

• x: es el valor (o los valores) de la variable para el cual (o los cuales) queremos


calcular la función masa de probabilidad
• lambda: es el parámetro que define la distribución de Poisson.
Función de distribución
La función ppois se utiliza para calcular valores de la función de distribución (esto
es, probabilidades acumuladas) de una variable con distribución de Poisson. Sus
argumentos son:
ppois(q, lambda)

donde:

• q: es el valor (o los valores) de la variable en el cual (o los cuales) queremos


calcular la función de distribución
• lambda: el parámetro que identifica la distribución.
Cuantiles de la distribución de Poisson
La función qpois se utiliza para calcular los valores de los cuantiles de una
distribución de Poisson, es decir, los valores de la variable con distribución de
Poisson que dejan a su izquierda una determinada proporción de
observaciones. Los argumentos de esta función son:
qpois(p, lambda)

donde:

• p: es la proporción de observaciones que dejará a su izquierda el cuantil en


cuestión (es decir, el orden de dicho cuantil)
• lambda: el parámetro de la distribución de Poisson.
Generar valores aleatorios de la distribución de Poisson
La función rpois se utiliza para generar valores aleatorios de una distribución de
Poisson y sus argumentos son:
rpois(n, lambda)

donde:

• n: es el número de elementos aleatorios a generar


• lambda: el parámetro que define la distribución de Poisson.

Veamos mediante un ejemplo sencillo cómo se utilizan cada una de estas 4


funciones.

Supuesto Práctico 2
El número medio de enfermos recibidos cada 10 minutos en un centro
sanitario entre las 10 horas y las 15 horas es 1.8. Suponiendo que dicho
número de enfermos sigue una distribución de Poisson. Se pide:
a) Definir una variable aleatoria que cuente el número de enfermos recibidos
cada 10 minutos e identificar la distribución de probabilidad que sigue esta
variable aleatoria

b) Calcular la probabilidad de que entre las 12 horas y las 12 horas y 10


minutos haya:
b1) Ningún enfermo
b2) Exactamente 2 enfermos

b3) Más de 8 enfermos


b4) Entre 8 y 15 clientes (ambos inclusive)
b5) Obtener la mediana de la variable
b6) Generar una muestra de 20 valores aleatorios de la distribución.
Solución
a) Definir una variable aleatoria que cuente el número de enfermos recibidos
cada 10 minutos e identificar la distribución de probabilidad que sigue esta
variable aleatoria
En primer lugar vamos a definir la variable aleatoria = X = “Número de enfermos
recibidos cada 10 minutos en el centro sanitario”. Sabemos, por el enunciado
que X → P(1.8)
b) Calcular la probabilidad de que entre las 12 horas y las 12 horas y 10
minutos haya:
b1) Ningún enfermo
En este apartado se pide la probabilidad de que la variable aleatoria X tome
exactamente el valor 0, es decir, el valor de la función masa de probabilidad
de X evaluada en el punto 0. Para ello, vamos a utilizar la función dpois.
> dpois(0, 1.8)
[1] 0.1652989

Dicha probabilidad es 0.1652989.


b2) Exactamente 2 enfermos
En este apartado se pide la probabilidad de que la variable aleatoria X tome
exactamente el valor 2, es decir, el valor de la función masa de probabilidad
de X evaluada en el punto 2. Para ello, vamos a utilizar la función dpois.
dpois(2, 1.8)
[1] 0.2677842

P[X = 2] = 0.2677842
b3) Más de 8 enfermos
La probabilidad que nos piden calcular en este caso es P[X ≥9] . Para
calcularla, expresamos una probabilidad del tipo ≥ en función de los valores de la
función de distribución de la variable. Para ello, tendremos en cuenta que
P[X ≥ 9] = 1 – P[X ≤ 8] = 1 – F(8)
De manera que para calcular P[X ≥ 9] únicamente necesitamos calcular el valor de
la función de distribución de la variable evaluada en el punto 8, para lo cual
utilizaremos la función ppois.
> 1 – ppois(8, 9)
[1] 0.5443474

Por tanto, se tiene que P[X ≥ 9] = 0.5443474


b4) Entre 8 y 15 clientes (ambos inclusive)
En este apartado, la probabilidad que nos piden calcular es P[8 ≤ X ≤ 15] . Vamos a
obtenerla a través de dos métodos distintos: uno basado en la función masa de
probabilidad y otro que utiliza la función de distribución.
Para calcular P[8 ≤ X ≤ 15] usando la función masa de probabilidad, tenemos
que tener en cuenta que
P[8 ≤ X ≤15] = P[X = 8] + P[ X = 9] + …+ P[X = 15]

Por tanto, necesitamos obtener, y después sumar, los valores de la función masa de
probabilidad de la variable evaluada en los puntos 8, 9, 10,…, 15. De esta forma hay
demasiados sumandos

dpois (8, 1.8) + dpois (9, 1.8) +…+ dpois (15, 1.8)

Esta estrategia sólo tiene cabida cuando el intervalo para el cual queremos calcular
su probabilidad es relativamente estrecho y está compuesto por pocos valores. En
cualquier otro caso, debemos utilizar un enfoque distinto, basado en la función de
distribución.

Esta alternativa, de utilizar la función de distribución, para calcular P[8 ≤ X ≤


15] parte de que dicha probabilidad puede reescribirse como
P[8 ≤ X ≤ 15] = P[X ≤ 15] – P[ X ≤ 7] = F(15) – F(7)
De manera que, usando la función ppois, se tiene que:
> ppois(c(7, 15), 1.8)
[1] 0.9994385 1.0000000

De modo que la probabilidad que buscamos puede obtenerse como la diferencia


entre los dos valores que proporciona la función ppois.
> 1.0000000 – 0.9994385
[1] 0.0005615
Por tanto, P[8 ≤ X ≤ 15] = 0.0005615
b5) Obtener la mediana de la variable
La mediana de una variable aleatoria es el valor de la variable que deja a su izquierda
el 50% de las observaciones, quedando el 50% restante a la derecha de tal valor. De
aquí se deduce que la mediana de una variable coincide con el cuantil de orden 0.5
de la variable. Por ello, se utiliza la función qpois para obtener la mediana de la
variable X tal y como se muestra a continuación:
> qpois(0.5, 1.8)
[1] 2

Podemos concluir, por tanto, que la mediana de la variable es 2.


b6) Generar una muestra de 20 valores aleatorios de la distribución.
Por último, vamos a generar 20 valores aleatorios de esta distribución de Poisson a
través de la función rpois.
> rpois(20, 1.8)
[1] 2 1 0 1 1 1 2 0 2 0 0 4 2 1 1 1 1 4 1 0
Nota: Dado el carácter aleatorio de los valores generados en este apartado, dichos
valores pueden no coincidir con los que se obtengan a través de otra llamada a la
función rpois.
Solución
dpois(0, 1.8)
dpois(2, 1.8)
1 - ppois(8, 9)
ppois(c(7, 15), 1.8)
1.0000000 - 0.9994385
qpois(0.5, 1.8)
rpois(20, 1.8)

Distribución Normal
La distribución Normal es la más importante y de mayor uso de las distribuciones
continuas, debido a la gran cantidad de fenómenos aleatorios que modeliza. Esta
distribución también se conoce como gaussiana o de Gauss, en honor a su
descubridor. La distribución Normal viene identificada por dos parámetros, μ y σ,
que coinciden con la media y la desviación típica de la distribución. Cuando una
variable aleatoria, X , siga una distribución normal lo notaremos X → N(μ, σ)
La función de densidad de probabilidad, función de densidad, o,
simplemente, densidad de una variable aleatoria continua es una función,
usualmente denominada \(f(x)\) que describe la densidad de la probabilidad en
cada punto del espacio de tal manera que la probabilidad de que la variable aleatoria
tome un valor dentro de un determinado conjunto sea la integral de la función de
densidad sobre dicho conjunto(
El tratamiento computacional con R y RStudio de la distribución Normal en
particular, y de cualquier distribución de probabilidad continua en general, es
similar al que se utiliza con las distribuciones discretas. La principal salvedad se
encuentra en la función dnorm. Esta función es la equivalente para la distribución
normal a dbinom y dpois en las distribuciones binomal y de Poisson,
respectivamente. Recordemos que las funciones, dbinom y dpois devuelven la
probabilidad puntual para cada uno de los valores posibles que puede tomar una
variable con distribución binomial y de Poisson, respectivamente. Pero el cálculo de
probabilidades en valores concretos en una distribución continua no tiene sentido,
ya que dicha probabilidad vale 0. Por todo ello, dnorm devuelve el valor de la
función de densidad en un punto (o puntos) determinado. Veamos cuáles son los
argumentos de esta función:
dnorm(x, mean = 0, sd = 1)

siendo:

• x: es el valor (o los valores) de la variable para el cual (o los cuales) queremos


calcular la función de densidad
• mean: es la media de la variable
• sd: la desviación típica de la variable.
Por defecto, se considera una distribución Normal de media 0 y desviación típica 1,
es decir, se considera una distribución Normal estándar o tipificada. De este
modo, si al llamar a la función dnorm no especificamos ningún valor para la media
y la desviación estándar, R considerará estos valores por defecto, por lo que
estaremos calculando valores de la función de densidad en una normal de media 0
y desviación típica 1. En caso de estar trabajando con una distribución Normal con
una media y/o desviación típica diferente, lo indicaremos a través de estos
parámetros.
Las funciones pnorm, qnorm y rnorm se comportan de forma similar a sus
equivalentes para las variables discretas y devuelven valores de la función de
distribución, cuantiles y valores aleatorios de una distribución normal,
respectivamente. Sus argumentos son los siguientes:
pnorm(q, mean = 0, sd = 1)
qnorm(p, mean = 0, sd = 1)
rnorm(n, mean = 0, sd = 1)

siendo:

• q: el valor (o valores) para el cual (o los cuales) queremos calcular la función de


distribución
• p: el orden del cuantil que queremos obtener
• n: el número de valores aleatorios a generar
• mean y sd: los dos parámetros que identifican a la distribución Normal.

Vamos a aplicar todas estas funciones en un ejemplo concreto.

Supuesto Práctico 3
En unos estudios realizados a un determinado tipo de aves rapaces. Se
comprueba que la longitud de las alas extendidas, X, es una variable aleatoria
que se distribuye aproximadamente según una curva Normal, de media 110
cm. y desviación típica 4 cm. Elegida un ave al azar y suponiendo que las
longitudes se distribuyen normalmente, calcular:
a) La probabilidad de que la longitud de las alas esté comprendida entre 110
y 115 cm.
b) La probabilidad de que la longitud de las alas sea mayor que 105 cm.
c) La probabilidad de que la longitud de las alas sea menor de 100 cm.
d) La longitud mínima del 20% de las alas que más miden
e) Quince longitudes aleatorias que sigan dicha distribución.
Solución
En primer lugar, vamos a definir la variable aleatoria X. Por el enunciado del
problema, sabemos que X → N(110, 4)
a) La probabilidad de que la longitud de las alas esté comprendida entre 110
y 115 cm.
En este primer apartado, nos piden calcular P[110 ≤ X ≤ 115] . Esta probabilidad
puede reescribirse como
P[110 ≤ X ≤ 115] = P[X ≤ 115] – P[ X ≤ 110] = F(115) – F(110)
es decir, como una diferencia de valores de la función de distribución de la variable.
Vamos a utilizar la función pnorm para obtener estos valores, de manera que la
diferencia entre ambos nos dará la probabilidad que buscamos.
> pnorm(c(115, 110), mean = 110, sd = 4)
[1] 0.8943502 0.5000000
> 0.8943502 – 0.5000000
[1] 0.3943502

Por lo que podemos concluir que P[110 ≤ X ≤ 115] = 0.3943502 .


b) La probabilidad de que la longitud de las alas sea mayor que 105 cm.
En este caso, la probabilidad que tenemos que obtener es P[X > 105]. Esta
probabilidad es equivalente a
P[X > 105] = 1 – P[X ≤ 105] = 1 – F(105)
por lo que también puede calcularse a partir de un valor de la función de
distribución. Usemos, de nuevo, la función pnormpara calcular este valor de la
función de distribución y así obtener la probabilidad buscada.
> pnorm(105, mean = 110, sd = 4)
[1] 0.1056498
> 1- 0.1056498
[1] 0.8943502

La probabilidad de que la longitud de las alas sea mayor que 105 cm. es 0.8943502.

c) La probabilidad de que la longitud de las alas sea menor de 100 cm.


La probabilidad de que la longitud de las alas sea 100 cm. o menos se puede escribir
como P[X ≤ 100] = F(100). Esto es, la probabilidad coincide con el valor de la
función de distribución evaluada en el punto 100.
> pnorm(100, mean = 110, sd = 4)
[1] 0.006209665

De manera que P[X ≤ 100] = 0.006209665


d) La longitud mínima del 20% de las alas que más miden

Para entender qué valor debemos calcular, veamos el siguiente gráfico:

Gráfico 1:
Representación del percentil 80 en la recta real
Suponiendo que la recta azul representa los valores de la variable ordenados de
menos a mayor, buscamos el 20% de los valores más grandes de la variable (que
estarán situados a la derecha). El mínimo de estos valores (representado con un
punto rojo) será aquel valor que deje a su derecha el 20% de las observaciones. Pero
este punto será también aquel que deja a su izquierda el 80% de las observaciones
restantes. Por tanto, el valor que debemos calcular es el percentil 80. Utilizaremos
para ello la función qnorm.
> qnorm(0.8, mean = 110, sd = 4)
[1] 113.3665

La longitud que buscamos es 113.3665 cm.


e) Quince longitudes aleatorias que sigan dicha distribución.
Vamos a generar estos 15 longitudes aleatorias usando la función rnorm.
> rnorm(15, mean = 110, sd = 4)
[1] 109.8886 111.8642 111.4913 111.5209 110.0206 107.9751 116.2190
[8] 111.7862 105.5341 107.6144 111.2416 111.1966 105.9855 106.4936
[15] 116.0270
Nota: Dado el carácter aleatorio de los valores generados en este apartado, dichos
valores pueden no coincidir con los que se obtengan a través de otra llamada a la
función rnorm.
Solucion
pnorm(c(115, 110), mean = 110, sd = 4)
0.8943502 - 0.5000000
pnorm(105, mean = 110, sd = 4)
1- 0.1056498
pnorm(100, mean = 110, sd = 4)
qnorm(0.8, mean = 110, sd = 4)
rnorm(15, mean = 110, sd = 4)

Ejercicios
Ejercicios Guiados
Ejercicio Guiado1
Por larga experiencia se ha determinado que la meningitis por salmonelas,
enfermedad rara, pero muy grave de los lactantes, produce una mortalidad
del 60%. Durante un brote epidémico en una gran ciudad, en un hospital de
dicha ciudad, ingresaron 16 niños lactantes atacados por la enfermedad. Se
pide:
a) Definir una variable aleatoria que cuente el número de supervivientes que
ingresan en el hospital con la enfermedad e identificar la distribución de
probabilidad que sigue esta variable aleatoria
b) Probabilidad de que sobrevivan todos los pacientes
c) Probabilidad de que sobrevivan más de la mitad de los pacientes
d) Probabilidad de que mueran todos los pacientes
e) Probabilidad de que más de dos pacientes sobrevivan
f) Probabilidad de que el número de sobrevivientes esté comprendido entre
6 y 10 pacientes, incluidos estos extremos
g) Generar una muestra aleatoria con 10 de valores de esta distribución.
Ejercicio Guiado2

Una solución que contiene un determinado virus en una concentración de


6×106 por mm3. En la misma solución hay 3×106bacterias. Suponiendo que los
virus se distribuyen al azar entre las bacterias, se pide:
a) Definir una variable aleatoria que cuente el número de virus en la solución
e identificar la distribución de probabilidad que sigue esta variable aleatoria
b) Probabilidad de que las bacterias no estén afectas por el virus
c) Probabilidad de que las bacterias estén afectas por el virus

d) Probabilidad de que las bacterias tengan al menos dos virus fijados en


ellas

e) Probabilidad de que las bacterias tengan exactamente dos virus fijados en


ellas

f)Probabilidad de que las bacterias tengan entre 6 y 10 virus fijados en ellas,


incluidos estos extremos
g) Generar una muestra aleatoria con 10 de valores de esta distribución.
Ejercicio Guiado3
La concentración en plomo en partes por millón en la corriente sanguínea de
un individuo tiene de media 0.25 y una desviación típica de 0.11. Supongamos
que dicha concentración sigue una ley Normal. Se pide:
a) Definir la variable aleatoria e identificar la distribución de probabilidad
que sigue esta variable aleatoria
b) Una concentración superior o igual a 0.6 partes por millón se considera
extremadamente alta ¿Cuál es la probabilidad de que un individuo
seleccionado al azar esté incluido en esa categoría?
c) Obtener la probabilidad de que la concentración en plomo, en partes por
millón, de un individuo sea inferior a 0.15
d) Obtener la probabilidad de que la concentración en plomo, en partes por
millón, de un individuo esté comprendidos entre 0.3 y 0.7
e) Determinar la concentración mínima del 30% de los individuos con más
concentración
f) Determinar la mediana de esta distribución
g) Generar una muestra de tamaño 12 para esta distribución Normal.

Ejercicio Guiado 1 (Resuelto)


Por larga experiencia se ha determinado que la meningitis por salmonelas,
enfermedad rara, pero muy grave de los lactantes, produce una mortalidad
del 60%. Durante un brote epidémico en una gran ciudad, en un hospital de
dicha ciudad, ingresaron 16 niños lactantes atacados por la enfermedad. Se
pide:
a) Definir una variable aleatoria que cuente el número de supervivientes que
ingresan en el hospital con la enfermedad e identificar la distribución de
probabilidad que sigue esta variable aleatoria
b) Probabilidad de que sobrevivan todos los pacientes
c) Probabilidad de que sobrevivan más de la mitad de los pacientes
d) Probabilidad de que mueran todos los pacientes
e) Probabilidad de que más de dos pacientes sobrevivan
f) Probabilidad de que sobrevivan por lo menos dos pacientes
g) Probabilidad de que el número de sobrevivientes esté comprendido entre
6 y 10 pacientes, incluidos estos extremos
h) Generar una muestra aleatoria con 10 de valores de esta distribución.

Solución:
a) Definir una variable aleatoria que cuente el número de supervivientes que
ingresan en el hospital con la enfermedad e identificar la distribución de
probabilidad que sigue esta variable aleatoria
Definimos la variable aleatoria X = “Nº de pacientes que sobreviven”
Esta variable aleatoria tiene una distribución Binomial de parámetros n = 16 y p =
0.4. (X → B (16, 0.4))
b) Probabilidad de que sobrevivan todos los pacientes

En este apartado piden la probabilidad de que la variable aleatoria tome


exactamente el valor 16, es decir, piden la función masa de probabilidad evaluada
en el punto 16

P[Sobrevivan todos los pacientes] = P[X = 16]


Para resolverlo utilizamos la función dbinom(x, size, prob)
> dbinom(16,16, 0.4)
[1] 4.294967e-07
Por tanto, P[Sobrevivan todos los pacientes] = P[X =16] = 0.00000042
c) Probabilidad de que sobrevivan más de la mitad de los pacientes
P[Sobrevivan más de la mitad] = P[X > 8] = 1 – P[X ≤ 8] = 1 – F(8). Para
resolverlo utilizamos la función pbinom
> 1 – pbinom (8,16, 0.4)
[1] 0.1422697

P[Más de la mitad de los pacientes sobrevivan] = P[X > 8] = 1 – P[X ≤ 8] =


0.1422697
d) Probabilidad de que mueran todos los pacientes
P[Mueran todos los pacientes] = P[X = 0]
> dbinom(0,16, 0.4)
[1] 0.000282111

P[Mueran todos los pacientes] = P[X = 0] = 0.000282111


e) Probabilidad de que más de dos pacientes sobrevivan
P[Sobrevivan más de dos pacientes] = P[X > 2] = 1 – P[X ≤ 2] = 1 – F(2). Para
resolverlo utilizamos la función pbinom
> 1 – pbinom (2,16, 0.4)
[1] 0.9816628

P[Sobrevivan más de dos pacientes] = P[X > 2] = 1 – P[X ≤ 2] = 0.9816628


f) Probabilidad de que sobrevivan por lo menos dos pacientes
P[Sobrevivan por lo menos dos pacientes] = P[X ≥ 2] = 1 – P[X < 2] = 1 – F(1). Para
resolverlo utilizamos la función pbinom
> 1 – pbinom (1,16, 0.4)
[1] 0.9967087

P[Sobrevivan por lo menos dos pacientes] = P[X ≥ 2] = 1 – P[X < 2] = 0.9967087


g) Probabilidad de que el número de sobrevivientes esté comprendido entre
6 y 10 pacientes, incluidos estos extremos
c) Contraigan la gripe entre tres y cinco pacientes, ambos inclusive
P[Sobrevivan entre 6 y 10 pacientes (incluidos extremos)] = P[6 ≤ X ≤ 10] =P[X ≤
10] – P[X < 6 ] = P[X ≤ 10] – P[X ≤ 5 ] = F(10) – F(5)
Por lo que el cálculo de dicha probabilidad se reduce al cálculo del valor de la función
de distribución en los puntos 10 y 5. Podemos calcular ambos valores de forma
simultánea mediante la función pbinom del siguiente modo
> pbinom (c(10, 5),16, 0.4)
[1] 0.9808581 0.3288404
> 0.9808581 – 0.3288404
[1] 0.6520177

P[Sobrevivan entre 6 y 10 pacientes (incluidos extremos)] = P[6 ≤ X ≤ 10] =P[X ≤


10] – P[X < 6 ] = F(10) – F(5) = 0.6520177
h) Generar una muestra aleatoria con 10 de valores de esta distribución.
Para generar una muestra aleatoria utilizamos la función rbinom
> rbinom(10, 16, 0.4)
[1] 7 9 8 5 6 4 8 5 8 5
Nota: Dado el carácter aleatorio de los valores generados en este apartado, dichos
valores pueden no coincidir con los que se obtengan a través de otra llamada a la
función rbinom.
Solución
dbinom(16,16, 0.4)
1 - pbinom (8,16, 0.4)
dbinom(0,16, 0.4)
1 - pbinom (2,16, 0.4)
1 - pbinom (1,16, 0.4)
pbinom (c(10, 5),16, 0.4)
0.9808581 - 0.3288404
rbinom(10, 16, 0.4)

Ejercicio Guiado2 (Resuelto)


Una solución que contiene un determinado virus en una concentración de
6×106 por mm3. En la misma solución hay 3×106bacterias. Suponiendo que los
virus se distribuyen al azar entre las bacterias, se pide:
a) Definir una variable aleatoria que cuente el número de virus en la solución
e identificar la distribución de probabilidad que sigue esta variable aleatoria
b) Probabilidad de que las bacterias no estén afectas por el virus
c) Probabilidad de que las bacterias estén afectas por el virus

d) Probabilidad de que las bacterias tengan al menos dos virus fijados en


ellas

e) Probabilidad de que las bacterias tengan exactamente dos virus fijados en


ellas

f) Probabilidad de que las bacterias tengan más de cuatro y menos de 8 virus


fijados en ellas

g) Generar una muestra aleatoria con 10 de valores de esta distribución.

Solución:
a) Definir una variable aleatoria que cuente el número de virus en la solución
e identificar la distribución de probabilidad que sigue esta variable aleatoria
Definimos la variable aleatoria X = “Nº de virus por bacterias en la solución”
Los virus se distribuyen al azar entre las bacterias. La distribución del número de
virus por bacterias es una distribución de Poisson de media λ = (6×106) ⁄(3×106)=
2. X → P(2)
b) Probabilidad de que las bacterias no estén afectas por el virus
Hay que calcular la probabilidad de que la variable aleatoria X tome el valor 0
P[No afectadas por el virus] = P[X = 0]
Es decir, el valor de la función masa de probabilidad de la variable aleatoria X en el
punto 0. Para ello, vamos a utilizar la función dpois
> dpois(0, 2)
[1] 0.1353353
P[No afectadas por el viru] = P[X = 0] = 0.1353353
c) Probabilidad de que las bacterias estén afectas por el virus
P[Afectadas por el viru] = 1 – P[No afectadas por el viru] = 1 – P[X = 0]
> 1 – dpois(0, 2)
[1] 0.8646647

P[Afectadas por el viru] = 1 – P[X = 0] = 1- 0.1353353 = 0.8646647


d) Probabilidad de que las bacterias tengan al menos dos virus fijados en ellas
P[Al menos dos virus] = P[X ≥ 2] = 1 – P[X < 2] = 1 – P[X = 0] – P[X = 1]
> 1 – ( dpois (0, 2) + dpois (1, 2) )

[1] 0.5939942

o bien

P[Al menos dos virus] = P[X ≥ 2] = 1 – P[X < 2] = 1 – P[X ≤ 1] = 1 –


F(1). Para ello, utilizamos la función ppois
> 1 – ppois(1, 2)
[1] 0.5939942
b) Lleguen menos de quince pacientes en una hora
P[Lleguen menos de cinco pacientes en una hora] = P[X < 5] = P[X ≤ 4]

Se puede obtener mediante la función masa de probabilidad o la función de


distribución.

En el caso de la función masa de probabilidad

P[Lleguen menos de cinco pacientes en una hora] = P[X < 5] = P[X ≤ 4] = P[X = 0]
+ P[X = 1] + P[X = 2] + P[X = 3] + P[X = 4]
Es decir, el valor de la función masa de probabilidad de la variable aleatoria X en los
puntos: 0, 1, 2, 3 y 4. Para ello, vamos a utilizar la función dpois
> dpois (0, 10) + dpois (1, 10) + dpois (2, 10) + dpois (3, 10) + + dpois (4, 10)
[1] 0.02925269

En el caso de la función de distribución

P[Lleguen menos de cinco pacientes en una hora] = P[X < 5] = P[X ≤ 4] =


F(4). Para ello, utilizamos la función ppois
> ppois(4, 10)
[1] 0.02925269
e) Probabilidad de que las bacterias tengan exactamente dos virus fijados en
ellas
Hay que calcular P[X = 2]. Para ello, vamos a utilizar la función dpois
> dpois(2, 2)
[1] 0.2706706

P[X = 2] = 0.2706706
f) Probabilidad de que las bacterias tengan más de cuatro y menos de 8 virus
fijados en ellas
P[más de cuatro y menos de ocho virus] = P[4 < X < 8] = P[X < 8] – P[X ≤ 4] = P[X
≤ 7] – P[X ≤ 4] = F(7) – F(4)
Hemos expresado la función masa de probabilidad en función de la función de
distribución de la variable evaluada en los puntos 7 y 4. Para resolverlo utilizamos
la función ppois
> ppois(c(4, 7), 2)
[1] 0.9473470 0.9989033
> 0.9989033 – 0.9473470
[1] 0.0515563

P[más de cuatro y menos de ocho virus] = P[X ≤ 7] – P[X ≤ 4] = 0.0515563


d) Generar una muestra aleatoria con 10 de valores de esta distribución.
> rpois (10, 2)
[1] 2 2 1 3 0 3 3 3 2 3

Ejercicio Guiado 3 (Resuelto)


La concentración en plomo en partes por millón en la corriente sanguínea de
un individuo tiene de media 0.25 y una desviación típica de 0.11. Supongamos
que dicha concentración sigue una ley Normal. Se pide:
a) Definir la variable aleatoria e identificar la distribución de probabilidad
que sigue esta variable aleatoria
b) Una concentración superior o igual a 0.6 partes por millón se considera
extremadamente alta ¿Cuál es la probabilidad de que un individuo
seleccionado al azar esté incluido en esa categoría?
c) Obtener la probabilidad de que la concentración en plomo, en partes por
millón, de un individuo sea inferior a 0.15
d) Obtener la probabilidad de que la concentración en plomo, en partes por
millón, de un individuo esté comprendidos entre 0.3 y 0.7
e) Determinar la concentración mínima del 30% de los individuos con más
concentración
f) Determinar la mediana de esta distribución
g) Generar una muestra de tamaño 12 para esta distribución Normal.

Solución
a) Definir una variable aleatoria que cuente el número de supervivientes que
ingresan en el hospital con la enfermedad e identificar la distribución de
probabilidad que sigue esta variable aleatoria
Se define la variable, X = “Concentración en plomo de un individuo”. Esta variable
tiene distribución Normal con media 0.25 y desviación típica 0.11; X → N(0.25, 0.11)
b) Una concentración superior o igual a 0.6 partes por millón se considera
extremadamente alta ¿Cuál es la probabilidad de que un individuo
seleccionado al azar esté incluido en esa categoría?a)
P[ X ≥ 0.6 ] = 1 – P[X ≤ 0.6] = 1 – F(0.6)
Calculamos la probabilidad pedida utilizando la función de distribución. Usamos la
función pnorm
> 1 – pnorm(0.6, mean = 0.25, sd = 0.11)
[1] 0.0007317683

Por lo tanto, P[ X ≥ 0.6 ] = 0.0007317683


c) Obtener la probabilidad de que la concentración en plomo, en partes por
millón, de un individuo sea inferior a 0.15
Para calcular P[ X < 0.15 ] utilizamos la función pnorm
> pnorm(0.15, mean = 0.25, sd = 0.11)
[1] 0.0007317683
d) Obtener la probabilidad de que la concentración en plomo, en partes por
millón, de un individuo esté comprendidos entre 0.3 y 0.7
P[Niveles comprendidos entre 0.3 y 0.7] = P[0.3 ≤ X ≤ 0.7] = P[X ≤ 0.7] – P[X ≤ 0.3]
= F(0.7)- F(0.3). Utilizamos de nuevo la función de distribución pnorm
> pnorm(c(0.7, 0.3),mean = 0.25, sd = 0.11)
[1] 0.9999785 0.6752819
> 0.9999785 – 0.6752819
[1] 0.3246966

Por lo tanto, P[Niveles comprendidos entre 0.3 y 0.7] = P[0.3 ≤ X ≤ 0.7] = P[X ≤
0.7] – P[X ≤ 0.3] = 0.3246966
e) Determinar la concentración mínima del 30% de los individuos con más
concentración
Se pide calcular un valor de la distribución de X, tal que P[X < x] = 0.30
El valor que tenemos que calcular es el cuantil 25. Utilizamos la función qnorm.
> qnorm(0.30, mean = 0.25, sd = 0.11)
[1] 0.1923159

Se obtiene como resultado P[X < 0.1923159] = 0.30


f) Determinar la mediana de esta distribución
Media = Moda = Mediana = 0.25
g) Generar una muestra de tamaño 12 para esta distribución Normal.
> rnorm(12, mean = 0.25, sd = 0.11)
[1] 0.34891212 0.28912985 0.27835061
[4] 0.22699688 0.21144003 0.25942971
[7] 0.21443050 0.28756905 0.39852037
[10] -0.02553467 0.22977419 0.26571378
Solución
1- pnorm(0.6, mean = 0.25, sd = 0.11)
pnorm(0.15, mean = 0.25, sd = 0.11)
pnorm(c(0.7, 0.3),mean = 0.25, sd = 0.11)
0.9999785 - 0.6752819
qnorm(0.30, mean = 0.25, sd = 0.11)
rnorm(12, mean = 0.25, sd = 0.11)

Ejercicios Propuestos
Ejercicio Propuesto 1
El delegado de una casa dedicada a la fabricación de calculadoras, vende el
mismo días 5 calculadoras iguales a distintas empresas de una misma
localidad. La probabilidad de que este tipo de calculadoras estén en
funcionamiento 3 años después es 0.8. Calcular las siguientes probabilidades.
a) Las cinco calculadoras estén fuera de servicio 3 años más tarde
b) Las cinco calculadoras estén en servicio 3 años más tarde
c) Dos calculadoras a lo sumo estén fuera de servicio
d) No más de tres calculadoras a lo sumo estén fuera de servicio
e) Entre 1 y 4 calculadoras estén fuera de servicio
f) Generar una muestra aleatoria de tamaño 8 del número de calculadoras en
funcionamiento.

Ejercicio Propuesto 2
El número de capturas diarias de loros en la cuenca del Amazonas para su
utilización como animales domésticos sigue una distribución de Poisson de
parámetro 5. Calcular las siguientes probabilidades:
a) No se produzcan más de cuatro capturas en un día

b) Se produzcan al menos cuatro capturas en un día


c) Se produzcan menos de cuatro capturas en un día

d) Calcular la mediana de la variable aleatoria


e) En una semana no se produzcan más de cuatro capturas ningún día
f) Generar una muestra aleatoria de tamaño 8 del número de capturas diarias
de loros.

Ejercicio Propuesto 3
Se observó que el número de glóbulos rojos (en millones por microlitro) de un
grupo de individuos sigue una distribución Normal de media 4.5 y desviación
típica 0.5. Se pide:
a) La probabilidad de que una persona tenga más de 4.85
b) La probabilidad de que una persona tenga menos de 4.85
c) La probabilidad de que una persona tenga entre 4.25 y 4.75

d) Los cuartiles de la distribución


e) Si se desea estudiar los hábitos alimenticios del 20% de personas con mayor
número de glóbulos rojos ¿Cuál es el número mínimo de glóbulos rojos de
dichas personas?

f) Una muestra aleatoria de 20 valores de la distribución

Ejercicio Propuesto 4
La cantidad de radiación que puede ser absorbida por un individuo antes de
que le sobrevenga la muerte tiene una media de 500 roentgen y una
desviación típica de 150 roentgen. Supongamos que la distribución de la
cantidad de radiación sigue una ley Normal. Se pide:
a) ¿Cuál es la probabilidad de que la cantidad de radiación sea superior a
600 roentgen?
b) ¿Cuál es la probabilidad de que la cantidad de radiación esté entre
650 roentgen y 750 roentgen?
c) ¿Cuál es el porcentaje de supervivientes para un nivel de radiación de
800 roentgen?
d) ¿Por encima de qué nivel de dosificación sobrevivirían solamente el 5% de
los expuestos?

e) Obtener el percentil 75.

Ejercicio Propuesto 1 (Resuelto)


El delegado de una casa dedicada a la fabricación de calculadoras, vende el
mismo días 5 calculadoras iguales a distintas empresas de una misma
localidad. La probabilidad de que este tipo de calculadoras estén en
funcionamiento 3 años después es 0.8. Calcular las siguientes probabilidades.
a) Las cinco calculadoras estén fuera de servicio 3 años más tarde
b) Las cinco calculadoras estén en servicio 3 años más tarde
c) Dos calculadoras a lo sumo estén fuera de servicio
d) No más de tres calculadoras a lo sumo estén fuera de servicio
e) Entre 1 y 4 calculadoras estén fuera de servicio
f) Generar una muestra aleatoria de tamaño 8 del número de calculadoras en
funcionamiento.
Solución:
Se define la variable, X = “Número de calculadoras que están en funcionamiento
3 años después.” X → B(5, 0.8)
a) Las cinco calculadoras estén fuera de servicio 3 años más tarde
P[X = 0] = 0.00032
b) Las cinco calculadoras estén en servicio 3 años más tarde
P[X = 5] = 0.32768
c) Dos calculadoras a lo sumo estén fuera de servicio
Y = “Número de calculadoras que fuera de servicio” Y → B(5, 0.2)
P[Y ≤ 2] = 0.94208
d) No más de tres calculadoras a lo sumo estén fuera de servicio
P[Y ≤ 3] = 0.99328
e) Entre 1 y 4 calculadoras estén fuera de servicio
P[1 ≤ Y ≤ 4] = 0.2624
f) Generar una muestra aleatoria de tamaño 8 del número de calculadoras en
funcionamiento.
Para generar una muestra de la variable aleatoria Y → B(5, 0.8), utilizamos la
función rbinom.
Solución del Ejercicio Propuesto 1
dbinom(0,5, 0.8)
dbinom(5,5, 0.8)
pbinom (2,5, 0.2)
pbinom (3,5, 0.2)
pbinom (c(4, 1),5, 0.2)
0.99968 - 0.73728
rbinom(8, 5, 0.8)

Ejercicio Propuesto 2 (Resuelto)


El número de capturas diarias de loros en la cuenca del Amazonas para su
utilización como animales domésticos sigue una distribución de Poisson de
parámetro 5. Calcular las siguientes probabilidades:
a) No se produzcan más de cuatro capturas en un día

b) Se produzcan al menos cuatro capturas en un día


c) Se produzcan menos de cuatro capturas en un día

d) Calcular la mediana de la variable aleatoria


e) En una semana no se produzcan más de cuatro capturas ningún día
f) Generar una muestra aleatoria de tamaño 8 del número de capturas diarias
de loros.

Solución:
Se define la variable, X = “Número de capturas diarias de loros” X → P(5)
a) No se produzcan más de cuatro capturas en un día
P[X ≤ 4] = 0.4404933
b) Se produzcan al menos cuatro capturas en un día
P[X ≥ 4] = 0.5595067
c) Se produzcan menos de cuatro capturas en un día
P [X < 4] = 0.2650259
d) Calcular la mediana de la variable aleatoria
La mediana es 5
e) En una semana no se produzcan más de cuatro capturas ningún día
Y = “Número de capturas en los 7 días de la semana donde no se producen más
de 4 capturas” Y → B(7, 0.4405)
P[Y = 7] = 0.003218262
f) Generar una muestra aleatoria de tamaño 8 del número de capturas
diarias de loros.

Para generar 8 valores aleatorios de la distribución de Poisson utilizamos la


función rpois.
74233421
Solución del Ejercicio Propuesto 2
ppois(4, 5)
1 - ppois(4, 5)
ppois(3, 5)
qpois(0.5, 5)
dbinom(7, 7, 0.4405)
rpois(8, 5)

Ejercicio Propuesto 3 (Resuelto)


Se observó que el número de glóbulos rojos (en millones por microlitro) de un
grupo de individuos sigue una distribución Normal de media 4.5 y desviación
típica 0.5. Se pide:
a) La probabilidad de que una persona tenga más de 4.85
b) La probabilidad de que una persona tenga menos de 4.85
c) La probabilidad de que una persona tenga entre 4.25 y 4.75

d) Los cuartiles de la distribución


e) Si se desea estudiar los hábitos alimenticios del 20% de personas con mayor
número de glóbulos rojos ¿Cuál es el número mínimo de glóbulos rojos de
dichas personas?

f) Una muestra aleatoria de 20 valores de la distribución.

Solución:
a) La probabilidad de que una persona tenga más de 4.85
P[X > 4.85] = 0.2419637
b) La probabilidad de que una persona tenga menos de 4.85
P[X < 4.85] = 0.7580363
c) La probabilidad de que una persona tenga entre 4.25 y 4.75
P[4.25 ≤ X ≤ 4.75] = 0.382925
d) Los cuartiles de la distribución
los tres cuartiles de esta distribución son 4.162755, 4.500000, 4.837245
e) Si se desea estudiar los hábitos alimenticios del 20% de personas con
mayor número de glóbulos rojos ¿Cuál es el número mínimo de glóbulos
rojos de dichas personas?
El número mínimo pedido es : 4.920811
e) Una muestra aleatoria de 20 valores de la distribución.
Para obtener una muestra de 20 valores aleatorios de la distribución normal
utilizamos la función rnorm
Solución del Ejercicio Propuesto 3
1 - pnorm(4.85, mean = 4.5, sd = 0.5)
pnorm(4.85, mean = 4.5, sd = 0.5)
pnorm(c(4.75, 4.25), mean = 4.5, sd = 0.5)
0.6914625 - 0.3085375
qnorm(c(0.25, 0.5, 0.75), mean = 4.5, sd = 0.5)
qnorm(0.8, mean = 4.5, sd = 0.5)
rnorm(10, mean = 4.5, sd = 0.5)

Ejercicio Propuesto 4 (Resuelto)


La cantidad de radiación que puede ser absorbida por un individuo antes de
que le sobrevenga la muerte tiene una media de 500 roentgen y una
desviación típica de 150 roentgen. Supongamos que la distribución de la
cantidad de radiación sigue una ley Normal. Se pide:
a) ¿Cuál es la probabilidad de que la cantidad de radiación sea superior a
600 roentgen?
b) ¿Cuál es la probabilidad de que la cantidad de radiación esté entre
650 roentgen y 750 roentgen?
c) ¿Cuál es el porcentaje de supervivientes para un nivel de radiación de
800 roentgen?
d) ¿Por encima de qué nivel de dosificación sobrevivirían solamente el 5% de
los expuestos?

e) Obtener el percentil 75.

Solución:
X → N(500, 150)
a) ¿Cuál es la probabilidad de que la cantidad de radiación sea superior a
600 roentgen?
P[X > 600] = 0.2524925
b) ¿Cuál es la probabilidad de que la cantidad de radiación esté entre
650 roentgen y 750 roentgen?

P[650 < X < 750] = 0.1108649


c) ¿Cuál es el porcentaje de supervivientes para un nivel de radiación de
800 roentgen?
P[X ≥ 800] = 0.02275013
d) ¿Por encima de qué nivel de dosificación sobrevivirían solamente el 5% de
los expuestos?
El valor pedido es 746.728
e) Obtener el percentil 75.
El percentil 75 es 601.1735
Solución del Ejercicio Propuesto 4
Ejercicio Propuesto 4: Solución

Se define la siguiente variable aleatoria: X = “Concentración de mercurio en sangre”. Esta


variable aleatoria tiene distribución Normal con parámetros µ = 0.25 y σ = 0.08.

a) ¿Cuál es la probabilidad de que un ave presente un nivel de mercurio en sangre superior


a 0.40 ppm?

P[Un ave presente un nivel de mercurio en sangre superior a 0.40 ppm] = P[X > 0.40] = 1 – P[X
≤ 0.40] = 1- F(0.40)

> 1 - pnorm(0.4, mean = 0.25, sd = 0.08)


[1] 0.03039636

Por lo tanto, P[X > 0.40] = 0.0303

b) ¿Cuál es la probabilidad de que un ave tenga un nivel de mercurio en sangre entre 0.20
y 0.50 ppm?

P[Un ave tenga un nivel de mercurio en sangre entre 0.20 y 0.50 ppm] = P[0.20 < X < 0.50] =
P[X < 0.50] – P[X ≤ 0.20] = F(0.50) – F( 0.20)

> pnorm(c(0.5, 0.2), mean = 0.25, sd = 0.08)


[1] 0.9991110 0.2659855

> 0.9991110 - 0.2659855


[1] 0.7331255

Por lo tanto, P[0.20 < X < 0.50] = 0.7331

c) ¿Cuál es el nivel máximo de concentración de mercurio en sangre del 40% de las aves
menos contaminadas?

Se pide calcular el percentil 40 de la distribución, es decir, calcular P40, tal que P[X < P40] = 0.40.

> qnorm(0.4, mean = 0.25, sd = 0.08)


[1] 0.2297322

Por lo tanto, P40 = 0.2297

d) Generar una muestra de tamaño 10

> rnorm(10, mean = 0.25, sd = 0.08)


[1] 0.3182689 0.1325797 0.1579725 0.1233806 0.3394124 0.2782742 0.2770455
[8] 0.4207871 0.2173098 0.2337567

Autora: Ana María Lara Porras. Universidad de Granada. (2017)


……………………………………………………………………………………………………………….

Práctica 5
INTERVALOS DE CONFIANZA
Objetivos
• Calcular e interpretar intervalos de confianza para la media en una población
Normal con varianza conocida
• Calcular e interpretar intervalos de confianza para la media en una población
Normal con varianza desconocida
• Calcular e interpretar intervalos de confianza para la proporción
• Calcular e interpretar intervalos de confianza para la diferencia de medias en dos
poblaciones normales independientes con varianzas desconocidas, pero supuestas
iguales en las dos poblaciones
• Calcular e interpretar intervalos de confianza para la diferencia de medias en dos
poblaciones normales independientes con varianzas desconocidas, pero supuestas
iguales
• Calcular e interpretar intervalos de confianza para la diferencia de medias en dos
poblaciones normales relacionadas
• Calcular e interpretar intervalos de confianza para la diferencia de proporciones.

Introducción
El objetivo de la estimación mediante intervalos de confianza o estimación
confidencial es la determinación de dos valores, θ*1 y θ*2, que verifiquen θ* 1 < θ*2,
tales que, al constituirse en intervalo [θ*1, θ*2] contengan, con una probabilidad
prefijada, el verdadero valor del parámetro que deseamos estimar. De forma gráfica,
un intervalo de confianza puede representarse del siguiente modo:

P[θ*1 ≤ θ ≤ θ*2] = 1 – α, para algún α >


0,entonces se puede decir que
θ*1 y θ*2 determinan un intervalo que
tiene la probabilidad 1 – α

de contener al parámetro
poblacional θ
Figura 1:
Representación gráfica de un I.C.

donde

• 1 – α: Recibe el nombre de coeficiente de confianza o nivel de confianza. Es la


probabilidad de que el intervalo de confianza contenga el verdadero valor del
parámetro poblacional θ
• α: Es un valor comprendido entre 0 y 1, 0 < α < 1, (usualmente próximo a 0), que
indica el riesgo de que el intervalo de confianza no contenga el valor del parámetro
poblacional a estimar, θ. Por lo que α recibe el nombre de riesgo del error del
intervalo, nivel del error del intervalo o nivel de significación del intervalo.
• θ*1 y θ*2: Son los valores que delimitan el intervalo de confianza y reciben el nombre
de límite superior y límite inferiordel intervalo, respectivamente. La diferencia
entre el límite superior y el límite inferior de un intervalo, θ*2 – θ*1 se conoce
como amplitud del intervalo.

Para la construcción de un intervalo de confianza, lo deseable es maximizar el nivel


de confianza asociado al intervalo o equivalentemente minimizar el nivel de
significación y conseguir una amplitud lo más pequeña posible.

Intervalo de confianza para la media en una


población normal con varianza conocida
El intervalo de confianza para la media de una variable continua con el valor de la
varianza de dicha variable conocida en toda la población es es el intervalo menos
usual.

Para estimar la media poblacional μ de una población Normal de


media μ (desconocida) y de varianza σ2 (conocida), N(μ, σ2), se selecciona una
muestra aleatoria X1, X2, …, Xn; de tamaño n de valores de una variable aleatoria de
esta población y se calcula su media muestral, como mejor estimador puntual de μ.
La construcción del intervalo de confianza se hace tomando como base este
estimador. Para calcular un intervalo de confianza para μ partimos de la variable
aleatoria

Figura 2: Expresión de la variable aleatoria


Expresión de la variable aleatoria para el cálculo del intervalo de confianza para la media de una
distribución normal con varianza conocida
𝑋̅ − 𝜇
𝑍=
𝜎/√𝑛

que sigue una distribución normal de media 0 y desviación típica 1. Buscamos los
cuantiles de esta distribución tales que

Figura 3: Obtención del cuantil z{1 – α/2}


Buscamos los cuantiles de esta distribución tales que

𝑋̅ − 𝜇
𝑃 [−𝑧1−𝛼/2 ≤ ≤ 𝑧1−𝛼/2 ] = 1 − 𝛼
𝜎/√𝑛
O, equivalentemente,

Figura 4: Obtención del cuantil z{1 – α/2}


Buscamos los cuantiles de esta distribución tales que

𝑃[𝑋̅ − 𝑧1−𝛼/2 𝜎/√𝑛 ≤ 𝜇 ≤ 𝑋̅ + 𝑧1−𝛼/2 𝜎/√𝑛] = 1 − 𝛼

Por lo tanto, el intervalo de confianza que debemos calcular es

Figura 5: Expresión del Intervalo de confianza (varianza conocida)


Por lo tanto, el intervalo de confianza que debemos calcular es

𝜎 𝜎
[𝑋̅ − 𝑧1−𝛼/2 , 𝑋̅ + 𝑧1−𝛼/2 ]
√𝑛 √𝑛

Nota: R y RStudio no incluyen una función específica para el cálculo de este tipo de
intervalos de confianza . Aun así, pueden calcularse de una forma muy sencilla
como se muestra en el siguiente ejemplo.
Supuesto Práctico 1
De una cierta población se ha extraído una muestra de 64 individuos, cuyo
valor medio es 1012. Se sabe por otras experiencias del mismo tipo, que la
desviación típica vale 25. Hallar intervalos de confianza para el valor medio
de la población a los niveles de confianza del 0.95 y 0.99.
Solución
Iniciamos un nuevo Script en RStudio donde introducimos los datos relativos a la
media, varianza, tamaño muestral y nivel de significación que proporciona el
enunciado.
> alpha<- 0.05
> n = 64
> varianza <- 625
> media <- 1012
> cuantil<- qnorm(1 – alpha/2)
Una vez introducidos los datos del enunciado, pasamos a calcular los extremos
inferior y superior del intervalo de acuerdo a la expresión que se vio
anteriormente:
Por lo tanto, el intervalo de confianza que debemos calcular es
𝜎 𝜎
[𝑋̅ − 𝑧1−𝛼/2 , 𝑋̅ + 𝑧1−𝛼/2 ]
√𝑛 √𝑛

> lim_inf<-media – cuantil * sqrt(varianza) / sqrt(n)


> lim_inf
[1] 1005.875
> lim_sup<- media + cuantil * sqrt(varianza) / sqrt(n)
> lim_sup
[1] 1018.125
Por tanto, se tiene el 95% de confianza de que el
intervalo [1005.875, 1018.125] contenga el valor medio de la población
P[1005.875 ≤ μ ≤ 1018.125 ] = 0.95

Para el nivel de confianza del 0.99, lo único que tenemos que cambiar es el valor de
α

> alpha<- 0.01


> cuantil<- qnorm(1 – alpha/2)
> lim_inf<-media – cuantil * sqrt(varianza) / sqrt(n)
> lim_inf
[1] 1003.951

> lim_sup<- media + cuantil * sqrt(varianza) / sqrt(n)


> lim_sup
[1] 1020.049

Por tanto, el intervalo de confianza para el valor medio de la población al nivel de


confianza del 0.99 es [1003.951, 1020.049]
P[1003.951 ≤ μ ≤ 1020.049 ] = 0.99
Solución
alpha<- 0.05
n = 64
varianza <- 625
media <- 1012
cuantil<- qnorm(1 - alpha/2)
lim_inf<-media - cuantil * sqrt(varianza) / sqrt(n)
lim_inf
lim_sup<- media + cuantil * sqrt(varianza) / sqrt(n)
lim_sup

alpha<- 0.01
cuantil<- qnorm(1 - alpha/2)
lim_inf<-media - cuantil * sqrt(varianza) / sqrt(n)
lim_inf

lim_sup<- media + cuantil * sqrt(varianza) / sqrt(n)


lim_sup

Intervalo de confianza para la media en una


población normal con varianza desconocida
Supongamos, en este caso, que la varianza poblacional de la variable de interés es
desconocida. Nuestro objetivo sigue siendo el cálculo de un intervalo de confianza
para la media de dicha variable.

Supongamos una muestra aleatoria X1, X2, …,Xn; de tamaño n de valores de la


variable aleatoria que sigue una distribución Normal de media μ y de varianza σ2,
ambas desconocidas. Para calcular un intervalo de confianza, en este caso, partimos
de la variable aleatoria

Figura 6: Expresión de la variable aleatoria


que sigue una distribución t de Student con n-1 grados de libertad. En la fórmula
anterior, s hace referencia a la cuasidesviación típica muestral.

Tenemos que buscar dos valores de esta distribución tales que

Figura 7: Obtención del cuantil t{1 – α/2}

Al operar algebraicamente, se obtiene que

Figura 8: Obtención del cuantil t{1 – α/2}


por lo que el intervalo de confianza que buscamos es

Figura 9: Expresión del Intervalo de confianza (varianza desconocida)


La función de R t.test calcula intervalos de confianza en este contexto. Esta función
también se utiliza para resolver contrastes de hipótesis, como veremos en la práctica
6. La sintaxis de la función t.test es la siguiente:
t.test(x, conf.level = 0.95)

donde

• x: Vector numérico con los valores de la variables de interés


• conf.level: Valor numérico que indica el nivel de confianza, en tanto por uno, al que
se construirá el intervalo. Si omitimos este parámetro en la llamada a la función, los
intervalos de confianza se calculan a un nivel de confianza del 95%.
Veamos el funcionamiento de la función t.test mediante un ejemplo.
Supuesto Práctico 2

En una muestra de 9 preparados de jugo de tomate se ha obtenido una media


de 21 mg/100 cc y una cuasidesviación típica de 2.45 mg/100 cc. Supuesto que
el contenido de vitamina C del jugo de tomate se distribuye según una
distribución Normal de varianza desconocida. Se pide:
a) Estimar el contenido medio de vitamina C del jugo de tomate
b) Calcular el intervalo de confianza al 98 %

a) El estimador pedido es la media muestral, 21


b)

Al no disponer de un vector numérico con los valores de la variable de interés, para


resolver el ejemplo recurriremos a utilizar la expresión del intervalo de confianza
para este caso

Figura 9: Expresión del Intervalo de confianza


(varianza desconocida)

En primer lugar, introducimos los datos del ejemplo

>alpha<-0.02
>n=9
>cuasi<-2.45
> media <- 21
La función que devuelve resultados de los cuantiles de la t-Student es:
qt(p, df, ncp, lower.tail = T)

donde:

• p: Vector de probabilidades
• df: Grados de libertad
• lower.tail: Parámetro booleano, si es TRUE (por defecto), las probabilidades son
P[X ≤ x], de lo contrario, P [X > x].
> cuantil<- qt((1 – alpha/2), 8, lower.tail = T)
> lim_inf<-media – cuantil * cuasi / sqrt(n)
> lim_inf
[1] 18.63456
> lim_sup<- media + cuantil * cuasi / sqrt(n)
> lim_sup
[1] 23.36544
P[18.63456 ≤ μ ≤ 23.36544] = 0.98
Por lo tanto, hay un 98% de confianza de que el intervalo
[18.63456, 23.36544] contenga el contenido medio en vitamina C del jugo de
tomate.
Supongamos el mismo ejemplo pero en el caso de disponer de los datos de los
9 preparados en contenido de vitamina C del jugo de tomate. Los datos se
muestran en el fichero tomate.txt
Contenido
24
20
21
19
22
23
16
23
21

Solución
En primer lugar nos situamos en el directorio de trabajo

> setwd(“F:/Desktop/EJEMPLOSRS5”)
> datos1 <- read.table(“tomate.txt”, header = TRUE)
> datos1

Contenido
1 24
2 20
3 21
4 19
5 22
6 23
7 16
8 23
9 21
Partiendo del conjunto de datos del Supuesto Práctico 2, el cual se había importado
y almacenado en una variable de nombre datos1, vamos a calcular el intervalo de
confianza que nos piden. Para ello, basta con realizar la siguiente llamada a la
función t.test
>t.test(datos1$Contenido, conf.level = 0.98)
data: datos1$Contenido
t = 25.72, df = 8, p-value = 5.601e-09
alternative hypothesis: true mean is not equal to 0
98 percent confidence interval:
18.63505 23.36495
sample estimates:
mean of x
21
De toda la información que devuelve la función t.test, sólo nos interesa la relativa al
intervalo de confianza. El resto hace referencia a los contrastes de hipótesis que,
como hemos comentado, se estudiarán en la práctica 6.
98 percentconfidenceinterval:
18.63505 23.36495
Por lo tanto, el intervalo de confianza para el contenido medio en vitamina C en el
jugo de tomate a un nivel de confianza del 98% es ( 18.63505 23.36495).
Intervalo de confianza para la proporción
Dada una variable aleatoria X con distribución de probabilidad binomial de
parámetros n y π, esto es, X→ B(n, π); con π desconocido. El objetivo es determinar
un intervalo de confianza para el parámetro π. Para ello, se extrae una muestra
aleatoria X1, X2, …, Xn de tamaño n de de dicha distribución. Sea p la proporción
muestral. Entonces, se sabe que el estadístico
Figura 10: Expresión de la variable aleatoria

sigue una distribución normal de media 0 y desviación típica 1. Por ello, calcular el
intervalo de confianza para la proporción consiste en obtener los cuantiles de la
distribución normal tales que

Figura 11: Obtención del cuantil


z{1 – α/2}

O, equivalentemente,

Figura 12:
Obtención del cuantil z{1 – α/2}

Por lo tanto, el intervalo de confianza que debemos calcular es

Figura 13: Intervalo de


confianza para la proporción
La función que calcula este intervalo de confianza en R es prop.test. Sus
argumentos son los siguientes
prop.test(x, n, conf.level = 0.95)

donde

• x: Valor numérico que indica el número de elementos del grupo que presentan la
característica de interés.
• n: Valor numérico que indica el número total de elementos del grupo.
• conf.level: Valor numérico que indica el nivel de confianza, en tanto por uno, al que
se construirá el intervalo. Si omitimos este parámetro en la llamada a la función, los
intervalos de confianza se calculan a un nivel de confianza del 95%.
Vamos a aplicar la función prop.test a los datos sobre las flexiones realizadas por
los alumnos que hemos utilizado en los ejemplos anteriores.
Supuesto Práctico 3
En una muestra de 900 personas con pelo oscuro se encontró que 150 de ellas
tenían los ojos azules. Construir un intervalo de confianza al 95% para la
proporción de individuos que teniendo el pelo oscuro posee los ajos azules.
¿Son compatibles estos resultados con la suposición de que dicha proporción
vale 1/4?
Solución
Para el cálculo del intervalo de confianza utilizamos la función prop.test
De las 900 personas que conforman la muestra, 150 tienen los ojos azules. Por lo
que la llamada a prop.test sería la siguiente:
>prop.test(150,900)
1-sample proportions test with continuity correction
data: 150 out of 900, null probability 0.5
X-squared = 398.67, df = 1, p-value < 2.2e-16
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
0.1432251 0.1930061
sample estimates:
p
0.1666667
Como el nivel de confianza para este intervalo es el 95% no ha sido necesario incluir
el argumento conf.level en la llamada aprop.test, puesto que este es el nivel de
confianza por defecto.

De nuevo, los resultados de la función incluyen mucha más información aparte de la


relativa al intervalo de confianza. Por ahora, nos centraremos únicamente en esta
última.

95 percentconfidenceinterval:
0.1432251 0.1930061
Por lo que el intervalo de confianza, a un nivel de confianza del 95% para la
proporción de personas con los ojos azules en la población es (0.1432251
0.1930061).
Este resultado no es compatible la suposición de que dicha proporción vale
1/4, ya que 1/4 no pertenece al intervalo (0.1432251 0.1930061).
Resolvamos este ejercicio utilizando la expresión del intervalo de confianza
para la proporción

Figura 13: Intervalo de


confianza para la proporción
Solución
Intervalo de confianza, a un nivel de confianza del 95% para la proporción de
alumnos varones en la población
> alpha<- 0.05
> n = 900
> p = 150/900
> cuantil<- qnorm(1 – alpha/2)
> lim_inf<-p – cuantil * sqrt (p*(1 – p)) / sqrt (n)
> lim_inf

[1] 0.1423188
> lim_sup<-p + cuantil * sqrt (p*(1 – p)) / sqrt (n)
> lim_sup

[1] 0.1910145
Intervalo de confianza para la diferencia de medias
en dos poblaciones normales independientes
Consideramos dos variables aleatorias independientes X1 y X2 con distribuciones
normales de parámetros (μ1, σ1) y (μ2, σ2), respectivamente, de las que vamos a
tomar muestras aleatorias independientes de tamaños n1 y n2, respectivamente.
Nuestro objetivo, en este caso, es obtener un intervalo de confianza para la
diferencia de las medias de ambas distribuciones, es decir, para μ1 – μ2. Pero previo
al cálculo de este intervalo, debemos determinar si las varianzas de ambas
distribuciones o, equivalentemente, sus desviaciones típicas, σ1 y σ2, aun siendo
desconocidas, pueden asumirse iguales o no. El cálculo del intervalo de confianza se
realiza de forma diferente dependiendo de este aspecto.
Para decidir si las varianzas de las dos distribuciones pueden asumirse iguales o no
construiremos un intervalo de confianza para el cociente de ambos valores, esto es,
para σ21 /σ22. En este caso, partimos de la variable aleatoria

Figura 14: Expresión de la variable aleatoria para el cociente de


varianzas
que sigue una distribución F de Snedecor con n1 – 1 grados de libertad en el
numerador y n2 – 1 grados de libertad en el denominador. Los valores S21 y S22, en la
expresión anterior, hacen referencia a las cuasivarianzas muestrales de la variable
en el primer y el segundo grupo, respectivamente. Buscamos los valores de la
variable F tales que

Figura 15:
Obtención de los cuantiles F{ α/2} y F{1 – α/2}

O, equivalentemente,

Figura 16:
Obtención de los cuantiles F{ α/2} y F{1 – α/2}

De modo que el intervalo de confianza que buscamos es el formado por


Figura 17: Intervalo de
confianza para el cociente de varianzas
En R, la función var.test se encarga de calcular este intervalo. Sus parámetros son
los siguientes:
var.test(x, y, conf.level = 0.95)

siendo

• x : Vector numérico con los datos de la variable de interés en el primer grupo o


muestra
• y : Vector numérico con los datos de la variable de interés en el segundo grupo o
muestra
• conf.level: Valor numérico que indica el nivel de confianza, en tanto por uno, al que
se construirá el intervalo. Si omitimos este parámetro en la llamada a la función, los
intervalos de confianza se calculan a un nivel de confianza del 95%.

Una vez calculado el intervalo de confianza, si el valor 1 está incluido en dicho


intervalo, podremos afirmar que las varianzas (y, consecuentemente, las
desviaciones típicas) de ambas distribuciones pueden considerarse iguales. Si el 1
queda fuera del intervalo obtenido, las varianzas de las dos distribuciones se
considerarán diferentes.

Supuesto Práctico 4
La siguiente tabla proporciona datos sobre la precipitación total registrada en
11 estaciones meteorológicas de dos provincias españolas. Suponiendo
independencia y normalidad. Calcular un intervalo de confianza a un nivel de
confianza del 80% para el cociente de varianzas en ambas poblaciones.
¿Puede asumirse que ambas varianzas son iguales?

Tabla 1: Datos del Supuesto práctico 4


Solución
En primer lugar determinamos el intervalo de confianza para el cociente de
varianzas, para ello utilizamos la función var.test. Lo primero que tenemos que
hacer para aplicar la función var.test es separar en dos variables los datos relativos
a las precipitaciones realizadas en cada provincia.
> Prov_A <- c(100, 89, 84, 120, 130, 105, 60, 70, 90, 108, 130)
> Prov_B <- c(120, 115, 96, 115, 140, 120, 75, 90, 108, 130, 135)
> Prov_A
[1] 100 89 84 120 130 105 60 70 90 108 130
> Prov_B
[1] 120 115 96 115 140 120 75 90 108 130 135
A continuación, utilizamos la función var.test tal y como se indica a continuación:
>var.test(Prov_A, Prov_B, conf.level = 0.80)
F test to compare two variances

data: Prov_A and Prov_B


F = 1.3474, num df = 10, denom df = 10, p-value = 0.6462
alternative hypothesis: true ratio of variances is not equal to 1
80 percent confidence interval:
0.5801448 3.1295847
sample estimates:
ratio of variances
1.347447

Analizando la información relativa al intervalo de confianza que se incluye en la


salida de var.test, podemos afirmar que el intervalo de confianza a un nivel de
confianza del 80% para el cociente de las varianzas de las dos distribuciones
es (0.5801448, 3.1295847). Este intervalo de confianza contiene al valor 1, por lo
que se puede suponer que las varianzas de las dos distribuciones son idénticas.

Una vez se ha determinado la igualdad (o desigualdad) de las varianzas de ambas


distribuciones, procedemos a calcular el intervalo de confianza para la diferencia de
las medias.

a) Si la varianzas son desconocidas pero supuestas iguales, se parte


de la variable aleatoria

Figura 18: Expresión de la variable


aleatoria para la diferencia de medias (varianzas iguales)
la cual se distribuye según una t de Student con n1+n2-2 grados de libertad. El
cáculo del intervalo de confianza para la diferencia de medias se realiza obteniendo
los valores de la distribución t de Student con n1 +n2-2 grados de libertad que
verifican

Figura 19: Obtención del cuantil t{1 – α/2}

Al operar algebraicamente, tenemos que


Figura 20: Obtención del cuantil t{1 – α/2}

De modo que el intervalo de confianza que buscamos es

Figura 21: Intervalo de confianza para la diferencia de medias (varianzas iguales)

b) Si las varianzas de las poblaciones son desconocidas y, además, distintas y


tamaños muestrales grandes, se sigue un procedimiento similar al que acabamos de
describir en el caso de igualdad de varianzas para la obtención del intervalo de
confianza, partiendo de una variable aleatoria.

Figura 22: Expresión de la variable aleatoria


para la diferencia de medias (varianzas distintas y tamaños muestrales grandes)

De modo que el intervalo de confianza que buscamos es

Figura 23: Intervalo de


confianza para la diferencia de medias (varianzasdistintas y tamaños muestrales
grandes)
En R, la función t.test (que fue introducida y utilizada con anterioridad) se encarga
de proporcionar intervalos de confianza para la diferencia de medias, tanto si las
varianzas de la variable son iguales en los dos grupos como si no. Los parámetros
de t.test presentan algunos cambios cuando la función se utiliza en un contexto de
dos poblaciones:
t.test (x, y, var.equal = FALSE, conf.level = 0.95)

En este caso:

• x: Vector numérico que incluye los valores de la variable de interés en el primer


grupo o muestra
• y: Vector numérico que incluye los datos de la variable de interés en el segundo
grupo o muestra
• var.equal: Es un argumento lógico que indica si las varianzas de la variable en los
dos grupos o muestras puede suponerse igual o no. Para establecer el valor de este
parámetro nos basamos en la interpretación del intervalo de confianza que
proporciona la función var.test. Por defecto, la función considera que las varianzas
en los dos grupos son distintas.

La interpretación del intervalo de confianza resultante permitirá determinar si las


medias poblacionales de las dos distribuciones pueden suponerse iguales o no. Así,
si el intervalo contiene al valor 0, dichas medias podrán asumirse iguales. En
cualquier otro caso, concluiremos que las medias son distintas en ambas
distribuciones.

Supuesto Práctico 5
En vista de los resultados obtenidos en el supuesto práctico 4, y suponiendo
que las precipitaciones registradas en 11 estaciones meteorológicas de dos
provincias españolas se distribuyen de acuerdo a variables normales de
medias y varianzas desconocidas. Obtener un intervalo de confianza al 80%
para la diferencia del número medio de precipitaciones entre las dos
provincias. ¿Puede suponerse que el número medio de precipitaciones de las
dos provincias es igual?
Solución
Dado que en el supuesto práctico 4 se concluyó la igualdad de las varianzas del
número de precipitaciones entre las dos provincias, debemos establecer a TRUE el
valor del parámetro var.equal cuando realicemos la llamada a la función t.test.
> Prov_A <- c(100, 89, 84, 120, 130, 105, 60, 70, 90, 108, 130)
> Prov_B <- c(120, 115, 96, 115, 140, 120, 75, 90, 108, 130, 135)
> t.test(Prov_A, Prov_B, conf.level = 0.80, var.equal = TRUE)
Two Sample t-test
data: Prov_A and Prov_B
t = -1.5755, df = 20, p-value = 0.1308
alternative hypothesis: true difference in means is not equal to 0
80 percent confidence interval:
-26.446718 -2.280555
sample estimates:
mean of x mean of y
98.72727 113.09091

Atendiendo la información sobre el intervalo de confianza que se incluye entre los


resultados
80 percent confidence interval:
-26.446718 -2.280555
Se puede afirmar que el intervalo de confianza a un 80% de confianza para la
diferencia de las medias del número medio de precipitaciones entre las dos
provincias es: ( -26.446718 , -2.280555). Como el 0 no está dentro de este
intervalo, no se puede decir que ambas medias son idénticas.
Intervalo de confianza para la diferencia de medias
en dos poblaciones normales relacionadas
Sean X1, X2, …,Xn e Y1, Y2, …,Yn dos muestras aleatoria de tamaño n y relacionadas, de
tal forma que la primera procede de una población N(μ1, σ1) y la segunda de una
población N(μ2, σ2) .
Antes de proporcionar el intervalo para la diferencia de medias de estas dos
poblaciones, se hace necesario indicar qué se entiende por muestras relacionadas.
Se dicen que dos muestras X1, X2, …,Xn e Y1, Y2, …,Yn están relacionadas o apareadas
cuando los datos de las muestras vienen por parejas, uno de cada una de ellas, de
manera que cada individuo proporciona dos observaciones.
En los casos de muestras relacionadas, se utiliza nuevamente la función t.test para
la obtención de intervalos de confianza, pero se ha de indicar que los datos que
reciben como parámetros provienen de muestras relacionadas incluyendo en la
llamada a la función el argumento lógico paired, cuyo valor debe establecerse
a TRUE.
t.test (x, y, paired = TRUE, conf.level = 0.95)
Supuesto Práctico 6
Se desea comprobar el efecto de un fertilizante sobre la producción de los
árboles frutales. Para ello se seleccionan aleatoriamente un grupo de 10
árboles y se toman los datos de la producción antes y después de tratar a los
árboles con el fertilizante. Obtener un intervalo de confianza al 99% de
confianza para la diferencia de medias de la producción antes y después.

Tabla 2:
Tabla de datos del supuesto práctico 6
Solución
Como puede observarse, los datos vienen por parejas: producción antes y después
(dos datos por árbol). Parece lógico que los datos se encuentren relacionados entre
sí.

En primer lugar, vamos a introducir los datos en el Script de RStudio. Para ello
definimos dos vectores
> Antes <- c(25, 20, 25, 28, 30, 30, 26, 15, 18, 22)
> Despues <- c(30, 25, 28, 29, 30, 31, 24, 22, 25, 27)
A partir de estos datos, vamos a aplicar la función t.test, para obtener el intervalo de
confianza que buscamos.
>t.test(Antes, Despues, paired = TRUE, conf.level = 0.99)
Paired t-test
data: Antes and Despues
t = -3.2812, df = 9, p-value = 0.009511
alternative hypothesis: true difference in means is not equal to 0
99 percent confidence interval:
-6.36939969 -0.03060031
sample estimates:
mean of the differences
-3.2

Según los datos que se incluyen en la salida de la función, el intervalo de confianza


al 99% de confianza para la diferencia de las medias es (-6.36939969, -
0.03060031). Como el 0 no está contenido dentro de este intervalo, podemos
afirmar que la diferencia entre las producciones medias de los árboles antes y
después de seguir el tratamiento con el fertilizante es no nulao,
equivalentemente, que ambos producciones medias no pueden suponerse
iguales.
Intervalo de confianza para la diferencia de dos
proporciones
Consideremos dos muestras aleatoria X1, X2, …,Xn e Y1, Y2, …,Yn de tamaño n1 y n2,
independientes entre sí, extraídas de poblaciones con distribuciones
binomiales B(1, π1) y B(1, π2), respectivamente.
Construimos, a continuación, un intervalo de confianza para la diferencia de
proporciones π1– π2. Para ello, partimos de la variable aleatoria

Figura 25: Expresión de la variable aleatoria


(diferencia de dos proporciones)
con p1 y p2 las proporciones de individuos que presentan la característica de interés
en la primera y la segunda muestra, respectivamente. Esta variable aleatoria sigue
una distribución normal de media 0 y desviación típica 1, por lo que debemos
calcular los valores de la distribución normal estándar que verifican que

Figura 26: Obtención del


cuantil z{1 – α/2}

O, lo que es lo mismo
Figura 27: Obtención del cuantil z{1 – α/2}

De modo que el intervalo de confianza buscado es

Figura 28: Intervalo de confianza para la diferencia de dos proporciones


Para calcular este intervalo en R utilizaremos de nuevo la función prop.test, pero
teniendo en cuenta que ahora contamos con dos muestras en lugar de una. Esto
afecta (mínimamente) a la manera de definir los parámetros. La sintaxis de la
función sigue siendo la misma:
prop.test(x, n, conf.level = 0.95)

donde:

• x: Vector de dimensión 2 que indica el número de elementos en cada grupo que


presentan la característica de interés.
• n: Vector numérico de dimensión 2 que indica el número total de elementos del
grupo.
• conf.level: Valor numérico que indica el nivel de confianza, en tanto por uno, al que
se construirá el intervalo. Si omitimos este parámetro en la llamada a la función, los
intervalos de confianza se calculan a un nivel de confianza del 95%.

Si el intervalo de confianza resultante incluye al 0 entre sus posibles valores, la


diferencia entre ambas proporciones poblaciones podrá considerarse nula lo que
equivale a decir que ambas proporciones son iguales.

Supuesto Práctico 7
Se realiza un estudio sobre en un grupo de personas de las que se les anota el
número de Km en una caminata, el sexo y si hacen o no deporte. Para realizar
dicho estudio se toma una muestra de 55 personas. Calcular un intervalo de
confianza al 92% para la diferencia entre la proporción de hombres y de
mujeres que practican deporte ¿Puede considerarse que ambas proporciones
son iguales? Los datos correspondientes están en el fichero supuesto7.txt
Km Sexo Deporte
10 H 0
21 H 0
13 M 1
3 M 0
11 H 0
26 H 0
10 H 0
3 M 1
5 M 1
8 M 0
6 M 1
28 M 1
16 H 0
12 M 1
14 M 0
10 H 1
10 H 0
4 H 0
12 H 1
18 H 0
13 H 1
11 M 1
21 M 1
22 M 1
16 M 1
12 M 1
6 M 0
14 H 1
13 H 0
9 M 0
7 H 0
11 M 1
18 M 0
10 H 1
11 M 1
9 H 0
7 M 0
12 H 0
15 H 0
14 M 0
26 M 1
18 H 0
10 M 0

53 H 0
52 H 0
50 H 0
52 H 0
48 H 1
46 H 1
53 H 0
50 H 0
35 H 0
50 H 1
60 M 1
50 H 0

Solución
En primer lugar, nos situamos en el directorio de trabajo

> setwd(“F:/Desktop/EJEMPLOSRS5”)
A continuación, sino tenemos importado el fichero de datos, debemos importarlo.
Para ello, utilizamos la orden read.table
> datos <- read.table(“supuesto7.txt”, header = TRUE)
> datos
Km Sexo Deporte
1 10 H 0
2 21 H 0
3 13 M 1
4 3 M 0
5 11 H 0
6 26 H 0
7 10 H 0
8 3 M 1
9 5 M 1
10 8 M 0
11 6 M 1
12 28 M 1
13 16 H 0
14 12 M 1
15 14 M 0
16 10 H 1

………………………….

Una vez importado el fichero de datos, utilizamos el comando table para determinar
cuántos hombres y cuantas mujeres practican deporte.
> table(datos$Sexo, datos$Deporte)
0 1
H 23 8
M 9 15
En total, 8 de los 31 hombres y 15 de las 24 mujeres muestreados practican
deporte. Vamos a crear dos vectores con esta información:
• vector_Deport: Total de hombres y mujeres que practican deporte
• vector_Sexo:Total de hombres y mujeres en la muestra.
> vector_Deporte<- c(8, 15)
> vector_Deporte
[1] 8 15

> vector_Sexo<- c(31, 24)


> vector_Sexo
[1] 31 24

Es muy importante que los valores se introduzcan en el mismo orden en los dos
vectores. A continuación podemos utilizar la función prop.test con estos dos
vectores como argumentos.

> prop.test(vector_Deporte, vector_Sexo, conf.level = 0.92)


2-sample test for equality of proportions with continuity correction
data: vector_Deporte out of vector_Sexo
X-squared = 6.0536, df = 1, p-value = 0.01388
alternative hypothesis: two.sided
92 percent confidence interval:
-0.6249422 -0.1089287
sample estimates:
prop 1 prop 2
0.2580645 0.6250000
Según la salida de la función prop.test, el intervalo de confianza al 92% de confianza
es (-0.6249422, -0.1089287). El 0 no está dentro de este intervalo, por lo que
podemos concluir que las proporciones de hombres y mujeres que hacen deporte
no coinciden.

Ejercicios

Ejercicios Guiados
Ejercicio Guiado1
La concentración media de dióxido de carbono en el aire en una cierta zona no
es habitualmente mayor que 335 ppmv (partes por millon en volumen).
Se sospecha que esta concentración es mayor en la capa de aire más próxima
a la superficie. Se ha analizado el aire en 20 puntos elegidos aleatoriamente a
una misma altura cerca del suelo, resultando los siguientes datos: 332, 320,
312, 270, 330, 354, 356, 310, 341, 313, 223, 224, 305, 321, 325, 333, 332, 345,
312, 331.
Construir un intervalo de confianza al 98% de confianza:
a) Si la concentración de dióxido de carbono se distribuye según una Normal
de desviación típica σ = 120 ppmv
b) Si la concentración de dióxido de carbono se distribuye según una Normal
de desviación típica desconocida.

Ejercicio Guiado 2
Con el fin de estudiar el efecto de los rayos X sobre la viabilidad huevo-larva
en Tribolium casteneum, se irradiaron 1000 huevos de los que resultaron 572
larvas. Calcular un intervalo de confianza para la proporción de larvas en
huevos irradiados al nivel de confianza del 95%.

Ejercicio Guiado 3
Para realizar un estudio de la concentración de una hormona en una solución
vamos a utilizar dos métodos. Disponemos de 10 dosis preparadas en el
laboratorio y medimos la concentración de cada una con los dos métodos. Se
obtienen los siguientes resultados:
Suponiendo normalidad e independencia. Se pide:
a) Calcular un intervalo de confianza al nivel 0.9 para el cociente de varianzas
b) Calcular un intervalo de confianza al nivel 0.9 para la diferencia de
concentraciones medias.
Tabla 3: Datos del Ejercicio guiado 3

Ejercicio Guiado 4
En una unidad del sueño se está probando con un nuevo somnífero. Para
comprobar su eficacia se toman 10 individuos al azar, un día no se les
suministra el somnífero y se les comprueba el número de horas de sueño, al
día siguiente se les suministra y se vuelve a comprobar las horas de sueño. Los
resultados entes y después del tratamiento han sido los siguientes:

Tabla 4: Datos del Ejercicio guiado 4


Calcular un intervalo de confianza, al 96% de confianza para la diferencia del
número medio de horas de sueño antes y después del tratamiento.

Ejercicio Guiado 5
Unos estudios sobre las ranas tigres en dos regiones de Méjico tienen como
objetivo comparar las proporciones de dichas ranas en cada una de las
regiones. Para ello se toma una muestra al azar de 100 ranas observando que
5 son ranas tigres en la zona A, mientras que de una muestra de 150 ranas en
la zona B, 9 son ranas tigres. Construir un intervalo de confianza al 95% y al
98% para la diferencia entre las verdaderas proporciones de ranas tigres en
la dos regiones. ¿Puede suponerse que la proporción de ranas tigres es igual
en ambas regiones?

Ejercicio Guiado 6

Para estudiar la audiencia de un programa de televisión, se ha medido el


número de personas que ven el programa en diferentes días. Los datos del
número de personas (en miles) son los siguientes: 521, 742, 593, 635, 788,
717, 606, 639, 666, 624. Suponiendo normalidad. Se pide:

a) Obtener estimaciones puntuales de la audiencia media y de la varianza


b) Construir un intervalo de confianza para la audiencia media
c) Construir un intervalo de confianza para la varianza.

Ejercicio Guiado 1 (Resuelto)


La concentración media de dióxido de carbono en el aire en una cierta zona no
es habitualmente mayor que 335 ppmv (partes por millon en volumen).
Se sospecha que esta concentración es mayor en la capa de aire más próxima
a la superficie. Se ha analizado el aire en 20 puntos elegidos aleatoriamente a
una misma altura cerca del suelo, resultando los siguientes datos: 332, 320,
312, 270, 330, 354, 356, 310, 341, 313, 223, 224, 305, 321, 325, 333, 332, 345,
312, 331.
Construir un intervalo de confianza al 95% y 98% de confianza:
a) Si la concentración de dióxido de carbono se distribuye según una Normal
de desviación típica σ = 120 ppmv
b) Si la concentración de dióxido de carbono se distribuye según una Normal
de desviación típica desconocida.

Solución:
En primer lugar, introducimos, en un vector, los datos de las 20 concentraciones
observadas y en segundo lugar introducimos el dato relativo al nivel de significación

>concentraciones<- c(332, 320, 312, 270, 330, 354, 356, 310, 341, 313, 223,
224, 305, 321, 325, 333, 332, 345, 312, 331)
>alpha<- 0.05
a) Si la concentración de dióxido de carbono se distribuye según una Normal
de desviación típica σ = 120 ppmv

Tenemos que obtener un intervalo de confianza para la media con varianza


conocida

Figura 29: Expresión del Intervalo de


confianza para la media (varianza conocida)

En este primer caso, y dado que conocemos la desviación típica poblacional,


debemos calcular manualmente los límites inferior y superior del intervalo.

Así, calculamos la media muestral y el cuantil que intervienen en dicho intervalo.

> n <- length(concentraciones)


> media <- mean(concentraciones)
>cuantil<- qnorm(1 – alpha/2)

Introducimos el dato de la desviación típica

>desv_tipica<- 120

A continuación calculamos el límite inferior y superior del intervalo pedido.

>lim_inf<- media – cuantil * desv_tipica / sqrt(n)


>lim_inf
[1] 261.8586
>lim_sup<- media + cuantil * desv_tipica / sqrt(n)
>lim_sup
[1] 367.0414

Por lo que el intervalo de confianza al 95% para la concentración de dióxido de


carbono es (261.8586 , 367.0414).
>alpha<- 0.02
>cuantil<- qnorm(1 – alpha/2)
>lim_inf<- media – cuantil * desv_tipica / sqrt(n)
>lim_inf
[1] 252.0275

>lim_sup<- media + cuantil * desv_tipica / sqrt(n)


>lim_sup
[1] 376.8725

Por lo que el intervalo de confianza al 98% para la concentración de dióxido de


carbono es (252.0275 , 376.8725).
b) Si la concentración de dióxido de carbono se distribuye según una Normal
de desviación típica desconocida.

Hay que obtener un intervalo de confianza cuando la desviación típica es


deconocida. Para ello, usamos la función t.test
>t.test(concentraciones)
One Sample t-test
data: concentraciones
t = 38.589, df = 19, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
297.3944 331.5056
sample estimates:
mean of x
314.45
> t.test(concentraciones, conf.level = 0.98)
One Sample t-test
data: concentraciones
t = 38.589, df = 19, p-value < 2.2e-16
alternative hypothesis: true mean is not equal to 0
98 percent confidence interval:
293.7563 335.1437
sample estimates:
mean of x
314.45
En este segundo caso, el intervalo de confianza para la concentración de dióxido de
carbono, al 95% y 98% de confianza, es (297.3944, 331.5056) y (293.7563,
335.1437), respectivamente

Ejercicio Guiado2 (Resuelto)


Con el fin de estudiar el efecto de los rayos X sobre la viabilidad huevo-larva
en Tribolium casteneum, se irradiaron 1000 huevos de los que resultaron 572
larvas. Calcular un intervalo de confianza para la proporción de larvas en
huevos irradiados al nivel de confianza del 95%.

Solución:
Para obtener un intervalo de confianza para la proporción poblacional, se utiliza la
función prop.test. Disponemos tanto del número de huevos que presentan la
característica de interés (de los que resultaron larvas) como del número total de
huevos en la muestra, de manera que podemos realizar la llamada a la función tal y
como sigue:
>prop.test(572, 1000)
1-sample proportions test with continuity correction
data: 572 out of 1000, null probability 0.5
X-squared = 20.449, df = 1, p-value = 6.124e-06
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
0.5406126 0.6028273
sample estimates:
p
0.572
El intervalo de confianza para la proporción poblacional de huevos conformes al
95% de confianza es (0.5406126, 0.6028273).

Ejercicio Guiado3 (Resuelto)


Para realizar un estudio de la concentración de una hormona en una solución
vamos a utilizar dos métodos. Disponemos de 10 dosis preparadas en el
laboratorio y medimos la concentración de cada una con los dos métodos. Se
obtienen los siguientes resultados:
Suponiendo normalidad e independencia. Se pide:
a) Calcular un intervalo de confianza al nivel 0.9 para el cociente de varianzas
b) Calcular un intervalo de confianza al nivel 0.9 para la diferencia de
concentraciones medias.

Tabla 3: Datos del Ejercicio guiado 3

Solución:
En primer lugar introducimos, en el Script de RStudio, en dos vectores los los
datos:
> MetodoA <- c(10.7, 11.2, 15.3, 14.9, 13.9, 15, 15.6, 15.7, 14.3, 10.8)
> MetodoB <- c(11.1, 11.4, 15, 15.1, 14.3, 15.4, 15.4, 16, 14.3, 11.2)
a) Calcular un intervalo de confianza al nivel 0.9 para el cociente de
varianzas
Para calcular el intervalo de confianza para el cociente de varianza utilizamos la
función var.test.
>var.test(MetodoA, MetodoB, conf.level = 0.90)
F test to compare two variances

data: MetodoA and MetodoB


F = 1.1229, num df = 9, denom df = 9, p-value = 0.8657
alternative hypothesis: true ratio of variances is not equal to 1
90 percent confidence interval:
0.3532441 3.5696591
sample estimates:
ratio of variances
1.122925
Según los resultados de var.test, el intervalo de confianza al 90% de confianza para
el cociente de las varianzas de la variable en ambos métodos es ( 0.3532441,
3.5696591), que contiene al 1. Por tanto, podemos asumir que ambas varianzas son
iguales en ambos métodos.
b) Calcular un intervalo de confianza al nivel 0.9 para la diferencia de
concentraciones medias.
En el apartado anterior hemos obtenido que las varianzas son iguales en los dos
métodos, por lo tanto, tenemos que obtener un intervalo de confianza para la
diferencia de medias de dos poblaciones cuando las varianzas de ambas poblaciones
son iguales. Para ello, utilizamos la función t.test y ponemos var.equal = TRUE
>t.test(MetodoA, MetodoB, var.equal = TRUE, conf.level = 0.90)
Two Sample t-test

data: MetodoA and MetodoB


t = -0.20323, df = 18, p-value = 0.8412
alternative hypothesis: true difference in means is not equal to 0
90 percent confidence interval:
-1.715841 1.355841
sample estimates:
mean of x mean of y
13.74 13.92
El intervalo de confianza, al 90% de confianza, para la diferencia de medias de las
concentraciones de un hormona en ambos métodos es ( -1.715841,
1.355841), que ontiene al 0, por lo que podemos concluir que la cantidad media
de concentración de una hormona en una solución en ambos métodos es la misma.

Ejercicio Guiado 4 (Resuelto)


En una unidad del sueño se está probando con un nuevo somnífero. Para
comprobar su eficacia se toman 10 individuos al azar, un día no se les
suministra el somnífero y se les comprueba el número de horas de sueño, al
día siguiente se les suministra y se vuelve a comprobar las horas de sueño. Los
resultados entes y después del tratamiento han sido los siguientes:

Tabla 4: Datos del Ejercicio guiado 4


Calcular un intervalo de confianza, al 96% de confianza para la diferencia del
número medio de horas de sueño antes y después del tratamiento.
Solución:
En primer lugar introducimos los datos, en el Script RStudio, en dos vectores.

> Antes <- c(7.3, 8.2, 6.3, 5.2, 6.9, 5.8, 5.3, 7.1, 6.9, 8.1)
> Despues<- c(8.2, 7.9, 6.4, 5.1, 7.1, 6.3, 5.9, 8.2, 7.1, 7.7)

Estos datos son un claro ejemplo de datos pareados, ya que a los mismos individuos
se les ha comprobado las horas de sueño antes y después del tratamiento. Por lo que
tenemos que obtener un intervalo de confianza para la diferencia de medias de dos
poblaciones normales relacionadas. Para ello, realizamos la llamada a la
función t.test, sin olvidar indicar mediante el parámetro paired la relación que
existe entre los conjuntos de datos.
>t.test(Antes, Despues, paired = TRUE, conf.level = 0.96)
Paired t-test
data: Antes and Despues
t = -1.7925, df = 9, p-value = 0.1066
alternative hypothesis: true difference in means is not equal to 0
96 percent confidence interval:
-0.65464846 0.09464846
sample estimates:
mean of the differences
-0.28
El intervalo de confianza, al 96% de confianza, para la diferencia del número medio
de horas de sueño antes y después del tratamiento es ( -
0.65464846 0.09464846). Este intervalo contiene al 0, por lo que podemos
concluir que el número de horas de sueño antes y después del tratamiento pueden
considerarse iguales, poniendo así en duda la efectividad del somnífero.

Ejercicio Guiado 5 (Resuelto)


Unos estudios sobre las ranas tigres en dos regiones de Méjico tienen como
objetivo comparar las proporciones de dichas ranas en cada una de las
regiones. Para ello se toma una muestra al azar de 100 ranas observando que
5 son ranas tigres en la zona A, mientras que de una muestra de 150 ranas en
la zona B, 9 son ranas tigres. Construir un intervalo de confianza al 95% y al
98% para la diferencia entre las verdaderas proporciones de ranas tigres en
la dos regiones. ¿Puede suponerse que la proporción de ranas tigres es igual
en ambas regiones?

Solución:
En este caso debemos utilizar la función prop.test para calcular el intervalo de
confianza para la diferencia de proporciones. Pero primero, debemos crear un
vector que indique el número de ranas tigres en cada región así como un segundo
vector con el número total de ranas en cada región.
>ranastigres<- c(5, 9)
>ranas<- c(100, 150)
Una vez hecho esto, llamamos a la función prop.test, indicando el nivel de confianza
adecuado.
>prop.test(ranastigres, ranas)
2-sample test for equality of proportions with continuity correction
data: ranastigres out of ranas
X-squared = 0.0031527, df = 1, p-value = 0.9552
alternative hypothesis: two.sided
95 percent confidence interval:
-0.07550922 0.05550922
sample estimates:
prop 1 prop 2
0.05 0.06
Según los resultados que proporciona prop.test, el intervalo de confianza para la
diferencia de proporciones que buscamos es (-0.07550922, 0.05550922), que
contiene al 0, por lo que se puede afirmar que la proporción de ranas tigres es igual
en ambas regiones con una confianza del 95%.
> prop.test(ranastigres, ranas, conf.level = 0.98)
2-sample test for equality of proportions with continuity correction
data: ranastigres out of ranas
X-squared = 0.0031527, df = 1, p-value = 0.9552
alternative hypothesis: two.sided
98 percent confidence interval:
-0.08619733 0.06619733
sample estimates:
prop 1 prop 2
0.05 0.06
El intervalo de confianza al 98% es ( -0.08619733, 0.06619733), que como el caso
anterior contiene al cero y por lo tanto se se puede afirmar que la proporción de
ranas tigres es igual en ambas regiones con una confianza del 98%.

Ejercicio Guiado 6 (Resuelto)


Para estudiar la audiencia de un programa de televisión, se ha medido el
número de personas que ven el programa en diferentes días. Los datos del
número de personas (en miles) son los siguientes: 521, 742, 593, 635, 788,
717, 606, 639, 666, 624. Suponiendo normalidad. Se pide:

a) Obtener estimaciones puntuales de la audiencia media y de la varianza


b) Construir un intervalo de confianza al 98% para la audiencia media
c) Construir un intervalo de confianza al 95% para la varianza.

Solución:
a) Obtener estimaciones puntuales de la audiencia media y de la varianza
En primer lugar introducimos los datos en RStudio
> datos <- c(521, 742, 593, 635, 788, 717, 606, 639, 666, 624)
> datos
[1] 521 742 593 635 788 717 606 639 666 624

Estimación puntual de la media

> media <- mean(datos)


> media
[1] 653.1
Estimación puntual de la varianza

> varianza <- var(datos)


> varianza
[1] 6111.656
b) Construir un intervalo de confianza al 98% para la audiencia media
Pra construir un intervalo de confianza para la media con varianza desconocida
utilizamos la función t.test(x, conf.level = 0.98)
> t.test(datos, conf.level = 0.98)
One Sample t-test
data: datos
t = 26.418, df = 9, p-value = 7.709e-10
alternative hypothesis: true mean is not equal to 0
98 percent confidence interval:
583.3491 722.8509
sample estimates:
mean of x
653.1
El intervalo pedido es (583.3491, 722.8509)
c) Construir un intervalo de confianza al 95% para la varianza

El intervalo de confianza que debemos calcular es

Figura 30: Expresión del Intervalo de confianza


para la varianza (media conocida)
Nota: R no incluye una función específica para el cálculo de intervalos de confianza
en este tipo de situaciones. Por lo tanto calcularemos el intervalo de la siguiente
forma
> n <- length(datos)
> alfa <- 0.05
> L1 <- (n – 1) * varianza / qchisq(1-alfa / 2,n – 1)
> L2 <- (n – 1) * varianza / qchisq(alfa /2,n – 1)
> IC <- c(L1,L2)
> IC
[1] 2891.53 20369.25
El intervalo de confianza pedido es: (20369.25, 2891.53)

Ejercicios Propuestos

Ejercicio Propuesto 1

Una compañía contrata 10 tubos con filamentos del tipo A y 12 tubos con
filamentos del tipo B. Las duraciones medias observadas se muestran en la
siguiente tabla:
Tabla 5: Datos del Ejercicio propuesto 1
Obtener los siguientes intervalos de confianza a un nivel del 99%
a) Para la duración media de los tubos
a1) del tipo A si la desviación típica σ = 203.25
a2) del tipo B si la desviación típica σ = 272.56

b) Para la duración media de los tubos del tipo A y de los tubos del tipo B
c) Para la diferencia entre las duraciones medias de los tubos del tipo A y del
tipo B.

Ejercicio Propuesto 2

Se diseñó un programa de ejercicios regulares, moderadamente activos, para


someter a individuos que habían sufrido previamente un infarto, para
comprobar si el programa podría beneficiar a estos pacientes. Se eligieron al
azar once individuos que habían sufrido previamente un infarto. A estos
individuos se les determinó, antes de empezar el programa, la capacidad de
trabajo de cada uno midiendo el tiempo que tardó en alcanzar una frecuencia
de 160 latidos por minuto mientras caminaba sobre una cinta sin fin. Después
de 25 semanas de ejercicio controlado, se repitieron las medidas a los mismos
individuos en la cinta sin fin y se registró el tiempo para cada sujeto. En la
siguiente tabla se muestra el tiempo que tarda cada individuo antes y después
del experimento

Tabla
6: Datos del Ejercicio propuesto 2
Obtener un intervalo de confianza al 98% para la diferencia de los tiempos
medios que tardan los sujetos sobre la cinta sin fin antes y después del
experimento.

Ejercicio Propuesto 3
En una piscifactoría hay una proporción desconocida de peces de una especie
A. Para obtener información sobre la proporción se sacan 145 peces de los
cuales 29 son del tipo A. Estimar dicha proporción mediante un intervalo de
confianza al nivel de confianza 0.95. ¿Son compatibles estos resultados con la
suposición de que dicha proporción vale 1/5?

Ejercicio Propuesto 4
Se estudian dos procedimientos de fabricación de pistones. Una muestra al
azar de 100 pistones producidos por el primer procedimiento contiene 5
defectuosos mientras que una muestra de 150 pistones fabricados con el
segundo procedimiento contiene 9 defectuosos. Construir un intervalo de
confianza al 99% para la diferencia entre las verdaderas proporciones de
defectuosos en los dos procedimientos.

Ejercicio Propuesto 1(Resuelto)


Una compañía contrata 10 tubos con filamentos del tipo A y 12 tubos con
filamentos del tipo B. Las duraciones medias observadas se muestran en la
siguiente tabla:

Tabla 5: Datos del Ejercicio propuesto 1


Obtener los siguientes intervalos de confianza a un nivel del 99%
a) Para la duración media de los tubos
a1) del tipo A si la desviación típica σ = 203.25
a2) del tipo B si la desviación típica σ = 272.56
b) Para la duración media de los tubos del tipo A y de los tubos del tipo B
c) Para la diferencia entre las duraciones medias de los tubos del tipo A y del
tipo B.

Solución:
a) Obtener un intervalo de confianza a un nivel del 99%
a1) Para la duración media de los tubos del tipo A si la desviación típica σ =
203.25
a2) Para la duración medialos tubos del tipo B si la desviación típica σ =
272.56.
a1) El intervalo de confianza al 99% para la duración media de los tubos del tipo A
es (1202.243 1533.357).
a2) El intervalo de confianza al 99% para la duración media de los tubos del tipo B
es (1057.164, 1462.503).
b) Para la duración media de los tubos del tipo A y de los tubos del tipo B
Intervalo pedido para el tipo A: (1169.235, 1566.365)
Intervalo pedido para el tipo B: (1017.253, 1502.414)
c) Para la diferencia entre las duraciones medias de los tubos del tipo A y del
tipo B.
El intervalo de confianza resultante es (-183.0579, 398.9913), dicho intervalo
contiene al 0, por lo que podemos concluir que la duración de los filamentos del tipo
A y B es la misma.
Solución del Ejercicio propuesto 1
Solución:
En primer lugar introducimos los datos
> TipoA <- c(1614, 1094, 1293, 1643, 1466, 1270, 1340, 1380, 1081, 1497)
> TipoB <- c(1383, 1138, 1092, 1143, 1017, 1061, 1627, 1021, 1711, 1065, 1162, 1698)

Calculamos la media muestral y el cuantil que intervienen en dicho intervalo.


> nA <- length(TipoA)
> mediaA <- mean(TipoA)
> alpha <- 0.01
>cuantilA<- qnorm(1 - alpha/2)

Introducimos el dato de la desviación típica


>desv_tipicaA<- 203.25

A continuación calculamos el límite inferior y superior del intervalo pedido.


>lim_infA<- mediaA - cuantilA * desv_tipicaA / sqrt(nA)
>lim_supA<- mediaA + cuantilA * desv_tipicaA / sqrt(nA)
ICA <- c (lim_infA,lim_supA)
ICA
[1] 1202.243 1533.357

Por lo que el intervalo de confianza al 99% para la duración media de los tubos del tipo
A es (1202.243 1533.357).

nB <- length(TipoB)
mediaB <- mean(TipoB)
alpha <- 0.01
cuantilB<- qnorm(1 - alpha/2)
desv_tipicaB<- 272.56
lim_infB<- mediaB - cuantilB * desv_tipicaB / sqrt(nB)
lim_supB<- mediaB + cuantilB * desv_tipicaB / sqrt(nB)
ICB <- c (lim_infB,lim_supB)
ICB
[1] 1057.164 1462.503

Por lo que el intervalo de confianza al 99% para la duración media de los tubos del tipo
B es (1057.164, 1462.503).

b) Para la duración media de los tubos del tipo A y de los tubos del tipo B

Para obtener un intervalo de confianza para la media poblacional cuando la varianza es


conocida, se utiliza la función t.test .

> t.test(TipoA, conf.level = 0.99)

One Sample t-test

data: TipoA
t = 22.386, df = 9, p-value = 3.353e-09
alternative hypothesis: true mean is not equal to 0
99 percent confidence interval:
1169.235 1566.365
sample estimates:
mean of x
1367.8

Intervalo pedido para el tipo A: (1169.235, 1566.365)


> t.test(TipoB, conf.level = 0.99)

One Sample t-test

data: TipoB
t = 16.13, df = 11, p-value = 5.294e-09
alternative hypothesis: true mean is not equal to 0
99 percent confidence interval:
1017.253 1502.414
sample estimates:
mean of x
1259.833

Intervalo pedido para el tipo B: (1017.253, 1502.414)

c) Para la diferencia entre las duraciones medias de los tubos del tipo A y del tipo B.

Para obtener un intervalo de confianza para la diferencia entre las duraciones medias de
los tubos del tipo A y B, primero debemos obtener un intervalo de confianza para el
cociente de las varianzas entre ambas duraciones, para saber si estas varianzas pueden
asumirse iguales o no. Para ello, empleamos la función var.test.

>var.test(TipoA, TipoB, conf.level = 0.99)


F test to compare two variances

data: TipoA and TipoB


F = 0.50996, num df = 9, denom df = 11, p-value = 0.3214
alternative hypothesis: true ratio of variances is not equal to 1
99 percent confidence interval:
0.09210416 3.22001974
sample estimates:
ratio of variances
0.5099616

Según los resultados de var.test, el intervalo de confianza al 99% de confianza para el


cociente de las varianzas de la variable en ambas duraciones es (0.09210416,
3.22001974), el cual contiene al 1. Por tanto, podemos asumir que ambas varianzas son
iguales

Teniendo en cuenta esta información, realizaremos una función a la llamada t.test para
obtener el intervalo de confianza para la diferencia de medias.
>t.test(TipoA, TipoB, var.equal = TRUE, conf.level = 0.99)
Two Sample t-test

data: TipoA and TipoB


t = 1.0556, df = 20, p-value = 0.3037
alternative hypothesis: true difference in means is not equal to 0
99 percent confidence interval:
-183.0579 398.9913
sample estimates:
mean of x mean of y
1367.800 1259.833

El intervalo de confianza resultante es (-183.0579, 398.9913), dicho intervalo contiene al


0, por lo que podemos concluir que la duración de los filamentos del tipo A y B es la misma.

Ejercicio Propuesto 2 (Resuelto)


Se diseñó un programa de ejercicios regulares, moderadamente activos, para
someter a individuos que habían sufrido previamente un infarto, para
comprobar si el programa podría beneficiar a estos pacientes. Se eligieron al
azar once individuos que habían sufrido previamente un infarto. A estos
individuos se les determinó, antes de empezar el programa, la capacidad de
trabajo de cada uno midiendo el tiempo que tardó en alcanzar una frecuencia
de 160 latidos por minuto mientras caminaba sobre una cinta sin fin. Después
de 25 semanas de ejercicio controlado, se repitieron las medidas a los mismos
individuos en la cinta sin fin y se registró el tiempo para cada sujeto. En la
siguiente tabla se muestra el tiempo que tarda cada individuo antes y después
del experimento

Tabla
6: Datos del Ejercicio propuesto 2
Obtener un intervalo de confianza al 98% para la diferencia de los tiempos
medios que tardan los sujetos sobre la cinta sin fin antes y después del
experimento.

Solución:
El intervalo de confianza para la diferencia de los tiempos medios que tardan los
sujetos sobre la cinta sin fin antes y después del experimento, a un nivel del 98%,
es (1.092016, 3.167984). Como el intervalo de confianza no contiene el 0 podemos
deducir que existen diferencias significativas entre las medias. Se puede apreciar
que el tiempo que tardan en la cinta sin fin es menor después del tratamiento.
Solución del Ejercicio Propuesto 2

Ejercicio Propuesto 3 (Resuelto)


En una piscifactoría hay una proporción desconocida de peces de una especie
A. Para obtener información sobre la proporción se sacan 145 peces de los
cuales 29 son del tipo A. Estimar dicha proporción mediante un intervalo de
confianza al nivel de confianza 0.95 ¿Son compatibles estos resultados con la
suposición de que dicha proporción vale 1/5?

Solución:
El intervalo de confianza pedido es (0.1400633, 0.2762259). Este resultado si es
compatible con la suposición de que dicha proporción vale 1/5, ya que 1/5
pertenece al intervalo.
Solución del Ejercicio Propuesto 3
> prop.test(29,145)
1-sample proportions test with continuity correction

data: 29 out of 145, null probability 0.5


X-squared = 51.007, df = 1, p-value = 9.204e-13
alternative hypothesis: true p is not equal to 0.5
95 percent confidence interval:
0.1400633 0.2762259
sample estimates:
p
0.2

El intervalo de confianza para la proporción de peces del tipo A, a un nivel del 95%, es
(0.1400633, 0.2762259). Este resultado es compatible con la suposición de que dicha proporción
vale 1/5, ya que 1/5 pertenece al intervalo

Ejercicio Propuesto 4 (Resuelto)


Se estudian dos procedimientos de fabricación de pistones. Una muestra al
azar de 100 pistones producidos por el primer procedimiento contiene 5
defectuosos mientras que una muestra de 150 pistones fabricados con el
segundo procedimiento contiene 9 defectuosos. Construir un intervalo de
confianza al 99% para la diferencia entre las verdaderas proporciones de
defectuosos en los dos procedimientos.

Solución:
El intervalo de confianza para la diferencia de proporciones de los dos
procedimientos al 99% es (-0.09347518 0.07347518).
Solución del Ejercicio Propuesto 4
> defectuososAB<- c(5, 9)
> pistones<- c(100, 150)
> prop.test(defectuososAB, pistones, conf.level = 0.99)

2-sample test for equality of proportions with continuity correction


data: defectuososAB out of pistones
X-squared = 0.0031527, df = 1, p-value = 0.9552
alternative hypothesis: two.sided
99 percent confidence interval:
-0.09347518 0.07347518
sample estimates:
prop 1 prop 2
0.05 0.06
El intervalo de confianza para la diferencia de proporciones de los dos procedimientos al 99%
es: (-0.09347518 0.07347518)

Autora: Ana María Lara Porras. Universidad de Granada. (2017).

También podría gustarte