1. CONTRASTOS D’HIPÒTESIS ESTADÍSTIQUES NO PARAMÈTRICS

En aquesta pràctica es repassen alguns contrastos d’hipòtesis no paramètrics d’una i dues poblacions

  1. Bondat d’ajustament: Ji-quadrat de Pearson simple, Kolmogorov-Smirnov i Lilliefors
  2. Aleatorietat
  3. Quantils
  4. Homogeneïtat: Ji-quadrat de Pearson i Kolmogorov-Smirnov
  5. Comparació de dos processos (per preferència o valoració mediana)

Recorda que per a tindre un nivell de significació, com a molt, \(\alpha\), s’ha de definir el procediment: REBUTJAR \(H_0\) si \(p\)-valor \(< \alpha\).

1.1. Contrastos de bondad d’ajustament

  • Objectiu : Comprovar si un procés aleatori “segueix” o “s’ajusta” a un pressumpte model o no.
  • Contrast: \(\left\{\begin{array}{ll} H_0: & X \text{ segueix el pressumpte model } \mathcal{M} \\ H_1: & \text{no } H_0 \end{array} \right.\)
  • Tres casos distints:
    • Contrast Ji-quadrat de Pearson: el pressumpte model s’expressa com a taula de probabilitats \(\begin{array}{|c||c|c|c|} \hline x_i & x_1 & \cdots & x_k \\ \hline p_i & p_1 & \cdots & p_k \\ \hline \end{array}\) i la mostra com a taula de freqüències \(\begin{array}{|c||c|c|c|} \hline x_i & x_1 & \cdots & x_k \\ \hline n_i & n_1 & \cdots & n_k \\ \hline \end{array}\)
      • Es pot aplicar a variable continua si es talla abans en intervals i es calcula la probabilitat de cada interval.
      • En R: funció chisq.test(x,p) on:
        • x: freqüències de la mostra. És a dir c(\(n_1\),\(n_2\),...\(n_k\)).
        • p: probabilitats del model. És a dir c(\(p_1\),\(p_2\),...\(p_k\)).
        • Torna una llista amb valors, entre els quals destaca el p.value, base per a la decisió del contrast.
        • Torna un Warning si no es compleixen les condicions teòriques de bona aproximació de la distribució ji-quadrat. Cal informar d’açò si acudeix.
    • Contrast de Kolmogorov-Smirnov: el pressumpte model és de variable (numèrica) contínua i es coneix la funció de distribució \(F_0(x)\)
      • En R: funció ks.test(x,y,...) on:
        • x: mostra de dades
        • y: nom entrecomillat de la funció \(F_0\) (tal qual estiga programada en R).
        • ...: paràmetres que puga necessitar la funció \(F_0\) (per exemple, mean i sd si es tracta de la normal, o rate si es tracta de l’exponencial, etc.)
        • Torna una llista amb valors, entre els quals destaca el p.value, base per a la decisió del contrast.
        • Torna un Warning si la mostra conté dades repetides. Cal informar d’açò si acudeix.
    • Contrast de Kolmogorov-Smirnov-Lilliefors: el pressumpte model és la família normal al complet
      • En R: funció lillie.test(x) del paquet nortest que cal instal.lar i carregar:
        • x: mostra de dades
        • Torna una llista amb valors, entre els quals destaca el p.value, base per a la decisió del contrast.
        • Torna un Warning si la mostra conté dades repetides. Cal informar d’açò si acudeix.

1.2. Contrast d’aleatorietat

  • Objectiu : Comprovar si un procés de mostreig “produeix” dades independents entre sí, o no.
  • Contrast: \(\left\{\begin{array}{ll} H_0: & X \text{ produeix dades independents entre sí} \\ H_1: & \text{no } H_0 \end{array} \right.\)
  • En R: funció runs.test(x) del paquet tseries que cal instal.lar i carregar:
    • x: vector de signes (o amb dues úniques categories o números). S’ha de fabricar a partir de la mostra, bé comparant cada dada amb la mediana de totes elles, o bé comparant cada dada amb l’anterior (si puja o baixa)
    • Torna una llista amb valors, entre els quals destaca el p.value, base per a la decisió del contrast.
    • ¡ATENCIÓ!: usa l’aproximació normal inclús quan no és possible (només convenient per a mostres amb més de 20 signes de cada tipus). Eixa comprobació l’has de fer per informar si acudeix eixe cas.

1.3. Contrast de quantils

  • Objectiu : Comprovar si un procés aleatori té un quantil d’ordre \(p\) que segueix sent un pressumpte valor \(x_0\) o ha canviat (pujat o baixat).
  • Contrast: \(\left\{\begin{array}{ll} H_0: & X_p = x_0 \\ H_1: & X_p \neq x_0 \text{ (o bien } X_p < x_0 \text{, o bien } X_p > x_0 \text{)} \end{array} \right.\)
  • En R: funció binom.test(x, n, p, alternative):
    • x: quantitat de dades de la mostra inferiors o iguals a \(x_0\).
    • n: quantitat total de dades.
    • p: ordre del quantil (per defecte \(0.5\), per a la mediana).
    • alternative: direcció de \(H_1\) (two.sided per defecte per a \(\neq\), i atención a less per a \(>\) o greater per a \(<\)).
    • Torna una llista amb valors, entre els quals destaca el p.value, base per a la decisió del contrast.

1.4. Contrastos d’homogeneïtat (o mateixa distribució)

  • Objectiu : Comprovar si dos o más processos “segueixen” o “s’ajusten” a la mateixa distribució o llei de probabilitat. Els processos es mostregen de forma independent.
  • Contrast: \(\left\{\begin{array}{ll} H_0: & X_1, X_2, \ldots, X_K \text{ segueixen el mateix model} \\ H_1: & \text{no } H_0 \end{array} \right.\)
  • Dos casos distintos:
    • Contrast d’homogeneïtat Ji-quadrat de Pearson: les mostres ese resumeixen com taules de freqüències amb les mateixes categories. Es poden juntar com: \(\begin{array}{|l||c|c|c|} \hline \text{Muestra \ Categ.} x_i & x_1 & x_2 & \cdots & x_k \\ \hline X_1 & n_{11} & n_{12} & \cdots & n_{1k} \\ \hline X_2 & n_{21} & n_{22} & \cdots & n_{2k} \\ \hline \vdots & \vdots & \vdots & \ddots & \vdots \\ \hline X_K & n_{K1} & n_{K2} & \cdots & n_{Kk} \\ \hline \end{array}\)
      • En R: funció chisq.test(x,p) on:
        • x: matriu amb les freqüències de les mostres. És a dir matrix(data=\(n_{11}\),\(n_{12}\),...\(n_{Kk}\), nrow=\(K\), byrow=TRUE). Recorda que la funció table() pot ajudar-te a obtindre les freqüències de cada mostra.
        • y: deixar NULL si x té la matriu amb les freqüències de les mostres.
        • Torna una llista amb valors, entre els quals destaca el p.value, base per a la decisió del contrast.
        • Torna un Warning si no es compleixen les condicions teòriques de bona aproximació de la distribució ji-quadrat. Cal informar d’açò si acudeix.
    • Contrast d’homogeneïtat de Kolmogorov-Smirnov: només per a 2 mostres de variable (numèrica) continua.
      • En R: funció ks.test(x, y) on:
        • x e y: dades de cada mostra.
        • Torna una llista amb valors, entre els quals destaca el p.value, base per a la decisió del contrast.
        • Torna un Warning si la mostra conté dades repetides. Cal informar d’açò si acudeix.

1.5. Contrast de comparació de dos processos (per preferència o valoració mediana)

  • Objectiu : valorar si algun de dos processos (\(X\) i \(Y\)) es pot considerar millor valorat que l’altre, o no
  • Contrast: \(\left\{\begin{array}{ll} H_0: & X \text{ e } Y \text{ es valoren per IGUAL} \\ H_1: & Y \text{ es valora "DISTINT", "PITJOR" o "MILLOR" que } X \end{array} \right.\)
  • Segons s’aconsegueixen les mostres de \(X\) i \(Y\) es pot treballar amb les dades en tres casos:
    • Preferència (millor/pitjor): cada individu prova els dos processos i només indica quin dels dos prefereix
      • En R: funció binom.test(x, n, p, alternative):
        • x: recompte de preferències per \(Y\)
        • n: tamany de mostra
        • p: deixar per defecte (\(0.5\))
        • alternative: deixar per defecte (two.sided) si \(H_1\) és “\(Y\) DISTINT de \(X\)”, canviar a less si \(H_1\) és “\(Y\) PITJOR que \(X\)”, o canviar a greater si \(H_1\) és “\(Y\) MILLOR que \(X\)”.
        • Torna una llista amb valors, entre els quals destaca el p.value, base per a la decisió del contrast.
    • Valoracions emparellades: cada individu prova els dos processos i dóna una valoració numèrica de cadascun
      • En R: funció wilcox.test(x, y, alternative, paired):
        • x: valoracions del procés \(X\), o les restes de “\(Y\) menys \(X\)” (si no es fica res en l’argument y).
        • y: valoracions del procés \(Y\) (o res, si van les diferències en x).
        • paired: posar a TRUE (ja que per defecte està a FALSE).
        • alternative: deixar per defecte (two.sided) si \(H_1\) és “\(Y\) DISTINT de \(X\)”, canviar a less si \(H_1\) és “\(Y\) PITJOR que \(X\)”, o canviar a greater si \(H_1\) és “\(Y\) MILLOR que \(X\)”.
        • Torna una llista amb valors, entre els quals destaca el p.value, base per a la decisió del contrast.
    • Valoracions independents: cada individu prova un procés i dóna la seua valoració numèrica d’eixe procés
      • En R: funció wilcox.test(x, y, alternative, paired):
        • x: valoracions del procés \(X\).
        • y: valoracions del procés \(Y\).
        • paired: deixar a FALSE (valor per defecte).
        • alternative: deixar per defecte (two.sided) si \(H_1\) és “\(Y\) DISTINT de \(X\)”, canviar a less si \(H_1\) és “\(Y\) PITJOR que \(X\)”, o canviar a greater si \(H_1\) és “\(Y\) MILLOR que \(X\)”.
        • Torna una llista amb valors, entre els quals destaca el p.value, base per a la decisió del contrast.

2. EXERCICIS EVALUABLES DE CONTRASTOS

S’han de contestar responent a allò que es demana amb paraules relatives a l’enunciat (prohibit mencionar \(H_0\) o \(H_1\) en les respostes finals).

El següent bloc de codi carrega l’espai de treball mt1021-1415-labo-s1-data.RData. En ell estan definides certes variables per a resoldre els exercicis

load("mt1021-1415-labo-s1-data.RData")

2.1. Simula 50 dades d’un dau imperfecte definit per la taula

  X        1    2    3    4    5    6
  f(X)  0.15 0.13 0.20 0.15 0.17 0.20

i després contrasta si eixa mostra és compatible amb un dau perfecte, comentant el resultat, referint al nivell de significació que es podria utilitzar. Usa alguna llavor per a la simulació.

# Escriu ací el teu codi i compila amb RStudio CTRL+SHIFT+K
# veuràs l'eixida de R

Escriu ací els teus comentaris (i esborra aquesta frase!)

2.2. Averigua si les dades de la variable ‘x72’ són compatibles amb el model de Poisson de mitjana 2.5, comentant el resultat, referint al nivell de significació que es podria utilitzar.

# Escriu ací el teu codi i compila amb RStudio CTRL+SHIFT+K
# veuràs l'eixida de R

Escriu ací els teus comentaris (i esborra aquesta frase!)

2.3. Simula 30 dades del model uniforme a l’intervalo (0,1) i després contrasta si eixa mostra és compatible amb el model normal de mitjana 0.5 i variància 0.25, comentant el resultat, referint al nivell de significació que es podria utilitzar. Usa alguna llavor per a la simulació.

# Escriu ací el teu codi i compila amb RStudio CTRL+SHIFT+K
# veuràs l'eixida de R

Escriu ací els teus comentaris (i esborra aquesta frase!)

2.4. Contrasta si les dades de la variable ‘x74’ són compatibles amb el model normal de mitjana 5 i varianza 1, comentant el resultat, referint al nivell de significació que es podria utilitzar.

# Escriu ací el teu codi i compila amb RStudio CTRL+SHIFT+K
# veuràs l'eixida de R

Escriu ací els teus comentaris (i esborra aquesta frase!)

2.5. En cas d’incompatibilitat a l’exercici anterior, es podria admetre al menys que les dades de la variable ‘x74’ són compatibles amb el model normal? Comenta el resultat, referint al nivell de significació que es podria utilitzar.

# Escriu ací el teu codi i compila amb RStudio CTRL+SHIFT+K
# veuràs l'eixida de R

Escriu ací els teus comentaris (i esborra aquesta frase!)

2.6. Sospitant sobre la manca d’independència entre les observaciones succesives d’una variable aleatòria, se compara cada dada amb l’anterior, donant lloc a la cadena de signes de la variable ‘x76’. Realitza un contrast que done informació sobre este asumpte. Comenta el resultat, referint al nivell de significació que es podria utilitzar.

# Escriu ací el teu codi i compila amb RStudio CTRL+SHIFT+K
# veuràs l'eixida de R

Escriu ací els teus comentaris (i esborra aquesta frase!)

2.7. La mediana de la distribució de salaris en Espanya se suposava de 650 EUR. Se sospita que, amb la crisi, ha disminuït. Es mostreja la població resultant les dades de la variable ‘x77’. Comenta el resultat, referint al nivell de significació que es podria utilitzar.

# Escriu ací el teu codi i compila amb RStudio CTRL+SHIFT+K
# veuràs l'eixida de R

Escriu ací els teus comentaris (i esborra aquesta frase!)

2.8. Contrasta si les distribucions d’usuaris de Windows, Linux i Mac són pràcticament les mateixes en els graus A, B, C i D de la UJI. Les dades, per a cada grau, venen en les variables ‘x78A’, ‘x78B’, ‘x78C’ i ‘x78D’ respectivamente. Comenta el resultat, referint al nivell de significació que es podria utilitzar.

# Escriu ací el teu codi i compila amb RStudio CTRL+SHIFT+K
# veuràs l'eixida de R

Escriu ací els teus comentaris (i esborra aquesta frase!)

2.9. Contrasta si es pot assumir o no que les dades de dos grups de població A i B, mostrejats i guardades en les variables ‘x79A’ i ‘x79B’, segueixn la mateixa distribució de probabilitat o no. Comenta el resultat, referint al nivell de significació que es podria utilitzar.

# Escriu ací el teu codi i compila amb RStudio CTRL+SHIFT+K
# veuràs l'eixida de R

Escriu ací els teus comentaris (i esborra aquesta frase!)

2.10. Un grup de persones prova dues versions d’una pizza que l’empresa fabricant vol comercialitzar (A i B). Per tal de determinar si hi ha alguna de les dos que és molt més preferida sobre l’altra, en la població general, demana que cadascun es pronuncie sobre quina li ha agradat més. Els resultats estan en la variable ‘x710’. La pizza A és la que es comercialitza actualment, i la B és una variant per a substituir la A, si és sensiblemente millor per al públic. Què resulta de la prova experimental? Comenta el resultat, referint al nivell de significació que es podria utilitzar.

# Escriu ací el teu codi i compila amb RStudio CTRL+SHIFT+K
# veuràs l'eixida de R

Escriu ací els teus comentaris (i esborra aquesta frase!)

2.11. Un grup de persones prova dues versions d’una pizza que l’empresa fabricant vol comercialitzar (A i B). Per tal de determinar si hi ha alguna de les dos que és molt més preferida sobre l’altra, en la població general, demana que cadascun valore la seua qualitat de 0 a 10. Els resultats estan en la variable ‘x711’. La pizza A és la que es comercialitza actualment, i la B és una variant per a substituir la A, si és sensiblemente millor per al públic. Què resulta de la prova experimental? Comenta el resultat, referint al nivell de significació que es podria utilitzar.

# Escriu ací el teu codi i compila amb RStudio CTRL+SHIFT+K
# veuràs l'eixida de R

Escriu ací els teus comentaris (i esborra aquesta frase!)

2.12. Un grup de persones es divideix en dos subgrups, cadascun dels quales està destinat a provar una versió de pizza que l’empresa fabricant vol comercialitzar (A i B). Per tal de determinar si alguna de les dos serà més preferida en la població general, sobre l’altra, pide que cada uno valore su calidad de 0 a 10. Los resultados están en les variables ‘x712A’ i ‘x712B’. La pizza A és la que se comercializa actualmente, i la B és una variante per a sustituir a la A si és sensiblemente mejor per a el público ¿Qué resulta de la prueba experimental? Comenta el resultat, referint al nivell de significació que es podria utilitzar.

# Escriu ací el teu codi i compila amb RStudio CTRL+SHIFT+K
# veuràs l'eixida de R

Escriu ací els teus comentaris (i esborra aquesta frase!)

3. INTRODUCCIÓ A LA PROGRAMACIÓ EN LENGUATGE R

Algunes estructures del lenguatge R són:

Definició de funcions:

nomFuncio = function(arg1, arg2, ...) {
  # cos de la funció
}
  • nomFuncio és el nom que es vol donar
  • function és paraula reservada (per a definir la funció)
  • arg1 és el primer argument, arg2 és el segon, ... indica que pot haver-hi més arguments (es poden igualar a alguna cosa per a que prenguin valor per defecte)
  • Es poden definir funcions sense arguments
  • La funció pot no tornar res
  • Si volem que torne “alguna cosa”, es fa amb return(valor) on valor és l’objete que es vol tornar

Bucles for():

for(contador in vector) {
  # cos del bucle
}
  • contador és un nom arbitrari
  • in és paraula reservada
  • vector és un vector concret definit abans (o allí mateix)
  • Es crea la variable contador que, a cada cicle del bucle, prendrà un valor del vector vector. Exemple: for(i in 1:3) { warning("Step ", i, "!!!")}
  • Els bucles son lents en R. Si pots, evíta’ls, usant directament operacions amb vectors (que son ràpides).

Condicional if()

if(expressio) {
  # part que es processa si expressio==TRUE
} else {
  # part que es processa si expressio==FALSE
}
  • expressio` és un valor lògic (normalment resultat d’una comparació)
  • el bloc de else { } és opcional

Funcions interessants que es poden necessitar

  • length(): longitud d’un vector (= nombre de components) o d’una llista o fulla de dades (= nombre de columnes, ¡atenció!). Exemple: length(1:3)
  • dim(): dimensions de matriu o fulla de dades (files, columnes)
  • prod(): multiplica les components del vector argument. Exemple: prod(1:3)
  • unique(): torna un vector amb els valors (sense repetir) que conté el vector argument. Exemple: unique(c(1,2,3,3,3,2,1,2,1))
  • diff(): calcula les diferències entre cada component i l’anterior del vector argumento. Exemple:diff(c(1,2,3,3,3,2,1,2,1))
  • eval(call("nomFuncio", argument)): produeix l’avaluació de la crida de la funció "nomFuncio" amb l’argument argument. Exemple: eval(call("prod", 1:3)). Important per a manipular funcions com argument d’altres funcions
  • is.numeric(): torna TRUE si el vector argument és de tipus numèric. Exemple: is.numeric(1:3), is. numeric(c("a", "b", "c"))
  • warning(): imprimeix en pantalla un avís (amb el text de l’argument). Exemple: warning("L'aproximació pot ser insuficient!")
  • stop(): deté l’execució d’una funció i imprimeix en pantalla un avís (amb el text de l’argument). Exemple: stop("No puc operar amb lletres!")

4. EXERCICIS AVALUABLES DE PROGRAMACIÓ EN R

4.1. Programa les 4 funciones de probabilitat del model “Tipy01” de paràmetre \(\theta \in ]0,1[\) donat per les funcions:

Recuoda d’anomenar-les com és habitual en R:

# Escriu ací les teues funcions i prova-les amb alguns valors
# dtipy(x=0.5, theta=0.5)
# ptipy(q=0.9, theta=0.1)
# També pots dibuixar-les
# x = seq(from=-1, to=2, by=0.01)
# fx = dtipy(x=x, theta=0.2)
# plot(x=x, y=fx, type='l')

10.2. CONTRAST D’HIPÒTESIS SIMPLES: Defineix la funció que resol el contrast d’hipòtesis simples \[ \left\{ \begin{array}{ll} H_0: & f_X = f_0 \\ H_1: & f_X = f_1 \end{array} \right. \] que minimitza una combinació lineal de les probabilitats d’error tipus I i II. Si la combinació és \(a \cdot \alpha(\delta) + b \cdot \beta(\delta)\), i la mostra és \(\vec{x} = (x_1, x_2, \ldots, x_n)\), aleshores el procediment òptim rebutja \(H_0\) si i només si \(a \cdot f_0(\vec{x}) - b \cdot f_1(\vec{x}) < 0\).

# Escriu ací la teua solució
# funció contrasteHipotSimples()
# arguments: veure enunciat
# calcular el valor a*f0(mostra) - b*f1(mostra)
# crear una llista amb: (1) el valor calculat, i 
# (2) la frase "acceptar H0" o "rebujtar H0" segons corresponga
# tornar la llista creada

10.2. DE DADES A SIGNES: Escriu una funció num2signs() que prenga un vector de dades numèriques (argument x) i torne un vector de “signes” (amb 2 números o caracters).

# Escriu ací la teua solució

10.3. NOMBRE DE RATXES: Escriu una funció nruns() que, per a un vector de dades de dues categories (argument x, per exemple, de números +1 i -1, o qualsevol altra parella de signes), torne el nombre de ratxes existents al vector. Recorda que una ratxa és una cadena màxima de valors iguals, situats entre valors de l’altre tipus, o extrems de la mostra (atenció, que una ratxa pot ser un únic signe). Si el vector té més de dues categories, la funció ha de tornar un missatge d’error, indicant que “el vector té més de dos signes!”. Comprova el funcionament amb xicotets exemples.

# Escriu ací la teua solució

10.3. LA DISTRIBUCIÓ DEL NOMBRE DE RATXES: Defineix en R la funció de probabilitat de la variable aleatòria \(R\) = “nombre de ratxes”, per a un procés de dos signes, en el qual s’han observat \(n_1\) signes d’un tipus i \(n_2\) signes de l’altre tipus. La funció tindrá la forma druns(x, n1, n2), on n1 i n2 són els arguments de la quantitat de signes de cada tipus i x pot ser qualsevol valor possible de \(R\), de manera que druns() torna la probabilitat de qualsevol nombre de ratxes possibles que s’indique en x. Comprova el funcionament amb xicotets exemples.

La funció de probabilidad del “nombre de ratxes” és:

# Escriu ací la teua solució

10.4. Implementa una funció que realitze el contrast d’aleatorietat (per ratxes) per a mostres xicotetes, segons l’estructura que es proposa (usarà les funcions dels exercicis anteriors):

runs.test = function(x, type='median') {
# Arguments:
#   x: vector de dades numèriques o signes
# Torna: el nombre de ratxes i el seu p-valor

# bloc 1: comprovar si `x` són signes o números
# bloc 2: construir cadena de signes (si procedeix)
# bloc 3: calcular les ratxes i el seu nombre
# bloc 4: calcular el seu p-valor. Si hi ha més de 20 signes de 
#           cada tipus, usar aprox. normal (busca fòrmula en teoría)
#           i si no, la distribució exacta (exercici anterior)
# Al final:
#   return(list(R=, p.value=))
#     on `R` és el valor de l'estadístic i
#     `p.value` el seu p-valor
}