Introducción T Student gráficas

Rubén Pizarro Gurrola

2/5/23

Objetivo

Representar visualmente distribución normal, distribución Z y distribución t Student con ggplot2 y visualize.

Librerías

library(dplyr)
library(mosaic)
library(ggplot2)  # Para gráficos
library(cowplot) #Imágenes en el mismo renglón
library(visualize)
options(scipen=999) # Notación normal

Cargar funciones

source("https://raw.githubusercontent.com/rpizarrog/probabilidad-y-estad-stica/master/2023/funciones/funciones%20para%20disribuciones%20de%20probabilidad.R")

Funciones de distribución t en R

  • dt(): Valores de la densidad de una distribución t
  • pt(): Calcula la probabilidad acumulada
  • rt(): Genera valores aleatorios de distribución t
  • qt(): Calcula valores de t a partir de una probabilidad acumulada

Semilla para aleatorios

set.seed(2023)

Densidades con valores de t

\[ f(x) = \frac{\frac{\gamma(gl + 1)}{2}}{\sqrt(gl \cdot \pi)\cdot \gamma(gl/2)} \cdot (1 + \frac{t^2}{gl})^{\frac{-(gl+1)}{2}} \therefore \]

\[ f(x) = \frac{\frac{gamma(gl + 1)}{2}}{\sqrt(gl \cdot \pi)\cdot gamma(gl/2)} \cdot (1 + \frac{t^2}{gl})^{\frac{-(gl+1)}{2}} \therefore \]

La función gamma()

La función gamma en r se calcula mediante gamma() que asocia con el concepto factorial a los números reales y complejos. Es una integral … MMMmmm

\[ \gamma(z) = \int\limits_{0}^{\infty}t^{(z-1)}\cdot e^{-t}dt \]

Calculando densidades manualmente para una t student

¿Cuál es el valor de la densidad para un valor de t igual 0 en una t student con una muestra de 25 observaciones?

n <- 25
gl <- n-1
t <- 0

f_dens_t <- gamma((gl + 1) / 2) / ((sqrt(gl * pi)) * gamma(gl / 2)) * (1 + t^2/gl)^(-(gl + 1) / 2)
f_dens_t
[1] 0.3948094

Usando dt()

Más fácil y amigable

dt(x = t, df = gl)
[1] 0.3948094

t igual -1

¿Cuál es el valor de la densidad para un valor de t igual -1 en una t student con una muestra de 25 observaciones?

Manualmente usando fórmula de densidad t student

n <- 25
gl <- n-1
t <- -1

f_dens_t <- gamma((gl + 1) / 2) / ((sqrt(gl * pi)) * gamma(gl / 2)) * (1 + t^2/gl)^(-(gl + 1) / 2)
f_dens_t
[1] 0.2370161

Usando dt(x = -1, df = gl)

Más fácil y amigable

dt(x = t, df = gl)
[1] 0.2370161

Varios valores de t

Ahora bien varios valores para distintos valores de t entre negativos y positivos a partir de una secuencia desde \(-3\) a \(3\) con saltos de \(0.5\).

t <- seq(from = -3, to = 3, by = 0.5)
t
 [1] -3.0 -2.5 -2.0 -1.5 -1.0 -0.5  0.0  0.5  1.0  1.5  2.0  2.5  3.0
print("Calculando manualmente con función gamma()")
[1] "Calculando manualmente con función gamma()"
f_dens_t <- gamma((gl + 1) / 2) / ((sqrt(gl * pi)) * gamma(gl / 2)) * (1 + t^2/gl)^(-(gl + 1) / 2)
f_dens_t
 [1] 0.007372313 0.021875639 0.057484744 0.128798749 0.237016120 0.346841620
 [7] 0.394809388 0.346841620 0.237016120 0.128798749 0.057484744 0.021875639
[13] 0.007372313

Usando dt varios valores de t

print("Usando dt()")
[1] "Usando dt()"
dt(x = t, df = gl)
 [1] 0.007372313 0.021875639 0.057484744 0.128798749 0.237016120 0.346841620
 [7] 0.394809388 0.346841620 0.237016120 0.128798749 0.057484744 0.021875639
[13] 0.007372313

Visualizando la densidad

ggplot() +
  geom_point(aes(x = t, y = f_dens_t, color='red')) + 
  geom_line(aes(x = t, y = f_dens_t, color='blue'))

Gráficas Normal, Z y T Student

Inicializando algunos datos

n <- 25
media <- 80
desv.std <- 5
gl <- n-1  # Grados de libertad (n-1)

n; media; desv.std; gl
[1] 25
[1] 80
[1] 5
[1] 24

Crea 25 valores aleatorios normal

Valores de x y densidad con respecto a la distribución normal

xs <- rnorm(n = n, mean = media, sd = desv.std)
datos1 <- data.frame(x = xs, f.x = dnorm(x = xs, mean = media, sd = desv.std))
datos1
          x        f.x
1  79.58108 0.07950890
2  75.08528 0.04921949
3  70.62466 0.01375552
4  79.06928 0.07841803
5  76.83257 0.06528268
6  85.45399 0.04401187
7  75.43136 0.05255867
8  85.00820 0.04831479
9  78.00367 0.07367562
10 77.65938 0.07150799
11 81.63481 0.07563557
12 77.93627 0.07327349
13 82.81018 0.06813127
14 83.31679 0.06403032
15 76.98551 0.06652889
16 83.49189 0.06252166
17 82.97923 0.06681064
18 82.26046 0.07203739
19 84.48372 0.05337294
20 82.86108 0.06773906
21 77.94173 0.07330653
22 78.52836 0.07640626
23 86.09287 0.03797460
24 81.22056 0.07744621
25 77.77424 0.07226202

Visualizar Normal

Se visualiza la densidad de cada valor de x

g1 <- ggplot(data = datos1, aes(x = xs, y = f.x)) +
  geom_point(colour = "red") +
  geom_line(colour = 'blue') +
  ggtitle("Normal", subtitle = paste("media = ", media, "sd=", desv.std)) +
  labs(x = "X's", y= "Densidad")

Visualizar Normal

Convertir normal a normal Z

Valores de Z y densidad

zs <- sort(f.devolver.z(x = xs, media = media, desv = desv.std))
datos2 <- data.frame(x = zs, f.x = dnorm(x = zs, mean = 0, sd = 1))
datos2
             x        f.x
1  -1.87506732 0.06877759
2  -0.98294375 0.24609744
3  -0.91372727 0.26279335
4  -0.63348570 0.32641340
5  -0.60289728 0.33264444
6  -0.46812305 0.35753997
7  -0.44515196 0.36131011
8  -0.41274690 0.36636743
9  -0.41165301 0.36653266
10 -0.39926660 0.36837809
11 -0.29432715 0.38203129
12 -0.18614466 0.39209017
13 -0.08378436 0.39754448
14  0.24411143 0.38723105
15  0.32696208 0.37817787
16  0.45209183 0.36018696
17  0.56203647 0.34065637
18  0.57221651 0.33869530
19  0.59584645 0.33405320
20  0.66335826 0.32015161
21  0.69837769 0.31260832
22  0.89674396 0.26686472
23  1.00163971 0.24157396
24  1.09079746 0.22005933
25  1.21857396 0.18987301

Visualizar Z

Se visualiza la densidad de la normal Z . Cada valor de Z y su densidad en el eje de las x y la densidad en el eje de las y

g2 <- ggplot(data = datos2, aes(x = zs, y = f.x)) +
  geom_point(colour = "red") +
  geom_line(colour = 'yellow') +
  ggtitle("Normal Z", subtitle = paste("media = ", 0, "sd=", 1)) +
  labs(x = "Z's", y= "Densidad")
# g2

Visualizar Z

Mismos valores de Z serán los de t

Utilizar los valores de t en el eje de las xs con los mismos valores z en el eje de las x. Lo que varía es la densidad y por consecuencia la probabilidad acumulada.

ts = zs
datos3 <- data.frame(x = ts, f.x = dt(x = ts, df = gl))
datos3
             x        f.x
1  -1.87506732 0.07148845
2  -0.98294375 0.24106109
3  -0.91372727 0.25748287
4  -0.63348570 0.32089653
5  -0.60289728 0.32717893
6  -0.46812305 0.35240674
7  -0.44515196 0.35624488
8  -0.41274690 0.36140071
9  -0.41165301 0.36156930
10 -0.39926660 0.36345285
11 -0.29432715 0.37742253
12 -0.18614466 0.38775330
13 -0.08378436 0.39336875
14  0.24411143 0.38275875
15  0.32696208 0.37347365
16  0.45209183 0.35510099
17  0.56203647 0.33527563
18  0.57221651 0.33329186
19  0.59584645 0.32860106
20  0.66335826 0.31459597
21  0.69837769 0.30702312
22  0.89674396 0.26150120
23  1.00163971 0.23662751
24  1.09079746 0.21563069
25  1.21857396 0.18641744

Visualizar t

Los valores de t en el eje de las x y la densidad de t Student en el eje de las y

g3 <- ggplot(data = datos3, aes(x = ts, y = f.x)) +
  geom_point(colour = "red") +
  geom_line(colour = 'green') +
  ggtitle("t Student", subtitle = paste("media = ", 0, "sd=", 1)) +
  labs(x = "t's", y= "Densidad")

Visualizar t

Gráficas mismo renglón

plot_grid(g1, g2, g3, nrow = 1, ncol = 3)

Visualmente Z y t

función curve()

curve(dnorm(x), from = min(zs), to = max(zs), lty = 1, xlab = "Valores de z", ylab = "Densidad Z", main = "Comparación de distribuciones")
legend("topleft", legend = "Distribución normal estándar Z", lty = 1)

lines(x = ts, dt(ts, df = n-1), lty = 2, col = "red")
legend("topright", legend = "Distribución t de Student", lty = 2, col = "red", bty = "n")

visualize() Z

Normal z al 50%

visualize.norm(stat = 0, mu = 0, sd = 1)

visualize() t

t student al 50%

Usando pt() para la probabilidad izquierda

¿Cuál es la probabilidad acumulada de t a la izquierda cuando t vale 0?

prob <- pt(q = 0, df = gl)
prob
[1] 0.5

Usando pt() para la probabilidad derecha

¿Cuál es la probabilidad acumulada de t a la dereha cuando t vale 0?

prob <- pt(q = 0, df = gl, lower.tail = FALSE)
prob
[1] 0.5

pt() para la probabilidad con t = 1

¿Cuál es la probabilidad acumulada para un valor de t = 1 por la derecha a una muestra de 25?

prob <- pt(q = 1, df = gl, lower.tail = FALSE)
prob
[1] 0.1636434

visualize()

pt() para la probabilidad con t = -1.5

¿Cuál es la probabilidad acumulada para un valor de t = 1 por la izquierda a una muestra de 25?

prob <- pt(q = -1.5, df = gl)
prob
[1] 0.07332782

visualize()

Interpretación de las gráficas

Los valores de t (variable aleatoria) se comportan igual que los valores de t con media igual a 0 y los valores dispersos alrededor de 0.

La curva de la distribución t es mas achatada con respeto a la distribución Z.

Si son diferentes curvas entonces lo que cambia son los valores de la densidad entre la distribución Z y la distribución t Student.

Interpretación de las gráficas

Y si cambian los valores de la densidad por consecuencia cambiarán sus probabilidades o áreas bajo la curva.

Interpretación de las gráficas

Aunque los valores en el eje x son los mismos para ambas distribuciones, la densidad de probabilidad acumulada puede variar entre ellas, especialmente en los extremos de la distribución. Sin embargo, la ubicación y el ordenamiento de los valores en el eje x deberían ser los mismos para ambas distribuciones. https://chat.openai.com/

Interpretación de las gráficas

Con respecto a la desviación estándar. La distribución normal estándar (z) tiene una desviación estándar de 1, ya que esta distribución está estandarizada para tener una media de cero y una desviación estándar de uno.

Por otro lado, la distribución t de Student tiene una desviación estándar que depende del tamaño de la muestra (n).

Interpretación de funciones dt(), rt(), pt(), qt()

  • La función dt() en R sirve para estimar la densidad de una distribución t student.
  • La función rt() genera valores aleatorios t’s de una distribución t student.

Interpretación de funciones dt(), rt(), pt(), qt()

  • La función pt() determina la probabilidad acumulada a un cierto valor de t en la distribución t student
  • La función qt() devuelve el valor de t a una probabilidad acumulada específica, es la inversa de pt() en una distribución t student.

¿Para que usar t student?

  • Para estimar intervalos de confianza

  • Para contrastar hipótesis

¿Qué es un intervalo de confianza?

https://rpubs.com/rpizarro/968703

Intervalo de confianza

¿Cómo obtener un valor de t de una t student?; usando qt()

Este valor t es el punto crítico en donde están los intervalos de confianza, izquierda, derecha o ambas.

confianza = c(0.90, 0.95, 0.99)
t1.izq <- qt(p = (1 - confianza), df = gl)
t1.izq
[1] -1.317836 -1.710882 -2.492159
t2.der <- qt(p = (1 - confianza), df = gl, lower.tail = FALSE)
t2.der
[1] 1.317836 1.710882 2.492159
t.ambas.izq <- qt(p = (1 - confianza) / 2, df = gl)
t.ambas.izq
[1] -1.710882 -2.063899 -2.796940
t.ambas.der <- qt(p = (1 - confianza) / 2, df = gl, lower.tail = FALSE)
t.ambas.der
[1] 1.710882 2.063899 2.796940

Intervalo de confianza y valor de significancia

tabla_confianza <- data.frame(confianza = confianza, t1.izq = t1.izq, t2.der = t2.der, t.ambas.izq, t.ambas.der)
tabla_confianza
  confianza    t1.izq   t2.der t.ambas.izq t.ambas.der
1      0.90 -1.317836 1.317836   -1.710882    1.710882
2      0.95 -1.710882 1.710882   -2.063899    2.063899
3      0.99 -2.492159 2.492159   -2.796940    2.796940

Cola zquierda 90%

El valor de la probabilidad y/o intervalo de confianza estará por encima (derecha) del área sombreada.

“lower” es izquierda

Cola zquierda 90%

t1 = tabla_confianza$t1[1]
visualize.t(stat = c(t1), df = gl, section = "lower") +
  text(0, 0.2, expression("90%"), col = "red") 
integer(0)

Cola derecha 90%

El valor de la probabilidad y/o intervalo de confianza estará por debajo (izquierda) del área sombreada.

“upper” es derecha

Cola derecha 90%

t2 = tabla_confianza$t2[1]
visualize.t(stat = c(t2), df = gl, section = "upper") +
  text(0, 0.2, expression("90%"), col = "red") 
integer(0)

Ambas colas 90%

tails” es ambas colas

Ambas colas 90%

t1 = tabla_confianza$t.ambas.izq[1] 
t2 = tabla_confianza$t.ambas.der[1] 
visualize.t(stat = c(t1, t2), df = gl, section = "tails")+
  text(0, 0.2, expression("90%"), col = "red") 
integer(0)

Cola izquierda 95%

El valor de la probabilidad y/o intervalo de confianza estará por encima (derecha) del área sombreada.

“lower” es izquierda

Cola izquierda 95%

t1 = tabla_confianza$t1[2]
visualize.t(stat = c(t1), df = gl, section = "lower") +
  text(0, 0.2, expression("95%"), col = "red") 
integer(0)

Cola derecha 95%

El valor de la probabilidad y/o intervalo de confianza estará por debajo (izquierda) del área sombreada.

“upper” es derecha

Cola derecha 95%

t2 = tabla_confianza$t2[2]
visualize.t(stat = c(t2), df = gl, section = "upper") +
  text(0, 0.2, expression("95%"), col = "red") 
integer(0)

Ambas colas 95%

tails” es ambas colas

Ambas colas 95%

t1 = tabla_confianza$t.ambas.izq[2] 
t2 = tabla_confianza$t.ambas.der[2] 
visualize.t(stat = c(t1, t2), df = gl, section = "tails")+
  text(0, 0.2, expression("95%"), col = "red") 
integer(0)

Cola izquierda 99%

El valor de la probabilidad y/o intervalo de confianza estará por encima (derecha) del área sombreada.

“lower” es izquierda

Cola izquierda 99%

t1 = tabla_confianza$t1[3]
visualize.t(stat = c(t1), df = gl, section = "lower") +
  text(0, 0.2, expression("99%"), col = "red") 
integer(0)

Cola derecha 99%

El valor de la probabilidad y/o intervalo de confianza estará por debajo (izquierda) del área sombreada.

“upper” es derecha

Cola derecha 99%

t2 = tabla_confianza$t2[3]
visualize.t(stat = c(t2), df = gl, section = "upper") +
  text(0, 0.2, expression("99%"), col = "red") 
integer(0)

Ambas colas 99%

tails” es ambas colas

Ambas colas 99%

t1 = tabla_confianza$t.ambas.izq[3] 
t2 = tabla_confianza$t.ambas.der[3]
visualize.t(stat = c(t1, t2), df = gl, section = "tails")+
  text(0, 0.2, expression("99%"), col = "red") 
integer(0)

Cualquier valor de t

Se puede obtener cualquier valor de t cola izquierda o derecha o ambas a cualquier nivel de confianza y cualquier valor de n

Ejemplo 1

¿cuáles son los valores de t a dos colas (derecha e izquierda) con un nivel de confianza a un 98% en un muestra de n = 30, es decir gl = (n-1) = 29 ?

confianza = 0.98
n = 30
gl = n-1
t1 <- qt(p = (1 - confianza) / 2, df = gl)
t2 <- qt(p = (1 - confianza) / 2, df = gl, lower.tail = FALSE)

t1; t2
[1] -2.462021
[1] 2.462021

La gráfica

confianza_str = paste(confianza * 100, "%")
visualize.t(stat = c(t1, t2), df = gl, section = "tails")+
  text(0, 0.2, confianza_str , col = "red") 
integer(0)

Ejemplo 2

¿cuáles son los valores de t a dos colas (derecha e izquierda) con un nivel de confianza a un 99% en un muestra de n = 30, es decir gl = (n-1) = 29 ?

confianza = 0.99
n = 30
gl = n-1
t1 <- qt(p = (1 - confianza) / 2, df = gl)
t2 <- qt(p = (1 - confianza) / 2, df = gl, lower.tail = FALSE)

t1; t2
[1] -2.756386
[1] 2.756386

La gráfica

confianza_str = paste(confianza * 100, "%")
visualize.t(stat = c(t1, t2), df = gl, section = "tails")+
  text(0, 0.2, confianza_str, col = "red") 
integer(0)

Ejemplo 3

¿cuáles son los valores de t a dos colas (derecha e izquierda) con un nivel de confianza a un 95% en un muestra de n = 30, es decir gl = (n-1) = 29 ?

confianza = 0.95
n = 30
gl = n-1
t1 <- qt(p = (1 - confianza) / 2, df = gl)
t2 <- qt(p = (1 - confianza) / 2, df = gl, lower.tail = FALSE)

t1; t2
[1] -2.04523
[1] 2.04523

La gráfica

confianza_str = paste(confianza * 100, "%")
visualize.t(stat = c(t1, t2), df = gl, section = "tails") +
  text(0, 0.2, confianza_str, col = "red") 
integer(0)

Ejemplo 4

¿cuáles son los valores de t a dos colas (derecha e izquierda) con un nivel de confianza a un 90% en un muestra de n = 30, es decir gl = (n-1) = 29 ?

confianza = 0.90
n = 30
gl = n-1
t1 <- qt(p = (1 - confianza) / 2, df = gl)
t2 <- qt(p = (1 - confianza) / 2, df = gl, lower.tail = FALSE)

t1; t2
[1] -1.699127
[1] 1.699127

La gráfica

confianza_str = paste(confianza * 100, "%")
visualize.t(stat = c(t1, t2), df = gl, section = "tails")+
  text(0, 0.2, confianza_str, col = "red") 
integer(0)

Ejemplo 5

¿cuál es el valor de t por la derecha con un nivel de confianza a un 90% en un muestra de n = 30, es decir gl = (n-1) = 29 ?

confianza = 0.90
n = 30
gl = n-1
t1 <-  NULL
t2 <- qt(p = (1 - confianza) , df = gl, lower.tail = FALSE)

t1; t2
NULL
[1] 1.311434

La gráfica

confianza_str = paste(confianza * 100, "%")
visualize.t(stat = c(t2), df = gl, section = "upper") +
  text(0, 0.2, confianza_str, col = "red") 
integer(0)

Ejemplo 6

¿cuál es el valor de t por la izquierda con un nivel de confianza a un 95% en un muestra de n = 30, es decir gl = (n-1) = 29 ?

confianza = 0.95
n = 30
gl = n-1
t1 <-  qt(p = (1 - confianza) , df = gl)
t2 <- NULL

t1; t2
[1] -1.699127
NULL

La gráfica

confianza_str = paste(confianza * 100, "%")
visualize.t(stat = c(t1), df = gl, section = "lower")+
  text(0, 0.2, confianza_str, col = "red") 
integer(0)