19
PostData Curso de Introducci´ on a la Estad´ ıstica Tutorial 07: Contraste de hip´ otesis. Factores en R. Atenci´ on: Este documento pdf lleva adjuntos algunos de los ficheros de datos necesarios. Y est´ a pensado para trabajar con ´ el directamente en tu ordenador. Al usarlo en la pantalla, si es necesario, puedes aumentar alguna de las figuras para ver los detalles. Antes de imprimirlo, piensa si es necesario. Los ´ arboles y nosotros te lo agradeceremos. Fecha: 1 de diciembre de 2013. Si este fichero tiene m´ as de un a˜ no, puede resultar obsoleto. Busca si existe una versi´ on m´ as reciente. ´ Indice 1. Intervalos de confianza para una proporci´ on binomial 1 1.1. Con R ........................................... 2 1.2. Con otros programas ................................... 2 2. Contraste de hip´ otesis (una poblaci´ on). 3 2.1. Contrastes para μ y σ en pob. normales, usando R .................. 3 2.2. La funci´ on t.test de R (y sus parientes) ....................... 7 2.3. Contrastes de hip´ otesis (una poblaci´ on) usando otros programas .......... 10 3. Variables cualitativas (factores) en R 13 3.1. Factores .......................................... 13 3.2. Usando los factores para explorar los datos ...................... 15 3.3. La funci´ on cut ...................................... 18 1. Intervalos de confianza para una proporci´on binomial Tras nuestro trabajo del Tutorial06 sobre intervalos de confianza para los par´ ametros μ y σ de una poblaci´ on normal, aqu´ ı nos vamos a ocupar del caso que se discute en la Secci´ on 8.1.1 del curso. Se trata de calcular un intervalo de confianza para una variable aleatoria cuya distribuci´ on en la poblaci´ on es de tipo Bernouilli, con par´ ametro p. Ese intervalo de confianza, basado en la aproximaci´ on normal a la binomial aparece en la Ecuaci´ on 8.3 (p´ ag. 214) del curso: ˆ p - z α/2 r ˆ p · ˆ q n p ˆ p + z α/2 r ˆ p · ˆ q n . Para utilizar esta f´ ormula es muy importante que se cumplan, a la vez, estas condiciones: n> 30, n · ˆ p> 5, n · ˆ q> 5, que, en esencia, dicen que n es bastante grande, y p y q no demasiado peque˜ nos. Vamos a ver como calcular estos intervalos con varios de los programas que conocemos. 1

Tutorial 07: Contraste de hip otesis. Factores en R. Indice · Vamos a escribir un programa en R para resolver los ejercicios, t picos de libro de texto, que son habituales cuando

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

  • PostData Curso de Introducción a la Estad́ıstica

    Tutorial 07:Contraste de hipótesis. Factores en R.

    Atención:

    Este documento pdf lleva adjuntos algunos de los ficheros de datos necesarios. Y está pensadopara trabajar con él directamente en tu ordenador. Al usarlo en la pantalla, si es necesario,puedes aumentar alguna de las figuras para ver los detalles. Antes de imprimirlo, piensa sies necesario. Los árboles y nosotros te lo agradeceremos.

    Fecha: 1 de diciembre de 2013. Si este fichero tiene más de un año, puede resultar obsoleto.Busca si existe una versión más reciente.

    Índice

    1. Intervalos de confianza para una proporción binomial 1

    1.1. Con R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

    1.2. Con otros programas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

    2. Contraste de hipótesis (una población). 3

    2.1. Contrastes para µ y σ en pob. normales, usando R . . . . . . . . . . . . . . . . . . 3

    2.2. La función t.test de R (y sus parientes) . . . . . . . . . . . . . . . . . . . . . . . 7

    2.3. Contrastes de hipótesis (una población) usando otros programas . . . . . . . . . . 10

    3. Variables cualitativas (factores) en R 13

    3.1. Factores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

    3.2. Usando los factores para explorar los datos . . . . . . . . . . . . . . . . . . . . . . 15

    3.3. La función cut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

    1. Intervalos de confianza para una proporción binomial

    Tras nuestro trabajo del Tutorial06 sobre intervalos de confianza para los parámetros µ y σ deuna población normal, aqúı nos vamos a ocupar del caso que se discute en la Sección 8.1.1 delcurso. Se trata de calcular un intervalo de confianza para una variable aleatoria cuya distribuciónen la población es de tipo Bernouilli, con parámetro p. Ese intervalo de confianza, basado en laaproximación normal a la binomial aparece en la Ecuación 8.3 (pág. 214) del curso:

    p̂− zα/2

    √p̂ · q̂n≤ p ≤ p̂+ zα/2

    √p̂ · q̂n.

    Para utilizar esta fórmula es muy importante que se cumplan, a la vez, estas condiciones:

    n > 30, n · p̂ > 5, n · q̂ > 5,

    que, en esencia, dicen que n es bastante grande, y p y q no demasiado pequeños. Vamos a ver comocalcular estos intervalos con varios de los programas que conocemos.

    1

    http://www.postdata-statistics.com/

  • 1.1. Con R

    Con R es muy fácil calcular estos intervalos, usando un fichero como los que conocemos del anteriortutorial, para trabajar con los datos resumidos mediante n y p̂, El fichero es este:

    En este caso no vamos a incluir un fichero para el caso en que trabajamos directamente con losdatos de la muestra “en bruto” (raw data, en inglés).

    En R también se dispone de la función prop.test para obtener estos intervalos de confianza pa-ra proporciones (y para realizar contrastes de hipótesis, como veremos más adelante). Vamos aaprender a usarla con un ejemplo. En una página web1 ha aparecido recientemente una compa-rativa entre bateŕıas externas de respaldo para teléfonos móviles y aparatos similares. Además serealizó una encuesta entre los lectores para conocer cuál era la marca preferida de los lectores deesa web. De un total de 2499 opiniones, la marca ganadora obtuvo 1004 votos. Vamos a calcularun intervalo de confianza al 95 % para el porcentaje de lectores que prefieren esa marca.

    Para hacer esto usamos este comando en R (se muestra la salida)

    > prop.test(x=1004,n=2499,conf.level=0.95,correct=FALSE)

    1-sample proportions test without continuity

    correction

    data: 1004 out of 2499, null probability 0.5

    X-squared = 96.471, df = 1, p-value < 2.2e-16

    alternative hypothesis: true p is not equal to 0.5

    95 percent confidence interval:

    0.3827042 0.4211188

    sample estimates:

    p

    0.4017607

    Como puedes ver, la función está diseñada para contrates de hipótesis, aunque produce el intervalode confianza como subproducto. Vamos a explicar brevemente los argumentos que hemos usadopara esta función. El argumento x se refiere al número de éxitos que aparecen en la muestra,mientras que n es el tamaño de la muestra. El argumento conf.level es autoexplicativo, aśı quesólo nos queda por comentar porque hemos incluido correct=FALSE. Si consultas la ayuda deprop.test, verás que, con esa opción, estamos desactivando la corrección de continuidad de Yates.Se trata de un ajuste similar al que hemos discutido en la Sección 5.5.2 (pág. 131) del curso. Si seusa esta corrección se obtienen intervalos de confianza más precisos. Nosotros no lo hemos hechopara simplificar, y por eso, para obtener los resultados habituales de los problemas de libro detexto, debemos usar correct=FALSE.

    Ejercicios:

    1. Usa el fichero Tut07-IntConf-Proporcion-UsandoZ-Estadisticos.R para comprobar lascuentas del Ejemplo 8.1.2 (pág. 214 del curso), el de los araos embridados.

    2. Haz lo mismo con prop.test. Y calcula un intervalo de confianza para los datos de araosembridados del año 2008 (138 embridados, 270 no embridados).

    3. ¿Por qué no incluimos un fichero para trabajar con datos en bruto? ¿Cómo seŕıa el ficherodel Ejemplo 8.1.2?

    1.2. Con otros programas

    Hemos incluido un fichero-plantilla de Calc para realizar estas mismas operaciones:

    1Este es el enlace.

    2

    ################################################################ Estadistica, Grados Biologia y Bio. Sanitaria UAH 2013/2014## Fichero de instrucciones R para calcular# un intervalo de confianza (1-alfa) para la proporcion p de # una poblacion tipo Binomial (Bernouilli), a partir de una# muestra con n datos.## Este fichero usa los valores de una muestra,# previamente calculados (numero de datos, proporcion muestral) ###############################################################

    rm(list=ls()) #limpieza inicial

    # Introduce el numero de datos de la muestra,n =

    # Introduce aqui el valor de pMuestral, la proporcion muestral # Recuerda que pMuestral es el numero de casos favorables en la muestra # dividido por n pMuestral =

    # LEE ESTAS INSTRUCCIONES ATENTAMENTE:# SI LA MUESTRA TIENE < 30 ELEMENTOS O SI N*p5, n·q>5

    Tamaño de la muestra

    456

    Proporción muestral

    0,3048245614

    alfa

    alfa/2

    valor crítico

    Nivel de confianza (1-α)

    0,95

    0,05

    0,025

    1,9599639845

    Intervalo de confianza:

    Semi-anchura:

    0,262573

    < μ

  • Con Wolfram Alpha también es muy fácil calcular estos intervalos. En el Ejemplo 8.1.2 de los araos,era n = 456, y el número de éxitos (araos embridados) era de 139. Aśı que

    p̂ =139

    456≈ 0.3048, y q̂ = 317

    456≈ 0.6952

    Para calcular un intervalo de confianza para p a partir de estos datos, en Wolfram Alpha podmeosescribir: binomial confidence interval n=456, p-hat=139/456 O también binomial confidenceinterval n=456, p-hat=0.3048 o incluso, usando el número de éxitos (successes): binomialconfidence interval n=456, number of successes =139 Mostramos, en la siguiente figura,(parte de) el resultado del último de estos comandos:

    2. Contraste de hipótesis (una población).

    Vamos a empezar este tutorial aprendiendo a utilizar R (y, en menor medida, otros programas)para llevar a cabo contrastes de hipótesis como los que se discuten en el Caṕıtulo 7 del curso.Nuestro objetivo, en todos los casos, es calcular el p-valor del contraste, y establecer los ĺımites dela región de rechazo de la hipótesis nula H0.

    2.1. Contrastes para µ y σ en pob. normales, usando R

    Empecemos por los contrastes para la media. Y vamos a suponer que el tamaño de la muestra esgrande. La terminoloǵıa y notación que usaremos está en las Secciones 7.2 y del curso. El esquemadel contraste es este:

    1. Fijamos µ0, y establecemos la hipótesis nula y la alternativa. La forma de las hipótesisdepende de que estemos en un contraste bilateral o unilateral; y en este segundo caso, dependede cuál sea el lado.

    2. Con los datos de la muestra, calculamos el estad́ıstico adecuado. Este es el paso clave.Puede ser útil consultar las tablas del Apéndice B del curso en este paso.

    3

  • 3. Usando pnorm calculamos el p-valor, y usando qnorm calculamos los ĺımites de la región derechazo (aqúı interviene el nivel de significación del contraste).

    Vamos a escribir un programa en R para resolver los ejercicios, t́ıpicos de libro de texto, queson habituales cuando se estudian los contrastes de hipótesis. La parte no mecánica de este tipode ejercicios, la que no podemos programar en R, es aquella en la que analizamos el problemay decidimos el tipo de contraste que vamos a hacer. Casi todo lo demás es programable. Lasdecisiones que hay que tomar durante el proceso que hemos esbozado se pueden implementar através de estructuras condicionales de tipo if-else, como las que hemos visto en la Sección 9 delTutorial05.

    Antes de seguir adelante, recomendamos encarecidamente al lector que repase, en el Caṕıtulo 7 delcurso los Ejemplos 7.2.1, pág. 190, (y sus continuaciones, en la Sección 7.2), y muy especialmenteel Ejemplo 7.4.1 (pág. 202). Y para hacerlo, le proponemos un par de ejercicios.

    Ejercicios:

    1. Calcula con R los p-valores y regiones de rechazo (al 95 %) que aparecen en esos ejemplos.Solo es necesario utilizar pnorm y qnorm, que ya conocemos.

    Te recuerdo los datos. En el Ejemplo 7.2.1, la hipótesis nula es

    H0 = {µ ≤ µ0},

    con µ0 = 2.5. Los datos de la muestra son

    n = 100, X̄ = 2.65, s = 0.5

    En el Ejemplo 7.4.1 todos los datos son iguales, salvo la media muestral, que ahora es

    X̄ = 2.35

    2. Calcula también el p-valor y región de rechazo (95 %) de un contraste (bilateral) para lamedia en una población normal, con hipótesis nula:

    H0 = {µ = µ0},

    siendo µ0 = 3.1. La muestra que se usa para el contraste tiene estos datos:

    n = 250, X̄ = 2.6, s = 2.7

    ¡No sigas, si no has hecho este ejercicio!

    4

  • La experiencia que proporciona ese ejercicio debe ayudar a entender algunas de las decisiones quehay que tomar en un contraste, y que son las que el programa que vamos a describir toma pornosotros. Nosotros (el usuario humano de R) tenemos los datos del problema, y hemos tomado yala decisión del tipo de contraste que vamos a realizar. ¿Cuales son, entones, esas decisiones quetiene que tomar nuestro programa? A partir del tipo de contraste, el programa tiene que decidir siutiliza la cola derecha o izquierda, en el caso de contrastes unilaterales. Si es un contraste bilateral,tiene que calcular el valor absoluto del Estad́ıstico antes de calcular con la cola derecha (aqúı esdonde el Ejemplo 7.4.1 resulta relevante).

    El listado de ese programa, llamado aparece en la Tabla1 (pág. 6). El fichero no funcionará hasta que hayas introducido todos los datos. En particular,debes indicar con un código numérico (de 1 a 3) el tipo de contraste que estamos haciendo. Conesos datos se calcula el p-valor y el ĺımite de la región de rechazo. Es muy conveniente leer una vezdetenidamente el listado de este fichero y practicar su uso con ejemplos, de los que hayamos hecholas cuentas de forma independiente.

    Ficheros R para contrastes sobre los parámetros µ y σ de una población normal

    De la misma forma, usando los métodos del Caṕıtulo 7 del curso se pueden escribir ficheros decomandos R para realizar los contrastes sobre µ y σ en poblaciones normales. Hemos incluidoaqúı esos ficheros. Como hicimos en el caso de los intervalos de confianza, distinguimos entre elcaso en el que disponemos de los estimadores de la muestra (n, X̄, s) y el caso en el que disponemosde todos los datos de la muestra (muestra “en bruto”).

    Contrastes para la media en poblaciones normales (o aprox. normales)

    • Muestra grande o el caso de σ conocida.◦ Estad́ısticos de la muestra:◦ Datos en bruto:

    • Muestra pequeña◦ Estad́ısticos de la muestra:◦ Datos en bruto:

    Contrastes para la varianza o desviación t́ıpica en poblaciones normales (o aprox. normales)

    ◦ Estad́ısticos de la muestra:◦ Datos en bruto:

    Para practicar el uso de estos ficheros, aqúı tienes unos cuantos ejercicios.

    Ejercicios:

    1. Comprueba los cálculos del Ejemplo 7.2.1, pág. 190 del curso.

    2. Utiliza los datos del fichero para contrastar lahipótesis nula H0 = {µ ≤ µ0}, siendo µ0 = 7. Usa un nivel de significación del 95 %. Primeropuedes suponer que σ es conocida, y vale 1.5. Después repite el contraste suponiendo que noconocemos σ. ¿Llegas a la misma conclusión? (Solución en la pág. 8)

    3. Comprueba los cálculos del Ejemplo 7.5.1, página 204 del curso. Ten en cuenta que se hacendos contrastes en ese ejemplo.

    4. Utiliza los datos del fichero para contrastar lahipótesis nula H0 = {µ = µ0}, siendo µ0 = 2.2. Usa un nivel de significación del 95 %.

    5. Comprueba los cálculos del Ejemplo 7.6.1, página 206 del curso.

    6. Usando los datos del fichero , contrasta (al 95 %) la hipóte-sis nula H0 = σ ≥ 0.56. (Solución al final de la Sección 2.2.1)

    5

    ################################################################## Estadistica, Grados Biologia y Bio. Sanitaria UAH 2013/2014## Fichero de instrucciones R para calcular# un contraste de hipotesis para la media de una# poblacion normal N(mu,sigma), a partir de una# muestra con n datos, su media muestral y valor de s o sigma.## El fichero no funcionara si no introduces todos los datos.#################################################################

    ################################################################## CASO: sigma conocida o desconocida, pero muestra grande n>30.################################################################# rm(list=ls())# Numero de elementos en la muestra (n= ) #SE SUPONE QUE LA MUESTRA ES GRANDE, salvo que se conozca sigma# Media muestral (xbar= )# Cuasidesviacion tipica muestral (o sigma, si fuera conocida) (s= ) # Valor a contrastar de la media (aparece en la hipotesis nula) (mu0= ) # ¿Que tipo de contraste estamos haciendo? # Escribe 1 si la HIP. ALTERNATIVA es mu > mu0, 2 si es mu < mu0, 3 si es mu = mu0 TipoContraste = #Nivel de significacion (nSig= ) ################################################ NO CAMBIES NADA DE AQUÍ PARA ABAJO############################################### (alfa=1-nSig)# Calculo del estadistico del contraste (Estadistico=(xbar-mu0)/(s/sqrt(n)))# Funcion para el calculo del p-valor pValor=function(EstadCon,tipoCon){ if(tipoCon==1){ (pV=1-pnorm(EstadCon)) } if(tipoCon==2){ (pV=pnorm(EstadCon)) } if(tipoCon==3){ pV=2*(1-pnorm(abs(EstadCon))) } return(paste("El p-Valor es ",pV,sep="",collapse="")) }# Funcion para el calculo del límite de la región de rechazo RegionRechazo=function(alfa,tipoCon){ if(tipoCon==1){ (regionRech=paste("Valores del Estadistico mayores que ",qnorm(1-alfa)) ) } if(tipoCon==2){ (regionRech=paste("Valores del Estadistico menores que ",qnorm(alfa)) ) } if(tipoCon==3){ (regionRech=paste("Valores del Estadistico mas alejados del origen que ",qnorm(1-alfa/2)) ) } regionRech=paste("La region de rechazo la forman los ",regionRech,sep="",collapse="") return(regionRech) }

    # Y ahora se aplican ambas funciones para mostrar los resultados pValor(Estadistico,TipoContraste) Estadistico RegionRechazo(alfa,TipoContraste)

    ################################################################## Estadistica, Grados Biologia y Bio. Sanitaria UAH 2013/2014## Fichero de instrucciones R para calcular# un contraste de hipotesis para la media de una# poblacion normal N(mu,sigma), a partir de una# muestra con n datos, su media muestral y valor de s o sigma.## El fichero no funcionara si no introduces todos los datos.#################################################################

    ################################################################## CASO: sigma conocida o desconocida, pero muestra grande n>30.################################################################# rm(list=ls())# Numero de elementos en la muestra (n= ) #SE SUPONE QUE LA MUESTRA ES GRANDE, salvo que se conozca sigma# Media muestral (xbar= )# Cuasidesviacion tipica muestral (o sigma, si fuera conocida) (s= ) # Valor a contrastar de la media (aparece en la hipotesis nula) (mu0= ) # ¿Que tipo de contraste estamos haciendo? # Escribe 1 si la HIP. ALTERNATIVA es mu > mu0, 2 si es mu < mu0, 3 si es mu = mu0 TipoContraste = #Nivel de significacion (nSig= ) ################################################ NO CAMBIES NADA DE AQUÍ PARA ABAJO############################################### (alfa=1-nSig)# Calculo del estadistico del contraste (Estadistico=(xbar-mu0)/(s/sqrt(n)))# Funcion para el calculo del p-valor pValor=function(EstadCon,tipoCon){ if(tipoCon==1){ (pV=1-pnorm(EstadCon)) } if(tipoCon==2){ (pV=pnorm(EstadCon)) } if(tipoCon==3){ pV=2*(1-pnorm(abs(EstadCon))) } return(paste("El p-Valor es ",pV,sep="",collapse="")) }# Funcion para el calculo del límite de la región de rechazo RegionRechazo=function(alfa,tipoCon){ if(tipoCon==1){ (regionRech=paste("Valores del Estadistico mayores que ",qnorm(1-alfa)) ) } if(tipoCon==2){ (regionRech=paste("Valores del Estadistico menores que ",qnorm(alfa)) ) } if(tipoCon==3){ (regionRech=paste("Valores del Estadistico mas alejados del origen que ",qnorm(1-alfa/2)) ) } regionRech=paste("La region de rechazo la forman los ",regionRech,sep="",collapse="") return(regionRech) }

    # Y ahora se aplican ambas funciones para mostrar los resultados pValor(Estadistico,TipoContraste) Estadistico RegionRechazo(alfa,TipoContraste)

    ################################################################## Estadistica, Grados Biologia y Bio. Sanitaria UAH 2013/2014## Fichero de instrucciones R para calcular# un contraste de hipotesis para la media de una# poblacion normal N(mu,sigma), a partir de una# muestra con n datos, su media muestral y valor de s o sigma.## El fichero no funcionara si no introduces todos los datos.#################################################################

    ################################################################## CASO: sigma conocida o desconocida, pero muestra grande n>30.################################################################# rm(list=ls())

    # Una posibilidad es que tengas la muestra como un vector. muestra = # sI NO SE USA, ESCRIBE # AL PRINCIPIO DE LA LINEA # Si lees la muestra de un fichero csv: # 1. selecciona el directorio de trabajo # Para eso, escribe el nombre entre las comillas. En RStudio puedes usar el tabulador como ayuda. (setwd(dir="")) # sI NO SE USA, ESCRIBE # AL PRINCIPIO DE LA LINEA

    # 2. Ahora introduce entre las comillas el nombre del fichero, y el tipo de separador, etc.

    muestra = scan(file="",sep=" ",dec=".") # sI NO SE USA, ESCRIBE # AL PRINCIPIO DE LA LINEA

    # Si conoces sigma, pon su valor aqui. # sI NO SE USA, ESCRIBE # AL PRINCIPIO DE LA LINEAsigma =

    # Valor a contrastar de la media (aparece en la hipotesis nula)

    (mu0= ) # ¿Que tipo de contraste estamos haciendo?# Escribe 1 si la HIP. ALTERNATIVA es mu > mu0, 2 si es mu < mu0, 3 si es mu = mu0

    TipoContraste = ##Nivel de significacion (nSig= ) ################################################ NO CAMBIES NADA DE AQUÍ PARA ABAJO############################################### # Numero de elementos en la muestra(n= length(muestra))

    # Media muestral(xbar= mean(muestra))

    # Cuasidesviacion tipica muestral (o sigma, si fuera conocida)# Se usa un if-else y exists() para utilizar el que corresponda.(s= if(exists("sigma")){ sigma }else{ sd(muestra) } )

    (alfa=1-nSig)

    # Calculo del estadistico del contraste (Estadistico=(xbar-mu0)/(s/sqrt(n))) # Funcion para el calculo del p-valor pValor=function(EstadCon,tipoCon){ if(tipoCon==1){ (pV=1-pnorm(EstadCon)) } if(tipoCon==2){ (pV=pnorm(EstadCon)) } if(tipoCon==3){ pV=2*(1-pnorm(abs(EstadCon))) } return(paste("El p-Valor es ",pV,sep="",collapse="")) } # # Funcion para el calculo del límite de la región de rechazo RegionRechazo=function(alfa,tipoCon){ if(tipoCon==1){ (regionRech=paste("Valores del Estadistico mayores que ",qnorm(1-alfa)) ) } if(tipoCon==2){ (regionRech=paste("Valores del Estadistico menores que ",qnorm(alfa)) ) } if(tipoCon==3){ (regionRech=paste("Valores del Estadistico mas alejados del origen que ",qnorm(1-alfa/2)) ) } regionRech=paste("La region de rechazo la forman los ",regionRech,sep="",collapse="") return(regionRech) } # Y ahora se aplican ambas funciones para mostrar los resultados

    pValor(Estadistico,TipoContraste) Estadistico RegionRechazo(alfa,TipoContraste)

    ################################################################## Estadistica, Grados Biologia y Bio. Sanitaria UAH 2013/2014## Fichero de instrucciones R para calcular# un contraste de hipotesis para la media de una# poblacion normal N(mu,sigma), a partir de una# muestra con n datos, su media muestral y valor de s.## El fichero no funcionara si no introduces todos los datos.#################################################################

    ################################################################## CASO: sigma desconocida, muestra pequeña n>30.################################################################# rm(list=ls()) # Numero de elementos en la muestra (n= 24) #SE SUPONE QUE LA MUESTRA ES PEQUEÑA # Media muestral (xbar= 2.15) # Cuasidesviacion tipica muestral (s= 4.54) # Valor a contrastar de la media (aparece en la hipotesis nula) (mu0= 4.78) # ¿Que tipo de contraste estamos haciendo? # Escribe 1 si la HIP. ALTERNATIVA es mu > mu0, 2 si es mu < mu0, 3 si es mu = mu0 TipoContraste = 3 ##Nivel de significacion (nSig= 0.95) ############################################### # NO CAMBIES NADA DE AQUÍ PARA ABAJO ############################################### (alfa=1-nSig)

    (k = n - 1)

    # Calculo del estadistico del contraste (Estadistico=(xbar-mu0)/(s/sqrt(n))) # Funcion para el calculo del p-valor pValor=function(EstadCon,tipoCon){ if(tipoCon==1){ (pV=1-pt(EstadCon, df = k )) } if(tipoCon==2){ (pV=pt(EstadCon, df = k )) } if(tipoCon==3){ pV=2*(1-pt(abs(EstadCon), df = k )) } return(paste("El p-Valor es ",pV,sep="",collapse="")) } # # Funcion para el calculo del límite de la región de rechazo RegionRechazo=function(alfa,tipoCon){ if(tipoCon==1){ (regionRech=paste("Valores del Estadistico mayores que ",qt(1-alfa, df = k)) ) } if(tipoCon==2){ (regionRech=paste("Valores del Estadistico menores que ",qt(alfa, df = k)) ) } if(tipoCon==3){ (regionRech=paste("Valores del Estadistico mas alejados del origen que ",qt(1-(alfa/2), df = k)) ) } regionRech=paste("La region de rechazo la forman los ",regionRech,sep="",collapse="") return(regionRech) } # Y ahora se aplican ambas funciones para mostrar los resultados

    pValor(Estadistico,TipoContraste) Estadistico RegionRechazo(alfa,TipoContraste)

    ################################################################## Estadistica, Grados Biologia y Bio. Sanitaria UAH 2013/2014## Fichero de instrucciones R para calcular# un contraste de hipotesis para la media de una# poblacion normal N(mu,sigma), a partir de una# muestra con n datos, su media muestral y valor de s.## El fichero no funcionara si no introduces todos los datos.#################################################################

    ################################################################## CASO: sigma desconocida, muestra pequeña n mu0, 2 si es mu < mu0, 3 si es mu = mu0

    TipoContraste = # Nivel de significacion (nSig= )

    ################################################ NO CAMBIES NADA DE AQUÍ PARA ABAJO############################################### (alfa=1-nSig)

    # Numero de elementos en la muestra

    (n= length(muestra))

    # Grados de libertad (k = n - 1)

    # Media muestral

    (xbar= mean(muestra))

    # Cuasidesviacion tipica muestral

    (s=sd(muestra))

    # Calculo del estadistico del contraste

    (Estadistico=(xbar-mu0)/(s/sqrt(n))) # Funcion para el calculo del p-valor pValor=function(EstadCon,tipoCon){ if(tipoCon==1){ (pV=1-pt(EstadCon, df = k )) } if(tipoCon==2){ (pV=pt(EstadCon, df = k )) } if(tipoCon==3){ pV=2*(1-pt(abs(EstadCon), df = k )) } return(paste("El p-Valor es ",pV,sep="",collapse="")) } # Funcion para el calculo del límite de la región de rechazo RegionRechazo=function(alfa,tipoCon){ if(tipoCon==1){ (regionRech=paste("Valores del Estadistico mayores que ",qt(1-alfa, df = k)) ) } if(tipoCon==2){ (regionRech=paste("Valores del Estadistico menores que ",qt(alfa, df = k)) ) } if(tipoCon==3){ (regionRech=paste("Valores del Estadistico mas alejados del origen que ",qt(1-(alfa/2), df = k)) ) } regionRech=paste("La region de rechazo la forman los ",regionRech,sep="",collapse="") return(regionRech) } # Y ahora se aplican ambas funciones para mostrar los resultados

    pValor(Estadistico,TipoContraste) Estadistico

    RegionRechazo(alfa,TipoContraste)

    ################################################################## Estadistica, Grados Biologia y Bio. Sanitaria UAH 2013/2014## Fichero de instrucciones R para calcular# un contraste de hipotesis para la VARIANZA de una# poblacion normal N(mu,sigma), a partir de una# muestra con n datos, su media muestral y valor de s o sigma.## El fichero no funcionara si no introduces todos los datos.#################################################################

    rm(list=ls()) # Numero de elementos en la muestra (n= ) # Cuasidesviacion tipica muestral (s= ) # Valor a contrastar de la DESVIACION TIPICA que aparece en la hipotesis nula. # CUIDADO: NO INTRODUZCAS LA VARIANZA POR ERROR (sigma0= ) # ¿Que tipo de contraste estamos haciendo? # Escribe 1 si la HIP. ALTERNATIVA es sigma > sigma0, 2 si es sigma < sigma0, 3 si es sigma = sigma0 TipoContraste = ##Nivel de significacion (nSig= ) ############################################### # NO CAMBIES NADA DE AQUÍ PARA ABAJO ############################################### (alfa=1-nSig)

    # Grados de libertad

    k= n-1

    # Calculo del estadistico del contraste (Estadistico=(n-1)*s^2/sigma0^2 ) # Funcion para el calculo del p-valor

    pValor=function(EstadCon,tipoCon){ if(tipoCon==1){ (pV=1-pchisq(EstadCon, df = k)) } if(tipoCon==2){ (pV=pchisq(EstadCon, df = k)) } if(tipoCon==3){ if(TipoContraste==3){ if(s>sigma0){ pV=2*(1-pchisq(EstadCon,df=k)) }else{ pV=2*(pchisq(EstadCon,df=k)) } } } return(paste("El p-Valor es ",pV,sep="",collapse="")) } # # Funcion para el calculo del límite de la región de rechazo RegionRechazo=function(alfa,tipoCon){ if(tipoCon==1){ (regionRech=paste("Valores del Estadistico mayores que ",qchisq(1-alfa, df = k)) ) } if(tipoCon==2){ (regionRech=paste("Valores del Estadistico menores que ",qchisq(alfa, df = k)) ) } if(tipoCon==3){ (regionRech=paste("Valores del Estadistico mas alejados del origen que ",qchisq(1-alfa/2, df = k)) ) } regionRech=paste("La region de rechazo la forman los ",regionRech,sep="",collapse="") return(regionRech) } # Y ahora se aplican ambas funciones para mostrar los resultados

    pValor(Estadistico,TipoContraste) Estadistico RegionRechazo(alfa,TipoContraste)

    ################################################################## Estadistica, Grados Biologia y Bio. Sanitaria UAH 2013/2014## Fichero de instrucciones R para calcular# un contraste de hipotesis para la VARIANZA de una# poblacion normal N(mu,sigma), a partir de una# muestra con n datos, su media muestral y valor de s o sigma.## El fichero no funcionara si no introduces todos los datos.#################################################################

    rm(list=ls())

    # Una posibilidad es que tengas la muestra como un vector.

    muestra = # sI NO SE USA, ESCRIBE # AL PRINCIPIO DE LA LINEA # Si lees la muestra de un fichero csv: # 1. selecciona el directorio de trabajo # Para eso, escribe el nombre entre las comillas. En RStudio puedes usar el tabulador como ayuda. (setwd(dir="c:/Users//Fernando/Desktop/")) # sI NO SE USA, ESCRIBE # AL PRINCIPIO DE LA LINEA

    # 2. Ahora introduce entre las comillas el nombre del fichero, y el tipo de separador, etc.

    muestra = scan(file="Tut07-Contraste-Varianza-datos.csv",sep=" ",dec=".") # sI NO SE USA, ESCRIBE # AL PRINCIPIO DE LA LINEA

    # Valor a contrastar de la DESVIACION TIPICA que aparece en la hipotesis nula. # CUIDADO: NO INTRODUZCAS LA VARIANZA POR ERROR (sigma0= 0.5) # ¿Que tipo de contraste estamos haciendo? # Escribe 1 si la HIP. ALTERNATIVA es sigma > sigma0, 2 si es sigma < sigma0, 3 si es sigma = sigma0 TipoContraste = 3 # Nivel de significacion (nSig=0.99 ) ############################################### # NO CAMBIES NADA DE AQUÍ PARA ABAJO ############################################### (alfa=1-nSig)

    # Longitud de la muestra

    (n=length(muestra))

    # Cuasidesviacion tipica muestral

    (s=sd(muestra))

    # Grados de libertad

    (k= n-1)

    # Calculo del estadistico del contraste (Estadistico=(n-1)*s^2/sigma0^2 ) # Funcion para el calculo del p-valor

    pValor=function(EstadCon,tipoCon){ if(tipoCon==1){ (pV=1-pchisq(EstadCon, df = k)) } if(tipoCon==2){ (pV=pchisq(EstadCon, df = k)) } if(tipoCon==3){ if(TipoContraste==3){ if(s>sigma0){ pV=2*(1-pchisq(EstadCon,df=k)) }else{ pV=2*(pchisq(EstadCon,df=k)) } } } return(paste("El p-Valor es ",pV,sep="",collapse="")) } # # Funcion para el calculo del límite de la región de rechazo RegionRechazo=function(alfa,tipoCon){ if(tipoCon==1){ (regionRech=paste("Valores del Estadistico mayores que ",qchisq(1-alfa, df = k)) ) } if(tipoCon==2){ (regionRech=paste("Valores del Estadistico menores que ",qchisq(alfa, df = k)) ) } if(tipoCon==3){ (regionRech=paste("Valores del Estadistico mas alejados del origen que ",qchisq(1-alfa/2, df = k)) ) } regionRech=paste("La region de rechazo la forman los ",regionRech,sep="",collapse="") return(regionRech) } # Y ahora se aplican ambas funciones para mostrar los resultados

    pValor(Estadistico,TipoContraste) Estadistico RegionRechazo(alfa,TipoContraste)

    5.68 4.93 7.1 6.9 10.4 7.63 7.22 8.5 11 5.98 9.29 8.25 7.22 8.22 7.18 5.88 5.99 10.8 4.44 9.16 6.68 5.47 5.15 6.09 6.02 9.76 8.15 6.48 5.79 6.59 6.44 3.89 8.3 7.54 6.29 8.27 9.54 7.65 6.74 4.35 10.1 4.64 7.87 5.72 6.54 9.42 8.07 6.55 6.91 5.02 6.95 11.1 4.81 6.75 6.15 6.39 7.76 7.52 9.68 7.78 4.93 7.47 7.08 6.08 5.33 9.15 12 9.98 4.03 9.17 4.97 8.07 8.61 7.51 6.65 6.06 6.21 5.39 7.74 8.63 8.74 6.08 6.14 8.62 6.7 7.21 4.75 8.19 5.58 4.92 8.16 8.93 8.87 10.2 7.2 9.15 7.41 5.59 5.91 6.16 7.11 8.07 8.45 5.68 8.45 7.34 7.41 8.34 4.76 8.28 8.17 5.95 6.35 7.47 6.95 5.79 7.51 5.62 5.59 9.29 9.22 7.06 5.72 8.17 5.77 6.94 7.45 7.21 7.52 8.31 6.81 8.67 6.16 8.27 7.36 6.51 5.35 9.74 10.9 7.76 8.56 7.15 7.33 5.49 6.77 6.48 9.35 6.88 7.79 8.41 5.95 9.31 7.21 8.08 10.8 8.42 10 8.79 6.69 7.81 7.83 8.13 8.1 8.18 5.76 8.99 6.37 6.78 6.51 8.07 7.9 8.68 8.97 6.47 4.27 5.61 6.16 5.08 6.2 7.31 7.35 10.4 7.69 5.83 7.91 8.44 8.31 6.15 7.31 7.84 7.44 6.52 4.97 8.68 7.87 8 5.02 4.8 7.21 8.13 10.3 5.53 6.67 6.52 8.97 6.21 6.16 5.97 5.6 7.41 7.8 5.17 6.55 10.4 5.98 6.88 5.75 6.1 7.1 7.2 10.5 7.21 6.63 8.21 7.11 4.13 6.84 7.84 4.37 6.87 5.85 6.08 4.58 6.96 7.15 7.15 7.12 8.04 7.89 6.16 7.89 6.96 6.79 6.3 8.82 5.05 8.95 6.4 7.77 8.12 5.65 6.45 5.94 6.19 6.53 8.97 7.17 4.45 5.51 6.48 7.29 6.26 7.76 7.4 6.33 7.45 5.76 9.54 6.75 7.12 8.37 7.92 8.88 7.4 6.31 5.83 6.85 5.78 6.43 9.5 4.34 9.44 8.6 8.95 5.22 8.79 7.81 10 6.87 4.59 7.6 6.68 8.44 9.43 8.63 5.24 7.43 8.01 6.56 7.61 6.06 4.38 9.87 5.09 8.94 7.67 9.06 7.57 5.65 6.79 8.31 8.11 6.85 5.91 7.59 8.78 6.14 7.13 2.98 8.41 6.23 8.91 7.66 5.58 5

    1.99 2.12 1.9 2.2 2.23 1.61 2.1 2.05 2.3 1.79 2.02 1.78 1.91 1.85 2.13

    3.95 4.39 3.67 4.68 4.75 2.7 4.34 4.16 5.01 3.29 4.06 3.28 3.7 3.5 4.44 3.94 2.75 3.3 3.03 3.37 3.78 3.87 3.87 3.95 3.59 4.25 3.66 3.99 4.58 4.4 4.12 3.34 3.79 4.25 3.96 3.73 3.87 3.04 4.4 3.38 3.12 3.96 4.52 3.87 4.15 5.12 3.95 4.28 3.78 4.52 4.15 3.94 4.52 4.35 4.27 3.25 3.59 3.58 3.21 4.84 4.96 4 3.23 3.71 3.84 3.69 3.98 3.4 4 3.41 3.98 3.53 3.55 3.35 4.33 4.01 4.2 4.58 3.53 4.31 4.08 3.71 3.95 4.12 4.24 3.45 3.44 3.27 3.97 4.24 3.92 3.63 4.04 3.33 4.54 4.84 4.81 3.17 4.38 4.15 4.34 4.15 4.16 4.05 3.41 3.72 4.13 4.48 4.55 3.03 5.22 4.04 3.18 3.49 3.48 4.31 3.85 3.97 4.03 4.84 3.6 4.3 3.59 3.69 4.25 4.45 4.46 3.61 3.4 3.7 4.14 4.48 3.81 3.6 4.68 3.92 3.86 3.72 3.67 4.28 3.99 3.98 3.66 3.19 4.16 4.59 4.31 4.11 3.25 3.58 3.62 4.67 4.66 4.19 4.75 3.26 3.75 4.41 3.92 3.96 4.29 4.87 3.92 4.75 5.07 4.22 3.69 4.11 3.3 4.97 4.61 3.75 3.66 3.68 3.03 4.09 4.11 3.45 4.51 3.47 3.37 3.17 4.21 4.37 4.4 4.82 3.72 4.48 3.22 4.54 4.34 4.08 3.54 4 4.28 4.7 2.98 3.1 4.78 4.53 4.21 4.39 4.96 2.77 3.74 4.33 4.36 3.71 3.45 3.89 3.85 3.67 4.94 3.84 3.31 5.14 4.49 3.12 3.41 3.9 4.11 3.56 4.15 3.96 3.88 4.34 2.84 3.05 3.55 3.65 2.85 4.3 4.48 3.91 3.51 4.61 4.25 4.26 4.33 3.66 3.06 3.51 4.25 3.31 3.75 3.99 3.64 3.76 4.53 3.79

  • ################################################################## Estadistica , Grados Biologia y Bio. Sanitaria UAH 2013/2014## Fichero de instrucciones R para calcular# un contraste de hipotesis para la media de una# poblacion normal N(mu ,sigma), a partir de una# muestra con n datos , su media muestral y valor de s o sigma.## El fichero no funcionara si no introduces todos los datos.#################################################################

    ################################################################## CASO: sigma conocida o desconocida , pero muestra grande n>30.#################################################################

    rm(list=ls())# Numero de elementos en la muestra

    (n= ) #SE SUPONE QUE LA MUESTRA ES GRANDE , salvo que se conozca sigma# Media muestral

    (xbar= )# Cuasidesviacion tipica muestral (o sigma , si fuera conocida)

    (s= )# Valor a contrastar de la media (aparece en la hipotesis nula)

    (mu0= )# ¿Que tipo de contraste estamos haciendo?

    # Escribe 1 si la HIP. ALTERNATIVA es mu > mu0 , 2 si es mu < mu0 , 3 sies mu = mu0

    TipoContraste =#Nivel de significacion

    (nSig= )

    ################################################ NO CAMBIES NADA DE AQUÍ PARA ABAJO###############################################

    (alfa=1-nSig)# Calculo del estadistico del contraste

    (Estadistico =(xbar -mu0)/(s/sqrt(n)))# Funcion para el calculo del p-valor

    pValor=function(EstadCon ,tipoCon){if(tipoCon ==1){

    (pV=1-pnorm(EstadCon))}if(tipoCon ==2){

    (pV=pnorm(EstadCon))}if(tipoCon ==3){

    pV=2*(1-pnorm(abs(EstadCon)))}return(paste("El p-Valor es ",pV,sep="",collapse=""))

    }# Funcion para el calculo del lı́mite de la región de rechazo

    RegionRechazo=function(alfa ,tipoCon){if(tipoCon ==1){

    (regionRech=paste("Valores del Estadistico mayores que ",qnorm(1-alfa)) )

    }if(tipoCon ==2){

    (regionRech=paste("Valores del Estadistico menores que ",qnorm(alfa)) )

    }if(tipoCon ==3){

    (regionRech=paste("Valores del Estadistico mas alejados del origenque ",qnorm(1-alfa/2)) )

    }regionRech=paste("La region de rechazo la forman los ",regionRech ,sep

    ="",collapse="")return(regionRech)

    }

    # Y ahora se aplican ambas funciones para mostrar los resultadospValor(Estadistico ,TipoContraste)EstadisticoRegionRechazo(alfa ,TipoContraste)

    Tabla 1: Contraste de hipótesis para la media, pob. normal, muestras grandes (o σ conocida), conel fichero

    6

    ################################################################## Estadistica, Grados Biologia y Bio. Sanitaria UAH 2013/2014## Fichero de instrucciones R para calcular# un contraste de hipotesis para la media de una# poblacion normal N(mu,sigma), a partir de una# muestra con n datos, su media muestral y valor de s o sigma.## El fichero no funcionara si no introduces todos los datos.#################################################################

    ################################################################## CASO: sigma conocida o desconocida, pero muestra grande n>30.################################################################# rm(list=ls())# Numero de elementos en la muestra (n= ) #SE SUPONE QUE LA MUESTRA ES GRANDE, salvo que se conozca sigma# Media muestral (xbar= )# Cuasidesviacion tipica muestral (o sigma, si fuera conocida) (s= ) # Valor a contrastar de la media (aparece en la hipotesis nula) (mu0= ) # ¿Que tipo de contraste estamos haciendo? # Escribe 1 si la HIP. ALTERNATIVA es mu > mu0, 2 si es mu < mu0, 3 si es mu = mu0 TipoContraste = #Nivel de significacion (nSig= ) ################################################ NO CAMBIES NADA DE AQUÍ PARA ABAJO############################################### (alfa=1-nSig)# Calculo del estadistico del contraste (Estadistico=(xbar-mu0)/(s/sqrt(n)))# Funcion para el calculo del p-valor pValor=function(EstadCon,tipoCon){ if(tipoCon==1){ (pV=1-pnorm(EstadCon)) } if(tipoCon==2){ (pV=pnorm(EstadCon)) } if(tipoCon==3){ pV=2*(1-pnorm(abs(EstadCon))) } return(paste("El p-Valor es ",pV,sep="",collapse="")) }# Funcion para el calculo del límite de la región de rechazo RegionRechazo=function(alfa,tipoCon){ if(tipoCon==1){ (regionRech=paste("Valores del Estadistico mayores que ",qnorm(1-alfa)) ) } if(tipoCon==2){ (regionRech=paste("Valores del Estadistico menores que ",qnorm(alfa)) ) } if(tipoCon==3){ (regionRech=paste("Valores del Estadistico mas alejados del origen que ",qnorm(1-alfa/2)) ) } regionRech=paste("La region de rechazo la forman los ",regionRech,sep="",collapse="") return(regionRech) }

    # Y ahora se aplican ambas funciones para mostrar los resultados pValor(Estadistico,TipoContraste) Estadistico RegionRechazo(alfa,TipoContraste)

  • 2.2. La función t.test de R (y sus parientes)

    Vamos a ver como usar la función t.test de R (que ya conocimos en la página 7.1 del Tutorial06)para realizar un contraste de hipótesis sobre la media. Usaremos este ejemplo (que apreciará cual-quiera que haya estado parado en un paso a nivel canadiense, esperando a que termine de pasar elmercanćıas de turno).

    Una compañ́ıa ferroviaria canadiense afirma que sus trenes de mercanćıas no bloquean los pasos anivel durante más de 8 minutos, en promedio. Una muestra aleatoria de 10 tiempos de bloqueo diocomo resultado estos valores (en minutos): 10.1, 9.5, 6.5, 8.0, 8.8, 12, 7.2, 10.5, 8.2,9.3 Empezamos por observar que en este caso tenemos todos los valores de la muestra. Si llamamosµ al tiempo medio de bloqueo, queremos usar estos valores para contrastar la hipótesis nula:

    H0 = {µ ≤ µ0 = 8}

    Y naturalmente la hipótesis alternativa es:

    Ha = {µ > µ0 = 8}

    Vamos a fijar un nivel de significación del 95 %, es decir, α = 0.05. Puesto que se trata de unamuestra pequeña (n = 10), usaremos la distribución t de Student para el cálculo del p-valor.Hagamos primero los cálculos del contraste utilizando el fichero

    Tut07-Contraste-Media-UsandoT-DatosEnBruto.R,

    sin recurrir a t.test.

    Ejercicio: Haz esto. Comprueba si obtienes estos valores:

    n = 10, , X̄ ≈ 9.01, s ≈ 1.631938.

    El estad́ıstico del contraste valeX̄ − µ0

    s√n

    ≈ 1.957121.

    Y el p-valor es:pV alor ≈ 0.04101152

    De manera que, con un nivel de significación 0.05 (mayor que el p-valor), tenemos evidencia emṕıricapara rechazar la hipótesis nula y concluir que los trenes bloquean el paso a nivel más tiempo delque dice la empresa. Veamos ahora como hacer este mismo contraste usando t.test (se muestrala salida):

    > datos=c(10.1, 9.5, 6.5, 8.0, 8.8, 12, 7.2, 10.5, 8.2, 9.3)

    > mu0=8

    > t.test(datos,mu=mu0,alternative="greater",conf.level = 0.95)

    One Sample t-test

    data: datos

    t = 1.9571, df = 9, p-value = 0.04101

    alternative hypothesis: true mean is greater than 8

    95 percent confidence interval:

    8.063996 Inf

    sample estimates:

    mean of x

    9.01

    Como se ve, aparte del vector de datos, le hemos indicado a R el valor de µ0 y, mediante lasopciones alternative = c("greater") y conf.level = 0.95, hemos seleccionado un contrastede cola derecha (greater) y el nivel de significación deseado (conf.level, R usa aqúı la mismaterminoloǵıa que para los intervalos de confianza). Si quieres hacer un contraste de otro tipo,

    7

    http://www.youtube.com/watch?v=U_supWFfpDw

  • con la cola izquierda o bilateral, debes usar alternative = c("less") o bien alternative =c("two.sided"), respectivamente.

    La respuesta de R contiene tanto el valor del estad́ıstico de contraste en la forma t = 1.9571,como el p-valor, en p-value = 0.04101. Además, para que la interpretación del resultado seamás fácil, y para que podamos comprobar que estamos haciendo lo que deseamos, R describe lahipótesis alternativa del contraste. Como subproducto se obtiene lo que R llama un intervalo deconfianza. Ten en cuenta, en cualquier caso que nosotros no hemos visto en el curso este caso delos intervalos de confianza unilaterales.

    2.2.1. La libreŕıa TeachingDemos. Contrastes para µ y σ

    Después de conocer t.test seguramente te estarás preguntado ¿y el contraste para la media conla Z, la normal estándar? Lo cierto es que esos contrastes Z son casi exclusivamente “ejemplosde libro de texto”, que no se usan en las aplicaciones reales. Y no se incluyen en R por defecto(¿hemos dicho ya que R no se diseñó pensando en la enseñanza?). Pero eso no significa que no esténdisponibles. Basta con cargar una libreŕıa, cuyo revelador nombre es TeachingDemos (tendrás queinstalarla previamente, claro, sin no se ha hecho previamente), y con eso ya tenemos disponible lafunción z-test, con la que podemos hacer esos contrastes.

    Vamos a usar esa función z-test para hacer el Ejercicio 2 de la página 5 de este tutorial. Parala primera versión, suponemos que σ es conocida y vale 1.5. Recuerda que debes seleccionar comodirectorio de trabajo aquel que contiene el fichero:

    Tut07-Contraste-Media-UsandoT-datos.csvUna vez hecho esto, vamos a mostrar el código que permite realizar el contraste (se muestra tambiénla salida), y a continuación lo comentaremos:

    > muestra = scan(file="Tut07-Contraste-Media-UsandoZ-datos.csv",sep=" ",dec=".")

    Read 325 items

    > z.test(muestra, mu = 7, stdev = 1.5, alternative="greater", conf.level = 0.95)

    One Sample z-test

    data: muestra

    z = 2.457, n = 325.000, Std. Dev. = 1.500, Std. Dev. of the

    sample mean = 0.083, p-value = 0.007006

    alternative hypothesis: true mean is greater than 7

    95 percent confidence interval:

    7.067571 Inf

    sample estimates:

    mean of muestra

    7.204431

    Puedes ver que el p-valor (que es aproximadamente 0.007) permite rechazar H0. Como ves, lallamada a la función z.test incluye el argumento stdev=1.5, que representa el valor de σ, ladesviación t́ıpica de la población, que suponemos conocida. El argumento mu=7 se usa para indicarlea R el valor que nosotros llamamos µ0 en los contrastes.

    Enseguida volveremos con la segunda parte de este ejercicio, en la que se supone que σ es desco-nocida. Pero antes, algunas preguntas sobre este primer cálculo.

    Ejercicios:

    1. En la salida de z.test para este ejemplo se incluye un intervalo de confianza unilateral, quees (7.204431,+∞). ¿Qué relación hay entre este intervalo y la región de rechazo para estetipo de contrastes, que aparece en la Ecuación 7.4 (pág. 195) del curso?

    2. ¿Qué ocurre si (sin tener en cuenta el tamaño de la muestra) haces este contraste usando lat de Student (con el fichero adecuado de la pág. 5)? ¿Qué p-valor obtienes?

    Volvamos a la segunda parte del Ejercicio 2 de la página 5. Ahora ya no suponemos σ conocido

    8

  • y por esa razón tenemos que cambiar la forma en la que llamamos a z.test. La nueva versión esesta:

    > muestra = scan(file="Tut07-Contraste-Media-UsandoZ-datos.csv",sep=" ",dec=".")

    Read 325 items

    > z.test(muestra, mu = 7, sd = sd(muestra), alternative = "greater",conf.level = 0.95)

    One Sample z-test

    data: muestra

    z = 2.4206, n = 325.000, Std. Dev. = 1.523, Std. Dev. of the

    sample mean = 0.084, p-value = 0.007747

    alternative hypothesis: true mean is greater than 7

    95 percent confidence interval:

    7.065517 Inf

    sample estimates:

    mean of muestra

    7.204431

    en la que, como puedes ver, hemos cambiado el argumento stdev = 1.5 por sd = sd(muestra),indicándole a la R que utilice la cuasidesviación t́ıpica muestral en lugar de σ. El p-valor esligeramente distinto, claro, pero no tanto como para suponer un cambio en nuestra decisión derechazar H0.

    Como hemos visto, la función z.test trabaja a partir de un vector de datos. Si lo que tenemosson los estimadores (o descriptores) de una muestra, como n, X̄, s, entonces debemos utilizar elmétodo que vimos en la página 27 del Tutorial06, basado en la función mvrnorm.

    Para terminar con esta visita a la libreŕıa TeachingDemos, vamos a presentar la función sigma.testque, como su nombre sugiere, sirve para realizar un contraste de hipótesis sobre la desviación t́ıpicaσ de una población normal.

    En el siguiente fragmento de código R hemos usado esta libreŕıa para obtener el contraste que seped́ıa en el Ejercicio 6 de la página 5.

    > muestra = scan(file="Tut07-Contraste-Varianza-datos.csv",sep=" ",dec=".")

    Read 250 items

    > sigma.test(muestra,sigma=0.56,alternative="less",conf.level=0.95)

    One sample Chi-squared test for variance

    data: muestra

    X-squared = 214.4613, df = 249, p-value = 0.05531

    alternative hypothesis: true variance is less than 0.3136

    95 percent confidence interval:

    0.0000000 0.3150632

    sample estimates:

    var of muestra

    0.2701007

    El modo de usar de la función sigma.test, como ves, es muy fácil de entender. La única precauciónque debemos tener es la de utilizar el argumento sigma= cuando la hipótesis está formulada entérminos de la desviación t́ıpica, mientras que se usa sigmasq= cuando es la varianza σ20 la queaparece en las hipótesis del contraste. Por ejemplo, se obtiene exactamente el mismo resultado deantes si se usa esta otra versión:

    sigma.test(muestra,sigmasq=0.56^2,alternative="less",conf.level=0.95)

    2.2.2. La libreŕıa asbio

    En el Tutorial06 también aprendimos a usar la libreŕıa asbio para obtener intervalos de confianza.Esa libreŕıa incluye, además, funciones para algunos de los contrastes de hipótesis que estamosviendo. Concretamente, se incluyen las dos funciones:

    9

  • one.sample.z, para contrastes sobre µ usando Z.

    one.sample.t, para contrastes sobre µ usando la t de Student.

    Vamos a dejar que el lector explore estas dos funciones por si mismo. Una ventaja de estas funcionesde asbio es que son capaces de funcionar tanto con datos en bruto, como con los valores de n, X̄y s.

    Ejercicios:

    1. Lee la descripción de estas dos funciones en la ayuda de la libreŕıa asbio.

    2. Úsalas para volver a hacer los ejercicios 1 a 4 de la pág. 27.

    2.3. Contrastes de hipótesis (una población) usando otros programas

    Calc: desaconsejamos su uso

    Empecemos por lo más fácil. Calc no incluye funciones para realizar los contrastes que hemos visto,no en el sentido de que sean mı́nimamente comparables con lo que podemos hacer en R. Existendos funciones, PRUEBA.T y PRUEBA.Z, pero sólo las mencionamos para recomendar al lector que nogaste demasiado tiempo tratando de aprender a usarlas: son muy limitadas. Las últimas versionesde otras hojas de cálculo más sofisticadas, como Microsoft Office 2013, incluyen algunas funcionesadicionales para estos contrastes. Pero estas tareas se realizan con mucha más facilidad usandosoftware estad́ıstico como R.

    Wolfram Alpha. Para µ, σ y proporción p

    Por contra, Wolfram Alpha es capaz de realizar muchos de estos contrastes, con una sintaxisbastante sencilla. Prueba a utilizar el comando:

    z-test for population mean

    y llegarás a un cuadro de diálogo en el que puedes introducir los valores concretos de la muestra,como puedes ver en la Figura 1, en la que hemos usado los valores del Ejemplo 7.2.1 del curso.

    Por supuesto, también existe una interfaz similar para el contraste basado en la t de Student, queencontrarás usando:

    t-test for population mean

    No he encontrado información sobre una implementación equivalente para el contraste de hipótesissobre σ, usando χ2. Naturalmente, es posible usar Wolfram Alpha para calcular la probabilidadde una cola de la distribución χ2, como en este ejemplo donde el comando:

    P[X>23] for X chi-squared with 20 dof

    permite calcular la probabilidad P (χ220 > 23), como se ve en la Figura 2. A partir de aqúı, elcálculo de p-valores es fácil, aunque más laborioso, claro.

    Finalmente, si lo que deseamos es hacer un contraste sobre la proporción, podemos usar el comando

    proportion hypothesis test

    para llegar a un interfaz en el que introducir los valores necesarios para el contraste.

    10

  • Figura 1: Wolfram Alpha para un contraste de hipótesis sobre la media.

    11

  • Figura 2: Wolfram Alpha para cálculos de probabilidad con χ2.

    Figura 3: Wolfram Alpha para un contraste de hipótesis sobre la proporción.

    12

  • 3. Variables cualitativas (factores) en R

    En los últimos caṕıtulos del curso, y en los tutoriales precedentes, nuestro trabajo se ha centradoen el análisis de valores de variables cuantitativas; es decir, números. Pero sabemos que a veces esnecesario trabajar con variables cualitativas, que también hemos llamado factores (y sus valoresse llaman niveles). Y de hecho esas variables van a tener un papel protagonista en varios de loscaṕıtulos de la cuarta parte del curso.

    Recuerda que una variable cualitativa se usa para establecer clasificaciones nominales en los datos.Por ejemplo, la clasificación en hombre o mujer entre los pacientes que siguen un cierto tratamiento.O la clasificación taxonómica por especies.

    Es cierto que siempre podŕıamos codificar las variables cualitativas mediante números. Pero noes menos cierto que lo más cómodo (y prudente) es poder utilizar nombres como valores de lasvariables. Ya hemos visto (en la Sección 4 del Tutorial04) que R nos permite crear un cierto tipode valores, concretamente los valores de tipo character, que son simplemente palabras o frasesentrecomilladas (en general las llamamos cadenas de texto). Recomendamos una relectura rápidade esa Sección antes de seguir adelante.

    Por ejemplo, este vector podŕıa representar el género de los diez pacientes que se han sometido aun cierto tratamiento:

    pacientesPorGenero=c("mujer","mujer","hombre","mujer","hombre","hombre","hombre",

    "mujer","mujer","mujer")

    class(pacientesPorGenero)

    Cuando ejecutes este código,obtendrás como último resultado

    > class(pacientesPorGenero)

    [1] "character"

    Es decir, que los elementos del vector pacientesPorGenero son, para R, de tipo character. Esees el tipo de dato que se utiliza en R para representar los valores de una variable cualitativa.Naturalmente, si intentas realizar operaciones numéricas con ese vector, como estas,

    pacientesPorGenero^2

    mean(pacientesPorGenero)

    R te obsequiará con un surtido de insultos más o menos ofensivos en la consola de comandos. Enel segundo caso (el intento fallido de calcular la media), el valor que devuelve R es interesante: seobtiene NA, que es el valor que R devuelve cuando un resultado numérico es imposible de calcular,o no está disponible (Not Available, de ah́ı el nombre).

    Queremos recordar también, que en el Tutorial04 vimos que los data frames de R son las es-tructuras de datos adecuadas para representar tablas en las que se mezclan datos cuantitativos ycualitativos (las matrices, sin embargo, almacenan datos que son todos del mismo tipo).

    3.1. Factores

    Una situación frecuente en Estad́ıstica es esta: hemos medido una serie de valores de una variablecuantitativa X (es decir, los valores de X son números), pero esos valores aparecen agrupados demanera natural. Por ejemplo, cuando estamos midiendo la respuesta X (un número) de una seriede pacientes frente a varios tratamientos, es evidente que lo natural es agrupar los resultados segúnel tratamiento empleado. Una manera de hacer esto, en R, es usar un data.frame que contenga losvalores de X, junto con los valores de una variable que indique el tipo de tratamiento empleado.Vamos a llamar

    T1, T2, . . . , Tk

    a los distintos tratamientos. La terminoloǵıa estándar en Estad́ıstica (que ya vimos en la Sección1.1.1, pág. 5 del curso) consiste en decir que el tratamiento T es un factor, y que sus valoresT1, . . . , Tk son los niveles del factor. Podŕıamos entonces pensar en recoger los resultados en un

    13

  • fichero de datos como el fichero adjunto, . Abre el fichero primero en uneditor de texto (como el Bloc de Notas, en Windows), para hacerte una idea de su estructura.

    Podŕıamos trabajar directamente con los nombres de los tratamientos, usando en R variables detipo character para los factores. Pero eso tendŕıa un impacto negativo en el rendimiento de R,porque manejar esas cadenas de caracteres consume muchos recursos de memoria y tiempo delprocesador. Y, dado que los factores son omnipresentes en Estad́ıstica, los creadores de R hanoptado por incluir un tipo especial de datos, el tipo factor, para representar los factores y susniveles.

    De hecho, si leemos un fichero como el anterior usando read.table (que también vimos en elTutorial04), el comportamiento por defecto de R es convertir las variables cualitativas en factores.Vamos a ver esto en funcionamiento. Asegúrate de haber seleccionado el directorio de trabajoadecuado (el que contiene el fichero csv) y ejecuta estos comandos:

    experimento=read.table(file="Tut07-Tratamiento-01.csv",header =T, sep=" ")

    class(experimento$Respuesta)

    class(experimento$Tratamiento)

    Lo que hemos hecho aqúı es guardar el contenido del fichero en un data.frame llamado experimento,con dos campos, cuyos tipos hemos mostrado usando class:

    experimento$Respuesta, de tipo numérico que almacena los valores de la variable X (larespuesta individual de cada uno de los pacientes).

    experimento$Tratamiento, de tipo factor que almacena los valores de la variable T (el tipode tratamiento empleado).

    Recuerda que, para acceder a las distintas variables de un data.frame (piensa en ellas como lascolumnas de una tabla), utilizamos la notación $, entre el nombre del data.frame y el de lavariable.

    En R puedes ver (en una ventana nueva) el contenido del data.frame experimento usando elcomando

    View(experimento)

    Esto es especialmente interesante cuando el data.frame es muy grande, y verlo en la consola noresulta práctico.

    14

    "Respuesta" "Tratamiento"5.25 "T1"5.06 "T1"5.04 "T4"4.92 "T1"3.08 "T2"5.04 "T5"5.39 "T5"2.6 "T2"5.13 "T5"3.14 "T2"5.41 "T3"5.37 "T1"4.92 "T5"4.87 "T3"5.68 "T3"5.04 "T4"5.1 "T1"6.06 "T4"5.16 "T1"4.56 "T5"5.52 "T4"5.34 "T3"4.4 "T4"4.91 "T4"5.06 "T1"4.44 "T4"4.7 "T1"3.36 "T2"5.71 "T3"4.94 "T5"5.34 "T5"5.79 "T4"3.31 "T2"4.52 "T4"4.86 "T4"4.99 "T5"5.25 "T1"5.24 "T3"5.06 "T3"4.92 "T1"4.52 "T3"3.83 "T2"3.18 "T2"

  • ¿Cómo se usan los factores en R? La contestación, en este tutorial, no puede ser completa, porquelos factores son un ingrediente clave del lenguaje de R, e intervienen en much́ısimas construccionesdel sistema. Pero, en cualquier caso, podemos empezar por lo más sencillo. ¿Qué aspecto tiene unvector de tipo factor? En el caso del data.frame experimento que acabamos de crear, al mostrarel vector experimento$Tratamiento se obtiene esto:

    > View(experimento)

    > experimento$Tratamiento

    [1] T1 T1 T4 T1 T2 T5 T5 T2 T5 T2 T3 T1 T5 T3 T3 T4 T1 T4 T1 T5 T4 T3 T4

    [24] T4 T1 T4 T1 T2 T3 T5 T5 T4 T2 T4 T4 T5 T1 T3 T3 T1 T3 T2 T2

    Levels: T1 T2 T3 T4 T5

    Como se ve, R muestra el contenido del vector, junto con sus niveles. Si sólo queremos mostrar losniveles del factor, podemos usar la función levels, cuya salida es esta:

    > levels(experimento$Tratamiento)

    [1] "T1" "T2" "T3" "T4" "T5"

    ¿Qué significan esas comillas? Para entenderlo, es preciso conocer la diferencia que hay entre elvector experimento$Tratamiento y un vector de tipo character con el mismo contenido. Podemosapreciar la diferencia pidiendo a R que convierta el factor en character mediante la funciónas.character:

    > as.character(experimento$Tratamiento)

    [1] "T1" "T1" "T4" "T1" "T2" "T5" "T5" "T2" "T5" "T2" "T3" "T1" "T5"

    [14] "T3" "T3" "T4" "T1" "T4" "T1" "T5" "T4" "T3" "T4" "T4" "T1" "T4"

    [27] "T1" "T2" "T3" "T5" "T5" "T4" "T2" "T4" "T4" "T5" "T1" "T3" "T3"

    [40] "T1" "T3" "T2" "T2"

    Las comillas que aparecen en este caso indican precisamente que se trata de un vector de tipocharacter. Aunque los factores representan variables cualitativas, R los gestiona internamentemediante códigos numéricos. Al mostrarlos, a petición nuestra, el uso de las comillas permitedistinguir entre character (con comillas) y factor (sin comillas).

    Como hemos dicho, cuando R usa una función como read.table para cargar un data.frame, loscampos alfanuméricos (que contienen cadenas de texto, como el campo tratamientos de nuestroejemplo) se convierten, por defecto en factores. Pero puede que, a veces, queramos preservar esosdatos como variables de tipo character. Si es eso lo que queremos, basta con usar la opciónstringsAsFactors=FALSE en la función read.table.

    3.2. Usando los factores para explorar los datos

    Los factores permiten modular el comportamiento de algunas funciones de R, de manera que lainformación que se obtiene tiene en cuenta esa organización en niveles de los valores que estamosanalizando. Por ejemplo, en la Sección 5 del Tutorial03 vimos como usar la función summary deR para obtener un resumen descriptivo de un vector de datos (media y percentiles, básicamente).Ahora, que tenemos un data.frame con una clasificación por tratamientos, nos gustaŕıa segu-ramente obtener esa misma información, pero para cada uno de los distintos tratamientos porseparado. Lo primero que queremos hacer notar es que no sirve aplicar summary directamente aldata.frame:

    > summary(experimento)

    Respuesta Tratamiento

    Min. :2.600 T1:10

    1st Qu.:4.540 T2: 7

    Median :5.040 T3: 8

    Mean :4.791 T4:10

    3rd Qu.:5.250 T5: 8

    Max. :6.060

    15

  • Como se ve, se obtiene un resumen por separado para cada uno de los campos del data.frame,con Respuesta por un lado, y Tratamiento por otro, sin reconocer el v́ınculo entre ambas. Na-turalmente, puesto que ya hemos aprendido a seleccionar los elementos de un vector mediantecondiciones (usando los corchetes [ ]), podemos ir separando cada uno de los grupos de trata-miento, y aplicarles la función summary a los vectores resultantes. Seŕıa algo como esto (mostramos,por ejemplo el segundo grupo de tratamiento):

    > (tratamiento2=experimento[experimento$Tratamiento=="T2",1])

    [1] 3.08 2.60 3.14 3.36 3.31 3.83 3.18

    > summary(tratamiento2)

    Min. 1st Qu. Median Mean 3rd Qu. Max.

    2.600 3.110 3.180 3.214 3.335 3.830

    Esto funciona, pero como se puede apreciar, trabajar aśı es engorroso. Para obtener lo que que-remos, hay una manera mucho más natural de proceder, usando la función tapply. Veamos co-mo funciona (primero hemos usado attach para poder referirnos a las variables Respuesta yTratamiento sin tener que usar el $):

    > attach(experimento)

    > tapply(Respuesta,Tratamiento, summary)

    $T1

    Min. 1st Qu. Median Mean 3rd Qu. Max.

    4.700 4.955 5.080 5.079 5.228 5.370

    $T2

    Min. 1st Qu. Median Mean 3rd Qu. Max.

    2.600 3.110 3.180 3.214 3.335 3.830

    $T3

    Min. 1st Qu. Median Mean 3rd Qu. Max.

    4.520 5.012 5.290 5.229 5.478 5.710

    $T4

    Min. 1st Qu. Median Mean 3rd Qu. Max.

    4.400 4.605 4.975 5.058 5.400 6.060

    $T5

    Min. 1st Qu. Median Mean 3rd Qu. Max.

    4.560 4.935 5.015 5.039 5.182 5.390

    Ahora śı: como ves, R ha reconocido esa estructura en niveles del factor Tratamiento, y no está des-cribiendo la variable Respuesta para cada uno de los grupos de tratamiento que conforman nuestrosdatos. El resultado es una tabla (de ah́ı la t inicial de tapply) que contiene, ordenados por filas, losresultados de aplicar la función summary a los valores de Respuesta, agrupadas según los distintosniveles del factor Tratamiento.

    Otro ejemplo de las ventajas del lenguaje de factores se obtiene al pensar en la función boxplot.Si aplicamos esa función directamente al data.frame, ejecutando:

    boxplot(experimento)

    se obtiene un gráfico que es, de hecho un sinsentido:

    16

  • Para obtener lo que queremos basta con escribir:

    boxplot(Respuesta~Tratamiento)

    y el resultado es un gráfico mucho más adecuado para comparar los resultados de los tratamientos:

    La sintaxis Respuesta~Tratamiento que hemos usado por primera vez en esta llamada, es laque usa R para decir algo aśı como “la forma en que los valores de Respuesta dependen de lostratamientos”. En general, en R, el śımbolo ~ se utiliza para indicar una dependencia o relaciónentre variables (lo obtienes, en un teclado estándar de PC, pulsando las teclas AltGr y 4 a lavez). En este caso, lo que estamos estudiando es si hay alguna relación entre la variable cualitativa(factor) Tratamiento, y la variable cuantitativa Respuesta. En particular, una pregunta que amenudo nos interesa consiste en saber si la respuesta media al tratamiento es distinta según elgrupo de tratamiento que se considere.

    Este tipo de problemas, en los que se investiga la relación entre varias variables aleatorias (dedistintos tipos), forman el contenido de la cuarta parte del curso, y por eso estamos empezando apreparar el terreno en este tutorial.

    17

  • 3.3. La función cut

    Otra de las primeras funciones de R que se aprenden al comenzar a trabajar con factores es lafunción cut, cortar en inglés. Y el nombre describe muy bien lo que hace esta función que se usapara cortar en piezas los datos de una variable cuantitativa, con el fin de agruparlos en clases ointervalos, como discutimos en la Sección 1.1.3 del Caṕıtulo 1 del curso.

    Por ejemplo, en el fichero adjunto contiene las edades, en años, de un grupo depersonas. Imaǵınate que queremos agrupar esos datos, según la edad, en estas categoŕıas:

    Menores, con edades menores que 18 años,

    Jovenes, con edades entre 18 y 30 años,

    MedianaEdad, con edades entre 31 y 64 años,

    Mayores, con edades de 65 años en adelante.

    Vamos a ver como usar cut para hacer eso en R. Primero leemos el fichero, que debe estar en eldirectorio de trabajo, y lo guardamos en un vector de datos, llamado edades, al que aplicaremosla función cut.

    edades=scan(file="Tut07-Edades.csv")

    Pero antes de cortar, tenemos que pensar bien donde vamos a dar los cortes. Los intervalos que Rusa, en la función cut, son, por defecto, de la forma (a, b], incluyendo el ĺımite derecho pero no elizquierdo (esto se puede cambiar). Eso implica que so hacemos una elección poco cuidadosa de lospuntos de corte, como en:

    cortesEdad=c(0,18,30,65,100)

    terminaremos con un intervalo de edades como 18 < edad ≤ 30, que no se corresponde con loque queremos, porque no incluye a las personas de 18 años. Algo parecido sucede con el intervalo30 < edad ≤ 65, que no es lo que queremos porque incluye a las personas de 65 años. Una elecciónalgo más meditada nos conduce a:

    cortesEdad=c(0,17,30,64,100)

    Esto está casi bien, pero aún tenemos un problema. Para descubrirlo haz este:

    Ejercicio

    ¿Cuáles son los intervalos (a, b] determinados por este segundo vector cortesEdad?

    ¡No sigas, si no has hecho este ejercicio!

    18

    16 59 27 32 45 59 8 38 80 61 86 56 70 47 15 33 92 16 25 38 54 11 42 60 36 21 35 63 60 38 56 49 63 52 66 55 41 52 100 60 68 97 42 17 73 26 62 18 41 31 3 68 33 58 42 15 37 64 79 38 11 39 24 29 8 12 31 52 16 49 34 33 25 6 74 53 59 26 64 36 54 69 23 71 70 39 32 91 15 18 76 81 50 14 60 13 65 34 16 64 91 14 44 57 99 39 63 6 65 65 71 56 24 63 38 24 11 55 41 71 10 24 54 21 47 42 4 6 16 44 92 47 74 65 34 15 83 37 37 65 8 28 68 39 28 43 74 61 65 60 7 58 13 30 36 68 65 29 15 17 46 51 9 81 5 11 13 52 76 35 67 63 57 34 31 82 59 20 43 39 71 28 19 35 50 65 76 32 50 49 50 47 50 46 64 27 29 28 55 49 59 71 53 88 50 5 30 62 30 60 59 69 63 67 40 47 68 51 28 12 15 54 68 21 59 46 71 12 63 36 13 32 63 55 12 46 78 27 55 85 46 77 14 8 21 36 68 48 13 90 65 6 73 55 16 57 30 48 72 10 53 17 4 7 36 35 8 86 33 100 80 71 74 63 41 42 26 95 39 65 11 36 6 62 28 42 19 45 60 54 22 40 19 50 22 63 47 16 4 36 14 63 46 23 20 69 32 74 67 27 10 35 21 41 89 44 62 37 34 65 31 43 30 61 56 0 40 60 9 79 65 31 77 6 72 71 78 35 38 74 23 13 36 45 70 17 34 35 20 89 19 75 42 65 55 98 11 55 37 53 49 75 47 84 16 41 76 16 34 86 10 28 4 30 53 47 63 18 63 56 55 79 56 80 24 60 51 56 45 80 49 86 30 91 58 17 26 19 57 59 50 21 57 13 68 43 34 57 60 61 52 61 42 49 63 46 74 61 1 44 4 82 42 41 35 97 32 31 4 83 59 86 29 52 40 44 57 79 5 40 58 39 49 55 86 16 64 54 10 59 36 42 61 48 7 35 2 27 66 49 44 65 34 65 93 40 33 37 76 37 38 39 18 52 47 13 60 55 75 43 55 16 2 6 30 79 22 62 31 85 13 94 20 55 60 81 16 80 90 76

  • Como habrás podido ver, el primer intervalo es (0, 17]. Eso significa que si alguna de las edadeses 0 (como, de hecho, sucede), no quedará incluida en ese intervalo. Para evitar ese problema, lafunción cut dispone de una opción, include.lowest=TRUE, que permite cerrar a la izquierda elprimero de los intervalos. Con eso estamos listos para usar la función cut:

    factorEdad = cut(edades, breaks=cortesEdad, include.lowest=TRUE)

    El resultado, que hemos guardado en la variable factorEdad es un vector, de tipo factor (pue-des usar class(factorEdad) para comprobarlo), que contiene, para cada elemento de edades elintervalo de edades (nivel del factor) al que pertenece. Para que lo veas con más claridad, vamosa ver, juntos, los primeros elementos de los vectores edades y factorEdad, usando head:

    > head(edades)

    [1] 62 89 13 15 36 17

    > head(factorEdad)

    [1] (30,64] (64,100] [0,17] [0,17] (30,64] [0,17]

    Levels: [0,17] (17,30] (30,64] (64,100]

    Como ves, en cada posición de factorEdad está el intervalo de edades (nivel del factor) al quepertenece el correspondiente elemento de edades. F́ıjate en que el intervalo del primer elemento es[0,17], cerrado en ambos extremos.

    Además, R nos recuerda al final el conjunto de nombres de los valores (niveles) que puede tomarel factor. Ese conjunto de valores de un factor se puede obtener usando la función levels aśı:

    > levels(factorEdad)

    [1] "[0,17]" "(17,30]" "(30,64]" "(64,100]"

    Hemos dicho que estos son los nombres de los niveles, para recordar que, internamente, R utilizacódigos numéricos para trabajar con los niveles. Por eso es bueno usar una palabra como etiquetaspara referirse a esos nombres (como en inglés, donde se usa labels).

    A menudo sucede que queremos cambiar estas etiquetas, para reemplazarlas con otras más útilespara nosotros. La forma de hacerlo, en este ejemplo, es esta:

    levels(factorEdad)=c("menor","joven","medianaEdad","mayor")

    Ahora, si pruebas a ejecutar de nuevo head(factorEdad), verás el efecto que ha tenido ese cambio.Para lo que resta de trabajo, vamos a devolver al factor a sus etiquetas iniciales, que son másconcisas:

    levels(factorEdad)=c("[0,17]", "(17,30]", "(30,64]", "(64,100]")

    Podemos, con ayuda del factor, obtener muy fácilmente una tabla de frecuencias de las edades (semuestra la salida):

    > table(factorEdad)

    factorEdad

    [0,17] (17,30] (30,64] (64,100]

    63 79 230 128

    y los resúmenes (summary) o boxplots por niveles, etc., que ya hemos visto antes.

    Muchas gracias por la atención.

    19

    Intervalos de confianza para una proporción binomialCon RCon otros programas

    Contraste de hipótesis (una población).Contrastes para y en pob. normales, usando RLa función t.test de R (y sus parientes)Contrastes de hipótesis (una población) usando otros programas

    Variables cualitativas (factores) en RFactoresUsando los factores para explorar los datosLa función cut