Sei sulla pagina 1di 218
Analisi statistica Franco Crivellari | IMPARARE Una a Nt le funzionalita di base Marr et ca eure Coen keg e la statistica inferenziale binato a questo libro pogeonline.com/libr ifile dati utilizzati in esempi ed esercizi vw UCC Analis statistica del dati con R Autore: ranco Crivellai Copyright © 2006 ~ APOGEO sti Socio Unio GinglacomoFeltrinell Eitore sel Via Natale Baragla 12 - 20127 Milano aly) Telefon: 02-209981 ~ Fax 02-26116334 mall educationaapogeonlinecom URL wawapageaniine com ISBN 88-503-2513-4 “Tutti ints sono riservata norma di legge ea norma delle convenzioninternazionallNessuna parte {questo libro pub essere rprodatta con sistem elettronii meccanicl oat senza Fautorizzazione sera delEdtore Nore march ctat nel esto sono generalmente posta oregistatl dalle ripettve case produc Impaginazioneeletronica con LaTeX Editor: Abert Kratter Thaler CCopertina e progetto grais: Enrico Marcandall Finito di stampare rel mese di giugno 2006 da Art Grafche Battaia “ibid San Giacomo Mt) Sommario Elenco delle figure Prefazione 1 Introduzione al sistema R. ll 12 13 ‘Note introduttive . : LLL L'ambiente R in Windows Introduzione al linguaggio R. 1.2.1 I linguaggio . 122 Un breve assaggio sulle possibilita offerte. 1.23 Operazioni di conversione 1.2.4 Operazioni di arrotondamento ¢ di troncamento . 1.2.5 Operazioni sulle date . 1.26 Valori predefinit usati dal sistema Boercizi : 13.1 Domande 1.32 Rispostee procedure usate. ‘Come si mantengono e si elaborano i dati 21 22 1 Vettori 2.1.1 Accesso ai dati . 2.1.2 Bstrazioni di sotto insiemi di dati 2.1.3 Valori mancanti 2.14 Operacioni di ricodifica 2.1.5 Trasformazioni di dati Le Mateiei 2.2.1 Caleolo matriciale 2.2.2 Autovalori e autovettori . . 13 4 16 25 ea 7 32 32 35 39 39 52 55 oT 59, 65. 2 78 uuu lL, ii Sommario Sommario i 23° Gli Amay 79 3.17 Bsecurione di fle di comand seript file . 1st 24 [Data Frame 81 38 Connessioni con Basi di dati remote 182 24.1 Creazione di un dete frame da console « 8 38.1 Installazione di una counessione ODBC in Windows . . 184 24.2 Come mantenere informazioni relative a campioni indi 382. Operazioni sui data base 186 pendenti . 8 38.3 Recupero di dati da fogli di lavoro Excel + 192 248 Prime claborazioni dol risultato di indagin’ statistche 88 3.9 Bsercizi tos 2.4.4 Estrazione di sotto insiemi dei dati da un data frame. 95 39.1 Domande 193 24.5 Agqiunta e eliminazione di variabii in un data frame. . 98 392 Risposte e procedure usate sss see + 199 2.4.6 Le operazioni di Ricodifica nei data frame % 2.4.7 Uso delle funzioni attach) e detach() 105 4 L’ambiente grafico del sistema 205 25 Le liste. 107 4.1 Generalith dell'ambiente grafico . 206 2.5.1 Operazioni sulle liste 10 4.1.1 Creazione di un grafico 207 26 1 Futtori 1B 42. Comandi di alto livello : : 208 27 Le formule 119 4.2.1 Esempi di uso delle funzioni di alto livello 213 2.8 Data Set contenuti nei Packages 121 4.3 Comandi di basso livello 216 29 Le progtammazione in R 13 43.1 Evidenziature di parti di una immagine mediante colore 2.9.1 Definizione di nuove funzioni_ 125 0 tratteggio ae 224 2.9.2 Coetrutti di controllo is 4.3.2 Divisione della finestra grafic in parti regolar 226 203 Costratti condizionalt 129 433 Parametri graici azgiuntivi «2.0... es » 228 god Conteut heative 1 44. Un sistema grafico alternativo: Lattice 237 210 Bocas ir 44.1 Funsioni grafche 24 2.10.1 Domande 137 49 an nando «28 2.10.2 Risposte e procedure usate v2 See nee celica wave ae 3. Operazioni di Ingresso e di Useita 19 \ Anal 3.1 Salvataggio e recupero di oggetti dalla Memoria di Massa 150 )Analisi explorative dei dati 251 5.1 Introduzione alla statistica descrittiva 251 3.11 Lettura dati di file compressi 154 52 Au Unite 253 3.1.2 Lettura remota da server Web 166 ‘Tabelle di frequenza di varinbilieategoriche * 258 82 Come importare dati tramie le tetas 160 EBD Tubole di froqvenze di veri categoria 8 3.3. Le Operasion di eteura 158 eo equenza di variaili nuneiche oi A. Situasontparticlae nelle letture dei det 169 £23 Diagrams “amo © fog me set asabat is asi aos n 342 Letture di date frame mediante sean) Xs Come sutae la forma iorale di una dstibusione | 279 3.4.3 Lottura di file che fanno uso di un formato fisso im Distribuzioni empiriche e di frequenza cumulate.. .. . 281 _ sd Lettura di un file in modo sequensiae 175 Mirnre che desetrouo wn fenoetne oe 3.5 Come importare dati da applicazioni esterne usando i loro file Misure di centralita oe Dinari a7 Boxplet oer 3:6 Operaciont di scrittura 180 Misure di dispersione ooo % v Sommario Sommario 53° Analisi Bivariate cee es 205 AG Operatori THX usati nella grafica esprimere formule 5.3.1 Tabelle di Contingenza... .- « 296 Operator PX wan nella graienesrimere formu ae 5.32 Interrelazioni tra variabili oem + 801 Bibliografia 425 5.33 Diagram di dispersione o seatterplot -.. . 5. « + 305 5.4 Coreelasione di r di Pearson . we 3uL Indice analitico 429, 5.5. Regressione lineare semplice . . : 315, 5.5.1 Errore standard della stima is 323, 5.6 ‘Trattamento dei risultati delle elaborazioni . ce B28 5.7. Esercizi . . 334 57.1 Domande .... : . 334 5.72 Risposte e procedure usate . . 338 6 La Statistica inferenziale 345 6.1 Le distribuzioni campionarie 345, 6.2 Tntervallo di confidenza. sv... vss eee 349 6.21 Determinacione della numetostA campionaria 356 63 Verifica di ipotesi . 2 836 6.3.1 Regione di Accottazione ¢ di Rifuto + 387 64. Test su un cempione £ + 361 64.1 Fett d Studen. ‘ 361 642 Test Zaulle proportion’... 6. s+ * 868 6.5 Test su due campioni cece eee 87 6.5.1 tdi Student per eampion!indipendents 1 6.5.2 tdi Student per campioni dipendenti. . . 3m7 65.3 Confronto tra 2 variance cee 379 0.5.4 Indipendenza tra vampioui a 382 6.6 Analisi della varianza : me 385, 6.7 Bsercizi oe 4 394 67.1 Domande . : 394 6.72 Rispostee procedure usate. 397 Appendice 403 ‘A Funaioni di distibuzione standard. wees 408 ‘ALL Punzioni di distribuaione continue 405, ‘A.L2-Funzioni di distribuzione discrete 409 ‘A2 Funsioni test di base... ce ve 410 ‘A3. Prineipali ibrerie presenti nel sistema 2 ald AA I Package RODBC a5 AS. Espressioni regolari in R . « 417 ee 2 Prefazione cortetto degli eventuali valori mancanti sia a livello statistico sia gestiona- le, diviene cruciale, 1 sistemi statistic disponibili sul mercato (SAS, SPSS, SYSTAT, ...) misurano le loro potenzialiti non solo nel riuseire a fornire agevolmente le risposte (statistiche) alle richieste degli utenti, ma anche nella facilita con cui riescono a gestize e a trattare i dati da elaborare e i risultati ottenuti in risposta. Non sempre nei cistemi commerciali queste due finalita trovano adeguate soluzioni. R, come per altro SAS e S, essendo dotati di un Tinguaggio di programmazione evoluto, sono in grado di rispondere a queste esigenze e di fornize le informazioni desiderate, Spesso i sistemi che fanno uso di inguaggi specializzati sono considerati difficili® da usare per i ricercatori non esperti in campo informatico. R ben si presta ad un uso differenziato tipico dell’ambiente operativo Linux a cui per un certo verso si ispita, Pud essere usato ad un livello che potrebbe essere definito tecnico, in quanto sfrutta le strutture di base del linguagiio per creare nuove funzionalita, ma anche a livelli che si collocano pitt vicini ‘a quelli adottati comunemente dagli utenti finali, ciot da quei ricereatori che sono maggiormente interessati agli aspetti statistici dei loro problemi piuttosto che a quelli informatici collegati con il linguaggio adoperato. Come avviene per Linux, senza rinunciare alla potenza espressiva e di calcolo, il sistema IR concente di scogliore © di adottare nuove, ¢ per altro gratuite, interfacce >grafiche” o "a riga di testo”, progettate proprio con lo scopo di agevolare il lavoro @ questa importante categoria di utenti, Aleune di queste interface hanno ormai raggiunto una buona stabilith, mentre altre sono ancora in fase di sviluppo; tutte perd presentano soluzioni interessanti in quanto tentano di ‘conjugate la faclita (o la intuitivita) ci utilizzo, con la possibilita di sfruttare in pieno le potensialita del sistema. Materiale aggiuntivo Tl materiale di supporto al libro ® disponibile presso i seguenti indirizai: vtp: //wuw apogeon] ine .com/Libri/88-503-2513-4/scheda http://www. dei.unipa.it/“crive/Rbook nvtp://www.ded .unipd. it/corsi/psico/Rbook In particolare possono essere trovati tutti i file dati usati come esempio al: interno del libro, nonché quelli richiesti per poter risolvere i problemi e gli esercizi proposti alla fine di ciascun capitolo. ‘Tutti i file dati sono raceol- ti anche allintemo del file "AL1-File-Pati.zip” in modo da poter essere recuperati velocemente ¢ decompress ne! calcolatore locale, all'interno della Prefazione 3 directory di lavoro usata durante le esercitazioni, $i ricorda che qualora si hia disponibile tn accesso a Internet, ® possibile recuperate il contenuto del file dati richiesto, direttamente da. utilizzando le appropriate funzioni di lottura, Una avvertenza partipolare riguarda Y'uso dei file ”.cov” generati dai fogli clettronici per passaze : dati contenti nel foglio di lavoro corrente f programmi esterni; prima di lggeme i contenuto utilizeando gli opportuni omandi messi a disposizione da R, si raccomanda sempre di esaminare pre- ‘entivamente questi file utilizeando un qualche editore (ad esempio il "Bloceo note”) in modo da verificare come sono stati creati e quali caratteri sono sta- ti usati per indicare la separaziono tra i dati e tra parte intera e reale nella rappresentazione dei valori real Ringraziamenti Desidero ringraziare tutti i componenti del geappo di ricerea di cui faccio par- te, ¢ in particolare la Prof, Maristella Agosti per il costante incoraggiamento ¢ la comprensione dimostrata, il Prof, Massimo Melucci per la sua amicizia f disponibilitA intellettuale. Non posso trascurare di ringraziare i "giovani” componenti del gruppo Nicola Ferro e Giorgio Di Nunzio che oltre ad avere alleggerito in vari modi le mie fatiche di insoguamento, sono stati di valido aitt- to anche nella risoluzione dei diversi problemi legati allutilizzo del BT pXnella stesura del testo. Un grazie infine anche ai miei studenti che hanno contribuito fa trovare, oltre agli inevitabili errori di stesura, anche le ambiguita presenti nel testo. Per ultima, ma non per importanza, un ringraziamento di cuore ve anche a mia moglie Maria Angela per il suo costante sostegno. Capitolo 1 Introduzione al sistema R 1.1 Note introduttive Con il nome di R si suole indicare sia un ambiente inerattivo integrato, che ‘un linguaggio derivato dal corrispondente linguaggio 8, quest'ultimo realizeato negli anni '80 presso AT&T Bell Laboratories da Rick Becker, John Cham- bers e Allan Wilks, autori tra altro, di alcuni tra le pit quotate pubblicazioni i presentazione ed approfondimento sullargomentof6, 8]. L’ambiente R, per converso, ® stato realizzato da un gruppo di ricercatori sotto la guida di R. Gentleman e R. Ihaka{22] delluniversita di Auckland, ed 2 tuttora vivamente sostenuto da un gruppo di lavoro denominato Comprehensive R. Archive Net- ‘work (CRAN) che opera sulla base del puro volontariato internazionale[21] al fine di rendere disponibile un ambiente paragonabile, e per un certo aspeito molto simile ad S-Plus. S-Plus 6 l'ambiente operative realizzato da una so- ict commerciale (la Insightful Corporation di Seatle) e come tale ottenibile ‘8 pagamento, Ambedue i sistemi (ed S-Plus) fanno uso di dialetti di $ tra loro motto simili, per cui in pratica, sia i risultati che : programmi realizzati, sono considerati in genere, tra loro equivalenti[45, 4, 25]. In particolare R, essendo un sistema Open Source (OS) reso disponibile sotto licenza. Generat Public License (GPL), ? liberamente utilizzabile su diverse piattaforme (Win- dows, Unix, Macintosh), ma ® anche fruibile gratuitamente; la sua versione ud essere recuperate direttamente tramite Internet, accedendo ad uno dei ‘numerosi mirror del CRAN, oppure direttamente alPindiriazo: http: //eran.r-project.org/ Caratteristiche che rendono particolarmente versatile ed attraente R sono: xy | peer 1 Introduzione al sistema R. « ovviamente la sun libera disponibilit’ «s iM fatto ai essere un linguaggio di programmazione e quindi non risultare limitato alle sole funzioni rese disponibili dai progettisti del sistema «s 1a sun intrinseca interattivita che consente all’utente sia di imparare I'ws0 adottando una tecnica per prove ed errori, sia di procedere al riuso delle stesse informazioni ottenute nei calcoli precedenti[2] «« la capacita di operare anche @ livello "batch", cio? in forma non interat- tiva 1s Vambiente integrato in cui agisce, che dispone tra l'altro, anche di un sotto sistema grafico potente e di "facile” uso, adatto per chiarire i feno- ‘meni sotto indagine e i risultati ottemuti mediante immagini esplicative. Questi grafici possono essere facilmente esportati in documenti esterni creati dagli usuali word processor, o da altri sistemi di serittura quali ed cesempio TEX[24, 27], «¢ Te pluralita di versioniesistenti per ealcolatori che utilizzano sistem ope- rativi tra loro anche molto diversi, come Linwx, Windows per elabora- tori che usano processori Intel, Mac OS X per Macintosh; tutte queste version sono liberamente ottenibili come software Open Source (OS) « il forte legame che esiste e viene mantenuto con $-plus, legame che per- ette di usare all’interno di R, esempi e soluzioni presontate nei diversi libri che trattano di $ « il gruppo di ricercatori che ne cura il costante sviluppo e aggiornamento, ‘gruppo che risulta essere molto attivo ¢ dinamico, come si vede esa inando la notevole mole di documentazione disponibile, la frequenza neali aggiomamenti ¢ nelle modifiche che costantemente fanno crescere le potenaialita del sistema «il numero di contributi e packages resi disponibili da ricereatori di tutto {i mondo che aumentano costantemente il numero ¢ le tipologie di analisi ottenibili LR fa uso, come si detto, di un linguaggio molto potente attraverso ext is sazioni anche mol- possibile programmare calcoli ¢ elfettuare analisi e computazioni ane to complesse. E possibile ottenere facilmente veloci sintesi ed elaborazioni di Ll Note introduttive dati, generare rapidamente grafic riassuntivi esplicativi, e tutto questo adot- tando uno stile di lavoro che pud essere definito ”non di programmazione”[5} tuttavia nulla vieta che si possa adottare anche uno stile di programmazione di tipo pit tradizionale che ricorda quello usato dai pitt potenti linguaggi at- tualmente in uso, Quest’ultima possibilita consente al rieercatore di creare ad esempio, nuovi strumenti per le analisi dei dati, permettendo quindi di esten- dere a piacere le possibilita offerte dal sistema, attraverso la creazione di nuove funaioni statistiche o grafiche, oppure anche, tramite la semplice modifica degli strumenti attualmente disponibil TLlinguagsio i appoggia sul concetto di funzione, wsata in modo massic- Gio, sia per eseguire i calcol, sia per generare grafiei sullo schermo dell'utent ‘aistigrafck possono essere salva a uno del mumeros! format dispouib in modo da poter essere usati anche da alls! ufenti c integratiall'ntorno d> ‘Tocument creat da progeasmi este TV linguaggio R consente di manipolase variabii di natura anche complessa, in forma molto naturale, utilizzando apposti operator’ e funaioni. Per quanto riguarda i risultati delle aualisi ffettuate, questi vengono di solto mante- nutialVnterno di opportuni oggetti in memoria centrale del calcolatore, talcol, oppure visualizati, o anche Mampall A Titte quest caraltorstiche Che rendono i inguagao R (come per altro S) interesante, si contrappone per converso, soprattutto per i neofti, ana veste non proprio allettante, caratte- rirzata da un uso sovente di istruzioni non immediatamente comprensibili ‘Tutto questo potrebbe dar adito a delle eitche sulla sua adattabilith come strumento di uso generale nelle elaborazionistatstiche da parte di non specia- list. Come si vedeA ue capitolisuecesivi, in reat il sistema 8 progetato in modo tale che pud essere adoperato facilmente anche da personale non specie lizzato in ambito informatico, ma interessato principalmente alla conoscenca dei fenomeni oggetio di analiste alla elaborazione statistica dei dati di nae (ura campionaria, B bene inolire rieurdare che molti yruppi di viverca sono attualmente impegnati nella realizzazione di wove e potent interfaceie utenti General User Interfaces (GUI) da applicare ad R, interfacie in grado di rs dere pit semplice Pinterazione tra Putente ei sistema, senza che questo vada a scapito della potenza e verstilit del sistema; aleuni etempi sono ilustrati in appendice a pagina 414. Per coloro che fossero interesatin conoscere 0 usa- re quest strumentiaggtuntivi, quasi ttt per altro disponibili gratuitamente, si consglia di consultare il sto del CRAN’ dove sotto la voce "R GUIs", i diversi progetti sono elencati, e singolarmente anche illustrat. ES U—— 8 1 Introduzione al sistema R. 1.1.1 L’ambiente R in Windows Una volta in possesso del file binario che contiene 'ambiente Rt scaricato da ‘uno dei server mirror 4 CRAN presenti in Internet, oppure recuperato da un {qualche CD-ROM che raccoglie i pitt important sistem! Open Sourve disponi: Dili, 2 necessario procedere alla installazione, che viene eseguita facilmente, € in genere non presenta problemi di sorta. [Liattivazione di una sessione di lavoro viene invece comandata, agendo ‘mediante tun doppio click del mouse sullicona che identifica V'applicazione R presente sul desktop, Dopo qualche momento, sullo schermo compare la tipica console di R che presenta una immagine simile a quella tustrata in figura. 1.) ‘A partite dalla versione 2.1.0 il sistema in fase di installazione, riconosce la Figura 1.1: Ambiente R in Windows nazionalita del sistoma su cui viene ad eperare, consentendo all utente di ind- ‘care quella pit opportuna, nel caso la scelta proposta. non corrisponda a quelle desiderata. L'applicazione creata comunque risulta essere piuttosto spartans, sono disponibilialcuat menu, oltre a ua gruppo limitato di tasti di comando in arado di attivare velocemente aleuni trai pil usati comand! disponibili nei tment, essenzialmente ricondueibili alle usuali operazioni di Copia, Taglia © 1.1 Note introduttive 9 Incoll, al Fizataggil 0 al caricamento di un file dt comand (script le) Per chaste vene ora frnita una breve destiione det principal comand di- sponiil e dele finalita acai devono fer frente, AlVintero del ment File sono presenti jseguenti comand: Sorgente codice R ... esegue la suecessione di comandi inseriti nel file re- cuperato Nuovo e Apri script attiva un minuscol editore interno, tramite cui & pos- sibile ereare, o anche recuperate (Apri) un file di comandi gia disponibile fe mantenuto nel fle system dell'utente. Dall'interno di questo editore, 2 possibile richiedere Pesecuzione immediata dell'ultima istruzione sont. ta, o di un gruppo di istruzioni opportunamente selezionate senza dover icttuare aleuna operazione di copie ed incolla esplicita: @ presente un apposite pulsante che consente di attivare questa funzionalita (vedi figu- +0 1.2); altzi pulsanti permettono invece di procedere al salvatagaio delle modifiche apportate allo script su cui si sta operando, al caricamento ln alo sept ella stampa del contenut dl loin ue oreo attivo 4 same Figura 1.2; Biitore interno di script Visualizza file ... consente di esaminare il contemuto del file indicato senza. poterlo perd modificare = —~- unpre 10 Lntroduzione al sistema R. [Sala w Cae a AL aNGTO consent di salve Vmax dello ta : To del sistema ("worREpAGe”) su di un appositi file che viene creato nella luton di lvoro detente hi semora di sna in questo modo & seit sprint n eguto (Carica) Tata atuions che ea stata von congelst, «conta conf eventual alte laberazion Salva ¢ Carica cronologia ..._permette di salvare su dium apposite file la ‘comand moment in mo- ~paeessfone Cambia directory... consent di msifcreVindicasion iguardaat a “d- oe cara atea In modo da evita di dover esplctamente indie, spot volta dvectery dove saranno mantener ‘Radome doteniataeiaboraion, Tsistema mete a disposition einen fusions gud) he consent di otvnere 1 sesso auto eee Mas cae ilkgeatsdittamente dala console dell tent, Pet sae convo in ust drctory sista lavorando, sufiient it ceeet Ts coviapondente fungione gated) che itorna Vndeaione del yo ete) elt alla dnccany a aro Stampa Comando che consente di inviare alla stampante i risultati delle ‘elaborazioni contenute nella console dell'utente cb ens sari to Lone ol atta sea aun; questo mod © pnb ole Esei comanda la terminazione della sessione di lavoro presentando all’ utente ‘una richiesta per determinare se salvare o meno lo spazio di lavoro e la ‘ronologia dei comandi in appositi file, che nel caso, saranno creati nella directory di lavoro, ‘Allinterno della applicazione, compare in una specifica finestra, In gom- sole di R, usata per dialogare con il sistema, cio? per scrivere i comandi che “Tevono essere eseguiti e per ottenere immodiatamente i risultati di tali ela~ borazion. Come si pud vedere nell'ultima riga, ® presente il prompt, ciod il segnale (in questo caso tappresentato dal carattere ">") che indica la disponi- Dilita del sistema di accettare nuovi comandi. Nel caso ad esempio, si scriva, dopo i segnale di prompt, il comando 40) € si digiti il tasto "Invio", si viene chit L.A Note introduttive u ad attivare la procedura di chiusura della sessione di lavoro; prima che questa operazione venga portata a termine, utente deve perd scogliere se desidera (6 meno, riportare su disco, ¢ quiudi allinterno della directory di lavoro, le operazioni ¢ la situazione fino a quel momento creata, in modo da poter essere utilizzata nuovamente quando si riprende P'elaborazione. sistema mette a disposizione dell’utente anche un buon sistema di aiu- to utilizzando il quale @ possibile consultare i manuali del sistema, ricereare o/o identificare librerie, funzioni, suggerimenti ¢ consigh presenti nelle Most Frequent Asked Questions (FAQ) o all'interno della documentazione che ac- compagnano i comandi ele librerie. Questi aiuti possono essere ottenuti anche digitando il comando Rep. staxt(), oppure come si vede dalla figura 1.1, soe Figura 1.3: Aiuto attivato dal comando help.start© aliendo il corrispondente comando all'interno del menu di Aiuto. La richiesta i aiuto generata tramite il comando help.start() (0 attraverso il comando Guida Html presente all'interno del menu di Aiuto) attiva il browser di siste- ‘ma (vedi figura 1.8) utilizento per navigare nella documentazione disponibile, Sono disponibili anche alcuni comandi pi specifici, come he1p(noneConando) a 2 1 Introduzione al sistema R (o ?noneConando) in grado di ottenere informazioni dettaglate di un coman- do, € apropos(*stringa") tramive cui & possibile identifcare i comandi che presentano la strings indicata come parte del oro nome. Informazioni molto utili per i neofiti sono disponibilt nelle FAQ, consen- tono di avere indicazioni su, ad esempio, come procedere allinstallazione del sistema, oppure a richiedere come modificare l'ammontare di memoria che si desidera rendere disponibile peri caleoli al momento dell'ativazione di R, et. Per quanto riguarda poi gli altri ausii fornit, il sistema in genere descrive sin- teticamente, ma in modo chiaro, i comandi di interesse, indicando la corretta sintassi da usare le diverse possibilita e opzicni disponibili, gli eventuali para- rmetri previsti, ed infine quali risultati possono essere ottenuti, Al termine di ogni spiegazione, sono presentati in genere, anche alcuni utili esempi espicativi che illustrano il fanzionamento del comando. B possibile richiedere l'esecuzio- ne di questi esempi attivando da console, il comando example noseconando) 1 importante evidensiare che, nel caso all'intzrno degli esempi fossero presenti pit comandi grafic, solo ultimo viene in realta visto dallutente, gi eventuali trafici precedenti essendo troppo velocemente presentati, non sono percepiti Per evitare Vinconveniente, in questo caso ® necessario attivare il comando par(ask=T) prima di digitare il comando example (noneConando), in questo modo il sistema attende, prima di cambiare Vimmagine, che utente digiti cesplicitamente il tasto di "Invio” in risposta alla richiesta: ” Aspetto per com- fermare cambio pagina...” oppure che esegua tn click sul tasto di sinistra del mouse indicando Vimmagine presentats, Come si® accennato precedentemente,scopo della console & quello di for- site all uleate un ambiente dove scrivere i comandi che desidera eseguire, Ogi qualvolta viene digitato il tasto di "Lavio”, il corrispondente comando seritto nella riga, viene imimediatamente verfiato per controllame la correttezza, ¢ nel caso abbia esito positivo, viene immediatamente eseguito. La scrittura dei comandi richiede I'uso della tastiera. Liesecazione di un comando pud essere comunque bloccata digitando il tasto ESC presente nella tastiera dell'utente. Particolare attenzione deve essere posta sulle funzionalita che il sistema attri- buisce ai tasti freceia: mentre i tasti — e + mantengono il signficato usuale che consente di spostare il cursore di scrittura a sinistra 0 a destra del punto {m cui ® posizionato, i tasti f e | sono invece usati per *navigare” tra i co- randi precedenti; questa possbilita semplifica il rapido riutilizao dei comandi inseriti precedentemente permettendo il recupero e Padattamento per altre elaborazioni sug stessi dati o su dati diversi. T comand elementari in F sono costituiti da frasi di assegnazione o da oh omatgeaibowt Aiomole oh Jum bigu! 1.2 Introduzione al linguaggio R B chiamate di funzioni. Le prime, ciod le frasi di assegnazione, assumono in zgenere la forma nonevariabile<-espressione. L’esecuzione di questo tipo di istruzione comporta la valutazione della espressione indicata alla destra del- Yoperatore di assegnazione "<-#" (costituito dalla coppia di caratteri "<" € "a" scritti uno di seguito all’altro senza spazi intermedi di separazione) e la memorizzazione del risultato all interno dell’oggetto il cui nome ® indicato alla sinistra. Spesso i comandi in R si riducono a semplici chiamate di funzionis la forma usata per esprimere questa esigenza si riconduce alla indicazione del no- me della funzione, seguito immediatamente da una copia di parentesi rotonde che racehiude gli eventuali parametri, questi ultimi sono separati tra loro da vvirgole e sono passati come argomento alla funzione. Esempi sono rappresen- tati da print (x) o da r<-c(x,y,2e44). A volte pud accadere che si richiami tuna funzione senza che vi sia la necessita di passare ad essa alcun parametro, ne costituisce un esempio la chiamata della funzione 4 usata dall'utente per comandare la terminazione della sessione di lavoro. La richiesta di eseguire una espressione o di attivare una funzione senza prevedere di assegnare il ri sultato ad una variabile, viene interpretato dal sistema come una richiesta di visualizeate sulla consolle il risultato generato. 1.2 Introduzione al linguaggio R Come gid anticipato, il sistema si appoggia su di tn linguaggio di program- mazione che si presenta come un dialetto molto stretto di S. Il linguaggio R. eredita da $ le caratteristiche di essere interpretato e di essere di tipo Object Oriented (Q0)|44). Te due earatteristiche rendono il linguageto molto flesi- bile facilmente estensiile attraverso la creazione di nuove funaioni definite dall’utente. Tuttavia, dato che i comandi non sono rappresentati da semplict pulsanti o da macro-funzioni, ¢ poiché attualmente non ® disponibile un’inter- faccin grafica sofisticata, si deve far uso di istruzioni inserite in forma scritta utilizzando esplicitamente il linguaggio, e questo pud spaventare gli utenti po- co esperti. Quello che a prima vista pud sembrare una deficienza, in realta rappresenta uno dei punti di forza di questo sistema in quanto consente all’u- tente di decidere cosa vuole ottenere, cosa visualizzare, ¢ infine cosa fare det risultati parziali o finali ottemuti B bene far rilevare che poiché il linguaggio & interpretato, il sistema @ in grado di elaborare le frasiinserite immediatamente, senza dover passare attra- ‘verso il lungo processo zione altrimenti usato nel normali Linguaggt di rogrammazione: i risultati richiesti passono pertanto essere immediatamen- SS ————— istema R 1“ 1L Introduzione al te ottennti, e questo modo di operate diviene la base per un comportamento interattivo del sistema: ad ogni richiesta dell'utente viene data immediata ri- sposta; questa possibilita consente all'utente di imparare ad operare usando ‘una modalith denomineta "per prova ed errore” Tl inguaggio mette a cisposizione anche un ricco insieme di funzioni di ba- se oltre a un vasto assortimento di librerie, molte delle quali sono presenti © sempre attive, altre sono richiamabili immediatamente previa attivazione del package che le contiene, in quanto gid presenti nel sistema recuperato, mentre altre ancora devono essere all'occorrenza scaricate tramite Internet dal sito del RAN, oppure possono essere facilmente ottenibili contattando direttamen- to i ricercatori sparsi nel vasto mondo del Web. In Internet sono disponibili inoltre anche tutta una serie di mannali(38), articoli2] e note introduttive che illustrano i diversi aspetti e potensialita del sistema(30, 31, 47), 1.2.1 Il linguaggio TLinguaggio usato 2, come si detto "orientato agli oggetti”, questo sta ad indicare che in esso, tutto viene rappresentato mediante oggetti. Le variabili sono considerati oggetti ed icentificai tramite nome, mentre i dati ei risultati sono mantenuti alPinterno di questi oggeti; le funzioni stesse usate per mani- polare i dati, sono anch’esse trattato come oggetti, Questo modo di concepire Ja realta presenta notevoli vantaggi in quanto ad esempio, ¢ possibile usare Jo stesso nome di funzione per elaborare correttamente tipi di dati diversi in modo coerente. ‘Tuttavia lo scopo di queste note non vuole essere una guida approfondita al linguaggio, pertanto chi ne fosse interessato & consigliato con- sultare la bibliografiaallegata e i manuali che accompagnano il pacchetto[46] Riprendendo il discorso, ® possibile git anticipare alcuni elementi usati nel- la stesura delle frasi: i nomi degli oggetti possono essere usati per creare expression’ anche complessesfruttando opportuni operator: aritmetici, logic di confronto e di determinasione, oltre alle gid citate funzioni Tl linguagsio 2 sensible all'uso dei caratteri maiuscolie minuscol, pertan- to il sistema considera diversi tra loro nomi come Auto, auto, avTo; oltre at caratterialfabetici e numerieié consentito I'uso allinterno dei nomi, del earat- tere punto ("."), non sono invece ammessi altri caratteri, quali ad esempio, {I trattino, 0 simbolo meno (*="), il earatiere sottolineato (""), oppure lo spazio bianco. Un carattere molto usato per la documentazione & (*#") che viene inserto a volte per indicare un breve commento che si estende fino ala fine della riga e non ? interpretato dal sistema. ‘Una-caratteristica che distingue Vambiente R dal corrispoudente ambiente 1.2 Intraduzione al linguaggio R 15 $-Plus, @ il modo is} cui gli oggetti ereati e/o manipolati sono mantenutis in Rad esempio, tutti gli oggetti sono mantenuti nella memoria centrale del calcolatore, mentr¢ sono salvati come file, e quindi memorizzati nella memoria, i massa, solo surichiesta esplicita dell’utente o alla fine della sessione (sempre previa richiesta qplicita). In S-Plus invece, avviene esattamente Popposto: tutti gli oggetti manipolati, sono mantemuti come file, memorizzati quindi allinterno della|memorin di massa del calcolatore. Queste scelte di progetto hanno come censeguenza di rendere R partieolarmente veloce quando opera sugli oggetti, mentre S-Plus risulta essere pit sicuro, in quanto un eventuale bloceo o mal funzionamento non influisce sui risultati fino a quel momento ottenuti che rimangono comungue disponibili per le successive elaborazioni Questo modo di procedere di R fa aumentare Pimportanza delle operazioni di lettura di dati da file e scrittura 0 salvataggio del risultati ottenuti. Lat maggior parte delle elaborazioni, fanno uso di un rieco reperterio di funzioni, i cui risultati possono essere visualizzati sullo schermo oppure memorizzati allinterno di opportuni oggetti, o anche memorizzati su disco. ‘Nota: le fmioni hanno la caratteristica di non alterare eli | ‘oggetti indicafi in argomento, possono invece creare comer sultato dei nuov! oxgeti, Questo MaMa operare rende-pos- sibile Fesame dei valori generati, c la possibilith se si ritiene opport men questi Toro valor} attraversi_una cit istruzion Le funzioni sono raccolte in modo omogeneo in opportune librerie, mantenute in genere nella sotto-directory "library", definita all'interno della directory tusata per mantenere il sistema sul caleolatore del’ utente. Queste librerie sono chiamate package e sono strutturate & loro volta in forma di sotto-directory. Uno di questi package che prende il nome "6ase”, viene ad assumere una particolare importanza in quanto contiene le principati funzioni del linguaggio, Tunzioui uecessarie ad esempio, per poter effettuare le normali operazioni di Tettura e scrittura dei datida e'sg file. Questo package, a differenza di altri, viene caricato automaticamente dal sistema al momento della attivazione di ‘una normale sessione di lavoro. Per poter acquisire una basilare conoscenza di R, tisulta pertanto importante conoscere sia il linguaggio con : suoi operatori, sia prendere conoscenza e confidenza delle principali funzioni disponibili. B inoltre importante sapere identificare e utilizzare all’occorrenza anche le altre: funzioni disponibili in modo da riuscire ad affrontare i problemi che si intende risolvere SS —_—ULUUUO—— 16 1 Introduzione al sistema R 1.2.2 Un breve assaggio sulle possibilita offerte Linterattivita del sistema R consente di imparare ad usare il linguaggio Pambiente semplicemente provando ed esaminando le risposte che sono forni- te. Questo modo di operate "per prove ed errori” consente di comprendere come il sistema risponde, anche in presenza di richieste non corrette. A titolo di esempio viene ora illustrato i modo con cui un utente pud interagire con la console del sistema: se si prova a scrivere l'espressione 10#2-3 inserendola dopo Vindicazione ">" 0 prompt usato da R per indicare la propria disponibi- lita a ricevere un comando, e terminando con la digitazione del tasto Invio, si ottiene il risultato qui riportato: > 1092-3 4 expressions aritmetica (a 17 come si vede, output ottenuto dall’esecuzione del comando viene visualizzato immedintamente sulla stessa console dove ® stato scritto il comando, e appare precedluto da tun indice racchiuso tra parentesi quadre; il significato di questo contrassegno sari chiarito pit avanti nel testo. Le espressioni aritmetiche anno uso degli usuali 4 operatori aritmetici + - * / a cui si aggiungono i due operatori: 1/% e 1h necessari per poter eseguire divisioni intere in modo da coftenere il quoaiente c il resto della divisione. > 26/4 # divisions reale tl 6.5 > 26i/ia # divisione intera ul 6 > Der # resto della divieione intera 4i 28 diviso 4 a2 {A questi operator, si aggiungono infine, Poperatore di elevamento a potenza Poa (Crrequivalente + la funzione sqrt ce consente i ealeolo delle radici Gquadrate Tutti gi operator descrittrispettano couunque le ustall regole UF precedenza: prima sono daborate le eventual operazion! di elevamento a poten, quind le moltipticzionte division e per ultime, le addizionie le ottraziont sono comunque disponibile parentesi rotonde per consentie di “Iterare, nel caso i tenga opportuno, Vordine di esecusione delle operazion. Nel caso st desideri ad esempio, calcolare Tespressione: $22, essa dovra exsere sertta in R utilizeando la form > (395)/0-8) tn 1 linguaggio mette inoltre a disposizione un tango insiome di funzioni mate- rmatiche di cu le pil sate sono: 1.2 Introduzione al linguaggio R wv Fanzone Exempt are) 53 > sqrt (9) tla ‘abs0 TPE —TaeT ATH BBO || > abs I= 1aeT=TTAY (11 236 =O BOS TEAST > exp (20-395) (1) 148.4192 [Teg Tog, 10 2502 > Togtioy - (1). 2.302586 TozO Tog, 10 3321 > Toga (z0) (11 3.321928 TogioO ogg 107 > TogiO (oy ~ lt ain Sinla/a) > 0707 > sintpa/a) (a) _0. 7071068 e080) wales) oT > coe (epi) wt « cosl via per anche Ie altre funzioni trigonometriche dirette che compren- dono altre a sin() e cas(), anche tan(); inoltre sono disponibili le funziont tri- gonometriche inverse (asin(), acos(), atan()), le iperbotiche dirette (sinh(), co- sh), tanh()) inverse (asinh(), acosh(), atanh()). B definita anche la costante ‘r identifcata. dal nome pi Un breve cenno deve essere posto su aleuni caratteri speciali utilizzati in aleune istruzioni dal Iinguaggio e non presenti nelle tastiere italiane. Tn tali situazioni per poter digitare uno di questi caratteri ® necessario attivare la tastiera numerica di destra digitando il tasto Num-Lock, posizionato di solito in alto sulla destra, quindi: «il carattere ~ (tilde) si attiva tenendo schiacciato il tasto Alt e digitando sulla tastiera di destra il numero 126 ‘il carattere { (parentesi graff aperta) si attiva tenendo schiacciato il tasto Alt e digitando sulla tastiera di destra il numero 123, ‘+ il carattere } (parentesi graffa chiusa) si attiva tenendo schiacciato il tasto ALt e digitando sulla tastiera di destra il mumero 125 La creagione di un oggetto, cio’ di una nuova variabile, viene eseguita dal sistema al momento della asseguazione del valore; in R tutte le variabill pos. siedono due attributi interni, il "mode" ¢ la lunghezza "(length)". Il primo TNT eee 18 LL Introduzione al sistema R individua il tipo base (numeric, character, complex o logic) di ciaseun elemen- ‘to che compone Poggetto; il secondo indica il numero di elementi che formano Voggetto. Ad esempio: > ac-29/ > nome<-"Rose: > mode(a) [1] "mumeric* > mode(nome) [1] "character" > Lengtn(a) tt > Lengen nose) tlt Sueli oxgetti dei diversi tipi, possono essere applicati anche gli operatori re~ lazionali che consentono di verificare situazioni di uguagliauza ==, di diver- sita t=, di minore <, di minore o uguale <, di maggiore >, di maggiore 0 rygnale>=; a questi si aggiungono poi tre eperatori logict & (AND), | (OR) © P(NOT) tramite cui & possibile esprimere confronti di maggiore complessit, ad esempio: (1) TE >aco #4 & negative? (1) FALSE, > 4>10 ka < 20 #4 & comprago tra 10 © 207 (1) TRUE >a # infatei 11 valore ai d 8: Ui) 8 Nota quando di eseguono confronti & facile commettere errori, in particolare ‘quando si usa Poperatore di uguaglianza: pud aocadere di serivere, fad esempio nome="Roesi" al posto di nome=="Rossi"; in queste situazioni il linguaggio non” segnala errori, ma al posto di eseguire hn controllo, modifica i valore della variabile di sinistra, Rossi" ‘« quando si esegue un confronto usando Voperatore minore ("<") ri- spetto ad un valore negativo: come ad esempio -10, risulta errato scrivere 4-10 in quanto il Hinguagaio interpreta Vistruzione come ‘una richiesta di assegnare a."d” i] valore 10, in questo caso & ne- cessario serivere la relazione racchiudendo il valore all"interno di tuna copia di parentesi conde: d<(-10) 1,2 Intraduzione al linguaggio R 19 Le variabili di tipo carattere mantengono come valore una stringa di ca ratteri, delimitata dal carattere doppio apice ("). Da notare che Ia funzione che calcola la lunghezza (Length ©) non calcola il numero di caratteri presen- tinella stringa, bensl il numero di stringhe contenute nella variabile, $i pud anche notare che il risultato deli’elaborazione della parte desta. della fras viene memorizzato all'interno dell‘oggetto indicato (variabile) nella parte sini stra (prima dell'operatore di assegnazione <-), mentre nessun risultato viene invece riportato sulla console dell'utente. Il valore contenuto in una variabile, sia essa sealare o meno, pud essere visualizzato semplicemente ndicandone i nome e terminando con un comando di fnvio: (1) "Rossi" >a te) 11.5 > 1s0 (1) "a" none" Una variabile di tipo carattere che mantiene come valore una st:inga di carat teri pud essere manipolata tramite apposite funzioni qual: * paste(..., sep= ) consente di concatenare tra loro "in wna unica strin- ga” una successione di oggetti (0 variabili che saranno rel caso prima convertite in stringhe); viene usato come separatore il carattere indicato dall'utente tramite il parametro sep=, oppure se non esplicitato, viene ‘usato il soparatore di default costituite da uno spazio binneo (° ”) ‘« nehar(x) ritoma il numero di caratteri che forma una stringa x substr(x, inizio, fine) consente di estrarre, 0 anche di sostituire tuna sotto stringa presente allinterno di una stringa x incividuata dalla posizione espressa dai due indici interi inizio e fine. (Atteuzione: la stringa "x" originale non viene modificata dall’operazioae; per richie- dere una sua modifica ® necessario assegnare esplicitameate il risultato, ottenuto a x) © streplit(x, split, ...) @ usata per suddividere la stringa x in una, Tista (vedi eapitolo 2.5) contenente un vettore di elementi costituiti dalle sotto stringhe estratte; queste sotto stringhe sono identificate sulla base della presenza di una sotto stringa riconosciuta come separatore, ¢ in- dicata alla funzione tramite il parametro splits; il confronto pud far uso anche di espressioni regolari (vedi appendice A.5). Si consiglia di TNT 20 1 Introduzione al sistema R applicare la funzione unList() al risultato ovenuto in modo da poter vere il risultato in forma di un piti comodo vettore di stringhe. » sub(pattern, replacement, x, ...) © geub( ...) la due funzioni consentono di identificare e sostituire sotto stringhe all'intemo di una, stringa. Loperazione pud essere eseguita anche sulla base di una "e- spressione regolare” (illustrata in appendice A.5), e passata tramite il primo argomento fornito dall'utente alla funzione; questa sotto stringa viene usata per identificare quale porzione della stringa sara sostituita con urvaltra sotto stringa (indicata attraverso il secondo parameto). terzo parametro individua invece su quale stringa si intende operare. [Attenzione: la stringa di origine non @ in aleun modo modificata dal- Voperazione; per modificare Ia stringa originaria ® necessario assegnare esplicitamente il risultato alla varinbile di origine}. E da notare in par- ticolare che mentze la funzione sub() opera la sostituzione della sola prima occorrenza inconteata, la funzione gsubC) che usa gli stessi para- ‘metri della funzione sorella, opera la sostituzione di tutte le occorrenze presenti nella stringa su cui agisce. fe cat(... , file", sop=" ", ...) concatena e stampa il contenuto delle variabili passate in argomento alla funzione, dopo aver provvedu- to ad eseguire se necessario una opportuna conversione come stringa di caratteri. Questa funzione viene spesso usate per predisporre una op- portuna stampa dei risultati generati all’inteno di un file "seript” ed ‘eseguiti tramite la funzione source(). [B da porre in evidenza in parti- colare, Ia possibilita di usare allinterno della strings generata ¢ in fase di stampa, alcuni utili caratteri speciall tramite cui richiedere "Vandata a ) ola tabulazione che ed presentino una parte frazionatia, di solito sono presentate le prime 7 cifre significative. Una seelta diversa richiede la modifica di questo valore di default, operazio- ne che pud essere eseguita tramite la funzione options (digits=n) dove py" indica il numero di valori decimali significativi che si desidera siano visualizzati quando si presentano dei risultati (vedi paragrafo 1.2.6). capo riga” (che viene espressa mediante la strings (*\t")). Nel caso Ie variabilisiano nui «© print(x, ..) visualizza il contenuto della variabile "x" passata in argo- ‘mento; nel easo la variabile sia di tipo numericoe sia indicato al momen- to della chiamata anche un secondo argomento numerico, questo valore viene assunto come numero di caratter! significativi che si richiede siano- visualizaati nel caso specifica 1.2 Introduzione al linguaggio R a A titolo di dimostrativo, vengono presentate le seguenti frasi che illustrano aleune tra le possibilita offerte dalle funzioni sopra descritte: > personac-paste(none,"Luigi") # concatenaziene 4i stringhe > persona (1) "Rossi tuigi* > ide-paste(persona,"Via Roma", "13 > ad (1) "Rossi Luigi;Via Roma;13;Padovat radova",c0p="; > nohar (id) lunghezza della atringa "id" (11 30 > pesstreplit(id,eplite*;") # divisione ir sotto stringhe > str(p) List of t '§ : chr [1rd] "Rogsi Luigi” *Via Roma" "13" "Padova" > pvcruntist(p) # trasforma 1a Lista in un vettore di stringhe > pr [1] "Rossi Luigi" *Via Roma" "13" "Padova" > substr(id,nchar(id)-S,nchar (4) # [i] "Padova" > eubstr id nchar(i4)-8,nchar(44)-T)<—" > sd [1] "Rossi Luigi;Via Rowa;45;Padova" modifica di sd > sub("Rona” ,"Venezia®,id) (3) "Roees Luigi;Via Venezia;45;Padova" > cat ("La strings id ® composta da: ",nchar(‘¢)," caratteri\n") La stringa id & conposta da: 30. caratteri > print(pi/2, 4) #4 primi 4 car, elgnif. di pigreco/2 U1) Lert serazicne di sotto strings 5" # modifica di $4 Sono disponibili anche le funzioni grep() e regexpr() che possono essere tusate per ricercare espressioni 0 sotto espression’ sulla base anche di forme cho fanno uso di espressioni regolari (vedi append.ce A.5). Si rammenta che ® sempre possibile ottenere maggiori informazioni sul- le diverse funzioni messe a disposizione dal sistema, 0 comunque disponibili, richiedendo di esaminare la documentazione allegata, Questa operazione si attiva scrivendo da console il nome della funzione immediatamente preceduto da un punto di domanda, oppure tramite il comando help () fornendo in argo- ‘mento il nome della funzione a eui si interessati. La documentazione fornita dal sistema si presenta organizzata in uno stile standard. Le diverse infor- mazioni riportate sono raggruppate per sezioni, ognuna delle quali esprime un aspetto del comando. Vengono descritte qui di segaito le sezioni comunemente presenti allinterno di uno schema di documentazione tipo: TT 2 1 Introduzione al sistema R Description: presenta una breve descrizione sull'uso della funzione Usage: fornisce la sintassi corretta che pud essere usata nella chiamata del- a funzione, indica inoltre quali argomenti sono previsti, presentando per ciascuno il nome e Veventuale valore di default secondo la forma noze=valore “Arguments: sogue la lista degli argomenti ciascuno accompagnato dall’indi- cazione del tipo di valore che deve essere fornito e dall'obbligatorieta 0 copzionalita dello stesso Details: documenta i dettagli riguardanti il modo con cui viene eseguita la funzione ‘Value: indica il tipo di risultato generato Note: avvertenze utili che riguardano il risultato generato References: presenta i principal libri o documentazione in cui viene deseritta la metodologia usata o sono spiegati i risultati ottenuti See Also: indica quali altre funzioni di R sono in qualche modo collegate Examples: fornisce esempi di uso della funzione. Questi esempi possono es- sere eseguiti digitando il comando example (nomeFun), dove "nomeFun” indica il nome della funaione la cui documentazione contiene gli esempi che ei desidera vedere esoguit [A titolo di esempio, viene qui presentato un esempio di documentazione fornita dal sistema in risposta alla richiesta ?mean o help(mean) ean package:base R Docunentation Aritheetic Mean Description: Generic function for the (trimmed) arithnetic meen. Usage: wean(x, ---) ## Default $3 method: nean(x, trim = 0, na.rm = FALSE, 1.2 Introduzione al linguaggio R 23 Arguzents x: An R object. Currently there are methods for numeric data franes, mineric vectors and dates. A couplex vector is alleved for "tria = 0°, only. trim: the fraction (0 to 0.5) of observations to be trinned from feact end of x’ before the ean is computed. nara: a legical value indicating whether "WA? values should be stripped before the computation proceeds. : further argusents passed to or from other methods vaiue: For a data frame, a naxed vector with the appropriate sethod being applied coluan by column. Tf ‘trim’ ie zero (the default), the arithmetic mean of the values iz x? is computed. If ‘trim! is non-zero, a eysnetrically trimned mean ie computed with a fraction of ‘trim’ observations deleted from each end before tke mean is computed, References: Becker, R. A., Chambers, J. M. and Vilke, A. R. (1988) The New $ Language. Wadsvorth & Srooks/Cole. 12 Mao: *weighted.nean’, *mean.POSTXct? Examples: x < (0:10, 60) xn & meant) c(m, mean(x, trim * 0.10)) dataUsArresta) mean(USArrests, trim = 0.2) Riprendendo l'esame del sistema, & bene ricordare che R 2 in grado di ‘manipolare sia valori reali molto grandi che molto piccoli. Come & noto, la notazione scientifiea ben si presta ad esprimere questo genere di informazioni: > va < -2.50r10 # equivale a 25000000000 [1] -2.6e+0 > voe2. 730-12 # equivate # 0,00000000000273 > vb U1) 2.73812 24 1 Introduzione al sistema R Durante il calcolo, i risultati possono venire ad assumere a volte, valori anche non finit, come -Foo rappresentati in R dalle indicazioni Inf o ~Inf, oppure vvalori non numeriei rappresentati mediante la notazione NaN ad indicate "Not ‘a Number". $i cousideri ad esempio il seguente frammento di codic > ndaric-s4 > ve-23,79 > 26-46-2428 > risev/2 > rie (a) Int > rieris/exp(ris) >xt U1) maw sistema mette a disposizione la funzione 1s() che consente di conoscere quali oggetti sono presenti nello spazio di lavoro dell'utente (workspace); esiste anche la funzione 1s.str() in grado di visualizzare con maggior dettaglio la struttura interna degli oggetti esistenti in quel momento nel workspace. > ie.ste() dati: mun 54 xis: mum Inf i mun Waal ver nun 23.8 va: nun =2.5et10 vb: nun 2.73e-12 zi un 0 Ambedue le funzioni 1s() ¢ 1s.str() se usate senza parametri, riportano tutti” gli oggetti definti dal? utente e contenuti nello spazio di lavoro, tuttavia, ‘amimettono anche uso dell'opzione patterns (0 della sua abbreviazione pat=) cche consente di restringere la lista ai soli oggetti i cui nomi contengono la stringa di caratteri indicata dopo Popzione: > le.etr(par="r") rie | nun Inf ri: mux Mall In ambedue le funzioni, ® possibile restringere ulteriormente la lista prodotta, in modo da visualizzare gli oggetti i cui nomi “iniziano” ad esempio, con una precisa successione di caratteri: 1s(pat="“no"). Si fa notare che il sistema mete a disposizione anche la funzione stxQ in grado di visualizzare la strut- tura interna del particolare oggetto indicato, e ritornare le stesse informazioni generate da Le.str(); a differenza della prima, la funzione str consente di 12 Introduzione al linguaggio R 2B cesaminare Ia struttura interna di una specifica variabile ¢ non di un insieme di vatiabili. Ad esempio per conoscere il contenuto della variabile "nome" suflciente indicare il comando: str(noae) al posto di 1s.str(pat="none") I sistema tramite la funaione raQ) rende possibile eliminare dallo spe- zio di lavoro (workspace) gi oggetti che ‘utente ritiene non pitt utili; eos aud esempio, con il comando ra(aeae) la variabile identifcata da quel preciso nome” viene ad essere cancellata. Attraverso questo comando il sistema 8 in grato di liberare la memoria utilizaata dall’oggetto indicato, in modo da rendere possibile un suo successivo riutilizzo, In analogia con quanto detto per le funzioni 160) ¢ 1s.str(, mel caso si desideri cancellare pitt di una variabile con un unico comando, ad esempio tutte quelle il ext nome inizia con una certa sequenza di caratter, 8 sufficiente inserre un comando sul ti- po: ra(iist=1e(pat=""var")). e tutte le variabili che presentano un nome che iniaia con la sequenza indicata, saranno cancellateirrevocabilmente, I sistema consente di definire ed usare anche variabili che mantengono al proprio interno strutture complesse, quali vettori, matric, array, interi data set, liste di informazioni e serie storiche. Un vettore (veefor) ad esempio, 2 un oggetto che contiene una successioné di valori, tutti appartenenti allo stesso tipo; cos) pure sono formati da valori tutti appartenenti allo stesso tipo, un oggetto che prende la forma di una matrice (matrir) realizzando cost tuna tabella a 2 dimensioni di valori, anche in questo caso tutti strettamente ppartenenti allo stesso tipo; per quanto riguarda la struttura array (array) essa rappresenta mia semplice estensione della matrice consentendo un mumero 2 [a struttura usata per mantenere i date set prende i nome di data frame si presenta come una tabella bidimensionale composta da una o pid eolon- ne, che possono essere viste anche come vettori caratterizanti tutti dal’avere ‘uguale Tunghezza, anche se ciascuna colonna pub mantenere un tipo diverso i dati. Sono disponibili anche oggetti di tipo List che si presentano come dei vettori di altri oggetti o element, ognuno dei quali pud avere una propria imensione e mantenere una tipologia di dati diversa. Assumono la forma di listo, spesso i rsultati generati dalle funzioni statistiche, quando vengono contenere una pluralita di informazioni diverse, che possono formare a volte complesse tipologie di dat 1.2.3 Operazioni Il sistema mette a disposizione dell'utente un'ampia gamma di funzioni, de- nominate funzioni as.tipo in grado di trasformare gli oggetti da un tipo ad un a — ——————— 26 1 Introduzione al sistema R, altro modificando in modo adeguato i corrispondenti attributi. L'indicazione del tipo specificato dopo la premessa "as. stabilisce verso quale tipo, Tog- sgetto passato in argomento alla funzione, deve essere convertito. Le rogole di conversione sono piuttosto logiche, tuttavia esistono conversioni anche note- ‘volmente complesse che possono essere applicate a livello, non solo di semplic dati, ma anche di strutture di dati, Nel presente capitolo vengono illustrate le conversion’ applicabili a livello di singolo dato, mentre quelle che coinvolgono strutture come vettori, matrici, data frame o fattori sono rimandate ai capitoli in cui tali strutture sono introdotte. Le funzioni as.tipo(oggetto) prima di procedere alla conversione dell'ogget- to indicato in argomento, verifiea che Ia conversione tichiesta sia ammissibile rispetto a quel particolare tipo di oggetto. Ad esempio: > ag.muneric("13") (a 13 > as.muneric(*2c*) [1] NA Warning message: like sntroduced by coercion > ap.numeric(TRUE) ut come si vede, la funzione as.nuneric() viene applicata ad due stringhe di caratteri e tichiede di procedere alla conversione del contenuto della stringa nel eorrispondente valore numerico; tuttavia le due stringhe contengono valori diversi, la prima di soli valori numerici, la seconda presenta dei valori alfanu- tmerici. La funzione mentre @ in grado di convertire in un numero il contenuto della prima stringa, non @ in grado di fare altrettanto con la seconda. Le funzioni di conversione sono in grado di verificare il contenuto passato in argo- ‘mento e agiscono in modo diversificato a seconda dal tipo di oggetto indicato. (Qui di seguito vengono illustrati quali risultati si ottengono applicando alcune semplici conversioni su dati elementati: Funzione Regole di conversione | Bvempi ag character | 1, 2,0" NM. > as. character (31.2) ‘TRUE — TRUE" (ay "31.2" FALSE "FALSE" ‘as. integer( |v. reale — parte itera > as integer(@. 18-2) i 9 ‘as-logical | 0 FALSE > ag.iogieal @3.2) altro val. —+ TRUE, (1) TRUE "TRUE 0 *T" =» TRUE "ALSE* 0 "F" —+ FALSE, 1.2 Introduzione al linguaggio R 2 aemumerieO [PES AP oc Luvs [> aa minerieO SEP satytbty ot a) “31.2 mae 1 > as muserie(*due") FALSE — 0 1) Ra i arrotondamento e di troncamento 1.2.4 Operazioni Nei calcoli reali spesso si ottengono valori che presentano lindicazione di parti decimali dopo la virgola (0 meglio del punto decimale); accade a volte che nei caleoli risulti nevessario convertire questi valori nei corrispondenti interi, ‘ottenuti eseguendo delle operazioni di arrotondamento o di troncamento. Per ‘consentire qjieste operazioni, il sistema mette a disposizione dell'utente le se- sguenti quattro funzioni floor) Arrotonda il valore passato in argomento allintero inferiore rune (x) ‘Tronea il valore eliminando Ia componente decimale round(x,igite=0) Arrotonda allintero pitt vicino. Se viene fornito an- ‘che un secondo parametro, V'srrotondamento viene ‘effettunto al decimale indieato da questo parametro costing (x) ‘Arrotonda allintero superiore (si noti ehe il comporta- mento ® diverso da round(x) nel easo in cut i valori sono negativi) Un esempio di risultati che si possono ottenere viene illustrato nella se- uente tabella: Floor (a) | trune(#) | round) | round, 3) | coiling@o 5 s s 3499) 9 9 3 3 8.499) 8 8 8 8 85 9 9 8 3 “85 8 8 8 9 3siL 9 9 8 9 “8511 8 1.2.5 Operazioni sulle date Le date rappresentano un tipo di informazione presente molto frequentemente allnterno dei questionari; vengono in genore utilizzate per individuare mo- ‘menti temporali particolari da cui & possibile desumere sucoessivamente altre informazioni quali ad esempio, l'et& det soggetti, la loro anzianita lavorativa, EEE 28 Lntroduzione al sistema R Veta al momento dell'assunzione, ...Uno dei problemi principali che si deve affrontate quando si opera con le date, @ costituito dal formato adottato per rapprosentare questo tipo di valore, formato che spesso varia da paese a pacse, ca volte & legato anche a particolari scelte personali fatte dal rilevatore. $i rammenta che in aleuni zone le date sono espresse inserendo prima anno, ‘quindi il mese ed infine il giomno (°2005/7/14"), mentre in altre parti del mon- do si usa indieare prima il mese, poi il giorno ¢d inne U'anno ("7/14/2005"), ‘oppure come avviene in molti paesi latin come I'talia, si usa prima il giomo pot il mese ed infine Panno ("14/7/2008"). A tutto questo si aggiungono poi altre particolarita come quella di indicare il mese usando una forma numetica, oppure esplicitandone il nome usato nella lingua nazionale (°2005/luglio/14"), © anche la prima parte di questo nome. Per ovviare a tutta questa variabilita, il linguaggio metteva a disposizione fino alla versione 1.9.0 una particolare li breria di funzioni denominata “date” che nelle versiont successive & confluita, nella libreria di base del sistema, “La scelta compiuta dai progettisti del linguaggio & quella di richiedere la costruzione di uno specifico tipo di informazione denominato "Date" tramite tuna particolare fanzione che consente di indicare il tipo di formato pitt appro- priato adottato dall utente, Tl formato usato per default nell’indicare le date adotta la convenzione tipicamente anglosassone "aaaa-an-ge" in cui viene espresso prima I'anno, quindi il mese (in forma numerica) ed infine il giorno, entre il carattere "-" viene usato come separatore dei tre camp; allinterno del sistema la data ® invece mantenuta sotto forma dium intero che rappreset ta il numero di giorni intercorsi tra una una data iniziale (che pet convenzione ® stata scelta nel 1/1/1970) e la data indicata, > ac-ae,Date("2005~7-23") > atr(a) Clase Date’ num 12987 > beras.Date("1969-12-31") —# NB: prima del 1/1/1970 > str(b) Clase "Date? mum -1 Le principali funzioni che possono essere applicate ad oggetti di tipo data ‘che generano delle date sono: ‘as Dave("2005-07-26")] Funsione di oonversione che genora un oggetto di tie po "Date" sulla base di una data espressa in forma- to anglosssone "anaa-nm-gg” nella stringa passata in argomento. B eonsentito indicare la data anche in for- ma "aaaa/an/gg” usando come separatore il carattere slash. 1.2 Introduzione al linguaggio R 29 as Date (data" format="formato”) aun oggetto di tipo "Date” applicanda alla appre ‘conversione espressa tramite il parametro onthe Ge ritoma in una stringa di earatter il nome (Rallano) del reve indicato nella variable di tipo Date x passata in ingresso alla funzione ye Dato Grea un oggetto di po Bate dle mantiene Pindicazione della data corrente Format Modifica 11 Tormato con cui viene presentata Ta data contenuta nella variabile passata cote primo argomen- to; le indieazioni sul formato da utilizzare sono passate attraverso il secondo argomento La stringa di caratteri associata al parametro format= nella funzione as.Date() deve indicare la struttura usata nella data, e tramite particolari simboli, il suo formato; in questo modo Ia funzione @ in grado di trasformare la data indicata in argomento, nella forma standard interna adottata dal sistema ("aaaa-mm-gg” ). > as.Date("23 maggio 1977") # formato: gg mese anno: errato Error in fronchar(x): char string is not in a standard unambiguous format > as.Dave ("23/5/1977") # formato gg/mm/aaaa: errato [1] "0023-05-1 > natocras.Dave("23 maggio 1977" format="fd 48 WY") > nato 4 tradotto nella forma corretta La) "1977-05-23" I simboli assumono la forma Yéc, dove "e” @ rappresentato da un carattere che consente di individuare il tipo di scelta; qui di seguito sono elencati i simboli che possono essere usati nella stringa passata al parametro format: Yea [il giomo sotto forma numeriea: 1-31 ‘a nome del giorno della settimana, in Tormato abbreviate Waliano: Tun, ‘A | nome det giemo della settimana in Tomato non abbreviato italiano Iunedi, martedi, mercoled, Wan | numero det meses 1-12 Vib _| nome del mese in formato abbreviato Haliano: gen, eb, mar Jas iuese in Tormato non abbreviato italiano: gennaio, fedbralo, marZ, 30 LIntroduzione al sistema R 5] ede ifr nal che individuane Panne. Attensiono par6, in queato cazo i valor superiai o uguali a 70 sono fati eorrispondere con il 20° secolo, ‘quelli inferiori a 70 vergono considerati appartenenti al 21"° secolo (ad fesempio as. Dave "28/7/82", format="%d/a/y") — "1982-07-23", rmentre as Date("23/1/62", format~"a/‘ta/'ty") — "2062-07-23") SY | Tanno espresso in fora estesa (con quattro eit) Su variabili di tipo Date possono essere applicati anche gli usuali operatori di somma e sottrazione (+ @ -) con le seguenti avvertenze: ‘applicato @ due date, genera come risulta- ‘to un intero che rappresenta il numero di giorni che intercorre tra le due date applicato ad una daia e ad un intero, gene ra come risultato ura miova data ottenuta sottraendo dalla prima il numero di giorni indicato dall’intero ‘applicato ad una data e ad un intero, gene- ra come risultato una nuova data ottenuta ‘aggrungendo alla data indicata il numero di siorni espressi dall'intero Toperatore di sottrazione - Toperatore di sottrazione - Toperatore di somma + B da notare che non @ invece definito Poperatore di somma tra due date. Le operazioni disponibili rendono possibile il caleclo di nuove informazioni fttenute operando sulle date ed eventualmente sul numero di giorni; ® cosi possibile ad esempio, conoscendo la data di nascita di un soggetto, calcolare Ia sua etd attuale espressa in anni compiuti > oggic-Sys.DateQ) 4 data odie:na in formate interno > ogi fa} "2008-07-18" > cat("Oggi &" format Coggi "KA Yd YB 2Y"),"\n") # in formato utente Oggi @ lunedi 18 luglio 2005 > eraccae. integer ((oggi-nate) /365) > er (1) 28 # im anni compiuté 1.2.6 Valori predefiniti usati dal sistema 1 sistema utilizza un’ampia serie di valori pre impostati (detti anche di de- fault), ciascuno dei quali viene usato per definire aspetti o funzionalita par- 1.2 Introduzione al linguaggio R 31 ticolari del sistema, quali per esempio, il nome dell’editore richiamabile dal- interno della console dellutente, il tipo e le caratteristiche delle pagine usate nelle operazioni di stampa, Tl sistema mette a disposizione Ia funzione options() per ottenere, ed eventualmente anche modificare questi valori, Una informazione che un uten- ‘te pud essere a volte interessato a cambiare & rappresentata dal numero di ‘caratteri che vengono usati per rappresentare un numero reale quando viene visualizvato da R. Ad esempio, se si richiede di caleolare - v2 si ottiene: > piragrt (2) [1] 4.442683 cche come si vede, viene espresso mediante 7 caratteri numerici. ‘Tuttavia il risultato potrebbe essere una parte arrotondata di un valore costituito da un ‘pumero maggiore di cifre decimali, 0 addiritiura potrebbe essere la rappresen- tazione di una parte di un valore periodico costituito da un infnito numero di cifte. Se si desidera ottenere una maggiore precisione, o viceversa si desidera, visualizzare un numero minore di cifre, & necessario procedere alla modifica cl default usato dal sistema, operazione questa che pud essere realizzata fa- tcilmente usando sempre la fimzione options(), come si vede esaminando il seguente frammento di codice: > oldOp<-optionsO > str(old0p) Laet of 38 # salva le impostazioni originarie # sloune iapostazioni presenti $ prompt chr $ continue pohr"#* 8 editor chr "notepad™ § expressions amt 500 8 width int 80 8 digits int 7 . Le altre > options Caigtt > ploagre a) {a} tazenzsaesseo7 > options aigite-2) > pleoget@) i att > options) > pheagee cD) ti) a.aaaee bene tuttavia far ilevare che il valore indicatotramite a funsione options () viene considerato una rchiesta non imperative, pertanto& possibile che in al- Cun casi sistema present isultatiuiizzando un mumero divers di cartter # riprietina tutte le opzioni original are 32 1LIntroduzione al sistema R 1.3 Esercizi 33 9. Come si pud stampare i risultati di una elaborazione generati nella console? da quello indicato, nel caso questo sia ritenuto pid opportuno, Si avverte inok- tre che la modifica introdotta rimane attiva fino a quando lutente non la cambia utilizzando una esplicita operazione contraria, oppure ordini il ripri- stino dei valor! iniziali, come nel caso esemplificato; la scelta comunque cessa i essere valida con Ia terminazione della sessione di lavoro. 10, Come 2 possibile modificare la quantitA massima di memoria utilizzabile dal sistema al momento della sua attivazione in Windows? Nota: Nel caso si deideri che ad ogni avio di Ri valor usati per default dal sistema siano diversamenteinizalizeati, ¢suficiente modificare il file "Rprofile. eito” che si trova nella directory "C:/Programmi/R/R- 2.3,0/ete" (se questa tla versione di R sata). Nol file si possono inserite gi opportuni comandi che si desidera siano eseguiti automaticamente dal sistema all'atto della sua attivazione. Ad esempio 11. E disponibile nel sistema un introduzione ad R in inglese? E se si consultando il documento verificate chi ne 2 Pautore 12, Trovare quali parametti prevede la funzione paste (sono contrassegnati sotto l'indicazione Usege:) 13, Trovare quale funzione potete disporre in Riper eseguire una factor analysis. Come fate a scoprirla? options (digitse4) # nodifica £1 n, di cifre visualiz getvd("D:/Prove/Resempi/Corso") # modifica la dir. di lavoro 14, Calcolare il risultato della seguente espressione 6+ /3¥— 1 [PS: la radice quadrata @ calcolata dalla funzione sqrt()] (Ris. 59.6563) 13° Esercizi 15, Caleolare il risultato della seguente espressione 3 + 5¥7-®5-? (PS: la 1.3.1 Domande radice quadrata é calcolata dalla funzione sqrt] (Ris. 8) 1. Quale @ la directory di lavoro che viene assunta dal sistema quando si 16. Caleolate il risultato della seguente espressione g!%5 attiva R da desktop? Come poosibile dotorminarle? S58 (Ris. 5.5) 4 * (PS: la radice quadrata 2 caleolata dalla funzione sqrt (, entre Vesponenziale si ottiene dalla funzione exp() e il valore di r dalla costante pi”) (Ris. 0.2189442) 17, Caleolate i rsultato della seguente expressione Je - 2, Come si pud cambiare la directory di lavoro? Hoolate tzuente esprossion® Jaz 3. Cosa fa il comando Salva area di lavoro... 4, Che genere di file viene creato quando si attiva il comando "Salva cro- nugia =? B coon cote! 18, Calolae il oultato dll soguenteeopessione Hz; provate a apie 5. Cosa contiene il file generato con il comando "Salva su File..."? «gare il motivo per cui si ottiene questo risultato, (Ris. Inf) 6. Come si pud sapere quali sono i server in Internet usati come mirror di 9 lare il risultato della: espressione H=t*!?-4 (pis, Come 8 19, Caleolaeilvisutato della seguenecpresone HEE *E-E (nis, 0.406860) 1. Sempre nelle FAQ di R tzovare se oltre ai manual di coredo del site 20. Calolae i sultato della seguente epresiono 8B (Ris, 3.918043) ‘ma, esistono altri documenti che trattano aspetti o tecniche statistiche wwe particolari elaborate usando R? nas 21. Caleolare il risultato della seguente espressione —"f-2—; provate a 8. Consultando le FAQ ® possibile sapere quali altri packages sono dispo- nibili presso il CRAN, oltre a quelli gid presenti nel sistema? spiegare come mai si ottiene questo risultato, (Ris. NaN) __ 22, 23, 24, 26. 2. LLintroduzione al sistema R Caleolare la circonferenza e l'area di un cerchio di ragigio 12 [PS: la ccostante 1 (pi greco) si indica con pi | (Ris. circonferenza: 75.39822, ‘area: 452.9893) fee, c= ed infine «1 ¢ 2y=="=¥F—¥2e (ps; ta radice quadrata & calcolata datla funzione sqrt, mentre Vesponensiale si ottiene dalla fusziowe exp0)). (Ris. bs 5.5, a! 0.5804576, c: -1.295980, 21: 0.2196927, 22 9.694916) Partendo dalle seguenti variabili: b Supponendo di sapere che il ragaio "r” di un cerchio & Iungo 7.12, si desidera calcolare I'atea della figura; si richiede che il risultato sia arrotondato alla soconda cifra decimale (dopo la virgola). (Ris. 159.26) |. Partendo da variabili scalari usate per mantenere le seguenti informazioni anagrafiche relative a uno determinato studente: nome: Giovanni Andrea; cognome: Carletti; indirizzo: Vie S. Filippo; numero 741; comune: Vigevano create una nuova variabile di nome stud in cui, all’interno di una unica stringa, siano presenti nell'ordine, le generalita dello studente, il suo indirizzo completo e la sua matricola (477225/PS) che provvederete ad aggiungere in coda. (Ris. "Carletti Giovanni Andrea Via S, Filippo 741 Vigevano 477225/P8") Partendo dalla stringa contenuta nella variabile stud ottemuta nel pre- cedente esercizio, create la varinbile studi in modo che contenga le in- formazioni presenti in "stud” previa sostituzione del nome Andrea con nome Maria (Usare la funzione sub()]- (Ris. ”Carletti Giovanni Maria Via $. Filippo 741 Vigevano 477225/PS”) ‘Memorizzare nella variabile dc i primi versi della Divina Commedia: "Nel ‘mezzo del cauuuin di nostra vila 1 diritta via avea smartita”. Si chiede di determinare di quanti caratteri & composta, poi di memorizzare nella variabile dct il contemuto della stringa precedentemente creata, sostituendo perd tutte le sotto stringhe composte dalla successione di caratteri "ri con una coppia di caratteri °X". Si chiede infine di visualizzare gli ultimi 10 caratteri presenti nella variabile det. Quale sarebbe stato il risultato se si fosse usata la funzione ritvovai in una selva oscura che Ia 41.3 Esercizi 35 ‘eub() al post o di geub() (0 vieeversa)? (Ris. 100, del: "Nel mezzo det cammin di nostra vita mi XXtrovai in una selva oscura che la diXXta via avea smarXXta", "a smarXXta") 28, Caleolare quale anzianita (in anni compiuti) ha maturato fino ad oggi un lavoratore assunto il 29/11/1972. (Ris. Il risultato dipende dalla data in ‘cui fate ta domanda) 29. Sapendo che una persona ® nata il giorno di Natale del 1974, e si ® laureata il 12 maggio del 2001, si desidera sapere quanti anni (in anni compiuti) aveva al momento della laurea. (Ris. 26) 30. In che data cade il 55 giorno dopo il Natale del 2005? (Ris. "2006- 02-18") 31, Determinare quanti giorni intercorrono trail Natale del 2005 ed espresso nel formato standard usato nel linguaggio, ¢ la Pasqua successiva che si ipotizza cada il "16 apr 2006”. (Ris. 112) 1 2 Risposte e procedure usate 1. La cartella su cui ® stato installato il sistema ® probabilmente: :\Programmi\R\R-2.3.0 dove il nome della directory "R-2-3.0” pud cambiare sulla base della pattioolare versione in uso, Il comando usato per ottenere questa in- formazione @ > getwd() eseguito prima di compiere qualsiasi modifica relativa alla directory di lavoro. 2. Attivando il comando Cabia directory... disponibile allinterno del ‘menu File, oppure utilizzando opportunamente il comando > setwa() 3, Salva "Vimmagine” dello stato del sistema nel momento in cui viene attivato il comando. Il comando "Carica area di lavoro...” opera il ricupero della situazione del sistema salvata precedentemente, in modo da rendere possibile laripresa delle elaborazioni in una sessione di lavoro suecessiva, partendo dalla esatta situazione lasciata nel momento in cui era stato attivato il comando "Salva area di lavoro..." ee OOOO 36 1 Introduzione al sistema R 10. u. 2, Il ile generato @ testuale, pud essere esaminato pertanto usando un qual- siasi editore (ad esempio il Blocco notes); contiene la successione dei comandi inseriti dall'utente fino al momento in cui ® stato attivato il comando "Salva cronologia. ..” I file generato é di tipo testuale, ¢ come tale pud essere esaminato 0 mo- dificato usando un qualsiasi editore. Contiene tutto quello che appariva nella console dell’utente al momento dell’attivazione del comando; ripor- ta quindi I’indicazione di quali elaborazioni sono state via via eseguite e dei corrispondenti risultati ottemuti E sufficiente consultare le FAQ di R per ottenere al punto 2.10 la lista di alcuni tra i mirror prineipali disponibili in rete. Per avere Vintera lista divisa per nazione, & sufficiente attivare il comando Inposta mirror RAN... presente all’interno del menu "Pacchetti” di R. Le FAQ di R presentano nel punto 2.7 una prima lista di testi che docu- mentano I'uso di Re di $ nella risoluzione di classi di problemi. Altra documentazione pud essere trovata nel sito del CRAN esamninando alla sinistra della pagina, sotto la dicitura Documentations il collegamento Contributed Esaminando le FAQ di R al punto 5 sono elencati i packages gi presenti nel sistema R, quelli disponibili presso il CRAN e raccomandati come possibili "add-on", ed infine quelli esi disponibiliallinterno del proget- to Omegahat (riguardante la statistica computazionale) o nel progetto BioConduetor (che opera nel settore della bio-informatica), Consultando le PAQ di R per Windows al punto 2.11 sono riportate alcune tra le possibilita che Putente pud mettere in atto per "stampare” i risultati ottemuti in fase di caleolo e che compaiono nella console. Consultando le FAQ di R per Windows, al punto 2.9 & possibile trovare il parametro da usat Tl manuale "Introduction to R” pud essere esaminato attivando, dall'in- terno del menu Aiuto, il comando "Manuali (in PDF)’. Gli autori di ‘questo documento sono: W. N. Venables, D. M. Smith. I parametri ammessi dalla funzione paste() sono: paste Pes collapse = NULL) e postono essere determinati attivando il comando help(*paste") oppure 7paste 1.3 Esercizi 37 13, La funzione ricercata @ factanal(stats) ottenuta attivando il comando “Corea nella guida...” presentenel menu Aiuto ed indicando factor analysie, oppure digitando il comandohelp.search (factor analysis) direttamente da console 14. > 6asgrt(3"4-1) 15, > 345° Ceqrt (27-6#3)-2) 16. > 12/(6-3)+(3°2-6)/2 AT. > A/aqrt (2¥pi)*exp (- (16-344) /5) 18. > (2548°2-1)/(12-6"2/3) il risultato "Inf ® dovuto al denominatore della frazione che risulta zero": si ricorda che una divisione per zero genera infatti come risultato un infinito, 19, > (84945) /(12-7)+12-6/8) /(48-44/8°2) 20. > 64(6-9/3)/((25-2)/(4+6)#2) DL, > ((B+C6+4) /2)/ (92-B45~2) )/( (4242) / (5°3~(9°245"2)-19)) il risultato "NaN” dipende dal fatto che sia il numeratore che il deno- minatore ritornano come risultato "Inf", pertanto Inf /Inf non risulta essere calcolabile: la sigla "NaN" sta ad indicare infatti "Not a Number” 22, > reaa > circonterenzac-re2epi > areac-r"Deps > circonterenza 28. > be-12/(6-3)+(3°2-6)/2 > acci/agrt (2epi) rexp(-(45-b¥3)/4) > ce-(asb)/a-b) > x1<-Coregrt (b"2-44a%e))/(24a) > x2<-(~beagrt (b"2-4¥a¥e))/(2ea) 2, > re-7.12 > areaccroud(r2+pi, digi ee 38 25, 26. 27. 28. 29, 31 1 oscura che 1a diritta via avea snarriti 1 Introduzione al sistema R Andirizzoc-"Via 8. Filippo" ppunero<-74t ‘comune<-"Vigevano" stud<-paste (cognone none, indirizzo, numero, comume,"477226/PS") stud studi<-sub("Andrea’ studi Maria" stud) Si usa 1a funzione paste() se la stringa ® scritta su pid righe dcc-paste("Ne) mezzo del caamin di nostra vita mi ritrovai", “in una selva oscura che 1a diritta vie avea suarrita") rnchar (do) dei<-geub tr", "XK" de) act substr (det nehar (dc1)-9,nchar (dct)) Diversita di cosportanento della funzione sub(): sub("ri" "10" de) iol mezzo del camain 41 nostra vi i Mitrovai in una selva assunto<-as.Date("29/11/1972" ,format="%a/a/ hv") (0) sasra-t1-20" > anzianivac-as. integer ((Sys.Date()-assunto) /365) anzianita, natoc-as.Date("25/12/1974" ,format="ha/‘la/IY") Jaureac-as.Date("22 maggie 2001" format="Ld 18 1") anni<-as. integer((lsurea-nato) /365) ‘as. Date(*25/12/2005",format="%a/ia/1Y") + 85 .DateC*16 spr 2006", tormat="%d ib YY") as-Date("2005-12-25") oppure: as. integer(a.Date("16 apr 2006,format=mLé tb 2Y*)~ ‘as Date(*2008-12-25")) I edlon a a sedlo Capitolo 2 Come si mantengono e si elaborano i dati 2a (ve Vettori ‘Gli oggetti di tipo "vector" mantengono al loro intemo una successione di va- lori costituiti da elementi, tutti dello stesso tipo. A in particolare Gio ha ‘concetto di "scalare’, uno scalare in realta viene rapprosmtato sempligenep- ‘ur vettore di Tunghemaiunitaria; il sistema inoltre @ in grado di ‘operare ir modo adeguato, sia a livelo df niero vettore, sia agendo singolar- mento, tramite opportuni indi, sui singoli componenti intern. $i ricorda che am-vettore non pud ® contenere clement oppati da ala i di tipo diverso, Uno det modi usati per creare vettori utlizaa Pistruzione di asseynazione, come si vede dal seguente frammento di codice: > noai<-e("Paolo" "Vittorio" "Eva" "huciat, > etac-c(23,25,29, 19,91,38,21) > coniugatsce(T, F, Fy Ts Fy Fy D "Carlo" "Luisa" "Git > nomi [3] "Paolo" "Vittorio" "Eva" “Lucia” "Carlo" "Luisa "Gino" [1] 23 25 29 19 31 33 21 > coniugati (1) TRUE FALSE FALSE TRUE FALSE FALSE TRUE Nel vettore eta sono stati inserite le etd di un gruppo di persone i cui nomi sono indicati nel vettore nomi, mentre T'indicazione se sono o meno conitiga- ti viene riportato in un corrispondente vettore logico a cui & posto il nome quella di un generico foglio clettronico; come si vede nella figura 2.1, cost possibile procedere alla modifica del contenuto del vettore nomi2: > data.entry (nomi2) _Attensione per, questo-editore in-realta non # in grado di creare exnevo ‘una variabile, per superare questo inconveniente & necessario geneTare pi tna Foggetto (in questo caso il vettore) inserendovi anche un unico valore, @ Successivamente procedere alla sua opportuna modifica ed estensione: y \ | .' — - 40 2 Come si mantengono e si elaborano i dati 2.1 1 Vettori a coniugati, Per creare questi tre vettori si fatto uso della funzione ¢() tr nite cui & possibile "concatenare” succession di vu cosh xeltor Sauer velton df coratae omeglosTdovrebbe dive, di stringhe composte siceessioni di earatteri"), edi vettori contenenti suecessiont di valor logit ‘Attenzione per, non ® possibile concatenare contemporaneamente valori di tipo diverso, come ad esempio numer e stringhe. er quanto riguarda le stringhe di earatteri, ogmuna di esse & racchiusa tra ddue apici singoli (7), 0 tra due doppi apici(")). La funaione ¢ @ chiamata ‘ute di "combination", a quanto crea un vettore combinando node ‘Clementi indicati dal utente; la stessa funzione pud essere usata per combinare sgura 22) Palitore tix in uno stesso vettore il contenuto di altri vettori, ad esempio: Figura 2.2: Editore 110 > wieins<-e(*Giulio® > nowi2<-cinons ,viesas,eC*L1a","avia")) > aFighic-e(0) 4 creazione del vettore > nomi2 > data. entry (aFSgl4) # sua opportune sodisica {1} "Paclot "Vittorio" "Eva" "Lucia" "Carlo" "Luisa" totes giulio" iudeat "Laat Livia’ Recentemente & stato introdotto anche un ulteriore strumento wtilizeabile per rodificate il contenuto di un oggetto, si tratta dell’editoreffix (che presenta Un metodo alterativo di creavione e/o modifica di un vettore (0 come ' il contenuto dell'oggetto passato in argomento scegliendo la modalita ritenuta Peale dina quasi ofa strutture) sia’ a ‘felon "imi 0 pid appropriata. Ad esempio, come ® possibile vedere anche dalla figura 2.2, 279, quando agisce su di un vettore, questo viene presentato nella forma che fa uso della funzione €0. Come si ® accennato precedentemente, il linguaggio R consente di agi re sia a livello di intero vettore, sia sui singoli elementi che lo compongono Siruttando gli indici che individuano i valori; quests indici vanno da 1 alla dimensione del vettore (cioé alla sua lunghezea), cost ® possibile ad esemnpio, lasseguare un intero vettore creandone tna copia, oppure agire su di un singolo clemento richiedendo ad esempio, di presentare all'utente quello che si trova nella seconda posizione: ier . > x) Figura 2.1: Baitore “data-entry | Besa | 2 pure possibile estramme un sottolgpicme.o escludere aleuni tra gli clementi f peer tare a sta — — > exaLe(2,4,5)1 ta) 35 19 31 > etaf-5) (4) 23 25 29 19 39 21 > xeetal-e(3,7)1 # eta dot IT, IV © V soggetto # tutes £ valori eccotto 11 quinto # tutti tranne gli indicat {a} 23 25 19 21 93 NS dwt Ve Oa! con Fen! ahs, " TN 2 2 Come si mantengono e si elaborano i dati come si pud vedere, [uso di indie’ negativi non ® eonsiderato errato, ma viene interpretato come indieazione di elementi da escludere, Quando si dispone, ie i questo Caso, di vettori paralleli che contengono informazioni tra loro correlate, si pnd far_uso.delle informazioni presenti su_un_vettone- per ilen= tificare il corrispondente valore presente nel vettore parallelo, Ad esemplo, ipotizzando di voler conoscere Tet di "Eva" si puo serivere: ch (noni # posizione di Eva in nosi ils > etals] (1) 29 > etaluhich(nomi=="Eva")] 4 oppure in forma alternativa (1 29 7 > etalnoni=="Eva"] # in forma pid compatta e pit chiara (1) 28 Yuso della funzione which() che ritorna come valore l'imdice dell’elemento identificato dalla condizione espressa in argamento, consente di esprimere In richiesta nella forma indicata dalla seconda espressione. L'ultima istruzione tusata nell’esempio precedente sfrutta il eoncetto di vettore logico, creato impli- citamente dalla condizione nowi=="Eva", ¢ il fatto che applicato come indice fad un altro vettore, individua solo gli clementi che corrispondono con il walore TRUE, come si vede qui di seguito nel caso fossero state rese esplicite le due operazioni > vie-nomi=n"Bva" (1) FALSE FALSE TRUE FALSE FALSE FALSE FALSE > etatvl] (1) 29 Come si visto, i vettori sono usati per mantenere una pluralita omogenea di informazioni; queste a loro volta possono essere ricercate all'imterno dello stes- so vettore, quindi usate ed eventualmente anche modificate. In seguito altre Informazioni possono essere aggiunte, oppure anche eventualmente eliminate nel caso si ritenga opportuno. Nei precedenti esempi sono state esaminate alcune delle possibilita adottate per identificare le informazioni presenti all'in- terno di un vettore: sfruttando esplicitamente uso degli indici, oppure agendo sul contenuto e adoperando la funzione which() per identificare gli indici de- ili elementi che corrispondono alla condizione indicata, oppure infine agendo direttamente mediante confronti sui valori contenuti nel vettore. Di seguito sono presentate alcune altre modalita che consentono di operare sul contenuto di un vettore aggiungendo nuovi elementi, o anche interi vettori, in modo da creare un nuovo e pitt grande vettore. Ad esempio: 2.1 Vettori 48 > vere(21,23,26) > vic-etv)3i'33) > vt [a 21 23 26 a1 32 23 > vice (e (11,12, 13,14) v1) > vt [1] 11 12 19 14 21 23 26 at 32 93 > v2eo(vi fvte20) ,rep(-1,3) vi fvi>=20)) > (1) 11 42 29 14-2 -1 -1 21 23 26 at 32 33 # i: agesunta di un vettos #2; aggiunta di un vettore in testa 4 3: aggiuato ali'interno Come si pud notare, nella prima operavione si ® aggiunto il contenuto di un intero vettore in coda al primo; il vettore che viene ad essere concatenato con *v" @ stato creato dall'operatore due punti (:) che genera tutti gli interi ‘compresi tra i valoti indieati nei due operandi. Il secondo inserimento & stato ceffettuato in testa del vettore v1; mentre nel terzo esempio, si é proceduto a Creare un ntiovo vettore v2, concatenando il vettore costituito da valori di vt inferiori di 20, seguiti da un vettore formato dai 3 valori "-1", e quindi da un terz0 vettore contenente i valori di vi maggiori o uguali a 20. Per quanto riguarda 'eliminazione di aicuni valoti presenti in un vettore, V’o- perazione & anche in questo caso facilmente ottenibile indicando, mediante indici negativi, le posizioni degli elemexti che si intendono non considerare: > wae-w2l-e(2,3)) > v3 (1) 11 a4 -1 1-1 21 23 26 at 923 4 olimino elamenti di posizione 2 © 3 oppure in mode oppasto, possono essere indicate le posizion! deghi elementi che si intende invece mantenere: > waccv2[eC1:4, (lenge (v2)-3) :Lengek(v2))1 > 3 primi ¢ ultimi 4 (4) 12 12 13 14 26 81 92.39 I vettori mumerici possono essere usati nei caleoli, in questo caso gli ope- ratori aritmetici agiscono elemento per elemento sui vettori. > eta. diecetar2/10 > eta.bie [1] 4.6 5.0 5.8 3.8 6.2 6.6 4.2 > etareta bse [1] 18.4 20.0 23.2 15.2 24.8 28.4 16.8 nella prima istruzione cinseun valore del vettore “eta” viene moltiplicato per 2 generando un vettore temporanco itvisibile, quest'ultimo viene in seguito —— ————————————— as 2 Come si mantengono ¢ si elaborano i dati diviso per 10, il vettore risultante viene memorizzato nel nuovo vettore indica- to alla sinistra delPoperatore di assegnaz.one ("<-") in modo da. poter essere usato nei calcoli successivi; lultima istruzione calcola a quanto ammontano le differenza nei valori presenti nei due vettori utilizzati. B importante sotto- lineare che la condizione necessaria perch? le operazioni aritmetiche abbiano Iuogo richiede che i due vettori coimvolti in ciascuna operazione (operandi) abbiano la medesima lunghezza, o che la Innghezza del vettore minote sia un sottomultiplo di quella dell'altro vettore. Ad esempio: > vere(2t,23,26) > vie-31:33 > vriecvevt # v evi hanno 1a ste > vee [1] 52 58 69 > v2e-101:104 > v2 [2] 101 102 103 108 > vow # v2 0 v non hanno 1a ste [1] 122 128 129 125, Warning message: Jonger object length ie not a multiple of shorter object length in: v2 + v > vae-c(2,5) > vatu2 # lunghezza diversa ma coerente [1) 103 107 108 109 a Iunghezza Nel caso i due vettori operandi non abbiano la stessa lunghezza, e comunque non siano di lunghezza uno un sotto multiplo dellaltro, viene generata una segnalazione di pericolo (Warning) cil risutato che si ottiene, usa nuovamente nellordine, la prima parte del vettore pitt piccolo: in questo caso si ha: v2{1) + oft], v2) 4 vf2), 0243] + vf3), v2[4] + vf]. Il calcolo di v2+v3 invece viene ceseguito regolarmente, senza la generazione di alcuna segnalazione di possibile errore, perch® v3 presenta una lunghezzo 2 che risulta essere un sotto multiplo della iunghezza 4 del!'altro vettore v2: il risultato che si viene ad ottenere risulta generato dal seguente caleolo v3[l] + v2{2], v3[2] + v2[2}, v9} + ¥2{3], 32] + 02d) IL linguaggio mette a disposizione costrutti veloci (¢ corrispondenti fun- aioni) in grado di generare vettori il eui contenuto & costituito da sequenze rewolari di valori crescenti o decresconti, 0 da successioni anche complesse di valori uguali: > aso 4 vettore con la sequenza 1, 2, 3) il 12345678 910 2.1 | Vettori 5 > seq(t, 10, by=t) # funeione che genera un vettore analogo fi] 12/3 45 6 7 8 910 > seq(t, 10, 0.5) # genera valori da 1 a 10 con passo 0.5 [1] 110 1.8 2.0 25 3.0 3.5 4.0 4.5 5.0 6.5 6.0 6.5 (13) 7.0 7.5 8.0 8.8 9.0 9.5 10.0 > g0q(-3,8,1ength-9) [1] ~3.000'-2.625 -0.260 1.125 2.500 3.875 5.250 6.625 8.000 > 0:4 Ui 9 876s 4321 > rep(2, 10) # genera 1a ripetizione del valore 2 dieci volte (12222222222 > zep(o(*RD", "VI", °VE"),2)_# replica un vettore 2 volte Lay spor sve ves *PDY VI" “VEY > ep(zeq(10,9,by=-0.5),2) # replica una seq. decrescente {1} 10.0 915 9.0 8.5 8.0 10.0 9.5 9.0 8.5 8.0 Come si pud facilmente vedere, ® disponibile 'operatore *:" utilizzando il quale & possibile generare una sequenza crescente 0 decrescente di passo 1 (0 -1). B pure disponibile la funzione seq() di uso pitt generale, tramite cui si pud generare sequenze pil! complesse, che possono far uso di passi non unitari, ‘quali ad esempio quelli frazionari positivi o negativi, La funzione seq() 2 in grado anche di caleolare in modo autonomo quale passo utilizzare, nel caso le sia richiesto di generare una sequenza costituita da un numero ben preciso di clementi: questa richiesta viene effettuata indicando questo valore altraverso il parametro "Lengt seq(inizio, fine, by=passo): crea una sequenza che inizia con il var lore indicato nel primo argomento (inizio) e termina con quello fornito attraverso il secondo argomento (fine); utilzza come incre- mento il valore indicato tramite il parametro "by=". Il valore di ‘questo incremento deve essere negativo nel caso la sequenza sia de- ‘erescente, e cid avviene ogni qualvolta il valore finale risulta minore «i quello iniziale seq(inizio, fine, Iength=n): crea una sequenza costituita da un ben preciso numero "a" di elementi. Il valore dol passo in questo caso viene automaticamente calcolato dalla funzione, La funzione rep() agisce replicando "n volte” quanto le viene passato traverso il primo argomento, assume cost la forma: rep(cosa, mvolte). Sei valori da replicare sono pitt di uno, costituendo cosi un vettore o una succes- sione di elementi, oltre a poter scegliere quante volte V’intera successione deve OO ——I EEE, 46 2.Come si mantengono e si elaborano i dati essere replicata, & possibile anche desiderare di replicare ciascun elemento un umero deteriminato di volte, e questo si pud ottenere utilizzando il parame- two each. anche possibile richiedere che ciascun elemento della successione che si desidera replicare, venga ripetuto un numero di volte sempre diverso, in {questo caso il numero di volte deve essere indicato sotto forma di un vettore di Tunghezza pari a quella del vettore da replicare, come risulta anche osservando i risultati generati dai comandi inseriti nel frammento di codice qui riportato: > vep(1:4, 3) 4 replica 1/intera sequenza 3 volte (i) 123412841234 > rep(t:4, eache3) __# replica ciascun elenento 3 volte [111222333444 > rep(i:4, €(2,4,2,5)) # ripete ciascun eles lulir22223s4a44a4 wun corriep. nm. ai volte ‘Nota: posibilith fornite dalla funzione rep( ‘© > ver<-rep(7, 4) genera il vettore vet che contiene la sequenza: LUT 4 > vete-rep(e(3,8,2), 4) genera il vettore vet che contiene la sequenza: 3, 8, 2, 3, 8, 2,3, 8, 2,3, 8,2 «> vet<-rep(c(3,8,2), each=3) genera ill vettoro vet che contiene la sequenza: 3, 3, 3, 8, 8, 8, 2, 2,2 19 > ver<-rep(o(3.8,2), (2,4,3)) genera il vettore vet che contiene la sequenza: 3, 3, 8, 8, 8, 8, 2, 2,2 Non deve essere dimenticata neppure la funzione paste© che viene a volte usata anche per generare vettori di stringhe regolari, quando in uno dei parametri che forniscono le stringhe da concatenare, in realta sia passato un vettore contenente pil di un valore, ad esempio: > paste("cap",1:4,sep=" [3] “capi "capa" "capa" “capt” [a] "appendice-D-testo” come si vede, nella prima istruzione si generano un vettore di stringhe di caratteri ognuno dei quali @ composto nell'ordine dalla stringa indicata nel pr-Simo argomento ¢ dalla sequenza di numeri generati dall'espressione passa- ta tramite secondo argomento. Una particolare attenzione deve essere post 2411 Vettori ar sull’uso del parametro sep= che evita in questo caso, Vinserimento di spazi bianchi come caratteri di separazione, Nella seconda istruzione, invece si usa come separatore il carattere trattino (°-"), e Ia sequenza che viene genera- ta utilizes parte del vettore di costanti predefinite che individuano le prime lettere dell'alfabeto maiuscolo (LETTERS). Si fa notare al riguardo che & de- finito, con il nome di Letters, anche il corrispondente vettore di costanti di tipo stringa, che mantiene la successione di lettere dell'alfabeto minuscolo: wat tbh tet td eH MyM Utile risulta essere anche la funzione match() tramite cui & possibi dividuare uno 0 pitt elementi all’interno di un vettore di componenti, siano ssi rappresentati mediante stringhe di caratteri, o in forma numerica, La sintassi richiede siano forniti in ingresso due parametr, il primo indica "cosa ricercare”, mentze il secondo indica Yoggetto su deve essere eseguita In ricerca; ambedue i parametri possono essere costituiti da vettori, e in questo caso il rie sultato generato é costituito da un vettore che indica la posizione che assume la prima occorrenza di ciascun elemento del primo vettore quando viene cercata nel secondo vettore. Nel caso nessun elemento contenuto nel vettore passato come secondo argomento corrisponda ad un elemento ricercato, il comando ritorna Pindicazione di assenza di valore (NA); tuttavia & possibile richiedere al comando di applicare in questo caso, anche qualche altro comportamento, quale ad esempio di ritornare un determinato valore negativo: > maten(e(-3,3), €(8,33)8,6,-8,-4,3,5,-9)) ws > match (e(-84,8) 6(5,38,3,6.-8.-4.3.5.°9)) (1) mA 3 > match (c(-34,3) ,6(5,33,3,6, ui 3 1-4,3,5)-3), momatebe=1) Sono disponibili inoltre anche altre tre funzioni di natura generale che operano sui vettori, ed hanno la capacita di generare nuovi vettori costituiti da opportune modifiche della. posizione degli elementi costituenti i vettore ppassato in ingresso al comando: > yere(64,-12,93,14,-5) > rev(y) [i] -8 14 33-12 6a # vettore ai partenza Come si vede, la funzione rev() genera in uscita un nuovo vettore che rovescia Pordine degli elementi presenti all'interno del vettore indicato. Una seconda funzione molto usata @ la funzione sort(), che a sua volta genera un nuovo vettore che contiene una permutazione degli elementi presenti nel vettore for- nito in ingresso il risultato @ earatterizzato da un ordinamento crescente (0 decrescente) dei valori contenu: EE 48 2 Come si mantengono e si elaborano i dat 2.1 Vettori 49 > sort(y) Ties 1a 33 ee sum) ‘somima tulti gli clementi del vettore x > sore (y,decreasing=T) 4 decreasing “1: ordine decrescente | =n tye 3o dh 8-32 pred) ‘rodotto di tutti gi elementi del vettore x > rev(eort(y)) # in forma equivaleate Te (1) 64 33 14 -5 -12 ‘cumsum (x) somma progressiva, o cumulata, degli Infine, la funsione order() ® per un certo verso abbastanza simile alla fun- clementi del vettore done sortO appeno esaminata, ma a differenza da questa, genera un vettore | campeoatsy Taistto pressive -deglr-lementi-ded Fenn tn po usumcrcbet gelament del vettore Pr Prodotto progesivo degli nent fomnito per rsultare ordinate in modo erescente (0 deerescente) aa a > order(y) min(a) ‘ninimo valore contennto nel vettore x masses Tength(=) numero di valore contemuti nel vettore ee ig 33 0a ‘which (condizione) indice o vettore di indiei degli elementi che presentano un valore per cui la conditio- ‘Una funzione abbastanza utile 2 la funzione unique (x) tramite cui é possibile Prese bttenere un vettore conteneate {valor singoli presenti nel vettoe forito in ne rsulta vera; ad esempio vhich(x == v) ‘argomento, questo risultato ? ottenuto eliminando pertanto tutti gli eventual ritorna gli indici "i" per cui il valore di Walon duplicti; ad esempic, ipotizzando di disporre del seguente vettore, 8 x(i) risulta uguale av possibile ndividuare qual valor singol sono presenti wean tnedia det valor presenti nel vettore x: 7 > vere(12,-8,7,39,4,°3,12,7,-3) median @ mediana del valor presenti nel vetiore x 3 oiquece ‘quantile, prob quantile o perntilecaloolatowulla base di G)iz-3 7 4 sfruttando la funzione duplicated() & possibile conoscere quali valori in un vettore hanno dei duplicati: > duplicated(v) (1) FALSE FALSE FALSE TRUE FALSE TRUE TRUE TRUE TRUE > uaique(v[dupticated(v)]) )12-3 7 Il sistema dispone di una Iunga serie di funzioni di natura matematica e statistiea che applicate ad un vettore numerico, generano come risultato un vettore costituito da uno o pitt valori numerici, ad esempior [1] 23 25 29 19 31 33 21 > sun(eta) # soana dei velori contenuti nel vettore (a) 181 > cunsun(eta) 4 vettore con i valeri cumulatt [1] 23 48°77 96 127 160 181 Qui di seguito si clencano solo alcune tra le funzioni di base pitt usate valori contenuti nel vettore "x” passato in argomento; il secondo parametro (probs=) 2 usato per indicare uno o pitt valori tra 0 € 1 (in questo caso un vettore di valori) che rappresentano V'indicazione di quale o quali, percentli si desidera ottenere. Nel caso sia- no indicati pitt valor, il risultato generato 2 rappresentato dal corrispondente vettore di percent var (x) varianza ”campionaria” dei valori contenuti | rel vettore x (diviso per n-1): #8 aaa) deviazione saandard ”campionatia™ dei var lori content nel vettore x (diviso per m1): cory covarianza ta valor! contenu nel vettort xey (ory) 50. 2.Come si mantengono e si elaborano i dati Come si pud facilmente vedere, utilirzando queste funsioni ¢ applicando 1a nota formula: 7 = = @ possibile calcolare ad esempio, Ia media dei Yale cotenuti nel vettor® ei, ache senza far uso della funsone mean: > sum(eta) /Length(eta) (a) 25.85714 > moan (ota) (1) 25.8574 #0 in modo oquivalente: come pure ® facile derivare dalla formula qui riportata, la varianza della popolszione: oe) - Deena? > gun((eta-nean(eta))“2)/engen(ete) (1) 23.89678 y var(eta)sClength(ota)-1)/lengeh(eta) # equivalente {1} 28.89673 Sifu notare che per poter ottenere lo stesso valore usando la funzione var) nessa disposizion dal sistema, ®nevessario applicare una. trasformazione in “quanto questa fuzione calcola la varianza campionaria (ottenuta dividend {I nuineratore per (n ~1))e non la varianza della popolazione che richiede di essere divisa invece per ‘titolo di chiarinento, vengono qui presentat i riultati parzali generati dal sistoma durante Tolaborazione dell'struzione un (ota-nean (eta))"2) /Length(eta) sapendo che il risiltato dellelaborazione di mean(eta) genera come risultato il valore 25.8574, si ha: ‘ea | eta-mean(eta) | (otarnean(eta))2 2 [2.857120 8.168265 25 | -0.g571420 0.7346989 ao | 3.a2ss7i 9.877510 19 | 6571429 47.0204082 ai | saa2sse1 26.4489790 33 | 721428571 51,0204082 an | -a.ssr1420 23,5918367 dato che la somme dei valori: sum((eta-mean(eta))~2) risulta essere 166.8571, ‘mentre la lunghesza del vettore et @ 7, il risultato finale della espressione: sun(Cota-ean eta))“2)/length (eta) diviene 23.83673. ‘Allo stesso risultato si poteva pervenite applicando il concetto di momento: 2:11 Vettori 51 0? (2) = Ma(z) — Mi(z?* dove Me(z) = 54% rappresenta il Momento di ordine k ix me si vede dal'seguente frammento di codice, In varianaa della variabile eta” non b altro che il risultato del Momento secondo meno il quadrato del Momento primo: > Mt_etassum(eta) /length (eta) > N2.etaxsun(eta”2)/Length (eta) > N2.eta-Ht.ota"? (iy 23.89673 Come & noto, sono definite in statistica anche alli tipi di medie come la amedia armonica: H = cr la media geomotrica: @= /T]F2; il cui cal- colo pud essere semplificato passando ai logaritmi: logG = 1-307 logio(i) da cui si ottiene: G = 10/°7°. Queste due quantita pussono essere cosi calcolate: > lengen(eta) /eun(t/eta) [1] 24.98120 > LogG<-1/Length (ota) +sum (Logtoceta)) > Ge-10"Logs # media Geonetrica tramite i logaritmi >G (1] 25.393 > prod(eta)”(1/length(eta)) (2) 25.3923 # media armonica # media geonetrica: formila originale Sono disponibili anche le funzioni union(), intersect (), setdif£(), setequal(), ¢ is.elenent() che realizzano le operazioni insiemistiche ap- plicate a vettori di dati: XUY, XY, XY, X= ewe X;si ricorda che poiché i vettori forniti in argomento alle funzioni rappresentano degli insiemi, non devono contenere valori duplicati > a<-(8,7,9,4) > ve-e(2,7,8) > union(e,2) ls79428 > intersect (s,1) 7 > satdise(e,x) W394 > is.clenent(9,5) (1) TRUE La funzione ie -elenent(x,y) equivale a: x %in% y. Una descrizione di questo operatore pud essere trovata a pagina 96. ee 52 2 Come si mantengono ¢ si elaborano i dati 2.1.1 Accesso ai dati Particolare cura & data dal sistema alla gestione dei dati; & possibile compic- re infatti diverse operazioni che consentono di estrarre e di identificare valori contenuti all'interno delle struttute, ed in particolare dei vettori. La scelta di considerare in modo particolare i vettori, # legato al fatto che, come si vedra piit avanti, i vettori costituiscono la componente base usata dal linguaggio per creare gli altri tipi di dati di maggior complessita, cio’ le matrici, gli array, i data frame e le list. Riprendendo il discorso, si pud facilmente trovare il numero di valori presenti alPinterno del vettore, quali sono i valori massimi e minim della distribuzione contenuta, oppure quale valore assume la mediana o i quantili, oppure la me- dia aritmetica ¢ la stima della deviazione standard, per dire solo alcune delle statistiche di base pitt note. Esistono tuttavia anche altri costrutti tramite cui utente in grado di ottenere nuove informazioni desumendole da quelle gi note, oppure di procedere ad estrarre velocemente sotto campioni da sottopor- re a pili approfondite analisi. B pure possibile modificare i dati alterandoli, ver<-e(31,28,31,30,31,90,91,91,90,91,20,91) > str(vet) QaiVettoi 53 nun [1:12] 31 28 31 30 31 30 91 91 90 31 > vot [e(2,6)) # 41 secondo e 11 quinto valore (1) 28 31 «© tutti gli elementi tranne quelli che sssumono una delle posizioni indicate da ind, se il valore o l'intero vettore & preceduto dal segno negativo > vet l-e(2,5)] # wweti tranne G1 II* ¢ £1 V" valore [1] 81 31130 30 31 81 30 91 30.51 fe se ind & costituito da un vettore logico di lunghezza pari a quella del vettore vet che viene indicizzato, allora sono estratti tutti e solo gli elementi che hanno come indice il valore TRUE; questo rappresenta senza, dubbio il modo largamente pit usato per individuare elementi di un vettore sfruttando il loro valore. > verso (1). TRUE FALSE TRUE FALSE TRUE FALSE TRUE TRUE FALSE [10] TRUE FALSE TRUE > eun(ver>30) # a quanti valori corrispondone 7 > vet (ver>30) # valor che corrispondono a TRE (a) 31 31 31 31 st 31 at ‘Un importante utilizzo del contenuto di un vettore logico @ quello che sfrutta la cortispondenza del valore TRUE oon !'intero 1, © del valore FALSE con Jo 0. ‘Tra le molte appiicazioni che possono essere realizzate emerge per la sua frequenza di utilizzo la possibilita di contare quanti va- lori di "verita” sono presenti, il che si realizza semplicemente sommanddo il epntenuto del vettore logico. ‘se viene usato come indice una stringa di caratteri, questa viene con- froutata con i nomi degli elementi presenti nel vettore. Per utilizzare questo metodo & necessatio per® che il vettore abbia dei nomi associati ‘ai corrispondenti valori (cosa non sempre vera) > vete-e(gen=31, fobe28 mar + ago=3i, > etree) Named aun [4:12] $1 28 81 80 31 90 31 91 30 St apr=30,mag=3t,gius80,1ug=31, sat=30 o8te3t ,nov=30 ,dice3t) oa - se _2 Come si mantengono ¢ si elaborano j dati Bab Vetood = gutr(e, *nanost)= che (1:12) “gon” "ob" tear” “apr” , ich(emax(e)) | le posisoni degli clementi che | 48 12 > ver [e("teb*,*mag")] # gg. dei mesi di febbraio ¢ naggio hanno valori uguali al mnassimo top mag rer rovescia gi clement nel vetore x | 432143 3 at sore) fondina in modo crescontej valori| 1112228 dix rer(sort(2)) | ordina in modo decresente i vw | 4443332 Viene qui presentata una serie di ultericri esempi significativi che illustra- lori di x; equivale a sort(x, zo le potenzialita sopra descritte, Gli eserpi fanno uso di una variabile di decreasing-1) ‘tipo vettore x cosh inizializzata: x<-rep(1:4, 3) in modo da mantenere le x{tis.naGo) ali clementi di x non null in questo caso, tutti seguenti informazioni 1.2.3.4 1.2.3 412 3 4, Nei sotto indicati esempi, runGcboa]) | somma slog lene dx che | 22 “Gene presentata sulla destea Vstruzione, segue la relativa spiegazione e quindi 20 valor! maggior! di is “sue le splegs quindi sum (x>2) somma le indicazioni di verita e | 6 il visultato che si viene ad ottencre: di falsita: il risultato che si ot- tione indies "quanti sono” i valor Istruzione me, Risultato smaggiori di 2, (vedi pag. 53) oy De TT x[-3) tutti gli elementi di x, escluso ’3° | 124123 2.1.2 Estrazioni di sotto insiemi di dati 1 reid irae a | came 8 visto nel apt precidt, un sta campioe pub evident tamer: |& 34 Ee ee ia cnsn ban Fa saat acne et rea ao ¢ ee 5 i che altro vettore parallelo (e questo corrisponde alla presenza di una qualche veer [eT iaipoiiom inten [20a seater fer” Stra cats ee crmp ite xiscaggn, | dened poron ine oe aaaae ae eae dian oP touc basic ta prs in oh Sere oe ei a en le pens reo ne. sateen a pos ria saree anes’ cnn sponds see enone in un vettore "x", in posizioni regolari, 5'gruppi di 10 valori che si desidera, sottoporre ad elaborazioni, @ possibile’ recuperare uno di questi gruppi (ad ‘esempio il secondo) utilizzando una stratexia simile a quella sotto indicata: valori di x. Il vettore ritornato & costituite da n-t valor unique ritorna un vettore che contiene i | 123.4 valori distinti present in x dupiicatea(s) | ritorna un vettore logico ad indi | > xe-1:60 # genera un vettore con 4 valori 1, 2, 3). > x1ex{54e(1:10)-3] # stesso risultato con: x(seq(2,50,6)] caro se il corrispondente elemento | nel vettore ha altri valosi ugualiin tuna posizione procedence > x Ui] 2 7:12:47 22 27 32 97 42 47 mmsauaGet | items alo che banno dale | 12.8.4 Nel sevond quod: altri vettori per idenifcare le duplicared(s)1)| duplieazion! fel secondo caso, quando invece si usano altri vettori per identificare le in wniene seeneat ie. posiziont nol vetiore | 56789 10:11 12 formazioni, le strategie da applicare sono totalmente differenti, come si pud ‘vedere esaminando 'esempio sotto riportato in cui si suppone di aver memoriz~ auplicared(s)) | x dove sono present! dei valor: sonno” le ore di sonno dormite da un campione di soggetti, ‘duplicati precedentemente ato nel vettore” tun secondo vettore "sesso" la corrispondente indicazione del sesso dei sog- xtpiexca) | givslemmti che presen valor | 2323 Beamon hep as2sas ett campionati Il problema chee si pone & quello di procedereallestrazione which(x>2) Te posizioni degli clementi che | 34781112 dei due sotto campioni che dovranno mantenere le informazioni sul sonno dei maschi e delle fernmine. hhanno valori > 2 EEE EES 56. 2 Come si mantengono e si elaborano i dati 2.1.1 Vettori 57 > sonno<-c(2,8,9,5,3)443,2,3,5,7,5) F # ore sonno delle donne > "BY Se, I 26436 > eonnoF< su # ore sonno det maschi > gonnot [1] 9533275 Llosas27s > sonnoF ‘La funzione eplit() genera come risultato un oggetto di tipo "list” (tipo che uy 26436 sara trattato in modo esteso nel capitolo 2.5). I gruppi di valori che costituisco- E possibile utiizzare enche forme di rageruppamenti pit complesse che com- Ecitono di denlicare e separare le infortasion!righardanti | soggetti che potremmo definire ome "inoun, in quanto dormono solo "poche" ore (ad Tempio meno di Sore per notte); fa questo modo si pub ostenere oltre alle ore Gi sonno di questi soggetti, anche eventualmente il oro sesso e quanto altro pub risultare collegato, > ore, ingonni<-sonno[sonno seeso, ineonns<-resto (somne ore.insoant tl 234323 > seeso. insoani, # sesso dei soggetti insonni ee nr oe > ore.normali<-sonno[sonno»6) _—*# ore di sonno dei sog, "normals" > ore.norsali Ule9se7s Da ricordare: Ia possibilits di identificare gli elementi di un vettore sulla base del loro valore si realizza indicando allinterno delle parentesi ‘quadre delle opportune condizioni logiche che individuino i valori cerca ti, Queste condizioni quando sono eseguite, generano tun corrispondente vettore di valori TRUE e FALSE, a seconda che i corrispondenti valori nel vettore verifichino 0 meno la condizione indicata. Il sistema in segui- to, provvede ad estrarre quei valori che corrispondono ad uno dei valori ‘TRUE risultanti dalla condizione. La identificazione e la separazione delle ore di sonno sulla base del sesso dei soggetti, pud essere effettuata anche utilizzando la potente funzione split) cche consente di suddividere i valori contenuti nel vettore indicato dal il primo parametro, in tanti gruppi quanti sono i valori diversi presenti nel vettore fornito come secondo argomento alla funzione. split (sonno 0) # 5 8 un oggetto di tipo lista nno la risposta, sono mantenuti sotto forma di vettori e sono identificati sulla ‘hase delle modélita usate nel raggruppamento dei valori. Un'altra potente funzione disponibile ® la fumaione grep che, attraverso I'uso di espressio ni regolari (vedi appendice A.5), consente la individuazione delle posizioni nel yettore, dove sono presenti informazioni mumeriche o alfanumeriche che presentano il pattern indicato, > erep((-Fl 2) 4 posizion’ dei “non” H Gi] 34 87 eitaa > grep((952]" ,sonno) # posizion! dove sono i valeri indicati Gl 134 612 2.1.3. Valori mancanti Quando si devono elaborate dati raccolti mediante questionari, o comunque in situaaioni in cui non & possibile ottenere le eventuali informazioni omesse, spesso si ? costretti ad ulilizzare solo quelle disponibili cercando di operare in modo che le informazioni omesse non alterino i risultati delie elaborazioni. Isistema R dispone di un valore predefnito, chiamato NA (Not Available), usato per indeare il concetto di "mancanza’di informazione” © appunto i "Yalore non disponibile”; questa walone (0 phuttosto questo simbolo) Pud esse- re usato all'interno di variabili di qualsiasi tipo (intere, reali, carattere, ...) per indicare Tassenza di un qualsisi valore La presenza di indicazioni NA all'interno di un vettore di dati, o di un compo- niente interno di un data frame o di una lista, renderebbe impossible qualsiasi calcolo poiché, se un dato non & disponibile, ovviamente non & possibile sapere Guale sarebbe il risultato di un caloolo che lo coinvolge. Esiste una funzione {fo-na() che consente di controllare l'eventuale presenza di NA, ad esempio, ® possibile verificare se un vettore x qualsiasi (o un qualche componente interno di un data frame) contiene dei valori mul: > evacce(23,45,MA,32,55,19,NA,22,45,21) [1] 28 48 WA 32 55 19 NA 22 45 21 > sun(eta) non pud essere calcolata 1a somma delle eta (a) ma I 58 2 Come si mantengono ¢ si elaborano i dati > is.na(eta) [1] FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE come si vede, la funzione is.na(x) genera un vettore logico di "uguale lun- ighezza del vettore passato in argomento”, in questo vettore si vengono ad fvere il valore TRUE nelle posizioni dove & presente un valore nullo, e un valo~ re FALSE in caso contrario. Si rammenta che per poter eseguire un qualsiasi caleolo matematico 0 statistico, © in genere necessario far uso solo di valori validi, e di non considerare pertanto quelli maneanti: > Length(eta) (a) 10 > eraic-eta(tis.na(eta)] # etal contione solo eta’ valide > lengen(etat) is > aun(eratd (1) 262 [Nell'esempio precedente, il vettore logico risultante dall’operazione "lis.na(eta)” ‘viene usato come indice per identificare gli elementi che sono poi memorizzati nella variabile “etal”; si ricorda che sono estratti solo quei termini che presen- tano come indice il valore logico TRUE. Come si vede, il vettore etal risultante contiene tun numero di elementi minore del vettore originario e, poiché non contiene alcun valore mancante, ® possibile passarlo come argomento alla fun- zione sum() in modo da ottenere i risultato atteso. Spesso si fa uso di una ariante di questa tecnica per rimpiazzare i valori mancanti con particolari altri valori, anch’essi considerati dei veri e propti codici, scelti dall'utente che poi dovra perd assicurare una loro corretta gestione! (1) 29 45 WA 22 65 19 WA 22 45 21 > evafie.natora)]<-999 + rimpiazza NA con 999 > eva [1] 23 45 999 32 85 19999 22 45 21 Questa tecnica, con le sue vatianti, viene usata frequentemente per compiere delle operazioni di ricodifica, ‘Si ricorda che alcune tra le principali funzioni di base (sun(), nean(), zedian(), ...) prevedono P'uso del comodo parametro na.ra=T che consente di evitare’all'utente la necessita di eliminare esplicitamente i valori nulli pre- senti tra i dati, prima di procedere al caleolo della corrispondente funzione; ® interessante notare che la funzione mean() con il parametro na.raeT viene realizzata facilmente usando la funzione sum() e Ja funzione is.na() > mean(eta,na.rm-T) 2.1.1 Vettori 59 (1) 32.75 > eun(ota(!te.na(eta)])/sum(!is.naCota)) # equivalente (1) 32.75 In particolare, la funzione eun(1ig.na(eta)) indicata al denominatore calcola il numero di valori diversi da NA presenti nel vettore "eta’ Per una pit approfondita trattazione sul modo tramite cui la funzione sun() consent il calcolo del numero di valor nulli (0 non nulli) presenti in un vettore si rimanda alla spiegazione presentata a pagina 92, 2.1.4 Operazioni di ricodifica Come si? accennato, una delle caratteristiche pit importanti di un lings che elabora informazioni a fini statistici, & legata proprio alla sua versatilita. nel saper identificare, gestive © modificaro que! dati che caranno successive ‘mente oggetto di elaborazione. Spesso infatti i dati greazi raccolti mediante ‘questionari o ricerche di mereato, non sempre sono gia predisposti nel modo richiesto per una loro elaborazione; 2 normale far precedere alla fase di calcolo tuna fase di identificazione, e a volte anche trasformazione dei dati oggetto di analisi. Ad esempio, pud accadere che variabili che mantengono valori a livello di scale Likert, codificata tra 1 e 7, per qualche motivo necessiti di avere i valo- ri invertiti in modo da avere i valori 1 trasformati in 7 ei 7 con 1, i 2in6ei6 con 2, ecosi via, In R questa operazione risulta facile da ottenere, ¢ suficiente infatti richiedere di esegnire in ciascun elemento del vettore Voperasione qui indicata: > xe-c(3,1,6,2,7,4,3,1,6,6,7,1,2) # distribuzione originaria fil s16274si66712 > xe Bx # trasformazione (1726145722176 — # risultato della trasformazione ‘Altra situazione che & possibile riscontrare con una certa frequenza, quella fn cui risulta necessario modificare i dati originali sulla base di una una certa logica. Ad esempio, ipotizeando di dover elaborare dei risultati ottenuti ad un esame da una classe di studenti, @ facile che siano presenti casi in cui vi sia dei "ritirati dall’esame”, oppure situazioni di "non presenza all’esame". L'ac- cadimento di questi diversi eventi pud essere codificato mediante particolari codici i eui valori comunque non devono essere confusi con i risultati ottemuti nell’esame, pena il calcolo di erronee statistiche. Si ipotizzi ad esempio di aver il seguente piano di codifica: "ritiro”=-1, "non presenza”=-2, mentre i voti validi sono compresi tra 1 ¢ 30. up 60 2.Come si mantengono e si elaborano i dati 1 28,28,-2,-1,19) > votic-e(22,27,24,30, 181,24 7 > mean(voti) (1) 15.76923 TI rivultato ottenuto & chiaramente errato in quanto si sono usati nel caleolo della media anche i codici il cui valore deve inveve essere inteso come un segnale che non ha aloun significato a livello di valore. Una elaborazione corretta della ‘media aritmetica richiede una preventiva esplicita eliminazione di questi codict dal caleolo: > votiRe-voti[!(wotinw-t | votie > vorsR (1) 22 27 24 30 18 21 25 25 19 > woan(voriR) # calcolo della media sui soli voti valids [1] 23.44444 2)] # elimina 1 codici Spesso si preferisce trasformare i codici espliciti nella codifica pitt generica di *yalore non disponibile” o valore nullo NA messa a disposizione dal sistema. che, come si visto nel paragrafo 2.1.3, risulta pitt facile da trattare. L'operazione [pud essere cosl eseguita: > vots{vorime-t | votiee-2]<-MA # ricodifica 4 codici -1 ¢ ~2 in NA [1] 22 27 24 30 18 NA 21 NA 25 25 NANA 19 > moan(vors) # non pad calcolare una media usando val. nulli Ua WA > nean(voti na.rm-T) 4 previa rimozione degli NA [1] 23. 4a4a4 Lioperazione opposta che assegna un codice numerico scelto dall’utente (ad esempio il valore -1), al posto del codice NA inserito eventualmente dal si- stema, pud essere facilmente effettuato come si & gid accennato, utilizzando Vistruzione > vors ie na(vots)]— # iptruzione di ricodifica [1] 22 27 24 90 38 -1 21 -1 25 25 -1 -1 19 Accade a volte che risulti opportuno modificare i valori dei dati sulla base di ‘uno schema ben preciso scelto dall'utente. Si suppone ad esempio, di disporre diun vettore di dati contenente valori compresi tra Ie 6, esi desideri applicare il seguente schema di ricodifica 4 valori 1 siano scambiati con i 6 4 valori 2 eiano scambiati con 1 4 entre 1 Testanti devono rimanere inalterati palvees Non é possibile risolvere il problema applicando una successione di istriziont che scambi i valori come si potrebbe essere tentati di fare e che darebbe il seguente risultato: > ver<-rep(1:6,3) # vettore usato cone GJ 123486123456123456 > vot [vet==1]<-6 > ver li] 623456623456623456 > vot [vet==6] <1 > vet # rigultate finale Ui 1234s1123451123461 senpio Come si vede, non si ottemuto il risultato desiderato che richiedeva lo scambio del valore 1 con il valore 6. La solurione pud essere facilmente ottenuta invece sfruttando il modo con cui il sistema rappresenta i valorilogci di vert (TRUE © 7) e di falsita (FALSE o F): la modalita "vero” & rappresentato da FE con il valore 1, "falso” con il valore 0. Partendo da questo presupposto, ® possibile scrivere la seguente istruzione che realizza Voperazione di ricodifica dell'intero schema sopra indicate > (vet=s1) ___# rigultato generato dalla prima sotto condizione [1] TRUE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE PALSE (12) FALSE TRUE FALSE FALSE FALSE FALSE FALSE > vote (ve 2) 44+ (votmnd) «2¢(vebmes) «St + (wet==5)45, li) 64s251643251643251 Come si vede esaminando esecuzione della condizione (vet==1), ogmna delle condizioni indicate nella espressione, genera un vettore della stessa lunghezza di vet, con contenuti logic; ricordando che i valori TRUE sono rappresentati internamente dal sistema con degli 1 e FALSE con 0, questi valori quando sono successivamente moltiplicati per il valore indicato (ad esempio il 6) riporta- no proprio quel valore nel caso di verita, in quanto tutte le altre condizioni risultando essere inevitabilmente false producono come valore degli zeri; suc- cessivamente sono eseguite tutte le somme dei risultati parziali cost generati dalle moltiplicazioni, elemento per elemento. Si fa notare che, nel caso preso in esame, ultima parte delf'istruzione . . .+(vet==3) #3+(vet==5)*5 potreb- bbe essere considerato inutile e potrebbe essere eliminata dall'istruzione senza provocare alcuna modifica nel risultato finale. Questo & vero quando il vettore risultato @ lo stesso vettore su cui viene apportata la modifica. Un risultato diverso si otterrebbe se invece fosse memorizzato su di una diversa variable, come si pud vedere esaminando il seguente frammento di codice: 2.1 | Vettori 63 6 2.Come si mantengono e si elaborano i dati > ver<-rep(1:6,3) # vottore usato come esospio > vet (1) 123456123456129456 > vetic=(vete=1)464 (vete=6)#L+(ver==2)*4+(vetmnd)+2 # senza finale > vett ‘¥ notare che 1 3 ¢ 5 non sono indicati! [1] 640201640201640201 > vet2e-(vetent) 46+ (vet=n6)+1+(veten2) ade (vat=nd) 42+ + (roten3) 3+ (ver > ver2 #43646 sono ora presenti [1] 64325164325164325% Le operaziont di ricodifiea spesso fanno uso della funzione ife1se(), motto simile alla corrispondente funzione definita in molti software che operano su fogli elettronici quali Excel, Lotus-123, ifelse(condizione di controllo, espressione-1, espressione-2) La funsione ifelse() richiede obbligatoriamente di tre distinti parametti nel primo viene ad essere indicata una condizione semplice 0 complessa da ‘verificare, il secondo parametro viene usato per indicare una espressione da ceseguire rel caso la condizione ritorn! il valore TRUE, mentre il terzo parametto deve contenere un’altra espressione che verra calcolata nel caso la condizione risulti falsa, Ebene rilevare che per risolvere condizioni in cui sono previste pitt di dite alternative, & possibile inserire, all’interno delle due espressioni che saranno eseguite in alternativa, ate chiamate alla funzione ife1se(), in modo dda generate strutture di controllo complesse, denominate anche “nested”. ‘Si consideri ad esempio una situazione in cui si abbia 'indicazione del sesso di un gruppo di soggetti, e Ia presenza di valori nulli nel easo in cui non siano disponibili corrispondenti informazioni relative al soggetto. Il problema che ci si pone & quello di modificare 1a codifica usata, da alfabetica in numerica, € nel contempo procedere alla sostituzione dellindicazione di assenza di valore presente nel vettore originario dei dati (NA), con una determinata codifica numerica scelta appositamente dall’utente: nM NASM" *E#, 8° MA, "E*) ),'=99, sfelse(sex = "N*, 1, 20) cect" 1o<-ifelse is nals 402 1-99 2 2 1-98 2 Nota: il confronto sul valore aullo NA *deve” essere eseguito, utilizzando la funzione is.na() indicata nella condizione pasta allinterno della prima e pit esterna ifelse(). B errato inserirla, all'interno di una ifelse() secondaria, claborata sotto condizio Infatti, come ® possibile vedere esaminando il codice qui riportato, se si pro- getta il comando usando una delle soluzioni indicate, si ottiene un risultato totalmente diverso da quello atteso, in quanto il codice NA che individua una situazione di assenza 0 mancanza di valore, non viene ad essere ricodificato. > Atelse(sex==""", 1, Sfelse(aex=="F", 2, -99)) # NA non convertito (il 12 1m 1 2 1m 2 > itelee(sexe=""", 1, ifelse(is.na(sex), -99, 2)) # NA non convertito [i] 12 .MA 1 2 1m 2 Questo "strano” comportamento & spiegato dal fatto che il primo controllo eseguito (sex *= "¥") quando @ applicato ad una indieazione NA, genera sempre” come risultato un NA, che non ossendo né TRUE né FALSE, non pud essere ulteriormente processato dalla funzione ifelse() in quanto non 2 in grado di decidere se applicare Yoperazione indicata per il caso di verita, fo quella prevista nel caso di falsiti. La funzione risolve questa situazione ritorando giustamente come risultato il valore NA. ‘Suggerimenth: per eseguire una operazione di ricodifica ® buona norma procedere sempre alla creazione di una nuova variabile che conterrA la ricodifica della variabile d'origine Una operasione di ricodifica pud essere realizzata in due diversi modi 1, mediante due istruzioni separate: {a) nella prima si crea la variabile di destinazione ricopiando in essa tutti i valori contenuti nella variabile d’origine (b) nella seconda si modificano solo i valori della variabile di destinazione che sono interessati alla ricodifica. |. mediante una unica istruzione facendo uso della funzione ifelse() 2.1.5 Trasformazioni di dati Nei capitoli precedenti sono state delineate situazioni che hanno reso consiglia- bile procedere all'applicazione di opportune operazioni di ricodifica sui dati. Ci si pud chiedere in quali casi sia opportuno agire modificando i dati, e quali effetti tali modifiche possono avere sulle sottostanti distribuzioni dei valor. Una prima situazione abbastanza frequente & legata allunita di misura usata per rappresentare i fenomeni, le unit di misura adottate sono talvolta diffe- renti tra loro a causa ad esempio, dell’origine delle informazioni, oppure del 64 2 Come si mantengono ¢ si elaborano i dati tipo di appareechiature usate per ottenere le informazioni. Si consideri co- ame esempio, il easo in cui sia necessario confrontare tra loro i consumi di un ‘eampione di autoveicoli europei e americani: questi consumi sono generalmen- ‘ee espressi in litri per chilometro in Europa, mentre sono indicati in galloni per miglio negli Stati Uniti, per poterli mettere in relazione tra loro, 2 quindt cconsigliabile riportare gli uni o gli altvi alla medesima unita di misura. Si considerano ora alcune delle trasformazioni pid usate evidenziando gli effetti che queste operazioni hanno sulla media e sulla deviazione standard applicate alla distribuzione dei dati Aggiungere o sottrarre un valore costante a tutti i valori di una distribu zione: provoca una corrispondente modifica del valore medio, mentre la ‘modifica non si ripereuote sullo scarto quadratico medio; si ha cio’ un effetto a livello di traslazione della media senza essere accompagnato da una alteraziore nella forma o nella ampiezza della distribuzione, come si vvode per altro esaminando il seguente esempio: > x6-0(23,28,28,27) > mean(z) (1) 24.78 > sd(x) # doviazione standard C1] 1. 7o7e26 > xix 4# aggsunta ai 2 a tuetd i valori di x > mean(xt) 4 1a media cresce di 2 (31 26.75 > sd(xi) # 1a deviazione standard rinane inalterata (a) 1.7o7a2s “Moltiplicare o dividere una distribuzione per una costante: modifica sia la niedia che la deviazione standard; in questo caso l'ffetto moltiplicativo oltre a spostare Ia media da una parte o dall’altra, allarga (o restringe) la corrispondente ampiezza della distribuzione, Ad illustrare l'effetto descritto, viene presentato il seguente esempio in cul si modifica la suc- cessione "x" tsata precedentemente, moltiplicando ciascun valore per la, costante 3: (a) 23 25 2627 > xtexes 4 ciascun elenento di x & moltiplicate per 3 > woan(x1) # 1a gedia risulta moltiplicata per 3 (a) 74.25 > edt) # 1a dov. standard rigulta aoltiplicata per 3 (a) 5.128475 2.2 Le Matrici 65 Standardizzazione dei valori di una distribuzione: consente di trasformare ‘una distribuzione di dati grezzi im una equivalente misurata in termini di distanze dalla media adottando lo scarto quadratic medio come unita cdi misura; la distribuzione che si viene cosl ad ottenere non fa pitt riferi- ‘mento all'unita di misura originale, ma si trasforma in una equivalente distribuzione caratterizzata da avere media zero e deviazione standard tno, Come ? noto, Poperazione richiede di applicare su ciascun dato del- la distribuzione "x" da trasformare, la seguente operazione: 25 = 254 La distribuzione "2" riporta in termini di deviazione standard la distan- ‘a che intercorre tra i valori 2, e la media; pertanto un valore positivo di 1% indica che il corrispondente valore di "2," risulta essere superiore alla ‘media, come pure un 2; negativo indica che il valore della distribuzione x" @ inferiore alla media, mentre infine un valore di "z;" pari a zero, indica un valore di "7," pari alla media. > 2-Cermean(x))/sd) ——# punt z [1] 1.024695 0.146385 -0.4s0155 1.17465 > sean(2) @ nedia dei punt 2 [1] -6.9868940-18 > sd(2) 4 deviazione standard dei punti z mt come si pud vedere, 'operazione di standardizzazione det valori di una distrlbuzione & facile da caleolare e genera, come si & detio, una distri- buizione con media zero e varianza unitaria, 2.2. Le Matri Strutture di maggior complessita rispetto ai vettori sono rappresentate dalle ‘matrici e dagli array, ambedue accomunate dalla caratteristica di mantenere al Joro interno, valori tutti appartenenti allo stesso tipo, cio’ tutti interi, tutti reali, tutti caratteri, ec. ‘La mutrice pud essere vista come una tabella bidimensionale formata da. un certo numero di colonne di pari lunghezza, e da un altro numero di righe anch’esse caratterizzate dal possedere tutte Ia medesima dimeusione, Ogni valore contenuto all'interno ® individuato univocamente, da una coppia di indici numerici i cui valori possono variare da 1 alla corrispondente dimensione. 'uso opportuno degli indici, consente di trattare come vettori, le singole -ighe © le singole colonne che formano la mattice. ne 66 2 Come si mantengono e si elaborano i dati > mat mat (21 G2) G31 64) G8) 6.61 a (4 4 7 [10 “43 “16 @] 2 8 8 1m 4 aT i] 3 6 9 2 1 1B > aat(,2] # contenuto cella II-a colonma cone vettore i486 > mat(3,] # contenuto cella IfT-a riga come vettore [1] 36 9 12 16 18 > mat(2,4] # elenento di indice: 2, 4 ti) at ‘La funzione matrix() viene usata per generare una matrice a partire dai ‘valori passati nel primo parametro; parametri aggiuntivi possono essere usati per indicare le dimensioni. Nel caso qui presentato ad esempio, é stata creata tuna matrice di 6 colonne. Tl numero di righe viene caleolato automaticamente dalla funzione stessa, mentre verrebbe generato un avviso di errore, nel caso im cui i dati forniti non fossero in numero sulficiente, cio’ un multiplo del numero di colonne indicato in argomento. Altre possibili parametri da usare sono nroven ¢ byrov=T, i. primo ® usato per definire il numero di righe della ‘matrice, il secondo per indicare il verso di riempimento della stessa: il default, cio’ il valore assunto nel easo l'utente non indichi nulla, attiva un riempimento per colonna”, mentre scegliendo il parametro byrov-T il riempimento viene portato a termine inserendo i valori "per riga”. > mat mat [al G2) G3) Ga) G8) C61 aj 123 4/5 6 Bl 7 8 98 10 2 [3] 13 14 15 16 18 > dim(aat) 36 > Length(aat) (1 18 Nell’esempio viene illustrata la differenza che intercorre tra il comando dim(), che ritorna sotto forma di un vettore, Ie dimensioni della matrice passata in argomento, e il comando Lengt() ne calcola invece la grandezza complessiva, cice il numero totale di valori che possono essere memorizzati, Esistono altre funzioni come cbind() e rbind() tramite cui 8 possibile creare delle opportune matriei componendo assieme vettori di uguale lunghezza. Le due funzioni cbind() e rbind() differiscono tra di loro per l'uso che fanno dei 2.2 Le Matric or vettori passati in argomento, la prima li ust per creare le colonne, mentre la seconda li utilizza per ereare le righe: > mi<-cbind (6(8,5,7) ,rep (2,8) ,1:3) > at Ga La) 31 a (3 2 74 Bl 8 2 2 Bl 7 2 3 sistema considera una matrice mull'altro che una naturale estensione del concetto di vettore. Attraverso gli indici & possibile agire sui singoli valori con- ‘tenuti, oppure sulle singole colonne o sulle righe, ma anche sulle sotto matrici ‘che possono essere individuate all'interno di una matrice. Cosi 2 possibile sia ‘modificare il contenuto di una matrice, sia cambiare le sue dimensioni aggiun- zgendo nuove righe o nuove colonne. Nel frammento di codice qui riportato ‘viene illustrato Pnserimento di una nuova riga in una matrice aggiungendo un vettore di lunghezza pari al numero di colonne della matrice: > mtcorbind (et (12, 15,7)) > at (a) G2) G31 a2 4 I] 8 2 2 il 7 2 3 1 2 16 7 B bene porre in evidenza che, nel caso si aggiungano vettori, questi devono favere una sempre Iunghezza "pari all'altra dimensione” della matrice: cio® se si aggimgono righe, i vettori dovranno avere una lunghezza pari al n. di colonne, se si aggiungono colonne, i vettori dovranno avere una lunghezza pati alla prima dimensione (numero di righe) della matrice. Nel caso si desideti aggiungere, mediante una unica operazione, pit righe o pit: colonne ad una matrice, & possibile portare a termine questa operazione creando una matrice ‘compatibile, ed eseguendo poi una operazione di "binding". Ad esempio si ‘suppone di desiderare di aggiungere due colonne alla matrice m1, Yoperazione ud essere esegquita inserendo tramite la funzione cbind(), due vettori dopo a matrice ml, oppure creando una nuova matrice ¢ richiedendo di operare un “binding” a livello di colonne su di essa: > m2<-cbind (mt ,11:14,15:18) > m2 (a) G2) Gal Gal G8) G1 °3a 2 "4 a “18 2) 8 2 2 2 16 # tranite due vettors EEE EEE EEE 68 : 2.Come si mantengono ¢ si elaborano i dati 6 lo7 2 3 ar - @) 2% 7 m8 Traian Dassiioae > m3<-cbind(m1,matrix(11:18,nrew=4)) # tramite una satrice atl AT individua tutta Ta quarta co- | 11.0 20.0 15.6 14.0 383 Jonna dell matric mat Inco Ga G2) Ga) Ga 68) Tonna assize la fora dn aaa a an as settoce ecome tale pu ener $202 2 16 trata 1238 sata, iecvidua Vintera tern vga | 8424-27156 183 bow 7 18 tells matrices; ga eo Vilizzando gli indici & possibile individuare, © quindi alloccorrensa anche dan yetoe come le pub Indice len tne a mar gto mado yu oer, essere trata Imodifcare i valore contenato in un singoo elemento (ad esempio nella second matt 4c Pens sets make Fen della quartacelonna della matrice a3), oppure anche ages di una intera Fea) | i denen pom | f1.) (0 10 Fee acestenandone tt ivr! dl 20% clone Gi) doane > ma(2,d) 23 # 1a matrice diviene reale mat([1:3,¢(2,5)] | individua Ia sotto matrice (4) 6,2 01] G2) 63) G4) 0,8) composta dalle prime 3 righe, | [1,] 2.0 15.0 1) 3.0 2.0 4.0 41.0 18.0 Timitatenente alla secondn © | (2,) 2.0 42.0 21 8.0 2.0 2.0 20.0 16.0 ayita edonna (1) 24 18.8 fe] e424 306 16.6 204 aatt-2, (2,49) | individue la sotto mats |" (4) (23 [4] 22.0 18.0 7.0 14.0 18.0 composta dala stconde ¢ | (4,]. 2.0 11.0 BS possibile anche agire su di una matrce operando su di una sua sotto parte, furs tinere emo | sa:0 aaco cio’ su una sotto matrice estratta dalla stessa. Nelesempio qui riportato si > mactaeef,11> | Individuo nelle pine Seaton: |" Gi) (3) 3) illustra come ® possibile ridurre del 25% i valori contemati nelle colonne 3 € 5, 6, 1:3) | neylerighe ieuiclementi nella | (3,) 8.4 2.4 2.70 imitatamente perd alle righe che vanno dal 2 al 4. Come si vede, in questo primo colonna sono ntaggiori | (2,] 12.0 18.0 6.25 ‘caso si agisce, non pid a livello di cella o di vettore, bensi su di una completa di6 ° ° sotto matrice di m3: > mat < 93 > mat [2:4,c(S,5)] nat > mat G1 G2) 63) G4) 8) [1,] 3.0 2.0 1.00 13.0 18.0 [2)] 8.0 2.0 1.50 20.0 12.0 {2,] 8.4 2.42.70 15.6 16.3 {al} 12.0 15.0 5.25 14.0 13.5 [A titolo di chiarimento, sono qui rlassunte alcune delle modalita pit frequente- ‘mente usate per identificare, ed eventualmente anche estrarre, dati contenuti allinterno della matrice mat 4 x 5 sopra presentata: Un'altra funzione molto usata, soprattutto nella matematica matriciale, 2 iag() adottata sia per creare una matrice diagonale, sia anche per estrarre Ia diagonale principale da una mattice. > diag(at) # estrae 1a diagonale dalla matrice at G1) 3923 > idicding(rep(2,3)) # costruisce una natrice diagonale > sai Ga G2) Gal i] "2 0 "0 2] 0 2 0 Is] 0 0 2 La stessa funzione pud essere useta anche per creare matrici identita, vale & NN 70 2.Come si mantengono ¢ si elaborano i dati lire matrici quadrate con diagonale principale composta da valori 1, 0 matrici ‘hulle di qualsiasi ordine formate cio’ da soli valori zero. > aiag(4,ncol=3,nx0u3) # mavrice identita Cd G2) Gal ai "170 70 @] 0 1 0 fl 0 0 4 > diag(O,ncol=5,nrow-3) # matrice milla Gal G2) G3) G4) G81 ty "0 0 0 0 0 Bl] 0 0 9 0 o 0 0 0 Oo Sulle matrici numeriche (e come si vedra successivamente anche sugli ar- ray) sono applicabili gli usuali operatori aritmetici di addizione, sottrazione, moltiplicazione, divisione e elevamento a potenza in grado di agire elemento per elemento a livello di matric’ o di vettori: > micmatrix(1:12,nrowa) > mt G1 G2) Gal 64) a2 "4 "a "7 “40 By 2 5 8 on fs] 3 6 9 1 > azenis3-10 > a2 (2 G23 63) G4) a 7 2 "1 "20 Bi 4 5 2 Is] -1 8 17 2 Quando sono presenti delle matrici nel calcolo elemento per elemento, le ma~ trict coinvolte devono avere tutte la stessa dimensione, cioé lo stesso numero di righe e di colonne; questa limitazione non si estende pero agli eventuali vettori coinvolti, che possono avere una qualsiasi lunghezza, che pero risulti essere un sottomultiplo esatto della matrice. > nde mita2ec(4,3,2,1) > 23 Ga 021 G3) Ga) ty 2 7 "20 “3a 2] 1 1 23 36 [3] 4 a7 30 38 22 Le Matric E da porre in evidenza il comportamento dei vettori nel calcolo: essi operano pper colonna ¢ si ripetono quendo arrivano alla fine, Nell'esempio precedente, YVelemento m3 di indice [1,1] si ottiene dalla somma di m1(2, 1] +m2[1,1] +4, ‘32, 1] si calcola come soma di ml(2,1] + m2[2,1] +3, quindi m3{3, 1] si ‘ottiene come m![3,1] + m2[3,1] +2. La seconda colonna viene calcolata di ‘seguito: m3[1,2] & la comma di v1[1,2] + m9{1,2} +1 dopo di che il vettore riprende dall'inizio: m3[2,2} some m1[2, 2] + m2[2,2| + 4 € cosi via di seguita fino alla fine Nota: funzioni utilizzabil generica matrice mat 4 x 5: per ottenere informazion! riguardanti una Iength(mat): ritorna un intero che indica il numero di valori presenti nella matrice (corrisponde la prodotto delle due dimensioni) dim(mat): ritorna un vettore di due interi che individuano le dimen- sioni della matrice: il primo indica il numero di righe, il secondo quello delle colonne nrow(mat): ritorma un intero che individua il numero di righe della matrice neol(mat): ritorna un intero che individua il mamero di eolonne della matrice Le matriei sono usate in R per una pluralita di scopi, per mantenere infor- magioni di natura numerica ricavato ad esempio, da precedenti elaborazioni, oppure estratte come sotto insiemi da altri dati, che a loro volta potrebbero provenire da questionari o da altre ricerche in fase di elaborazione. Il rappre- sentare le osservazioni mediante righe di una matriee ed usare le colonne pet identificare le variabili, semplifica notevolmente il modo di gestire ed elaborare Ie informazioni. Ad esempio, si noti come divengono facili alcune operazioni utilizzando la funione apply (), quando viene richiesto il calcolo di tna stessa funzione applicata un gruppo di variabili (e quindi a un gruppo di colonne), ‘oppure a una serie di risposte riguardanti ad una pluralita.di domande relative uno stesso soggetto, © come tali poste per riga. L'uso di questo comando ren- de infatti possibile applicare una medesima funzione alle righe o alle colonne di una matrice in modo da ottenere, ad esempio la somma totale dei valori contenuti in ciascuna riga, oppure in ciascuna colonna’ > apply(at,1,sum) # soasa dei valori per “riga" U1] 22 26 30 2 2 Come si mantengono e si elaborano i dati 2.2 Le Mat B > apply (t,2,sum) 4 eonma dei valori per “colonna” 2] 1 14 (a) 6 15 24°33 GB) 15 16 il secondo parametro presente nella funzione apply() segnala la dimensione rispetto a cui deve essere applicata la funzione indicata nel terzo parametto: in particolare si ricorda che la prima dimensione indica le tighe della matrice, ‘mentre tramite la seconda si indicano le colonne. Alla funzione apply() oltre alla somma, pud essere passata qualsiasi funzione che possa essere applicata, ‘ad un vettore, come ad esempio la media, la varianza, .... Potrebbe essere indicata anche una funzione di ordinamento sul tipo della funzione sort 0 order(), il risultato che si verrebbe ad ottenere sarebbe la matrice originaria con le righe (o Ie colonne) internamente e singolarmente ordinate, 2.2.1. Calcolo matriciale Una matrice ¢ una tabella di valori numeriei (usualmente composta da valori reali) ed @ formata da m righe e n colonne che individuano le due dimension: xn della matrice: la dimensione oriazontale che ind:ca la lunghezza di cia- scuna riga, © quella verticale che indica la lunghezza di eiascuna colonna. Nel caso si abbia una matrice axa, si dice che la matrice &quadrata ed @ di ordine 1. Una matrice composta da una solo colonna viene chiamata vettore colonna, ‘mentre se & formata da una sola riga, viene indieata cox il nome di vettore riga. Due matrici A e B si dicono inoltre uguali e si indicano: A = B se, oltre ad avere la stessa dimensione, ogni elemento di A risulta uguale al corrispondente elemento di B, cioe Ajj = B,, per ogni ie j. Quando si opera con le matrici e si desidera memorizzare al loro interno dei dati campionari, per convenzione si usano le colonne per individuare le variabili ele rigie per mantenere i dati riguardanti singole osservazioni. A titolo di esempio, si suppone di disporre di ‘due matrici numeriche Ae B di dimensione m x n (3 x 2): > Accmatrix(1:6,nc01=2) >A Gal G2 ii 1 4 Bl 2 8 il 3 6 > dim(A) la2 > Bematrix(11:16,ncol=2,byrover) >B Ga G2) Gl “2 Come si ? visto nel precedente capitolo, sui vettori e sulle matrici usati come operandi, sono applicabili i normali operatori aritmetici che agiscono calco- lando Poperazione indicata termine a termine. Perch? queste operazioni siano: possibili & perd necessario che le due matrici usate come operandi sbbiano la steasa dimensione: > mB a1 G23 i) "12 “16 # RCL, DAC c980,17 RE 21 Bl 18 19 # RO, 1D=a(2,4)+B(2,1) RO2,21~ [3] 18 22 #/R(S,1D*A(3,1)+8(3,1] RES, 21= > he Ga La (1) “10 "8 # REL, 1DeACt 17-B(2,4) RU), yl <1 8 (31. -12 -10 > kee ba 2 ty [1 “48 # REL DeAC1,1)4801,17 aot 2I-, 2) 2% 70 Bl 48 96 > WB Ga oa 1.) 0.o909003 0.9993383# R(1,1D=A(1,1\BEL,1] RCL,2I= (21) 0.1890462 0.571429, [31] 0.200000 0.370000 da notare che il prodotto tra due matrici come @ stato indicato, "non" cor- risponde al prodotto matriciale come é definito a livello dell’algebra della matrici. TI sistema fornisce la possiilita di calcolare anche il prodotto matriciale facondo perd uso dell’operatore %+% che esegue il caleolo "riga per colonna” per cui un elemento [i,{] della matrice risultato del prodotto matriciale tra due matrici X di dimensione (n x m) e Y di dimensione (m x x) si ottiene calcolando la somma dei prodotti scalari della riga 4 di X per la colonna j di ¥, Nota: il prodotto matriciale non ® applicabile se i numero di colonne della prima matrice X non @ esattamente uguale al numero di righe della seconda matrice ¥. 74 2 Come si mantengono ¢ si elaborano La matrice risultato ha come dimensione un numero di righe pari a quelle della ma matrice e vin mumero di colonne pari a quelle della seconda matrice. Ad fesempio, ipotizeanclo di disporre di una terza matrice C di dimensione (2 3), il prodotto matriciale Ax C genera una matrice risultato di dimensione: A(3,2) x C(2,8) = Ris(3, 3): > ce-matrix(21:26,ncol=3) >c Ga 62) 631 (1.1 "21 "2328 [2h] 22 28 26 > Rieke # prodotte matriciale (1 G2 G3) [1] 109 lis 129 (2)] 182 168 180 (3,] 198 213. 231 I risultato deriva dal calcoto: 14) pa wy. 5)x[2 ee ]- QM45-2 2245-24 2-254+5-26 B-M46-2 3.284624 3-2546.25 @y Per quanto riguarda i vettori, sono considerati dal sistema equivalenti a una matrice formata da una unica colonna e pertanto sono considerati vettori co- Jonna, Se si desidera creare al posto di un vettore colonna, un vettore riga, cio im veltore equivalente ad una matrice costituita da una sola riga, ¢ necessario efinire questo vettore utilizzando la funzione matrix(): ad esempio: [; M44 1-2844-24 1-2544.26 3 > acce(3, 7, 9) # vettore colonna > be-matrix(c(2,4,6),nrov1) # vettore riga, > ale Gal G2) 3) aj 6 (12 18 Bi) 4 28 42 [3] 18 36 5 equivalente a: 3 3-2 3-4 3-6 6 12 18 r[x(24e)-|72 74 76|—| 14 28 49 9 9:2 9-4 9-6 18 36 54 da notare che nel caso fosse stato eseguito il prodotto matriciale Biwka si sarebbe ottenuto: ea) 2.2 Le Matrci 6 > wha Oa i] "88 in quanto il prodotto tra il vettore b (di dimensione 1 x n) con il vettore a (di dimensione n x 1) genera una matrice 1 x 1 che equivale sia ad uno scalare che ‘ad un vettore costituito da un unico valore: 3 (24 o-(3] 9 Esaminando questi due ultimi esempi ® possibile trarre la seguente considera (2-344-746-9] = [88] 23) ‘Nota: La moltiplicazione matriciale non gode della proprieta commutativa presente invece nella moltiplicazione elemento per elemento A-BEB-A Invertire Pordine dei fattori in un prodotto matriciale @ un errore molto frequent, i risultati ottenuti, come si vede, sono tra loro molto diver Quanto detto vale sia nel caso siano coinvolti due vettori, sia quando il caleolo viene applicato a due matrici, oppure ad una matrice e ad un vettore. Un esempio molto frequente di prodotto matriciale che coinvolge contem- poraneamente una matrice e un vettore ® quello tra una matrice e un vettore colonna A-Y, dove A® una matrice m> ke ¥ ® un vettore colonna composto da kk valori; il risultato che si viene ad ottenere & formato da un vettore colonna ‘composta da m valori. Si consideri ad esempic: i i)puj [Eases ]-[S] eo é3}ebede [enti }> [ss ad ottenere: il seguente frammento di codice illustra il risultato che si vi > Acmatrix(o(2,4,6,5,7,9) sncol=2) >a Ga La aj "2 "8 Blo 4 7 fl 6 98 a 76 2.Come mantengono e si elaborano i > yere(tt, 19) >Y (ay 14 39 > atey Ga a2 ‘ar [2] 135 (31) 183 Un'altra operazione molto usata nell'algebra matriciale @ rappresentata dalla trasposizione di una matrice, operazione realizzata in Re dalla funzione 20, che applicata ad tna matrice (o a un vettore), consente di ottenere come risuitato la eotrispondente matrice trasposta, cio’ formata da una matrice in cui le righe sono scanbiate con Je colonne. Esempi delle trasposte della matrice ‘A, in algebra definito con il simbolo A’, e del vettore Y indicato usualmente nei testi eome Y’, sono qui di seguito presentati >t) 4 tracposta di A, ciod A? Ga 623 Cal il 2 4 6 2) 8 7 9 >sm 4 trasposta del vettore Y, cio® Y? Lal oa 2 [a “13 Come si ® accennato precedentemente, Voperazione di moltiplicazione ai ‘matrici non gode della proprieta commutativa; esistono tuttavia due particola- ri matrici che fanno eocezione a questa regola: sono le matriei nulle e le matrici identita, identificate rispettivamente con il simbolo 0 e con il simbolo I. E be- ne far rilevare inoltre che spesso sono usate anche matrici che presentano altri tipi di caratteristiche, per cui ® buona norma conoscere la terminologia usata aver chiare quali sono le caratteristiche associate: matrice quadrata matrice caratterizzata dall'avere un numero di righe pati al numero di eolonne matrice simmetrica matrice quadrata che presenta gli stessi valoriall'inter- ‘no degli elementi che posseggono gli indici in posizione invertita: as = ‘34; quindi si presenta simmetrica rispetto alla diagonale principale (che va dalPalto a sinistra verso il basso a destra). matrice diagonale matrice quadrata che presenta valori solo sulla diagonale principale (che va dallalto a sinistra verso il basso a destra); mentre tutti 22beMatrih 00 ali altri valori della matrice prendono come valore lo zero. Pud essere facilmente ereata richiamando la funzione diag(). Attenzione perd, la stesso funzione pud essere usta sia per creare una matrice diagonale, ‘ma anche per estrarre la diagonale presente all'interno di una matrice sit costruita, (vedi esempio riportato a pagina 69) smatrice identita ® una matrice quadrata comunemente indicata eon il ter- rine I, che presente 1 nella diagonale principale, mentre tutti gli alti lementi assumono il valore aero. Pud essere generata utilizzando la funzione diag(1, n) dove "n™ rappresenta Vordine della matrice. amatrice nulla matrice di ordine qualsias! inizializzata completamente con il valore zero. La creasione di una matrice mulla pud essere snch’essa atte- nuta richiamando la funzione diag0 passando come primo parametro iI valore zero, e come altri parametri le dimensioni della matrice che si intende defini, ad esempio diag(0, ncol*6, nrowe3) Come si? accennato le matriei identiti I ¢ la matrice nulla 0, diversamente dalle altre matrici, godono della propriet commutativa nella operazione di amoltiplicazione matriciale; si ha infatti: 0 A A-0=0 come pure: I-A= A ‘Una operazione estremamente importante ¢ Vinversione di una matrice squadrata; nel testi la matrice inversa viene indicata comunemente mediante Ja notazione: A~'. Lroperazione & cosi definita: In matrice inversa 2 quella ‘aatrice che se esiste, una volta moltiplicata per la matrice originaria, fornisce ‘come risultato la matrice identita: Ax A~’ = A“! x A= I, Se la matrice A ‘ha una matrice inversa, allora si dice che A ® invertibile, altrimenti si dice che % una matrice singolare. Il linguaggio R consente di calcolare V'iuversa di una matrice quadrata. facondo uso della funzione solve(). i disponibile pure la funzione det () che ‘corsente il caleolo del determinante di uma matrice quadrata. Si ricorda che “una matrice che possiede un determinante pati a zero, @ sicuranente singolare ‘© pertanto non pud essere invertita, come si pud vedere qui di seguito: > Eecmatrix(1:9,ncol=3) > dere) to > Bi<-solve(8) Error in solve.default (8) Lapack routine dgesy: eystea ie exactly eingular ee 78 2.Come si mantengono ¢ si elaborano i dati Un teorema stabilisce infatti che una matrice 2 invertibile, se e solo se, il so determinante & diverso da zero; pertanto se la, matrice usata da Iuogo ad din detertuinante diverso da zero, allora si pud calcolare In matrice inversa € Yerificare, come nel caso seguente, che il prodotto della matrice originaria per Ta sta inversa produce proprio come risultato la matrice identitd, > Bematrix(c(@,12,6,4,2,5,-3,~2,6) sncol3) > der () # detersinante (1) -414 > Bicaolve(s) + matrice inver > BueKBL ua 02) Gal [1,] 1-0000006+00 4, 163836e-17 -5.651115e-17 [2] -21778858e-17 1.000006 0.000000e700 2,) -2.775888e-17 8.326678e~17 1.0000008+00 Nel seguito vengono elencate aleune tra le funzioni di uso pitt frequente applicabil alle matrici [apply sare. fun) —] applica Ts Tunaione indicate wel parametro Fun ak Te righe, se margin=1, o alle colonne nel aso che nargine? della matrice A e ritoma sotto forma di fan vettore, i valorirsultanti dallelaborazione aati) Determinnnte della marie A a eigen) Galea gi atovalo gi autoventon AUT dal mnatrce A supply. fas) applica Ta anaone dca wl parame fam a C= Tt elementi present nel vettore Ve storba wn vettone di valor ‘wolveCA) ‘calcola Ia matrice AT, inversa della matrice A eee By ealola Te soluiont x del sistema Tineare Ae = B per Gascuna colonne della masrice B ew [tall Ta matri A ot a traspsta TA 2.2.2 Autovalori e autovettori Nel calcolo matriciale, ma anche in quello statistico[l], le operazioni che con- sentono di ottenere gli autovettori e gli autovalori sono considerate estrema- mente importanti e di uso frequente in alcune tecniche multivariate, cosi non deve meravigliare la disponibilita nel sistema R della funzione etgen() tramite ‘cui @ possibile calcolare gli autovalori e autovettori di una matrice 2.3 Gli Array 7 Data una matrice quadrata A di ordine n, si definisce X autovalore dolla matrice A, il valore per cui risulta Av = Aor, dove x individua un vettore colonna di hunghezza n, chiamato autovettore di & Si consideri ad esempio il caso di voler ottenere gli autoval snere gli autovalori e autovet- tori della matrie & qui definite, nel code soto portato viene iustrata le procedura che ne consente il ealeolo: > Accmatrix(e(6,7,-8,9,5,2,4,3,1) 200163) >A 11 G2) G3) a (6 3 "4 @l 7 5 3 (i) 2 2 4 > rac-oigen(A) > ser(ra) List of 2 $ values : num [1:3] 13.71 ~6.96 5.25 S,yeetors: mum {1:8, 1] -0.774 -0.480 0.412 0.550 -0.491 Svalues [1] 13.711037 ~6.960583 6.249546 Svectors ua tal La {1,] -0.7743532 0.5496354 -0.3479659, (2)} -0.480%461 -0.4911736 0.404832 (3,] 0.4117629 0.6787584 0 ,8455941 come & possibile vedere, il risultato generato dalla funzione eigen() genera un oggetto di tipo "list” (tipo questo che sara trattato nel capitolo 2.5), che con- tiene due componenti interni costituiti rispettivamente da un vettore a cui & associnto il nome di values che contiene gli autovalori, ¢ una matrice di nome vectors che contiene i corrispondenti autovettori. Ambedue questi compo- enti possono essere usati suocessivamente nei caleoli utilizzando la notazione ra$values per il primo e ravectors rer il secondo. Gli autovalori sono ordi- nati in accordo con il loro valore assolito, cosieché il primo autovalore é quello che assume un pitt alto valore assoluto. 2.3 Gli Array Se una matrice pud essere considerata una semplice estensione di un vettore Parray come ® definito in R, assume la forma di una matrice con un numero 80 2.Come si mantengono ¢ si elaborano i dati i dimension superiori a 2, Un array a 3 dimensioni ad esempio, pud essere pensato come una seinplice sovrapposizione di un certo numero di matric petue dimensioni (tante quanto é il valore indicato nella I1J* dimensione); ‘gut singolo elemento, ogni matrice componente e ogni sotto-matrice viene \lentificata attraverso opportuni indici. Se ad esempio si & definito il seguente array di dimensione 5 x 4 x 2: > aicarray(1:40,dinec(5,4,2)) >at vad Gn 12) Gal 4 i) (2 "6 1 16 B] 2 7 2 17 Gl 3 8 13 18 fe) 4 9 18 39 Is] 5 10 15 20 0 6.2) Gal Gal fia ‘21 "26 “a1 36 (2) 2 a a 37 [3] 23 28 8338 i) 2 29 3 39 [5] 25 30 38 40 ‘esso appare come die mattici 5 x 4 sovrapposte. B possibile estrarre, e quindi ‘perare sia sui singoli elementi componenti, sia a livello di vettori, di matrici anche di array. > at(3,4,2] # singolo elesento dell array (1) 38 > a1(2,,2). # TI-a riga della seconda sotto matrice (4) 22 27 32 37 >ait,,2) #11 Gal Gal Gs) 64) ta [21 "26 ‘a1 36 (i) 22 7 32 aT [3] 23 28 3338 [4] 24 29 8489 (5) 25 30 35 40 > ail,2,] # matrice formata dalle seconde colonne gotte matrice 2.4 | Data Frame at (0 B21 al | 6 (26 @l or a7 [3] 828 fl 9 23 (S110 30 > ‘atle(2,4),2:4,) # array di 2 righe, 3 colonne ¢ 2 matrici 1 La) G2) Gal ayy [7 [a2 7 2] 9 4 19 61 G2) Gat ‘27 ‘a2 ‘37 (2) 29 38 39 in particolare si pud vedere che ® possibile indicare dei sotto array (0 matric) formati dalle righe, clonne preselte 2.4 | Data Frame In R viene indicato con il nome di "data frame” un oggetto che assume un aspetto, per un certo verso, abbastanza simile a quelo di una matric in eu, ciascuna colonna corrisponde ad una variabile, mentre ciascuna riga indivi dua una osservazione, A differenza dalle matrici per®, ciascuna colonna, put vendo singolarmente valoti tutti omogene!, appartenenti cio® allo stess0 tipo, ossono avere colonne singolarmente di tipo diverso, ed inoltre le colonne e le righe possono essere intestate mediante nomi o valeri, Similmente a quanto accade con le matrici, ciascuna colonna pud essere vista come tun veltore, so- no comunque caratterizzate tutte dal possedere una medesima Punghezea. Si cconsideri ad esempio: > quest<-read.table("dati.txt", headers) > str(quest) 20 obs. of 11 variables: $SESSO: int 2221222122 SETA int 44 55 36 NA 72 29 24 27 60 49 S$ STUDIO : int 2233833422 SSTATO : int 2442411122 SMASCITA : int 2222222222 a 22 2 Come si mantengono e si elaboran $ RESIDEWA: int 2222222222. Scr : int 66NAISS1161 $ SPESEL : int 75 90 70 75 30 30 60 75 60 90, $RISP? : Sat 25 10 30 26 70 70 40 25 20 10 $ns0c2 int 1NA3456NA 89 10 $ STGLA2 : Factor u/ 18 Levels "*,"chit110", 1. come # possibile vedere, il data frame che in origine era memorizzato allinter- tho di un file in memoria di massa, viene recuperato ¢ caricato in un oggetto & cui viene dato il nome “quest”. Tl data frame si presenta all'utente in forma tabellare (0 com in cui Ie righe sono usate per mante- ita statistiche, dette anche "casi, mentre le colonne mantengono le risposte ai quesiti posti o agli aspetti che del fenomeno sono stati presi in considerazione. Le colonne che rappresentano anche le variabili, appaiono identificate mediante un nome e sono potenzialmente di tipo diverso, Quanto detto pud essere riscoutrato nell’esempio sopra presentato: mentre la variabi- Je "SIGLA2” mantiene dei codici alfanumerici (ed & pertanto definita di tipo character), le altre variabili contengono informazioni di natura mumerica che lescrivono altri aspetti relativi ai soggetti presi in considerazione (eta, sesso, titolo di studio, ...). B possibile accedere alle variabili e al loro contenuto, sia usando la tipica notazione matriciale, ciot mediante gli indici, sia anche indicando in modo esplicito i nomi che identificano le oolonne (cioé i nomi delle variabili) alPinterno del data frame. Ad esempio, Veta del IV? soggetto ud essere ottenuta scrivendo quest [4,2] ma anche questSETAC4]. La no~ Eazione adottata in quest'ultimo caso identifica Ia variabile (e quindi anche jl corrispondente vettore) tramite il nome; questo si ottiene indicando prima jL nome del data frame, poi il carattere $, ed infine il nome della variabile stesea, Una intera variabile, cio un intero vettore che contiene ad esempio, le Informazioni sullo stato civile dei soggetti campionati, pud essere identificato alternativamente da una tra le seguenti notazioni > quest (,2] (1 44 $5 36 WA 72 29 24 27 60 49 22 37 23 34 29 48 43 54 23 96 > quest SETA [1] 44 55 36 NA 72 29 24 27 50 49 22 37 28 94 29 48 43 54 23 96 > quest (,"ETA"] cd) 44 $5 36 WA 72 29 24 27 S049 22 37 23 96 29 48 43 54 29 96 > quest ((*ETAY)) [i] 44 55 36 NA 72 29 24 27 50 49 22 a7 29 94 29 48 43 54 23 36 Come si pud notare, trai dati caricati nel data frame, e quindi anche nei vettori che compongono le variabili, sono presenti dei particolari valori indicati con il 2.4 | Data Frame we termine "WA", notazione usata da R per indicare un valore maneante 0 valore null. Come verri ampiamente descritto nel capitolo 2.4.7, & possibile richiedere di rendere pitt agevole accesso alle variabili contenute in un data frame usando- la funzione attach() che rende immediatamente accessibili le colonne presenti in un data frame come se fossero variabili esterne allo stesso. Ad esempio: > occur Error: Object > attach (quest) > occur 4 al posto di quest$00cuP i) 66m 38311 81591314mE 34 > detach (quest) > occur Error: Object "OOCUPY not found ICCUP" nanot found E disponibile anche la funrione detacn( che rende nuovamente non pit dlretarment acoso variabli presenti nol data frame Tl deta frame costitulsce in Runa ta le strutture dati pid usate in quanto consete di mantener e gestre in modo unitario la repprtentaione lun fe nomeno, anche se carstetizato da una strttara i notevole complet. Nel Compo delle sence socal, viene usato ad eempin, per mantener informa on dnt dallapalasone dn quale questonae # perro nolo Important sonaeeore le patensialta'seapers come gette quota tipdogia Age Comes pib vedere dal data frame "quoot* portato come ewempin og variable oltre possedere ua propria ellocasione che va da Lalla di tension dell ig della tabella,posiede anche un nome che la dente. Un, ‘cite contenente | noma delle variabil present in un data frame pub essere Facilmente ottenuto uilizando la funeione axes): > nomi<-nanes (quest) > nomi (1) "SeSs0" “ETA” "STUDIO "STATO" *MASCITAY "RESIDEWZA" (7) “Occup “spESEL" *RISP1" "NsOG2" "STOLA2" > wbich(nomi == "RISPI") # posizione di "RISPI" come colonna ws tramite questi nomi é possibile identificare le corrispondenti variabili, oppure ottenere Ia posizione che nel data frame assume la colonna corrispondente, in. modo da ritomare ad usare, se si desidera, la forma a matrice che fa uso degli. Selmer per edividuate le variable cle sceesiv ata l'importanza che vengono ad assumere questi nomi, ¢ bene illustrare come sia possibile medificarli all’accorrenza: i linguaggio consente di operare cambiamenti sia a livello di un singolo nome: 84 2 Come si mantengono e si elaborano i dati > names (quest) (9] <-"RISPOSTAY > names quest) (1) *SEsso" "ETA STATO" "HASCI [7] *0ccuP" "SPESEL" “"RISPOSTA "SOG2" “STOLA? “RESIDENZA" sia di intervenire operando su tutti, o parte dei nomi presenti all’interno di un data frame mediante 'editore interno del sistema. L’operazione attiva Veditore ‘che, in una apposita finestra, presenta i nomi delle variabili sotto forma di un vettore di stringhe di caratter; agendo su questa finestra @ possibile modificare Spportunamente questi nomi dopo di che, cou la chiusura della finestra, i Yettore modificato viene a eostituire quello origivariamente presente mel data frame quest: > names (quest) <-edit (names (quest) ) > nazea (quest) [1] "sesso" era" (5) “"aNrascta" \Coa Residenza" [9] "Test" 2S" ‘Nota: fundioni utilizzabili per esaminare (0 anche modificare) gli attributi che descrivono un data frame (ad esempio quest) Iength(quest): ritorna il numero di valori presenti nel data frame (corrisponde al prodotto delle due dimensioni), rell'esempio: 110 dim(quest): titorna un vettore contenente due inter che rappresentano nell‘ordine la prima. la seconda dimensione della tabella che forma il data frame, nell? esempio: 10 11 nrow(quest): numero di righe presenti nel data frame, nell’esempio: 10 ncol(quest): numero delle colonne presenti nel data frame, nell'esem- io: 11 names(quest): vettore dei nomi usati per identificare le colonne: nell'esempio: "sesso" "eta" "TStudio" "STCivile” 2.4.1 Creazione di un data frame da console Un data frame pud essere creato direttamente da console, oppure pud essere anche recuperato leggendolo da file. Nel caso di data frame "piccoli”, questa 2.4 | Data Frame 85 operazione a volte viene compiuta creando Voggetto desiderato da. console ‘combinando tra low vettori di pari lunghesza. > > coloric-e(trosso", "verde > freqenc(42,24,33,31) jgiallo® "oI: ate-data.trane(T(colori) freq) as colori freq 1 rosso 42 2 verde 24 Bgiallo 33 4 bl ot ‘L'uso della fanzione IQ consente di introdurre un vettore di caratteri in modo che sia successivamente trattata come tale cio? come un vettore di stringhe; se ron fosse stata usata la furzione T(, Ia variable colori sarebbe stata converti- ta in un vettore di valori di tipo fattore (vedi capitolo 2.6) e trattata come tale. T nomi usati per indicare le variabili, sono in questo caso desunti dal nome dei vettori passati in argoinento; nel caso si usasse un altro sistema per creare ‘un data frame e non fosse indicato il nome delle variabili (colonne), il sistema assegnerebbe come nomi: "vari", "var2", "var3", ...T vettori che andranno a ccostituire un data frame " devono” avere tutti la medesima lunghezza, nel caso contrario il sistema ritorna una segnalazione di errore. Come si pud vedere dalla figura 2.3, un utente che desideri creare un data frame da console, pud far uso anche di un apposito editore grafico spe- Cializeato che presenta il data frame sotto forma tabellare, imitando lo sti- le utilizzato nei fogli elettronici. L’operazione richiede uso della funzione eait(). Esaminando la figura 2.4 @ possibile avere una idea di come V'editore cconsenta tra V'altro, di agire anche sui nomi delle variabili modificandoli a pia- cere, tramite un semplice click sulla casella della intestazione della colonna; oltre alla possibilita di alterare i nomi indicati, & possibile anche modificare opportunamente il tipo dei dati associato alla variabile. ‘La ereazione di un "nuovo" data frame richiede di assegnare alla variabile che conterra questo oggetto, il risultato generato dall’editore su di un oggetto di tipo data frame inizialmente vuoto: > atcredit(data.trane()) ‘La modifica di un data frame gia esistente viene eseguita invece attivando lo stesso comando edit 0 e pasando come parametro, ildata frame da modifica- re. Il risultato finale ottenuto covra essere comunque memorizzato all interno Gelloggetto indicato alla sinistra delVoperatore di assegnazione; questo modo eee a 86 2 Come si mantengono e si elaborano i dati Figura 23: Raitore di data frame di procedere consente sia di modificare un oggetto, ma anche di ricopiarne il contenuto su un diverso oggetto, assieme ai valori eventualmente modificati, lasciando inalterato loggetto originario, > atcredit(at) __# modifica 1o stesso oggetto "dt > dinewe-edit(@t) # 1a modifica va sull’oggetto “afneu" La funzione edit () agisce in modo diverso a seconda del tipo di oggetti passati in argomento, Se ad esempio, le viene fornito un vettore: > vere(23,12,44,55,-2) > vncredit(v) [1] 23 12 44 55 22 attivazione del comando provoca la comparsa della finestra del "Blocco No- te”, e all'interno, nel caso esemplificato appare il seguente testo: (23, 12, 44, 56, -2), che come si vede, costituisce il comando necessario per creare il vettore, Nel caso si intendesse cambiare o inserire qualche altro valore, & sufficiente agize tramite l'editore, salvare e chiudere Peditore stesso. Nell'e- sempio precedente, 2 stato cambiato 'ultimo valore (quello negativo) che & Stato sostituito con il valore 22. Analogamente avviene nel caso il parametro fornito individui un array 2.4 | Data Frame 87 Figura 24; Modifica del nome e del tipo dei valori di una variabile > accarray(1:40, dim=e(4,5,2)) > ancredit(a) nellesempio qui indicato, il Blocco Note visualizza come testo, ancora il co- ‘mando in forma estesa, in grado di generare 'array in questione: structure (e(1, 2, 3, 4, 5, 6, 7, 8, 9 10, 41, 12, 13, 14, 18, 36, 37, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 94, 35, 36, 37, 98, 99, 40), Dim = C4, 6, 295 agendo sull'editore possibile modificare sia la struttura, che i singoli valori contenuti nell’array. 2.4.2. Come mantenere informazioni relative a campioni indipendent ‘Accade spesso di voler mantenere allinterno di uno stesso data frame, zioni relative a soggetti,o situazioni diverse riguardanti tno stesso fenomeno rma caratterizzate da essere tra loro indipendenti. In presenza di una tale si- tiazione, Ia numerositA di ciascun gruppo di informaziont di cui si viene disporre, risulta essere spesso non uguale, ¢ in tal caso non sarebbe possibile ‘mantenere all'interno di uno stesso data frame, i diversi campioni o gruppi di informazioni in corrispondenti variabili: le corrispondenti colonne verrebbero ‘ad avere infatti dimensione tra loro diversa, Per evitare questo, in genere si fa confluire tutte le informazioni in un'unica variabile e si mantiene in una ‘vatiabile parallela, lindicazione del gruppo di appartenenza. Ad esempio, si consideri di disporre dei voti assegnati a un campione di italiani, di asiatici, ¢ di americani sottoposti ad un medesimo compito: > italiani<-c(80,26,27, 18,26,27,24) > asiatiel<-c(29,22,21,28,30,25,27,28) > anericani<-c(24,28,30,29,18,21,20,26,25,22) ee 88 2 Come si mantengono e si elaborano i dati ‘come si vede, j tre gruppi sono formati da un numero di osservazioni diverse, pertanto non & possibile creare un data frame con Ie tre variabili indicate. La Soluzione pud essere trovata creando un data frame che contenga in wma, prima variabile tutti i voti, operazione questa che viene eseguita concatenando i tre vvettori in suecessione; poiché la seconda variable deve mantenere come si detto, l'indicazione del gruppo a cui appartiene il corrispondente voto, @ suf ficiente coneatenare in suecessione, le indicazioni di ciascun gruppo, replicate ‘un numero di volte pati alla dimensione del relativo gruppo: votic-c(ital:iani asiatici,anericani) geruppi<-c(repC IT? length (italiani), repCAs? jlength(asiatic)), rep AM? length (anericani))) at votic-data.frana(votinvott, zozaGeomgruppi) str (df vot) ‘aata.trane’: 25 obs. of 2 variatles S voti ; nun 30 25 27 18 26 27 74 29 22 24 $ zonaGeo: Factor w/ 2 levele *AM*,"AS",“1T*: 33399332 > af. vots (1:9, # rieultato delle prime 9 informazionl voti zonaGeo 1 900OT 2% 37 1 a8 oT 5 26 IT 67 oir 7 m4 oT 8 29 AS 9 2 AS 2.4.3. Prime elaborazioni del risultato di indagini statistiche Come ® stato gid accennato, il date frame rappresenta il mezzo usato con mag~ sgiore frequenza per mantenere, sotto forma di oggetto in memoria centrale, le informazioni desunte dalla somministrazione di un questionario 0 provenienti da una qualche indagine. Il motivo per cui si fa uso di questa tipologia di dato deriva dalla versatilita e dalla forma con cui viene rappresentato un data frame, forma che ben si presta a rappresentare le variabili e le corrispondenti osservazioni, Le vatiabili sono usate per descrivere i diversi aspetti del fe- ‘nomeno preso in esame, € mantengono al loro interno le diverse osservaziont ottenute nelPindagine e desunte dai questionari, per cui i dati che saranno og getto di elaborazione statistica, non sono altro che la raccolta di osservazioni 241 Data Frome riguardanti una serie di quesiti, Spesso queste informazioni sono importate da programmi che gestiscono i fogli elettronici o le basi di dati; i dati pre~ sentano comunque una struttura a matrice, in cui le colonne sono usate per rappresentare le variabili, mentre le righe individuano le osservazioni raccol- te, La possibilita di identificare le variabili tramite il loro nome, o sulla base dellindice che ne individua la colonna all interno della matrice dei dati, rende possibile In scrittura di frasi molto compatte e potenti; lo stesso si pud dire anche della possibilita di scogliere quali osservazioni elaborare, scelta che pud avvenire sulla base degli indici che identificano le righe (i casi di interesse) nella matrice dei dati Si consideri come esempio, di aver somministrato un questionario a un campione di soggetti e di aver usato un qualche programma esterno, come po- trebbe essere ad esempio un foglio elettronico, per memorizzare i dati acquisitis {in una tale situazione. I dati risultanti dalla somministrazione del questionario ppossono essere passati ad R sotto forma di un file testuale ("dati .csv”) di- sponibile nel calcolatore dell'utente, ed in cui si fa uso di un qualche carattere, ad esempio il punto e virgola (";”) per indicare la separazione tra i diversi vvalori inseriti in una stessa riga, mentre la virgola (”,") potrebbe essere sta ta usata per dividere Ia parte intera da quella decimale nei valori reali. Un frammento di un file siffatto viene qui presentato a titolo di esempio: WSOGS ; VERSIONE; SUGLAA; ATTA; ATT2; ATTS ; ATTA; ATTS ; ATTS ; }mari309;4;7;4;6;6;7:3: 2:2; gab1811;6;55252;2:6;7: }eptig08; 7}2;man2301 ;7;7 832; dam1205 ;6;6 La lettura dei dati che indicano le risposte date dal campione di soggetti, ‘consente la creazione di un oggetto di tipo data frame. L'operazione viene portata a termine utilizzando la funzione read.table() la cui definizione ¢ modaliti di impiego sara illustrata in dettaglio a pagina 161 di questo testo: > canpe-read.table(file.choose(), header=T, sep=";", dec=",") erie aac 2.4 | Data Frame 1 90 2.Come si mantengono ¢ si elaborano i dati > camp VERSIONE SIGLAL ATTt «ATT2. «ATI. ATS. ATS ATT 12 mart309 & 1 4 6 6 7 2 2 © gabisit 6 5 2 2 2 6 32 eptis0a 6 6 2 1 2 6 492 clazsor 7 7 2 4 2 6 5 2 Lea060s 6 7 4 2 2 7 6 2 gioloT 6 6 2 2 3 eo. 7 2 ean2301 7 7 1 2 2 6 2 2 dasiz0s 6 6 2 3 1 7 9 2 renvei2 5 6 3 3 3 6 10 2 © mar2i02 NA 6 6 2 2 1 12 mari6i0 6 7 2 2 3 6 12:2 paolsi2. 7 7 1 4 1 7 B importante far notare che ciascuna riga del file viene fata corrispondere a ‘una corrispondente riga del data frame, pertanto il numero di valori in eiaseuna riga deve essere costante (a meno della presenza di indicazioni di valori mulli). 1 parametri inseriti dopo il primo, nella chiamata della funtione read. table (), indicano le particolarité usate da chi ha ereato il file di dati (In presenza di tuna prima riga che contione di nomi delle variabili il carattere ";” usato pet separare dati sulla stessa riga, il earattere ”,” usato per indicare in Italia le parti decimali nei valoti reali). Inoltre @ bene far notare che spesso i questiona- 1i, 0 le analisi campionatie, difficlmente contengono "poche" variabili nonché ‘un numero limitato di osservazioni, non ® infrequente la presenza di centinaia di variabili e addirittura di migliaia di osservazioni. La visualizzazione nella console del contemito di un intero data frame di tali dimensioni 2 proibitiva in ‘quanto porta alla generazione di una quantita informaz.oni che non possono ‘essere di alcuna utilita pratica. Si consiglia sempre di affrontare 'esame ini- ziale di un novo data frame, sempre adottando una certa cautela in modo da evitare di essere sommersi da una. quantita di informazioni di diffcile gestione. # buona norma procedere per gradi iniziando prima di tutto con un esame preventivo del contenule del file che deve essere letto in modo da compren- dere quali caratteristiche sono state usate nella sua cod'fica; questo consente all'utente di poter farsi una idea di massima sulla dimensione e sul contenuto che poi verra a costituire il data frame una volta creato all'interno di R. Suc- cessivamente a questa prima fase, si procede ad acquire il contenuto del file, utilizzando la funzione di lettura pit appropriata; una volta che 'operazione ha avuto huogo, ? buona norma effottuare alcuni control in modo di verificare la congruenza tra la dimensione del data frame generato e quella nota a livello i file, Un suecessivo passo & richiesto per verificare la rispondenza dei nomi delle variabili interne al data frame con le corrispondenti definite a livello del file (se presenti); infine, @ importante procedere ad un controllo della struttu- ra del data frame in modo da verificare la rispondenza, a livello di tipologia dei dati, tra le singole variabili contenute nel data frame e le corrispondenti presenti nel fle La dimensione del questionario, cio® il numero di casi o di osservazioni (n. righe) e il numero di variabili (n. colonne) pud essere ottenuto esaminando Ia dimensione della matrice dei dati contenuta nel data frame creato, informazio- ne questa ottenibilé attivando la funzione: dim(camp), mentre il nome delle vatiabili pud essere ottenuto tramite la funzione names (). Per quanto riguar- da infine V'importante contzollo sulla rispondenza a livello di tipologia. delle variabili interne con quelle presenti nel file, questo controllo richiede l'attiva- zione della funzione etx; al riguardo ® importante notare che una infelice Tettura dei dati pud dar luogo all’acquisizione di un data frame con un con- temuto non in linea con quello atteso e presente nel file. Un sintomo di una hon corretta operazione di lettura del contenuto di un file, & dato ad esempio, dalla presenza di variabili che assumono una inaspettata veste di fattori ad indicare una tipologia di dati categorica piuttosto che numerica, Un esame piit approfondito sui diverse situazioni che possono verificarsi viene presentato nel capitolo 3.4 Una volta creato il data frame e verifcata la correttezza con cui avvenuta questa operazione, ® buona norma procedere al suo salvataggio in formato binatio nella memoria di massa del ealeolatore, il che ne garantisce un veloce € soprattutto sicuro recupero, Questa operazione pud essere eseguita utilizzando Ia funzione save() e la corrispondente 1oad(), che saranno introdotte nel capitolo 3.1. Riprendendo in esame la situazione in cul ci si viene a trovare quando si genera tn data frame caricando il contenuto di un file, il consigtio che viene empre dato & di procedere per gradi: prima verifcare a quanto ammonta rmamero di variabili (colonne) e casi (righe) che costituiscono la matrice dei dati, quindi se risultavano presenti nella prima riga del fle i nomi delle variabili, individuare questi nomi in modo da consentire di individuare le corrispondent colonne. > aim(camp) (1) 538 131 rn, righe (casi), 8. colonse (variabili) > nanes (camp) # nomi doile prime variabili {1] ‘VERSIONE “SIGLAI" "ATTA" "ATT2" "ATT "ATTA