Visualizzazione post con etichetta array. Mostra tutti i post
Visualizzazione post con etichetta array. Mostra tutti i post

lunedì 26 novembre 2018

Inserimento manuale dei dati [2]

Sapere inserire a mano i dati in R può essere utilePer questo ho predisposto due esempi che illustrano la sintassi da utilizzare per inserire direttamente da tastiera array (vettori) e combinarli in matrici o tabelle [1] assegnando i nomi alle variabili e ai casi.

Questo script genera una matrice di due righe per due colonne. Si tratta della struttura dati tipica necessaria per effettuare il test chi-quadrato, per effettuare il test di Fisher, il test di McNemar o impiegare il teorema di Bayes [2].

Copiate lo script, incollatelo nella Console di R e premete ↵ Invio.

# DA QUATTRO VALORI GENERA UNA MATRICE 2x2
#
cells <- c(1, 26, 24, 68) # genera l'array cells con i valori numerici contenuti nelle celle
cells # mostra l'array cells
#
rnames <- c("Riga 1", "Riga 2") # genera l'array rnames con i nomi delle righe
rnames # mostra l'array rnames
#
cnames <- c("Colonna 1", "Colonna 2") # genera l'array cnames con i nomi delle colonne
cnames # mostra l'array cnames
#
mymatrix <- matrix(cells, nrow=2, ncol=2, byrow=TRUE, dimnames=list(rnames, cnames)) # costruisce la matrice a partire dagli array cells, rnames, cnames
mymatrix # mostra la matrice 
#

Dopo avere eseguito lo script utilizzate i tasti Pag-su e Pag-giù per scorrere nella finestra della Console di R quanto è accaduto.

Mediante la funzione c() [3] sono generati gli array che mediante l'operatore di assegnamento <- vengono denominati cells, rnames, cnames e contengono rispettivamente i dati (cells), i nomi delle righe (rnames) e i nomi delle colonne (cnames).

Mediante la funzione matrix() [4] gli array sono combinati nella matrice mymatrix di 2 righe (nrow=2) per due colonne (ncol=2) inserendo i valori per riga (byrow=TRUE) e quindi da sinistra a destra e dall'alto in basso ottenendo quindi la matrice desiderata alla quale con l'ultimo argomento (dimnames=list(rnames, cnames)) sono assegnati i nomi alle righe e alle colonne.

Questo è il contenuto dell'oggetto mymatrix definitivo riportato da R al termine dell'elaborazione dopo l'ultimo comando mymatrix:

> mymatrix
       Colonna 1 Colonna 2
Riga 1         1        26
Riga 2        24        68

Quest'altro script genera una tabella (dataframe) che contiene valori numerici, alfanumerici e logici, e assegna i nomi alle variabili (colonne).

Copiatelo per intero quindi incollatelo nella Console di R e premete ↵ Invio:

# GENERA UNA TABELLA (DATAFRAME) DI 3 COLONNE PER 4 RIGHE
#
d <- c(9901, 9902, 9903, 9904) # genera un array con quattro valori numerici
d # mostra l'array d
#
e <- c("rosso", "bianco", "blu", NA) # genera un array con quattro valori alfanumerici, NA=Not Available
e # mostra l'array e
f <- c(TRUE,TRUE,TRUE,FALSE) # genera un array con quattro valori logici
f # mostra l'array f
#
mytable <- data.frame(d, e, f) # genera una tabella (dataframe) a partire dagli array d, e, f
mytable # mostra il contenuto della tabella
#
names(mytable) <- c("Codice", "Colore", "Dato valido") # assegna i nomi alle variabili/colonne
row.names(mytable) <- c("A", "B", "C", "D") # sostituisce gli identificativi numerici di riga di R con nuovi descrittori univoci dei casi/righe
mytable # mostra il contenuto della tabella 
#

Dopo avere eseguito lo script utilizzate casi i tasti Pag-su e Pag-giù per scorrere nella finestra della Console di R quanto è accaduto.

Qui di nuovo con la funzione c() sono generati gli array che mediante l'operatore di assegnamento <- vengono denominati d, e, f e che subito dopo sono combinati mediante la funzione data.frame() nella tabella mytable.

Successivamente con la funzione names() sono generati i nomi che vengono assegnati alle colonne/variabili della tabella e con la funzione row.names() sono sostituiti gli identificativi numerici assegnati di default ai casi/righe.

Questo è il contenuto dell'oggetto definitivo riportato al termine dell'elaborazione dopo l'ultimo comando mytable:

> mytable # mostra il contenuto della tabella 
  Codice Colore Dato valido
A   9901  rosso        TRUE
B   9902 bianco        TRUE
C   9903    blu        TRUE
D   9904   <NA>       FALSE

Anche se il significato dei vari passaggi è stato illustrato con i commenti inclusi negli script, si ricordano alcune regole generali:
→ i nomi assegnati agli oggetti che vengono generati (cells, rnames, d, fmytable e quant'altro) possono essere stabiliti liberamente;
→ potete stabilire liberamente anche i nomi da assegnare alle colonne/variabili e ai casi/righe;
per vedere il contenuto di un oggetto è sufficiente digitare nella Console di R il nome dell'oggetto;
→ una tabella per definizione può contenere sia valori numerici, sia valori alfanumerici (stringhe di testo), sia valori logici;
→ se un dato non è disponibile, al posto del dato va inserita la sigla NA (Not Available).

Se siete interessati al tema potrebbero esservi utili anche gli esempi riportati in:

----------

[1] Parliamo di array o vettore nel caso di dati numerici monodimensionali, disposti su una sola riga, 

8
6
11
7

di matrice nel caso di dati numerici disposti su più righe e più colonne

8
9
15
14
6
7
18
12
11
8
17
13
7
4
19
17

e di tabella nei casi in cui il contenuto, disposto su più righe e più colonne, è rappresentato oltre che da dati numerici, anche da testo e/o operatori logici

M
7
9
VERO
F
3
12
VERO
F
5
10
FALSO

[2] Vedere le rispettive voci alla pagina Indice.

[3] Digitate help(c) nella Console di R per la documentazione della funzione c().

[4] Digitate help(matrix) nella Console di R per la documentazione della funzione matrix.

domenica 25 novembre 2018

Inserimento manuale dei dati [1]

Inserire a mano i dati in R non accade di frequente, ma è utile quando i dati da inserire sono pochi, come ad esempio quando si vuole effettuare un test chi-quadrato [1], impiegare il teorema di Bayes [2] o realizzare dei grafici a torta [3].

Per questo ho predisposto due esempi che illustrano la sintassi da utilizzare per inserire direttamente da tastiera array (vettori) e combinarli in matrici assegnando i nomi alle variabili e ai casi [4].

Il primo esempio genera un vettore (array), lo trasforma in una matrice, assegna un nuovo nome alla variabile/colonna e infine assegna un nuovo descrittore a ciascuno dei casi/righe.

Per eseguire lo script copiatelo quindi incollatelo nella Console di R e premete ↵ Invio.

# GENERA UN ARRAY E LO TRASFORMA IN UNA MATRICE
#
x <- c(4.2, 6.8, 2.5, 8.3, 5.4, 7.9, 5.3, 6.7, 2.2, 3.1) # genera l'array x
x # mostra l'array x
mean(x) # calcola la media
#
mymatrix <- data.frame(x) # trasforma l'array x in una matrice
mymatrix # mostra la matrice con i casi/righe identificati automaticamente da R
mean (mymatrix$x) # calcola la media
#
names(mymatrix) <- c("Variabile_1") # assegna un nuovo nome alla variabile/colonna
mymatrix # mostra la matrice con il nuovo nome della variabile/colonna
mean(mymatrix$Variabile_1) # calcola la media richiamando il nome della variabile/colonna
#
row.names(mymatrix) <- c("Riga_uno", "Riga_due", "Riga_tre", "Riga_quattro", "Riga_cinque", "Riga_sei", "Riga_sette", "Riga_otto", "Riga_nove", "Riga_dieci") # sostituisce gli identificativi numerici di riga di R con nuovi descrittori univoci dei casi/righe
mymatrix # mostra la matrice con i nuovi descrittori dei casi/righe
mean(mymatrix[,1]) # calcola la media richiamando il numero della variabile/colonna
#

Utilizzate i tasti Pag-su e Pag-giù per scorrere nella finestra della Console di R quanto è accaduto, che viene illustrato dai commenti inseriti in ciascuna riga.

Da notare come, quando l'array x viene trasformato nella matrice mymatrix mediante la funzione data.frame() [5], ai casi/righe viene assegnato di default un identificativo numerico univoco.

A questo punto viene impiegata la funzione names() per assegnare un nuovo nome alla variabile. In questo modo gli identificativi numerici dei casi/righe assegnati di default sono sostituiti con dei nuovi descrittori univoci (“Riga_uno”, “Riga_due”, eccetera) impiegando la funzione row.names().

Questo è quindi il contenuto dell'oggetto mymatrix definitivo riportato alla penultima riga di codice:

> mymatrix # mostra mymatrix con il nome della variabile/colonna e i descrittori dei casi
             Variabile_1
Riga_uno             4.2
Riga_due             6.8
Riga_tre             2.5
Riga_quattro         8.3
Riga_cinque          5.4
Riga_sei             7.9
Riga_sette           5.3
Riga_otto            6.7
Riga_nove            2.2
Riga_dieci           3.1

Il calcolo della media è stato introdotto ogni volta per illustrare la sintassi da impiegare. Interessante l'ultimo caso, all'ultima riga di codice: qui la media è stata calcolata richiamando il numero della colonna sulla quale va calcolata, un modo interessante e utile per richiamare una variabile di una matrice o di una tabella.

> mean(mymatrix[,1]) # calcola la media richiamando il numero della colonna
[1] 5.24

In questo secondo esempio di inserimento manuale dei dati sono generati due vettori (array), che sono combinati in una matrice di 2 colonne per 10 righe, quindi alla matrice viene aggiunta una terza colonna/variabile. Sono poi assegnati nuovi nomi alle variabili/colonne e infine viene assegnato un nuovo descrittore univoco a ciascuno dei casi/righe.

Copiate lo script quindi incollatelo nella Console di R e premete ↵ Invio.

# GENERA DUE ARRAY, LI COMBINA IN UNA MATRICE E AGGIUNGE UNA COLONNA
#
x <- c(4.2, 6.8, 2.5, 8.3, 5.4, 7.9, 5.3, 6.7, 2.2, 3.1) # genera l'array x
y <- c(3.1, 2.2, 6.7, 5.3, 7.9, 5.4, 8.3, 2.5, 6.8, 4.2) # genera l'array y
#
mymatrix <- data.frame(x, y) # combina gli array x e y in una matrice
mymatrix # mostra la matrice con i casi/righe identificati automaticamente da R
sapply(mymatrix, mean) # calcola la media
#
mymatrix$z <- mymatrix$x + mymatrix$y # aggiunge una nuova colonna
mymatrix # mostra la matrice con i casi/righe identificati automaticamente da R
sapply(mymatrix, mean) # calcola la media
#
names(mymatrix) <- c("Var_1", "Var_2", "Var_3") # assegna un nuovo nome alle variabili/colonne
mymatrix # mostra la matrice con i nuovi nomi delle variabili/colonne
mean(mymatrix$Var_3) # calcola la media richiamando il nome della variabile/colonna
#
row.names(mymatrix) <- c("Caso_uno", "Caso_due", "Caso_tre", "Caso_quattro", "Caso_cinque", "Caso_sei", "Caso_sette", "Caso_otto", "Caso_nove", "Caso_dieci") # sostituisce gli identificativi numerici di riga di R con nuovi descrittori univoci dei casi/righe
mymatrix # mostra la matrice con i nuovi descrittori dei casi/righe
mean(mymatrix[,3]) # calcola la media richiamando il numero della variabile/colonna
#

Dopo avere eseguito lo script utilizzate i tasti Pag-su e Pag-giù per scorrere nella finestra della Console di R quanto è accaduto, che viene di nuovo illustrato dai commenti inseriti in ciascuna riga.

Da notare nuovamente come una volta combinati i due array x e y nella matrice mymatrix mediante la funzione data.frame() ai casi/righe viene assegnato di default un identificativo numerico univoco. Quindi con la funzione sapply() viene calcolata la media su tutte le colonne/variabili della matrice. Questo accade anche quando viene aggiunta alla matrice una nuova colonna/variabile z contenente la somma della variabile x e della variabile y.

A questo punto viene impiegata la funzione names() per assegnare i nuovi nomi alle variabili delle due colonne mentre con la funzione mean() è possibile calcolare separatamente la media della colonna/variabile Var_3.

Infine gli identificativi numerici delle righe/casi assegnati da R sono sostituiti con dei nuovi descrittori univoci (“Riga uno”, “Riga due”, eccetera) impiegando la funzione row.names().

Questo è quindi il contenuto dell'oggetto mymatrix definitivo riportato alla penultima riga di codice:

> mymatrix # mostra la matrice con i nuovi descrittori dei casi/righe
             Var_1 Var_2 Var_3
Caso_uno       4.2   3.1   7.3
Caso_due       6.8   2.2   9.0
Caso_tre       2.5   6.7   9.2
Caso_quattro   8.3   5.3  13.6
Caso_cinque    5.4   7.9  13.3
Caso_sei       7.9   5.4  13.3
Caso_sette     5.3   8.3  13.6
Caso_otto      6.7   2.5   9.2
Caso_nove      2.2   6.8   9.0
Caso_dieci     3.1   4.2   7.3

Infine l'ultima riga di codice ci ricorda la possibilità di impiegare il numero della colonna per specificare i dati sui quali effettuare il calcolo della media:

> mean(mymatrix[,3]) # calcola la media richiamando il numero della colonna
[1] 10.48

Se siete interessati al tema potrebbero esservi utili anche gli esempi riportati in:


----------

[1] Vedere la sezione Analisi di dati qualitativi alla pagina Indice.


[3] Vedere il post Grafici a torta.

[4] Parliamo di array o vettore nel caso di dati numerici monodimensionali, disposti su una sola riga, 

8
6
11
7

di matrice nel caso di dati numerici disposti su più righe e più colonne

8
9
15
14
6
7
18
12
11
8
17
13
7
4
19
17

e di tabella nei casi in cui il contenuto, disposto su più righe e più colonne, è rappresentato oltre che da dati numerici, anche da testo e/o operatori logici

M
7
9
VERO
F
3
12
VERO
F
5
10
FALSO

Di fatto i vettori sono matrici aventi una sola riga o una sola colonna. Una matrice con una sola riga e più colonne è detta matrice riga o vettore riga, mentre una matrice con una sola colonna e più righe è detta matrice colonna o vettore colonna.

[5] Digitate help(nomedellafunzione) nella Console di R per la documentazione di questa e delle altre funzioni qui impiegate.


lunedì 19 novembre 2018

Eseguire uno script

In R uno script è costituito semplicemente da una serie di righe di testo: scritte in linguaggio R queste righe di testo, riportate nella Console di R, sono eseguite in sequenza dall'Interprete di comandi di R allo scopo di elaborare dei dati o effettuare delle rappresentazioni grafiche. Per seguire uno script è sufficiente copiare le righe di testo che lo compongono e incollarle nella Console di R, aggiungendo al bisogno un ↵ Invio. Se lo script è stato salvato in un file di testo R prevede anche una modalità alternativa che non richiede il "copia e incolla".

Nei post di questo blog il testo degli script è riportato con queste convenzioni:

→ in colore nero preceduti dal simbolo # sono riportati i promemoria e i commenti che non sono eseguiti da R;
in colore rosso e in grassetto è riportato il codice R che viene eseguito e commentato;
→ in colore nero e in grassetto è riportato il codice R che viene eseguito ma che è già stato illustrato o riveste scarso interesse nell'esempio specifico;

mentre i risultati che compaiono nella Console di R in seguito all'esecuzione del codice sono riportati con queste convenzioni:

in colore rosso sono riportati sia il codice R inserito sia gli eventuali promemoria e commenti;
in colore blu sono riportati risultati dell'elaborazione da parte di R

Per eseguire uno script nella Console di R ci sono vari modi.

Primo modo (tradizionale):
selezionate il testo dello script dalla prima riga all'ultima, # inclusi;
→ con il tasto destro del mouse aprite il menù contestuale e con il tasto sinistro fate click su Copia per copiare;
nella RGui fate click con il tasto sinistro del mouse sul menù Modifica quindi selezionate Incolla e se necessario premete ↵ Invio.


Secondo modo (alternativo):
→ selezionate il testo dello script dalla prima riga all'ultima, # inclusi;
→ con il tasto destro del mouse aprite il menù contestuale e con il tasto sinistro fate click su Copia per copiare;
nella Console di R fate click con il tasto destro del mouse per aprire il menù contestuale e con il tasto sinistro fate click su Incolla e se necessario premete ↵ Invio.

Terzo modo (rapido e consigliato):
→ selezionate il testo dello script dalla prima riga all'ultima, # inclusi, e fate ctrl-C (tenendo premuto il tasto ctrl premete il tasto con la lettera C) per copiare;
fate click con il tasto sinistro del mouse sulla finestra della Console di R quindi fate ctrl-V (tenendo premuto il tasto ctrl premete il tasto con la lettera V) per incollare e se necessario premete ↵ Invio.

Nota: se lo script è molto lungo per selezionare e copiare il testo può essere comodo:
→ fare click con il tasto sinistro del mouse a sinistra del primo carattere della prima riga dello script (il più delle volte un #) quindi rilasciare il tasto;
→ ruotando la rotella del mouse portarsi alla fine dello script;
→ tenendo premuto il tasto ↑ Shift (↑ Maiuscolo) fare click con il tasto sinistro del mouse a destra dell'ultimo carattere dell'ultima riga dello script;
→ con il tasto destro del mouse aprire il menù contestuale e con il tasto sinistro fare click su Copia per copiare.

Il quarto modo parte da uno script salvato sul PC [1]:
→ se l'avete salvato in un file di testo .txt dovete aprire il file con il vostro editor di testo preferito, copiare lo script con gli strumenti che questo vi fornisce, quindi incollarlo con una delle modalità riportate sopra nella Console di R se necessario premete ↵ Invio;
→ se l'avete salvato con R in un file .R dovete dal menù File della RGui selezionare Apri script... per aprirlo nell'Editor di R 


quindi dal menù Modifica selezionare Esegui tutto per eseguire lo script.


Ora eseguite questo script nella Console di R seguendo una delle indicazioni riportate e se necessario premete ↵ Invio:

# CALCOLA LA MEDIA E LA DEVIAZIONE STANDARD DEI VALORI 8, 6, 11, 7
#
# viene generato l'oggetto mydata che contiene i valori numerici 8,6,11,7
mydata <- c(8,6,11,7)
# viene mostrato il contenuto dell'oggetto mydata
mydata
# viene calcolata la media dei valori numerici contenuti nell'oggetto mydata
mean(mydata)
# viene calcolate la deviazione standard dei valori numerici contenuti nell'oggetto mydata
sd(mydata)
#

Le righe di codice vengono eseguite una ad una in sequenza e questo è quanto compare nella Console di R:

> # CALCOLA LA MEDIA E LA DEVIAZIONE STANDARD DEI VALORI 8, 6, 11, 7
> #
> # viene generato l'oggetto mydata che contiene i valori numerici 8,6,11,7
> mydata <- c(8,6,11,7)
> # viene mostrato il contenuto dell'oggetto mydata
> mydata
[1] 8 6 11 7
> # calcola la media dei valori numerici contenuti nell'oggetto mydata
> mean(mydata)
[1] 8
> # calcola la deviazione standard dei valori numerici contenuti nell'oggetto mydata
> sd(mydata)
[1] 2.160247
> #

Dal punto di vista della statistica niente di più banale. Ma lo script ci offre l'opportunità per alcuni chiarimenti importanti sugli elementi del linguaggio R, utili a chi affronta per la prima volta l'argomento:
mydata è un oggetto;
<- è l'operatore di assegnamento;
c(), mean() e sd() sono funzioni;
→ l'operatore di assegnamento <- assegna all'oggetto mydata il contenuto dell'array (o vettore) generato dalla funzione c();
→ l'oggetto mydata è l'argomento delle funzioni mean() e sd();
→ la funzione mean() utilizza come argomento l'oggetto mydata che contiene i valori 8,6,11,7 per calcolarne la media, che risulta uguale a 8;
→ la funzione sd() utilizza come argomento l'oggetto mydata che contiene i valori 8,6,11,7 per calcolarne la deviazione standard, che risulta uguale a 2.160247

Il nome mydata attribuito all'oggetto che contiene i numeri 8,6,11,7 è arbitrario, possiamo chiamarlo in qualsiasi altro modo purché sia un identificativo univoco dell'oggetto. Da notare che R riconosce le lettere maiuscole per cui mydata è un oggetto diverso da Mydata.

Come vedete nello script, digitando nella Console di R il nome di un oggetto come ad esempio

mydata

ne viene mostrato il contenuto

> mydata
[1] 8 6 11 7

mentre con la funzione str() come  ad esempio con

str(mydata)

ne viene mostrato la struttura

> str(mydata)
 num [1:4] 8 6 11 7

In questo caso la struttura di mydata è semplice, si tratta di un oggetto che contiene un array (vettore) numerico (num) che include quattro valori ([1:4]) successivamente riportati (8 6 11 7), ma la funzione str() diventa particolarmente utile quando si salvano i molti risultati forniti da una funzione complessa in un oggetto dal quale si vuole estrarre qualche risultato specifico per una successiva elaborazione.

La funzione c() combina gli elementi numerici (8,6,11,7inseriti come argomento in una sequenza di celle ciascuna della quali contiene un dato. In informatica si parla di array o vettore nel caso di dati monodimensionali disposti su una sola riga 

8
6
11
7

si parla di matrice nel caso di dati numerici disposti su più righe e più colonne [2]

8
9
15
14
6
7
18
12
11
8
17
13
7
4
19
17

e si parla di tabella nei casi in cui il contenuto, disposto su più righe e più colonne, è rappresentato oltre che da dati numerici, anche da testo e/o operatori logici

M
7
9
VERO
F
3
12
VERO
F
5
10
FALSO

Se nella Console di R digitate help(c) si apre la finestra di aiuto con la documentazione della funzione c().

All'interno della parentesi graffa {} compare il nome del pacchetto nel quale è inclusa la funzione, nel caso specifico la funzione c() è inclusa nel pacchetto base di funzioni che viene installato con il programma R.

c {base} R Documentation
Combine Values into a Vector or List
Description
This is a generic function which combines its arguments.
The default method combines its arguments to form a vector ...

Più in generale per aprire la finestra di aiuto con la documentazione di una qualsiasi funzione è sufficiente digitare help(nomedellafunzione) nella Console di R e pertanto:
→ per la documentazione della funzione mean() digitate help(mean) nella Console di R
→ per la documentazione della funzione sd() digitate help(sd) nella Console di R.

Nota bene: in R il separatore delle cifre decimali è il punto (.) e come già riportato altrove questa convenzione per ragioni di omogeneità viene adottata non solo negli script ma anche nei dati e nei testi dei post.


----------

[1] Vedere il post Salvare uno script.

[2] I vettori sono matrici aventi una sola riga o una sola colonna. Una matrice con una sola riga e più colonne è detta matrice riga o vettore riga, mentre una matrice con una sola colonna e più righe è detta matrice colonna o vettore colonna.