Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
A B C
18 19 21
Quindi ci viene detto quali elementi abbiamo e quante volte sono ripetuti.
Funzione subset (nome del database di partenza, regola di sottocampionamento = in base a
che cosa vogliamo sottocampionare). Al posto di prova quello che otteniamo si chiamerà
bar_a.
bar_a <- subset(prova, Bar==“A”)
e otteniamo una tabella nuova in cui ora abbiamo solo elementi A nella colonna Bar con la
rispettiva riga di riferimento (quindi avremo solo gli elementi A, non tutti).
Subset su più condizioni: vogliamo avere un bar_ac che contenga o A o C. La linea verticale
corrisponde a or = |.
bar_ac <- subset(prova, c(Bar==“A”|Bar==“C”))
Oppure possiamo ottenere lo stesso identico dataframe eliminando B:
bar_ac2 <- subset(prova, Bar!= “B”)
Come esportare un database? Usiamo la funzione write.table. Il secondo elemento è il nome
che gli diamo. Mettiamo l’estensione, ovvero csv. Infine abbiamo header che però si chiama
diversamente, ovvero col.names. A noi ci interessa il numero delle righe? No, allora mettiamo
falso. Se no avremmo una prima colonna con il numero delle righe e chiamata con il nome che
abbiamo dato alla prima colonna.
LEZIONE 4.
str(dati_2)
nrow(dati_2) e otteniamo 100 che sono le righe;
ncol(dati_2) e otteniamo 5 che sono le colonne;
dim(dati_2) e otteniamo 100 5 = ci permette di ottenere le dimensioni di un oggetto (in questo
caso un data frame ha righe e colonne);
colnames(dati_2) ci permette di richiamare tutti i nomi delle colonne;
Dentro la colonna genere quanti sono gli 1 e quanti sono i 2?
dati_2$genere otteniamo tutti i numeri, sia gli 1 che i 2
table(dati_2$genere) otteniamo che gli 1 sono 54 e i 2 46.
Come modificare il nome della colonna genere in SB?
colnames(dati_2)[1] <- “SB”
colnames(dati_2)
Ifelse: condizione che vogliamo che si avveri, valori in caso di if, valori in caso di else.
Vogliamo sostituire gli 1 con il carattere F e i 2 con il carattere M. Se gli elementi di dati_2-SB
sono uguali uguali a 1 mettere F, altrimenti M.
dati_2$SB
ifelse(dati_2$SB==1,”F”,”M”)
Come fare se abbiamo tre condizioni e non più due? Usiamo which.
which(dati_2$SB==1)
dati_2[which(dati_2$SB==1),1] <- “F”
dati_2[which(dati_2$SB==1),1] mi dice character (0) perchè abbiamo sostituito gli 1 con F
quindi gli 1 non esistono più.
dati_2$SB dati_2[which(dati_2$SB==“2”),1]<-“M” R quando ha caratteri e numeri nel dubbio
mette anche i numeri come caratteri, quindi in questo caso il 2 va messo tra virgolette.
*se non avessimo messo le virgolette in F perché se no significherebbe false, quindi zero. Con
la funzione attach diciamo a R che stiamo lavorando sempre con quel data frame, fino a che
non mettiamo detach (a questo punto dovremo utilizzare il dollaro). È utile se si lavora con un
solo data frame mentre con più di uno è meglio di no.
attach(dati_2)
SB
detach(dati_2)
Creiamo una nuova colonna che si chiama item. Le prime venti celle sono il numero 1, poi 2, poi
3, poi 4, poi 5 (in totale 100 items). Come fare l’inversione di un punteggio? Per invertire un
punteggio, data una scala, si prendono gli estremi (1 e 5), si sommano e basta sottrarre
qualunque valore della scala in questione.
dati_2$item <- rep(1:5,each=20)
dati_2$item_invertiti <- 6-dati_2$item
dati_2$item_invertiti
Così mi compaiono due nuove colonne, la prima con i dati come sopra descritto mentre la
seconda con i dati invertiti rispetto a tale colonna (quindi anziché 1 avremo 5, anziché 2 avremo
4, etc).
ESERCIZI A CASA:
table(prova$Bar)
summary(prova$Spritz)
summary(prova$Ore_studio)
Creare un subset “sub1” in cui c’è solo chi studia più di 10 ore.
sub1 = subset(prova, Ore_studio> 10)
dim(sub1)
Creare un subset “sub2” in cui c’è solo chi beve più di 4 spritz e studia meno di 4 ore.
sub2 = subset(dati, Spritz > 4 & Ore_studio < 4)
dim(sub2)
Usando il dataset originale, in media quanti spritz si bevono nel bar C?
barc = subset(dati, Bar == “C”)
mean(barc$Spritz) # 5.095238
Creare una variabile “corso” che contenga il corso di studio. Nelle prime 13 righe inserire
psicologia, nelle seconde 13 inserire ingegneria, nelle 13 successive inserire biologia, nelle ultime
13 inserire statistica.
prova$corso = c(rep(“psico”,13),rep(“ing”,13),rep(“bio”,13),rep(“stat”,13),rep(“NA”,6))
table(dati$corso)
In quale corso si bevono più spritz in media?
psico = subset(prova, corso ==“psico”)
ing = subset(prova, corso ==“ing”)
bio = subset(prova, corso ==“bio”)
stat = subset(prova, corso ==“stat”)
mean(psico$Spritz) # 6.53 a psicologia
mean(ing$Spritz)
mean(bio$Spritz)
mean(stat$Spritz)
boxplot(prova$Spritz ~ prova$corso) e otteniamo il grafico
Creare una matrice 4X4 che contenga i numeri da 10 a 25 ordinati per riga.
M = matrix(10:25), 4, 4, byrow = T)
M
LEZIONE 5.
Vogliamo calcolare l’alpha di Cronbach. Per importare un pacchetto utilizziamo library
(psych). All’interno di psych abbiamo la funzione alpha. Otteniamo: Some items were
negatively correlated with the total scale and probably should be reversed. Intervalli di
confidenza: intervallo di valore in cui è ragionevole trovare il nostro valore, estraendolo a
caso. C’è un lower e un upper.
Affidabilità se un item è tolto: vediamo sempre raw alpha e s alpha se togliessimo uno
specifico item. Togliendo pre7 e pre11 l’alpha cresce ma noi prima di eliminarli dobbiamo
girarli, perchè sono negativamente correlati. In items statistics vediamo che in 39 hanno
risposto. Dopo vediamo varie colonne con r dove r è la correlazione. Conviene prendere r
core. Come possiamo tenere solo quello che ci serve, eliminando le altre colonne?
Indicizzazione. Alpha però non è un vettore. Possiamo assegnarlo a un oggetto, che dopo
conterrà tutte le tabelle da cui poi estrarre.
library(psych)
alpha(Ansia)
risultati<-alpha(Ansia)
Otteniamo una lista “risultati”, che è un contenitore di tanti oggetti. Ogni oggetto avrà il suo
spazio che potremo recuperare indicizzando. Cliccando nella tabellina accanto otteniamo
nella console il modo per recuperare quell’elemento; facendo invio poi otteniamo il risultato.
risultati[[“total”]][[“raw_alpha”]]
[1] 0.4696922
Oppure possiamo anche scrivere: risultati[[1]][[1]] perchè sono i primi elementi
Oppure: risultati$total$raw_alpha
Come richiamare nella condizione reliability if an item is dropped: raw_alpha e std.alpha.
utilizziamo la funzione cbind che ci mette i valori in colonna mentre c li metterebbe in riga.
cbind(risultati[[“alpha.drop”]][[“std.alpha”]],risultati[[“alpha.drop”]][[“raw_alpha”]])
Possiamo anche usare:
risultati$alpha.drop[,1:2]
risultati[[“alpha.drop”]][,1:2]
Come richiamare r core?
risultati$item.stats$r.cor
cbind(risultati$item.stats$r.cor)
Per avere tutte e tre le colonne vicine facciamo:
cbind(risultati[[“alpha.drop”]][,1:2],cbind(risultati$item.stats$r.cor)) oppure
cbind(risultati[[“alpha.drop”]][,1:2],(risultati$item.stats$r.cor))
Sommare valore minimo e massimo della scala (1 e 4 = 5) e sottrarre tutti i valori della
colonna ansia pre7. Pre7_inv è la dodicesima colonna.
Ansia$PRE_7_inv <- 5-Ansia$PRE_7
Togliamo poi la colonna 7 nell’andare a ricalcolare alpha.
alpha(Ansia[,c(1:6,8:12)])
Invertiamo anche l’11 ora:
Ansia$PRE_11_inv <- 5-Ansia$PRE_11
alpha(Ansia[,c(1:6,8:10,12,13)])
Se avessimo avuto una sola sequenza: alpha(Ansia[,3:17])
L’alpha migliora e non abbiamo più il warning; nessuna alpha migliora se diminuiamo items.
Il PRE_11 ha una correlazione di 0.10, per cui potremmo pensare di eliminarlo. Se vogliamo
conservare il maggior numero di item, li terrò anche se la correlazione è bassa (maggiore
di 0.10). Se ne voglio tenere di meno, alzo il valore di correlazione a 0.20. All’esame
possiamo usare entrambe le soglie, basta dichiararlo. Un questionario con 10 items a cui
ne togliamo 4 è però troppo invasivo e conviene preferire la legge della parsimonia
(seguire una regola ragionando).
LEZIONE 6.
Vogliamo calcolare il K di Cohen. Questi sono tutti modi diversi per recuperare i dati in
una matrice:
table(dati$Opa,dati$Opb) dati è il nome del database.
tab <- matrix(c(18,2,3,26),2,2,byrow = T)
tab
tab1 <- table(dati$Opa,dati$Opb)
tab1
tab2 <- matrix(table(dati$Opa,dati$Opb),2,2,byrow = T)
tab2
Ora vogliamo calcolare i marginali di riga e di colonna: rowSums e colSums sono le
funzioni e basta metterci dentro il nome della matrice. Nel primo caso otteniamo i
marginali in riga mentre nei casi sotto li aggiungiamo direttamente alla matrice.
colSums(tab2)
tab2<-rbind(tab2,colSums(tab2)) la associamo a tab2 perché così sovrascriviamo e
aggiorniamo tab2
tab2 <- cbind(tab2,rowSums(tab2))
tab2
Calcoliamo gli accordi osservati, N e gli accordi attesi:
a_oss <- 18+26
N <- 49
aa0 <- (21*20)/N primo marginale di riga x primo marginale di colonna
aa0
Possiamo fare anche così per calcolare gli accordi attesi utilizzando l’indicizzazione:
elemento nella riga 1 e colonna 3 ed elemento nella riga 3 e colonna 1.
aa0 <- (tab2[1,3]*tab2[3,1])/N
aa0
aa1 <- (28*29)/N
aa1
aa1 <- (tab2[2,3]*tab2[3,2])/N
aa1
aa <- aa0+aa1
aa
Ora abbiamo tutti gli elementi per calcolare il K di cohen:
cohen_kappa= (a_oss-aa)/(N-aa)
round(cohen_kappa,2) per arrotondare e terniamo 0.79 (accordo eccellente)
Secondo modo per calcolare il k di Cohen utilizzando una funzione. Dobbiamo però
sbloccare il pacchetto irr. Dentro questo pacchetto abbiamo la funzione kappa2. Inseriamo
le colonne che ci interessano, in questo caso sono solo due le colonne.
library(irr)
kappa2(cbind(dati$Opa,dati$Opb))
kappa2(cbind(dati$Opa,dati$Opb))$value
round(kappa2(cbind(dati$Opa,dati$Opb))$value,2)
Metodo usato negli esercizi:
table(kappa_2)
M = as.matrix(table(kappa_2))
M
+ uno dei due procedimenti
Esercizio fatto in classe con dati di “benessere”:
library(psych)
# calcolo l’alpha per la prima volta
alpha(dati[,3:17])
# identifico il valore minimo di tutti gli items
min(dati[,3:17])
# identifico il valore massimo di tutti gli items
max(dati[,3:17])
#inverto l’item PRE12
dati$PRE12_inv <- 5-dati$PRE12
# ricalcolo l’alpha
alpha(da