En aquesta pràctica es repassen alguns contrastos d’hipòtesis no paramètrics d’una i dues poblacions
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\).
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\))
.p.value
, base per a la decisió del contrast.Warning
si no es compleixen les condicions teòriques de bona aproximació de la distribució ji-quadrat. Cal informar d’açò si acudeix.ks.test(x,y,...)
on:
x
: mostra de dadesy
: 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.)p.value
, base per a la decisió del contrast.Warning
si la mostra conté dades repetides. Cal informar d’açò si acudeix.lillie.test(x)
del paquet nortest
que cal instal.lar i carregar:
x
: mostra de dadesp.value
, base per a la decisió del contrast.Warning
si la mostra conté dades repetides. Cal informar d’açò si acudeix.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)p.value
, base per a la decisió del contrast.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 \(<\)).p.value
, base per a la decisió del contrast.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.p.value
, base per a la decisió del contrast.Warning
si no es compleixen les condicions teòriques de bona aproximació de la distribució ji-quadrat. Cal informar d’açò si acudeix.ks.test(x, y)
on:
x
e y
: dades de cada mostra.p.value
, base per a la decisió del contrast.Warning
si la mostra conté dades repetides. Cal informar d’açò si acudeix.binom.test(x, n, p, alternative)
:
x
: recompte de preferències per \(Y\)n
: tamany de mostrap
: 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\)”.p.value
, base per a la decisió del contrast.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\)”.p.value
, base per a la decisió del contrast.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\)”.p.value
, base per a la decisió del contrast.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!)
Algunes estructures del lenguatge R són:
nomFuncio = function(arg1, arg2, ...) {
# cos de la funció
}
nomFuncio
és el nom que es vol donarfunction
é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)return(valor)
on valor
és l’objete que es vol tornarfor()
:for(contador in vector) {
# cos del bucle
}
contador
és un nom arbitrariin
és paraula reservadavector
és un vector concret definit abans (o allí mateix)contador
que, a cada cicle del bucle, prendrà un valor del vector vector
. Exemple: for(i in 1:3) { warning("Step ", i, "!!!")}
if()
if(expressio) {
# part que es processa si expressio==TRUE
} else {
# part que es processa si expressio==FALSE
}
else { }
és opcionallength()
: 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 funcionsis.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.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:
dtipy01(x=, theta=)
per a la funció de densitat de probabilitat, \(f(x)\)ptipy01(q=, theta=)
per a la funció de distribució (acumulada), \(F(x)\)qtipy01(p=, theta=)
per a la funció de quantils, \(X_p\)rtipy01(n=, theta=)
per a la funció de simulacions# 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\).
x
: el vector amb la mostra obtinguda.f0
: el nom de la funció de densitat de probabilitat indicada en \(H_0\).f1
: el nom de la funció de densitat de probabilitat indicada en \(H_1\).a
, b
: els pesos de la combinació lineal dels tipus d’error# 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).
0
(dades consecutives iguals) s’exclouran del vector de signes.# 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
}