En este documento se abordan las distintas pruebas de hipotesis que se pueden realizar segun el planteammiento del problema. Es importante recordar que intentamos contrastar el \(p-value\) vs \(\alpha\) que en R por defecto es del \(5\%\).
Reglas:
\(p-value\) < \(\alpha\) : Se rechaza la hipotesis nula.
\(p-value\) > \(\alpha\) : No se puede rechazar la hipotesis nula.
Pruebas que tocaremos:
prop.test(x = 18, n=20, p = 0.7, alternative = "greater", conf.level = 0.90)
##
## 1-sample proportions test with continuity correction
##
## data: 18 out of 20, null probability 0.7
## X-squared = 2.9167, df = 1, p-value = 0.04383
## alternative hypothesis: true p is greater than 0.7
## 90 percent confidence interval:
## 0.7510962 1.0000000
## sample estimates:
## p
## 0.9
binom.test(x= 18,n=20,p=0.7,alternative = "greater")
##
## Exact binomial test
##
## data: 18 and 20
## number of successes = 18, number of trials = 20, p-value = 0.03548
## alternative hypothesis: true probability of success is greater than 0.7
## 95 percent confidence interval:
## 0.7173815 1.0000000
## sample estimates:
## probability of success
## 0.9
Se desea hacer inferencia sobre la muestra respecto a los cuantiles:
cuan.O = function(m.a, alpha,tipo,elemento,p){
if(tipo == "two.side"){
# Estadisticos de Prueba.
T1 = sum( m.a <= elemento )
T2 = sum( m.a < elemento )
# Encontrar t1, t2 para la regla de decicion.
t1 = qbinom(alpha/2,length(m.a),p)
t2 = qbinom(1-alpha/2,length(m.a),p)
# P.value
p_val = 2*min(c(pbinom(T1,length(m.a),p),1-pbinom(T2,length(m.a),p)))
# Regla de desicion
if(T1<=t1 | T2>t2 ){
print("Rechazamos la hipotesis nula")
paste("El p-value:",p_val)
paste("alpha:",alpha)
}
}
if(tipo == "greater"){
## Estadistico y cuantil
T1 = sum( m.a <= elemento )
t1 = qbinom(alpha,length(m.a),p)
## P-value
p_val = pbinom(T1,length(m.a),p)
if(T1<=t1){
print("Rechazamos la hipotesis nula")
paste("El p-value:",p_val,"-----","alpha",alpha)
}
}
}
El objetivo de este codigo es ver el efecto que tuvo algun fenomeno sobre la muestra presentandoce como \((x,y)\) donde $x , y $ toman valores entre 0 y 1. Lo que indica es el cambio en el estado.
Este se programo para ambas colas por lo que si se quiere revisar mas a fondo otras
Mc <- function(a,m){
# Definimos el estadistico T con un inicio igual a cero
# En esta parte descompuse la matriz en vectores porque se me facilita el codigo.
x <- m[,1]
y <- m[,2]
c = 0
b = 0
T = 0 ; t <- 0 ;
# No importa que tama?o tome es una matriz bidimensional.
v = length(x)
# Calculamos las cantidades b+c
for(w in 1:v){
if(x[w]==1 & y[w]==0){c = c + 1}
if(x[w]==0 & y[w]==1){b = b + 1}
}
# Este if es para calculr el estadistico de prueba
if(b+c<=20){ # Caso b+c < 20
T = b
t <- qbinom(a/2,b+c,0.5)
p_value<- min(c(pbinom(T, b+c , 0.5), 1 - pbinom(T-1, b+c , 0.5)))
}else{ # Caso b+c > 20
T = ((b-c)**2)/(b+c)
t <-qchisq(1-a,df = 1)
p_value<- min(c(pbinom(T, b+c , 0.5), 1 - pbinom(T-1, b+c , 0.5)))}
# Definimos la regla de desicion dependiendo como se calculo T.
if (b+c<=20){ # Caso b+c <= 20
if( T <= t | T > (b+c)-t ){
print("Rechazamos la hipotesis nula a un nivel" )
} else{print("No rechazamos la hipotesis nula" )}
}else{ # caso b+c>20
if(T>t){
print("Rechazamos la hipotesis nula a un nivel" )
}else{print("No rechazamos la hipotesis nula" )}
}
# Aqui solo recopilamos los datos optenimos en un data frame
datos <- c("Tama?o de la muestra ", "Nivel de Significancia", "Estadistico T = ","cuantil" ,
"P_value")
valores <- c(b+c, a , T, t , p_value)
print(as.data.frame(cbind(datos,valores)))
}
Prueba utilizada para identificar si exciste una diferncia entre dos variables. consultar pagina 11.
Supongamos vamos a guardar estos datos en una matriz bidimencional
signos = function(ma,alpha,alternative){
x = ma[,1] ; y =ma[,2]
T1 = sum(x < y)
if(alternative=="two.side"){
t = qbinom(alpha/2,length(x),0.5)
p_val = 2*min(c(pbinom(T1,length(x),0.5),1-pbinom(T1,length(x),0.5)))
if(T1<=t | T1 > length(x)-t){
print("Rechazamos la hipotesis nula")
vec = c(p_val,alpha) ; names(vec) = c("p-value","alpha")
print(vec)
}
}
#####################
if(alternative=="less"){
t = qbinom(alpha,length(x),0.5)
p_val = pbinom(T1,length(x),0.5)
if(T1<=t){
print("Rechazamos la hipotesis nula")
vec = c(p_val,alpha) ; names(vec) = c("p-value","alpha")
print(vec)
}
}
####################
if(alternative=="greater"){
t = qbinom(alpha,length(x),0.5)
p_val = 1- pbinom(T1,length(x),0.5)
if(T1>length(x)-t){
print("Rechazamos la hipotesis nula ")
vec = c(p_val,alpha) ; names(vec) = c("p-value","alpha")
print(vec)
}else{
print("no Rechazamos la hipotesis nula ")
vec = c(p_val,alpha) ; names(vec) = c("p-value","alpha")
print(vec)
}
}
}
Detecta la tendencia en un conjunto de datos, esta prueba requiere de la paqueteria snpar
Coincide con lo visto en las notas.
library(snpar)
## Warning: package 'snpar' was built under R version 4.0.3
# Esta libreria tiene comandos muy importantes.
y = c(14.6,12.2,104,220,110,86,92.8,74.4,75.4,51.7,29.3,16,14.2,10.5,123,190,138,98.1,88.1,80,75.6,48.8,27.1,15.7)
cs.test(y,alternative = "decreasing")
##
## Exact Cox-Stuart trend test
##
## data: y
## S- = 5, p-value = 0.3872
## alternative hypothesis: data have a decreasing trend
Esta prueba identifica si existe una diferencia, en la distribucion de dos muestras es decir queremos saber si las dos muestras provienen de la misma distribucion.
Para poder aplicar el test de Mann–Whitney–Wilcoxon se requiere que la varianza sea igual en los dos grupos. Los test más recomendados para analizar homocedasticidad en estos casos son el test de Levene o el test de Fligner-Killeen, ambos trabajan con la mediana por lo que son menos sensibles a la falta de normalidad (si se está empleando un test de Mann–Whitney–Wilcoxon suele ser porque los datos no se distribuyen de forma normal).
\[H_o : F(x) = G(x) \] \[ H_a :F(x) \neq G(x)\]
x = c(25,41,42,45,47,50)
y = c(23,28,30,35,38)
wilcox.test(x,y, alternative = "two.side",paired = F,conf.int = 0.95)
##
## Wilcoxon rank sum exact test
##
## data: x and y
## W = 26, p-value = 0.05195
## alternative hypothesis: true location shift is not equal to 0
## 95 percent confidence interval:
## -3 22
## sample estimates:
## difference in location
## 12
prueba para analizar la condicion mencionada anteriormente.
\[ H_o: \sigma_x = \sigma_y \] \[ H_a : \sigma_x \neq \sigma_y \]
X = list(x,y)
fligner.test(X)
##
## Fligner-Killeen test of homogeneity of variances
##
## data: X
## Fligner-Killeen:med chi-squared = 0.012394, df = 1, p-value = 0.9114
Cuando hay ligaduras o ties, la función wilcox.test() no es capaz de calcular el p-value exacto por lo que devuelve una aproximación asumiendo que U se distribuye de forma ~ normal. En estos casos, o cuando los tamaños muestrales son mayores de 20 y se quiere la aproximación por la normal, es más recomendable emplear la función wilcox_test() del paquete coin.
x <- seq(0, 5, length = 1000)
y <- dlnorm(x = x, meanlog = 0.5, sdlog = 1.7)
plot(x, y, type = "l", lty = 1, xlab = "x", col = "blue", ylab = "Densidad",
main = "Distribuciones lognormal y normal con misma mediana", xlim=c(-5, 5))
x_2 <- seq(-5, 5, length = 1000)
y_2 <- dnorm(x = x_2, mean = 1.648721, sd = 1)
lines(x_2, y_2, col = "red")
legend("topright",
legend = c("mediana lognormal = 0.5", "mediana normal = 0.5"),
col = c("blue", "red"), lty = 1,cex = 0.7)