Summary: Una guida rapida alla sperimentazione con soggetti e all'analisi statistica dei dati, nel contesto del design di oggetti interattivi.
| Condizioni | |||
|---|---|---|---|
| Risultati | 1 | 2 | 3 |
| Media | 58 | 36 | 46 |
| SD | 23 | 16 | 26 |
| Situazione Effettiva | ||
|---|---|---|
| Ipotesi Nulla | vera | falsa |
| accetta | corretto | tipo II |
| respingi | tipo I | corretto |
probabilità
di tutte le sequenze con 2 femmine + probabilità di tutte le
sequenze con 1 femmina + probabilità di tutte le sequenze
con 0 femmine. La prima di queste tre probabilità, ad
esempio, si trova come
> classeA
[1] 3 4 4 3 2 3 1 3 5 2
> classeB
[1] 5 5 6 7 4 4 3 5 6 5
> profitto <- c(classeA, classeB)
> label <- factor(c(rep("A", 10), rep("B", 10)))
> boxplot(profitto~label, notch=T, xlab="classi", ylab="profitto")
mostra i risultati dei test nelle due classi e disegna il
boxplot di Figura 1. Poiché i
solchi dei due plot non si sovrappongono, si può
concludere che le medie sono significativamente diverse,
con un livello di significatività al 5%. La variabilità è
simile in entrambe le classi, e pertanto ha senso
procedere con un t-test.
Boxplot![]() Figura 1: Boxplot. |
> s2A <- var(classeA) > s2B <- var(classeB) > (mean(classeA) - mean(classeB))/sqrt(s2A/10 + s2B/10) [1] -3.872983Il valore ottenuto va considerato in modulo, e confrontato con il valore critico per la significatività scelta, il quale è
> qt(0.975, 18) [1] 2.100922Nel primo parametro della chiamata a
qt(), si
noti come il test vada condotto a due
code, e quindi α divisa per due, perché
non c'è una direzione preferenziale di confronto: ci
interessa solo la diversità tra le due classi e non una
relazione d'ordine. Il secondo parametro è il numero
complessivo di gradi di libertà. Poiché il valore
calcolato è più grande del valore critico l'ipotesi
nulla può essere respinta. Rovesciando il ragionamento,
possiamo attribuire un valore di probabilità
all'osservazione, supponendo che valga l'ipotesi
nulla. Questa probabilità è
> 2*pt(-3.872983, 18) [1] 0.001114540ed è molto inferiore al 5% che ci eravamo posti come soglia. In
R, il t-test si può condurre con
una sola istruzione
> t.test(classeA, classeB) Welch Two Sample t-test data: classeA and classeB t = -3.873, df = 18, p-value = 0.001115 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -3.0849115 -0.9150885 sample estimates: mean of x mean of y 3 5In un rapporto di ricerca, il risultato dell'analisi si può presentare come "il profitto della classe B (
octave> classeA = [3 4 4 3 2 3 1 3 5 2]; octave> classeB = [5 5 6 7 4 4 3 5 6 5]; octave> [p, t, df] = t_test_2(classeA, classeB, "<>") p = 0.0011145 t = -3.8730 df = 18
R che produce la
regressione ai minimi quadrati (funzione
lm(), per linear model) e traccia il
grafico di Figura 2.
> risp_corrette [1] 80 88 89 62 67 37 62 78 62 77 81 41 26 41 37 57 35 58 22 25 46 18 56 26 38 21 > help [1] 16 25 21 13 17 2 11 14 8 12 17 7 6 16 17 21 14 25 7 12 19 9 17 14 16 6 > esperienza [1] 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 > rce <- split(risp_corrette, esperienza) > he <- split(help, esperienza) > plot(help, risp_corrette, type="n", ylab="Risposte corrette", + xlab="invocazioni help") > points(he[[1]], rce[[1]], pch=16) > points(he[[2]], rce[[2]]) > lm(risp_corrette ~ help + esperienza) Call: lm(formula = risp_corrette ~ help + esperienza) Coefficients: (Intercept) help esperienza 3.738 2.280 33.962 > abline(3.738, 2.28) > abline(3.738 + 33.962, 2.28, lty=2)
Regressione multipla![]() Figura 2: Regressione
con una variabile qualitativa e una variabile
quantitativa. |
logictest) e il tempo speso settimanalmente
ai videogame (vg) o alla televisione
(tv). Lo studio è affrontato molto
semplicemente in R.
> vg [1] 12 7 23 8 19 24 5 31 9 21 24 17 19 6 16 12 12 11 33 14 4 2 21 18 21 > tv [1] 32 4 12 12 22 21 14 6 9 26 19 18 12 21 18 24 23 23 12 21 26 8 23 12 26 > logictest [1] 34 12 67 46 43 78 56 69 23 67 89 73 26 41 52 19 83 38 56 43 11 21 54 56 87 > summary(lm(logictest~tv+vg)) Call: lm(formula = logictest ~ tv + vg) Residuals: Min 1Q Median 3Q Max -28.192 -14.089 1.308 11.183 36.416 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 11.1431 12.4141 0.898 0.379108 tv 0.6083 0.5203 1.169 0.254910 vg 1.7875 0.4592 3.893 0.000783 *** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Residual standard error: 18.45 on 22 degrees of freedom Multiple R-Squared: 0.4249, Adjusted R-squared: 0.3727 F-statistic: 8.129 on 2 and 22 DF, p-value: 0.002274
summary(lm()) si
può interpretare come segue
octave lo stesso f-test si svolgerebbe con il comando
octave> [p, f, df_num, df_den] = f_test_regression(logictest', > [ones(1,25);tv;vg]',[[0 1 0];[0 0 1]]) p = 0.0022740 f = 8.1286 df_num = 2 df_den = 22
R, da una summary(lm(risp_corrette~help+esperienza))si ricava il coefficiente di determinazione come primo numero riportato nella linea
Multiple R-Squared: 0.9051, Adjusted R-squared: 0.8969Il secondo numero, se moltiplicato per
> cor(risp_corrette, help) ^ 2 [1] 0.3099675o da
> summary(lm(risp_corrette~help-esperienza)) ... Multiple R-Squared: 0.31, Adjusted R-squared: 0.2812e facendo il calcolo della Equazione 13 si trova
summary(lm(risp_corrette~help+esperienza)):
Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 3.7382 3.9736 0.941 0.357 help 2.2797 0.2448 9.312 2.89e-09 *** esperienza 33.9622 2.8275 12.011 2.17e-11 ***Poiché il valore
octave, f-test e t-test si conducono con le due chiamate
octave> [p, f, dfn, dfd] = f_test_regression(risp_corrette, > [ones(1,26); esperienza; help]', [0, 1, 0]) p = 2.1692e-11 f = 144.27 dfn = 1 dfd = 23 octave> [p, t, dfn] = t_test_regression(risp_corrette, > [ones(1,26); esperienza; help]', [0, 0, 1], 0, ">") p = 1.4428e-09 t = 9.3115 dfn = 23L'analisi andrebbe completata verificando la assenza di interazioni tra
esperienza e
help. Ciò si fa con un altro f-test,
aggiungendo il prodotto esperienza.*help, e
usando i coefficienti di determinazione con e senza il
prodotto delle due variabili. In Octave:
octave> [p, f, dfn, dfd] = f_test_regression(risp_corrette, > [ones(1,26); esperienza; help; esperienza.*help]', [0, 0, 0, 1]) p = 0.66901 f = 0.18776 dfn = 1 dfd = 22In
R, si fa
> summary(lm(risp_corrette ~ help + esperienza + help:esperienza))da cui si ottiene
Multiple R-Squared: 0.9059, Adjusted R-squared: 0.8931che si può usare insieme al valore del coefficiente di determinazione senza interazioni (
> 2*pf(0.19, 1, 22) [1] 0.6656723In questo caso non c'è evidenza di interazioni tra
esperienza e help e quindi i
loro effetti si possono studiare
separatamente. Viceversa, la presenza di interazione
significherebbe che gli effetti di ciascuna variabile
mutano a seconda dei valori assunti dall'altra.