-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy path42_IC.Rmd
392 lines (274 loc) · 19.8 KB
/
42_IC.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
# Intervalos de confianza {#ic}
En este capítulo se muestran las funciones que hay disponibles en R para construir intervalos de confianza para:
1. la media $\mu$ de una población normal,
2. la proporción $p$,
3. la varianza $\sigma^2$ de una población normal,
4. la diferencia de medias $\mu_1-\mu_2$ de dos poblaciones normales independientes,
4. la diferencia de medias $\mu_1-\mu_2$ con muestras pareadas,
5. la diferencia de proporciones $p_1 - p_2$,
6. la razón de varianzas $\sigma_1^2 / \sigma_2^2$ de poblaciones normales.
Para ilustrar el uso de las funciones se utilizará la base de datos __medidas del cuerpo__ presentada en el Capítulo \@ref(central).
## Función `t.test`
La función `t.test` se usa para calcular intervalos de confianza para la media y para diferencia de medias, con muestras independientes y con muestras dependientes (o pareadas). La función y sus argumentos son los siguientes:
```{r, eval=FALSE}
t.test(x, y=NULL,
alternative=c("two.sided", "less", "greater"),
mu=0, paired=FALSE, var.equal=FALSE,
conf.level=0.95, ...)
```
### Intervalo de confianza bilateral para la media $\mu$
Para calcular intervalos de confianza bilaterales para la media a partir de la función `t.test` es necesario definir 2 argumentos:
- `x`: vector numérico con los datos.
- `conf.level`: nivel de confianza a usar, por defecto es 0.95.
Los demás argumentos se usan cuando se desea obtener intervalos de confianza para diferencia de media con muestras independientes y dependientes (o pareadas).
### Ejemplo {-}
Suponga que se quiere obtener un intervalo de confianza bilateral del 90% para la altura promedio de los hombres de la base de datos __medidas del cuerpo__.
*Solución*
Para calcular el intervalo de confianza, primero se carga la base de datos usando la url apropiada, luego se crea un subconjunto de `datos` y se aloja en el objeto `hombres` como sigue a continuación:
```{r}
url <- 'https://raw.githubusercontent.com/fhernanb/datos/master/medidas_cuerpo'
datos <- read.table(file=url, header=TRUE)
hombres <- datos[datos$sexo=="Hombre", ]
```
Una vez leídos los datos, se analiza la normalidad de la variable altura de los hombres, a partir de un QQplot y un histograma
```{r ic1, fig.cap='QQplot e histograma para la altura de los hombres.', fig.asp=0.5, fig.width=8, message=FALSE}
par(mfrow=c(1, 2))
require(car) # Debe instalar antes el paquete car
qqPlot(hombres$altura, pch=19, id=FALSE,
main='QQplot para la altura de hombres',
xlab='Cuantiles teóricos',
ylab='Cuantiles muestrales')
hist(hombres$altura, freq=TRUE,
main='Histograma para la altura de hombres',
xlab='Altura (cm)',
ylab='Frecuencia')
```
En la Figura \@ref(fig:ic1) se muestra el QQplot e histograma para la variable altura, de estas figuras no se observa un claro patrón normal, sin embargo, al aplicar la prueba Shapiro-Wilk a la muestra de alturas de los hombres se obtuvo un valor-P de `r round(shapiro.test(hombres$altura)$p.value, 4)`, por lo tanto, se asume que la muestra de alturas provienen de una población normal.
Una vez chequeado el supuesto de normalidad se puede usar la función `t.test` sobre la variable de interés para construir el intervalo de confianza. El resultado de usar `t.test` es una lista, uno de los elementos de esa lista es justamente el intevalo de confianza y para extraerlo es que se usa `$conf.int` al final de la instrucción. A continuación se muestra el código utilizado.
```{r}
res <- t.test(x=hombres$altura, conf.level=0.90)
res$conf.int
```
A partir del resultado obtenido se puede concluir, con un nivel de confianza del 90%, que la altura promedio de los estudiantes hombres se encuentra entre 176.4 cm y 181.7 cm.
```{block2, type="rmdnote"}
La función `t.test` entrega como resultado un objeto de la clase "htest" con diez elementos: statistic, parameter, p.value, conf.int, estimate, null.value, stderr, alternative, method y data.name. Como estamos en Intervalos de Confianza, necesitamos sólo la información del intervalo, por esa razón le colocamos `$conf.int` al final del objeto `res` para obtener sólo el resultado del intervalo de confianza.
```
### Intervalo de confianza bilateral para la diferencia de medias ($\mu_1-\mu_2$) de muestras independientes {#ICDifMed}
Para construir intervalos de confianza bilaterales para la diferencia de medias ($\mu_1-\mu_2$) de muestras independientes se usa la función `t.test` y es necesario definir 5 argumentos:
- `x`: vector numérico con la información de la muestra 1.
- `y`: vector numérico con la información de la muestra 2.
- `paired=FALSE`: indica que el intervalo de confianza se hará para muestras independientes, en el caso de que sean dependientes (o pareadas) este argumento será `paired=TRUE`.
- `var.equal=FALSE`: indica que las varianzas son desconocidas y diferentes, si la varianzas se pueden considerar desconocidas e iguales se coloca `var.equal=TRUE`.
- `conf.level`: nivel de confianza.
### Ejemplo {-}
Se quiere saber si existe diferencia estadísticamente significativa entre las alturas de los hombres y las mujeres. Para responder esto se va a construir un intervalo de confianza del $95\%$ para la diferencia de las altura promedio de los hombres y de las mujeres ($\mu_{hombres}-\mu_{mujeres}$).
*Solución*
Para construir el intervalo de confianza, primero se carga la base de datos usando la url apropiada, luego se crean dos subconjuntos de datos y se alojan en los objetos `hombres` y `mujeres` como sigue a continuación:
```{r}
url <- 'https://raw.githubusercontent.com/fhernanb/datos/master/medidas_cuerpo'
datos <- read.table(file=url, header=TRUE)
hombres <- datos[datos$sexo=="Hombre", ]
mujeres <- datos[datos$sexo=="Mujer", ]
```
Una vez leídos los datos, se analiza la normalidad de la variable altura de los hombres y las mujeres, a partir de un QQplot y un histograma
```{r ic2, fig.cap='QQplot e histograma para la altura de hombres y mujeres.', fig.asp=0.9, fig.width=8}
par(mfrow=c(2,2))
library(car) # Debe instalar antes el paquete car
qqPlot(hombres$altura, pch=19, las=1, id=FALSE,
main='QQplot altura hombres',
xlab='Cuantiles teóricos',
ylab='Cuantiles muestrales')
hist(hombres$altura, las=1,
main='Histograma altura hombres',
xlab='Altura',
ylab='Frecuencia')
qqPlot(mujeres$altura, pch=19, las=1, id=FALSE,
main='QQplot altura mujeres',
xlab='Cuantiles teóricos',
ylab='Cuantiles muestrales')
hist(mujeres$altura, las=1,
main='Histograma altura mujeres',
xlab='Altura',
ylab='Frecuencia')
```
De la Figura \@ref(fig:ic2) se puede concluir que las alturas de los estudiantes hombres y mujeres siguen una distribución normal. Al aplicar la prueba Shapiro-Wilk para estudiar la normalidad de la altura se encontró un valor-P de `r round(shapiro.test(hombres$altura)$p.value, 4)` para el grupo de hombres y un valor-P de `r round(shapiro.test(mujeres$altura)$p.value, 4)` para el grupo de mujeres, esto confirma que se cumple el supuesto de normalidad.
Como se cumple el supuesto de normalidad se puede usar la función `t.test` para construir el intervalo de confianza requerido. A continuación se muestra el código
```{r}
res <- t.test(x=hombres$altura, y=mujeres$altura,
paired=FALSE, var.equal=TRUE, conf.level = 0.95)
res$conf.int
```
A partir del intervalo de confianza anterior se puede concluir, con un nivel de confianza del $95\%$, que la altura promedio de los hombres es superior a la altura promedio de las mujeres, ya que el intervalo de confianza __NO__ incluye el cero, y por ser positivos sus límites, se puede afirmar con un nivel de confianza del $95\%$ que $\mu_{hombres} > \mu_{mujeres}$.
En este ejemplo usamos `var.equal=TRUE` porque en el ejemplo de la sección \@ref(ICCocVar) llegamos a la conclusión de que las varianzas son iguales, $\sigma_{hombres}^2 = \sigma_{mujeres}^2$.
```{block2, type="rmdwarning"}
Siempre que estemos interesados en un intervalo de confianza para $\mu_1-\mu_2$, debemos revisar antes si las varianzas se pueden considerar iguales $\sigma_{1}^2 = \sigma_{2}^2$ o diferentes $\sigma_{1}^2 \neq \sigma_{2}^2$.
```
### Intervalo de confianza bilateral para la diferencia de medias ($\mu_1-\mu_2$) de muestras dependientes o pareadas
Para construir intervalos de confianza bilaterales para la diferencia de medias de muestras dependientes a partir de la función `t.test` es necesario definir 4 argumentos:
- `x`: vector numérico con la información de la muestra 1,
- `y`: vector numérico con la información de la muestra 2,
`paired=TRUE` indica que el intervalo de confianza se hará para muestras dependientes o pareadas.
- `conf.level`: nivel de confianza.
### Ejemplo {-}
Los desórdenes musculoesqueléticos del cuello y hombro son comunes entre empleados de oficina que realizan tareas repetitivas mediante pantallas de visualización. Se reportaron los datos de un estudio para determinar si condiciones de trabajo más variadas habrían tenido algún impacto en el movimiento del brazo. Los datos que siguen se obtuvieron de una muestra de $n=16$ sujetos. Cada observación es la cantidad de tiempo, expresada como una proporción de tiempo total observado, durante el cual la elevación del brazo fue de menos de 30 grados. Las dos mediciones de cada sujeto se obtuvieron con una separación de 18 meses. Durante este período, las condiciones de trabajo cambiaron y se permitió que los sujetos realizaran una variedad más amplia de tareas. ¿Sugieren los datos que el tiempo promedio verdadero durante el cual la elevación es de menos de 30 grados luego del cambio difiere de lo que era antes? Calcular un intervalo de confianza del $95\%$ para responder la pregunta.
|Sujeto |1 |2 |3 |4 |5 |6 |7 |8 |
|-----------|:--|:--|:--|:--|:--|:--|:--|:--|
|Antes |81 |87 |86 |82 |90 |86 |96 |73 |
|Después |78 |91 |78 |78 |84 |67 |92 |70 |
|Diferencia |3 |-4 |8 |4 |6 |19 |4 |3 |
|Sujeto |9 |10 |11 |12 |13 |14 |15 |16 |
|-----------|:--|:--|:--|:--|:--|:--|:--|:--|
|Antes |74 |75 |72 |80 |66 |72 |56 |82 |
|Después |58 |62 |70 |58 |66 |60 |65 |73 |
|Diferencia |16 |13 |2 |22 |0 |12 |-9 |9 |
*Solución*
Para construir el intervalo de confianza primero se crean dos vectores con los datos y se nombran `Antes` y `Despues`, luego se calcula la diferencia y se aloja en el vector `Diferencia`, como sigue a continuación:
```{r}
Antes <- c(81, 87, 86, 82, 90, 86, 96, 73,
74, 75, 72, 80, 66, 72, 56, 82)
Despues <- c(78, 91, 78, 78, 84, 67, 92, 70,
58, 62, 70, 58, 66, 60, 65, 73)
Diferencia <- Antes - Despues
```
En seguida se analiza la normalidad de la variable `Diferencia` de los cambios en las condiciones de trabajo, a partir de un qqplot y una densidad.
```{r ic3, fig.cap='QQplot y densidad para Diferencias.', fig.asp=0.5, fig.width=8}
par(mfrow=c(1,2))
require(car)
qqPlot(Diferencia, pch=19, las=1, id=FALSE,
main='QQplot para Diferencias',
xlab='Cuantiles teóricos',
ylab='Cuantiles muestrales')
plot(density(Diferencia), las=1,
main='Densidad para Diferencias',
xlab='Diferencia de tiempo',
ylab='Densidad')
```
De la Figura \@ref(fig:ic3) se observa que la diferencia de los tiempos sigue una distribución normal, debido a que en el QQplot se observa un patron lineal y la densidad muestra una forma cercana a la simétrica.
Luego de chequear la normalidad de la variable `Diferencia` se usa la función `t.test` para construir el intervalo. A continuación se muestra el código utilizado.
```{r}
res <- t.test(x=Antes, y=Despues, paired=TRUE, conf.level=0.95)
res$conf.int
```
A partir del resultado obtenido se puede concluir con un nivel de confianza del $95\%$, que el tiempo promedio verdadero durante el cual la elevación es de menos de 30 grados luego del cambio difiere de lo que era antes del mismo. Como el intervalo de confianza es $2.362< \mu_D < 11.138$, esto indica que $\mu_{antes} - \mu_{despues}>0$ y por lo tanto $\mu_{antes} > \mu_{despues}$.
### Intervalo de confianza unilateral para la media $\mu$
Para construir intervalos de confianza unilaterales se usa el argumento `alternative = 'less'` o `alternative='greater'`, a continuación un ejemplo.
### Ejemplo {-}
Simule una muestra aleatoria de una $N(18, 3)$ y calcule un intervalo de confianza unilateral superior del $90\%$ para la media.
*Solución*
```{r}
x <- rnorm(n=50, mean=18, sd=3)
res <- t.test(x, alternative="greater", conf.level=0.90)
res$conf.int
```
En el resultado anterior se muestra el intervalo de confianza unilateral y vemos que el intervalo de confianza si contiene el verdadero de $\mu=18$.
```{block2, type='rmdwarning'}
Siempre es necesario verificar si se cumple el supuesto de normalidad. A diferencia de los ejemplos anteriores, aquí no lo hicimos porque la muestra aleatoria `x` fue tomada de una $N(18, 3)$ y por lo tanto se cumple el supuesto.
Recuerde: siempre se debe verificar el supuesto de normalidad.
```
## Función `var.test`
Para construir intervalos de confianza para la varianza se puede usar la función `var.test` del paquete básico **stats** o la función `var.test` del paquete **stests** [@R-stests] disponible en este [repositorio](https://github.com/fhernanb/stests). En la siguiente nota se aclara la diferencia entre estas dos funciones.
```{block2, type='rmdnote'}
`var.test()` de **stats** sólo sirve para 1 población mientras que `var.test()` de **stests** sirve para 1 o 2 poblaciones.
```
Para instalar el paquete **stests** desde GitHub se debe copiar el siguiente código en la consola de R:
```{r, eval=FALSE}
if (!require('devtools')) install.packages('devtools')
devtools::install_github('fhernanb/stests', force=TRUE)
```
Una vez instalado el paquete **stests** se puede usar la función `var.test`, la cual es una generalización de la función `var.test` del paquete **stats** y por esa razón aparecerá el siguiente mensaje en la consola cuando se carga el paquete.
```{r, eval=FALSE}
library(stests)
##
## The following object is masked from ‘package:stats’:
##
## var.test
```
Si usted desea usar `var.test` del paquete **stats** o `var.test` del paquete **stests**, puede invocar las funciones explícitamente así:
```{r, eval=FALSE}
stats::var.test() # Para usar la función var.test del paquete stats
stests::var.test() # Para usar la función var.test del paquete stests
```
### Intervalo de confianza bilateral para la varianza $\sigma^2$
Para calcular intervalos de confianza bilaterales para la varianza $\sigma^2$ a partir de la función `var.test` es necesario definir 2 argumentos:
- `x`: vector numérico con la información de la muestra,
- `conf.level`: nivel de confianza.
### Ejemplo {-}
Considerando la información del ejemplo de intervalos de confianza bilaterales para la media, construir un intervalo de confianza del 98\% para la varianza de la altura de los estudiantes hombres.
*Solución*
```{r, eval=TRUE, message=FALSE}
require(stests) # Para cargar el paquete
res <- stests::var.test(x=hombres$altura, conf.level=0.98)
res$conf.int
```
El intervalo de confianza del $98\%$ indica que la varianza de la estatura de los estudiantes hombres se encuentra entre 21.08 y 109.93 $cm^{2}$.
```{block2, type='rmdnote'}
En este ejemplo no verificamos que la muestra aleatoria de alturas proviene de una población normal porqe eso ya lo habíamos hecho en el primer ejemplo de la sección \@ref(ICDifMed).
Recuerde: siempre se debe verificar el supuesto de normalidad.
```
### Intervalo de confianza bilateral para la razón de varianzas $\sigma_1^2 / \sigma_2^2$ {#ICCocVar}
Para calcular intervalos de confianza bilaterales para la razón de varianzas a partir de la función `var.test` es necesario definir 3 argumentos:
- `x`: vector numérico con la información de la muestra 1,
- `y`: vector numérico con la información de la muestra 2,
- `conf.level`: nivel de confianza.
### Ejemplo {-}
Usando la información del ejemplo de diferencia de medias para muestras independientes se quiere obtener un intervalo de confianza del $95\%$ para la razón de las varianzas de las alturas de los estudiantes hombres y mujeres.
*Solución*
Primero lo vamos a construir con `var.test` de **stests**.
```{r, eval=TRUE}
res1 <- stests::var.test(x=hombres$altura, y=mujeres$altura, conf.level=0.95)
res1$conf.int
```
Ahora los vamos a construir con `var.test` de **stats**.
```{r, eval=TRUE}
res2 <- stats::var.test(x=hombres$altura, y=mujeres$altura, conf.level=0.95)
res2$conf.int
```
Los intervalos obtenidos con `stests::var.test` y `stats::var.test` coinciden en los resultados.
Así, el intervalo de confianza del $95\%$ indica que la razón de varianzas se encuentra entre 0.2327 y 1.6633. Puesto que el intervalo de confianza incluye el 1, se concluye que las varianzas de las alturas de los hombres y las mujeres son iguales, en otras palabras, $\sigma_{hombres}^2 = \sigma_{mujeres}^2$.
```{block2, type='rmdnote'}
En este ejemplo no verificamos que la muestra aleatoria de alturas de hombres y mujeres proviene de una población normal, eso ya lo habíamos hecho en un ejemplo de este capítulo.
Recuerde: siempre se debe verificar el supuesto de normalidad.
```
```{block2, type='rmdwarning'}
¿Notó que las funciones `stats::var.test` y `stests::var.test` son diferentes?
`stats::var.test` solo sirve para construir IC para $\sigma_1^2 / \sigma_2^2$.
`stests::var.test` sirve para construir IC para $\sigma^2$ y para $\sigma_1^2 / \sigma_2^2$.
```
## Función `prop.test`
La función `prop.test` se usa para calcular intervalos de confianza para la porporción y diferencia de proporciones. La función y sus argumentos son los siguientes:
```{r, eval=FALSE}
prop.test(x, n, p=NULL,
alternative=c("two.sided", "less", "greater"),
conf.level=0.95, correct=TRUE)
```
### Intervalo de confianza bilateral para la proporción $p$
Para calcular intervalos de confianza bilaterales para la proporción con la función `prop.test` es necesario definir 3 argumentos:
- `x` considera el conteo de éxitos,
- `n` indica el número de eventos,
- `conf.level` corresponde al nivel de confianza.
### Ejemplo {-}
El gerente de una estación de televisión debe determinar en la ciudad qué porcentaje de casas tienen más de un televisor. Una muestra aleatoria de 500 casas revela que 275 tienen dos o más televisores. ¿Cuál es el intervalo de confianza del 90% para estimar la proporción de todas las casas que tienen dos o más televisores?
*Solución*
```{r}
res <- prop.test(x=275, n=500, conf.level=0.90)
res$conf.int
```
A partir del resultado obtenido se puede concluir, con un nivel de confianza del $90\%$, que la proporción $p$ de casas que tienen dos o más televisores se encuentra entre 0.5122 y 0.5872.
### Intervalo de confianza bilateral para la diferencia de proporciones $p_1 - p_2$
Para construir intervalos de confianza bilaterales para la proporción a partir de la función `prop.test` es necesario definir 3 argumentos:
- `x`: vector con el conteo de éxitos de las dos muestras,
- `n`: vector con el número de ensayos,
- `conf.level`: nivel de confianza.
### Ejemplo {-}
Se quiere determinar si un cambio en el método de fabricación de una piezas ha sido efectivo o no. Para esta comparación se tomaron 2 muestras, una antes y otra después del cambio en el proceso y los resultados obtenidos son los siguientes.
Num piezas | Antes | Después
------------|------- | -------------
Defectuosas | 75 | 80
Analizadas | 1500 | 2000
Construir un intervalo de confianza del 90% para decidir si el cambio tuvo efecto positivo o no.
*Solución*
```{r, eval=TRUE}
res <- prop.test(x=c(75, 80), n=c(1500, 2000), conf.level=0.90)
res$conf.int
```
A partir del resultado obtenido se puede concluir, con un nivel de confianza del $90\%$, que la diferencia de proporción de defectos ($p_1 - p_2$) se encuentra entre -0.002315 y 0.022315. Como el cero está dentro del intervalo se concluye que el cambio en el método de fabricación no ha disminuído el porcentaje de defectos.