
















Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
formule software r studio statistica
Tipologia: Formulari
1 / 24
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!

















Appunti RStudio Come si crea un vettore Per creare un vettore in R basta dare un nome al mio oggetto, per esempio v1, operatore di assegnazione (<-) (in alternativa possiamo utilizzare = ) utilizzo poi la funzione concatenate ( c() ) e all’interno delle parentesi inserisco le modalità. Tra una modalità e l’altra, per separarle utilizzo la virgola (,).
m1 <- matrix(1:20, nrow = 4, ncol = 5) m1[1, 2] # elemento che occupa la posizione: prima riga e seconda colonna m1[2, 1] # elemento che occupa la posizione: seconda riga e prima colonna m1[1, ] # prima riga m1[, 3] # terza colonna Come si crea un dataframe Un dataframe è una matrice di dati in cui ogni riga corrisponde a un individuo ed ogni colonna a un carattere osservato. A differenza delle matrici, un dataframe può contenere nelle colonne oggetti di natura diversa. Per creare un dataframe utilizzo la funzione data.frame(). peso = c(50, 75, 80, 56, 75, 58) altezza = c(1.65, 1.78, 1.91, 1.72, 1.81, 1.68) età = c(19, 22, 21, 23, 22, 20) sesso=c("F", "M", "M", "F", "M", "F") SESSO=factor(sesso) Dati = data.frame(peso, altezza, età, SESSO) Se lancio il comando Dati visualizzo il dataframe. Per vedere la struttura del mio dataset utilizzo la funzione str() , che mi specifica inoltre il numero di oggetti delle variabili str(Dati) Altra funzione utile funzione names() , che mi dice il nome delle variabili del mio dataframe. names(Dati) Come si richiama un dataset Per caricare un dataset già presente nel database richiamo prima la libreria con la funzione library() con all’interno come argomento il nome della libreria: library(MASS) Poi funzione data() con cui richiamo il nome del mio dataset => in questo caso il mio dataset è “survey” e lo visualizzo con la funzione View() e visualizzo la struttura, con la funzione str(). data(survey) View(survey) str(survey) Quando il dataset è già presente in R e voglio estrarre dal dataset un’unica variabile, posso farlo seguendo due modi: o utilizzando la funzione attach() e poi richiamando il nome della variabile, oppure estrapolando i miei dati utilizzando il dollaro ($) attach(survey) Age survey$Age Distribuzione di frequenze
GRAFICO A TORTA si utilizza per caratteri qualitativi ; si realizza con la funzione pie(). All’interno come argomento inseriamo sempre la distribuzione delle frequenze assolute pie(table(Sex)) pie(table(Smoke)) ● Interpretazione : La torta è divisa in fette. Ogni fetta ha un'area proporzionale alla frequenza. Una fetta di torta più piccola indica una frequenza più bassa. All’interno delle parentesi specificando l’opzione labels= possiamo dare un’etichetta al grafico. ISTOGRAMMA si utilizza per rappresentare caratteri quantitativi suddivisi in classi. Per realizzare in R un istogramma si utilizza la funzione hist(). All’interno delle parentesi, come argomento non ci va più la distribuzione ma il nome del carattere che consideriamo. La divisione in classi in R avviene automaticamente, viene fatta di default, questa divisione segue una regola, che si chiama regola di Sturges. Se non specifico niente all’interno della funzione hist R di default realizza un istogramma di frequenza. L’istogramma di frequenza si realizza quando le classi hanno la stessa ampiezza. hist(Age) # istogramma di frequenza ● Interpretazione : in questo caso l’altezza è la frequenza. La base è l’ampiezza della classe. Se però le classi non hanno tutte la stessa ampiezza devo realizzare un istogramma di densità , che si realizza in R sempre con la funzione hist, come argomento inserisco sempre il nome del carattere, devo poi però specificare un opzione ovvero freq=FALSE. FALSE e TRUE sono dei token , e c’è sempre un’operazione di codifica. R così capisce quale istogramma deve realizzare. hist(Age, freq=FALSE) # istogramma di densità ● Interpretazione : In questo caso sull’asse delle x abbiamo sempre le modalità, invece sull’asse delle y non abbiamo più la frequenza ma la densità, ovvero l’altezza del rettangolo non è più la frequenza ma è la densità. Nell’istogramma di densità la frequenza è l’area, e per calcolare la frequenza dobbiamo fare base per altezza, dove la base è l’ampiezza della classe e l'altezza la densità. Posso in alternativa scegliere io il numero delle classi (in alternativa alla regola di Sturges),e lo posso fare usando l'opzione nclass. hist(Age, nclass=30, col="red", xlab="età") # numero di classi Se invece voglio decidere gli estremi delle classi, posso utilizzare l’opzione breaks. estremiclassi <- c(15, 18, 20, 25, 30, 45, 70, 75) hist(Age, breaks = estremiclassi, col= "red") # istogramma di densità con classi di ampiezza diversa
Indici di centralità e di posizione Alcune funzioni utili min() valore minimo, max() valore massimo, sum() somma degli elementi del vettore, sort() dati disposti in ordine non-decrescente (quindi, in ordine crescente). MEDIA ARITMETICA In R ci sono due modi differenti per calcolare la media. Il primo modo che è il più semplice è quello che utilizza una funzione specifica ovvero la funzione mean(). Quindi do un nome al mio oggetto, operatore di assegnazione e utilizzo la funzione mean. All’interno delle parentesi tonde inserisco come argomento l’oggetto di cui voglio calcolare la media aritmetica. redd_medio <- mean(reddito) Altrimenti seguo la formula che conosco dalla teoria. Dalla teoria so che: la media aritmetica è uguale alla sommatoria per i che va da 1 a n di xi diviso n. sum( reddito )/length( reddito ). In R la funzione che mi permette di sommare degli elementi è sum(), mentre la funzione che in R mi permette di descrivere la numerosità di un vettore è length() , quindi farò: sum( reddito )/length( reddito ) MODA Altro indice di centralità. Non c’è in R una funzione che mi permette di calcolare la moda, per questo utilizzo la definizione di moda che conosco dalla teoria. La moda è la modalità a cui è associata la frequenza più alta. Quindi realizzo la mia distribuzione di frequenza con il comando table() che mi permette di creare la distribuzione delle frequenze assolute. table(reddito) # modalità a cui corrisponde la frequenza più alta Se invece volessi realizzare la distribuzione delle frequenze relative il comando è prop.table e all’interno devo inserire come argomento la distribuzione delle frequenze assolute. prop.table(table(fatturato)) La distribuzione delle frequenze assolute, cioè questo output che ottengo con la funzione table si interpreta così: abbiamo le modalità e le frequenze assolute sotto. Un individuo in questo caso un’azienda ha un fatturato di mezzo milione di euro, ecc.. Ritornando alla moda, la frequenza più alta è 2, ma la moda è la modalità a cui è associata la frequenza più alta, quindi 4. Quindi 4 rappresenta la moda. MEDIANA Altro indice di posizione; la mediana è la modalità che occupa la posizione centrale all’interno della distribuzione , ossia è quell’unità che divide il collettivo in due parti di uguale numerosità. Anche in questo caso ho due modi per calcolare la mediana, ho una funzione immediata in R che è la funzione median()
output la produzione del cosiddetto grafico a scatola. ● Interpretazione boxplot : linea orizzontale in basso mi rappresenta il minimo, quella in alto rappresenta il massimo. Il bordo inferiore rappresenta il primo quartile, quello superiore il terzo quartile, mentre la linea orizzontale più marcata è la mediana ovvero il secondo quartile. Se la mediana si trova al centro della scatola potrei iniziare a pensare che la distribuzione sia simmetrica. Nella distribuzione simmetrica moda media e mediana coincidono. Il fatto che la mediana si trovi al centro della scatola è condizione necessaria ma non sufficiente. Occorre verificare i valori della media e della moda e verificare se le tre coincidono. Il boxplot ci dà un’idea. Indici di variabilità e forma VARIANZA E DEVIAZIONE STANDARD L’indice di variabilità più famoso e più frequentemente utilizzato, che conosciamo è la varianza. In R la varianza si realizza con il comando var(). var(reddito) # Varianza (N.B. la funzione var divide la devianza per n-1, non per n) In alternativa possiamo utilizzare la formula che conosciamo dalla teoria: la varianza è la media degli scarti al quadrato / è data dalla media dei quadrati degli scarti della media aritmetica VAR Si definisce <> la differenza tra la generica osservazione e la media aritmetica. => seconda proprietà Funzione utile length(reddito) # numero di elementi del vettore n=length(reddito) sum((reddito-redd_medio)^2)/(n-1) La deviazione standard , detta anche scarto quadratico medio, è la radice quadrata della varianza.
In R si realizza con la funzione sd() (standard deviation) sd(reddito) # Deviazione standard (o scarto quadratico medio) Oppure posso utilizzare anche la formula che so dalla teoria. Sapendo che la deviazione standard è la radice quadrata della varianza posso fare anche sqrt (che è il comando che in R si utilizza per fare la radice quadrata) di var di fatturato: sqrt(var( reddito )) COEFFICIENTE DI VARIAZIONE La varianza e la deviazione standard sono indici di variabilità assoluti, che risentono dell’unità di misura e dell’ordine di grandezza dei dati. Un indice di variabilità relativo è il coefficiente di variazione. Si utilizza quando voglio fare il confronto tra due distribuzioni , Quindi, per confrontare la variabilità all’interno di due distribuzioni, devo utilizzare il coefficiente di variazione, che è depurato sia dell’unità di misura che dell’influenza della media. In R per calcolarlo non utilizzo una formula ma uso la definizione➞ il coefficiente di variazione è il rapporto tra deviazione standard e la media aritmetica e quindi in R utilizzerò le funzioni sd()/mean ; è più appropriato da utilizzare qualora le medie siano differenti. redditoA <- c(400,600,750,900,600,500,800,700,650) redditoB <- c(300,200,650,450,350,400,800,750,200) var(redditoA); var(redditoB) sd(redditoA); sd(redditoB) mean(redditoA); mean(redditoB) cvA <- sd(redditoA)/mean(redditoA) #coefficiente variazione distribuzione A cvB <- sd(redditoB)/mean(redditoB) #coefficiente variazione distribuzione B boxplot(cbind(redditoA,redditoB)) boxplot per confrontare la variabilità graficamente; Si utilizza la funzione boxplot() per realizzare un grafico a scatola (Zoom per vedere il grafico per intero)➜il box plot è un altro modo di sintetizzare e descrivere la distribuzione non numericamente ma tramite un grafico. All’interno del grafico possiamo trovare anche i valori anomali, che possiamo chiamare outlier (si legge autlaier), cioè dei valori che si discostano da quelli tipici che si trovano all’interno della distribuzione, perché sono valori o molto più grandi o molto più piccoli CAMPO DI VARIAZIONE Altro indice di variabilità; rientra tra gli intervalli di variabilità ed è il più semplice da
Quindi l’ indice di omogeneità si calcola come somma delle frequenze relative al quadrato. Quindi innanzitutto ci andiamo a calcolare la distribuzione delle frequenze relative con la funzione prop.table(table()), e poi calcoliamo l’indice facendo la somma con la funzione sum di f che sarebbe la nostra distribuzione delle frequenze relative elevate al quadrato. f <- prop.table(table( Sex )) #K= barplot(f, col="blue") #massima eterogeneità: tutte le modalità hanno stessa frequenza #indice di omogeneità O <- sum(f^2) #min omogeneità: O=1/K; max omogeneità: O= ● Interpretazione indice di omogeneità : se O è = a 1 c’è massima omogeneità; se O è = a 1/K allora c’è minima omogeneità➔ se c’è minima omogeneità c’è massima eterogeneità. Dall’indice di omogeneità si può ricavare l ’indice di eterogeneità : Lo chiamiamo E e si calcola facendo 1 - O, ovvero 1 - la somma delle frequenze relative al quadrato che avevamo chiamato precedentemente O. E è l’indice di eterogeneità ASSOLUTO, quello RELATIVO lo chiameremo e e lo calcoleremo facendo: e <-E/(1-1/K). #indice di eterogeneità E <- 1-O K= e <- E/(1-1/K) # min eterogeneità: e=0; max eterogeneità: e= ● Interpretazione indice di eterogeneità : quando e =0 c’è MINIMA eterogeneità; quando e=1 ci sarà MASSIMA eterogeneità. SIMMETRIA Gli indici di forma li utilizziamo per vedere la FORMA DELLA DISTRIBUZIONE, distribuzione che può essere SIMMETRICA o ASIMMETRICA, e l’asimmetria può essere POSITIVA o NEGATIVA. In R per vedere la forma della distribuzione, quindi per calcolare l’indice di simmetria, dobbiamo utilizzare la funzione skew() che si trova all’interno di un pacchetto che si chiama LabstaR che va scaricato➞ per scaricare un pacchetto bisogna essere collegati ad una rete internet ed andare su Packages e poi su Install.
Una volta scaricato il pacchetto lo richiamiamo, e quindi usiamo la funzione library(labstaR). Poi utilizziamo la funzione skew(). Se l’output è = a 0 c’è perfetta simmetria, se diverso da 0 vuol dire che c’è asimmetria, in particolare se > 0 c’è asimmetria positiva, cioè c’è una lunga coda a destra, se < di 0 asimmetria negativa, cioè c’è una lunga coda a sinistra. Quando la distribuzione è SIMMETRICA moda media e mediana coincidono. library(labstatR) #questo pacchetto deve essere installato prima di poterlo utilizzare per la prima volta #contiene la funzione skew () hist(Age, nclass=10) #dataset survey skew(Age) # distribuzione con asimmetria positiva boxplot(Age) data(airquality); attach(airquality) hist(Temp, nclass=10) #dataset airquality skew(Temp) # distribuzione con una leggera asimmetria negativa boxplot(Temp) Come si effettuano le analisi relative alla concentrazione in R Tutte le funzioni e i grafici che ci consentono di realizzare le analisi relative alla concentrazione in R, sono contenute all’interno di una library che si chiama ineq ➔ questo pacchetto deve essere installato prima di poter essere utilizzato per la prima volta. Quindi come sempre, packages, install e si installa il pacchetto. Sia la funzione Gini che la funzione Lc sono contenute all’interno di questo pacchetto. Per calcolare l’indice di concentrazione di questa distribuzione, all’interno della funzione Gini() , all’interno delle parentesi andiamo a mettere la distribuzione disaggregata della variabile considerata. library(ineq) reddito <- c(400,600,750,900,600,500,800) # distribuzione disaggregata del reddito Gini( reddito ) #indice di concentrazione di Gini Il valore ottenuto può oscillare tra 0 e 1. Abbiamo concentrazione nulla e quindi una situazione di equidistribuzione quando l’indice di Gini è esattamente pari a 0. Nel caso in cui sia pari a 1
#Caso di massima concentrazione: #Un individuo possiede tutto l'ammontare del reddito, gli altri 999 hanno 0 reddito2 <- c(rep(0,999),500) Gini(reddito2) indice di Gini pari a 0. plot(Lc(reddito2)) Analisi bivariata, con frequenze congiunte e tabelle a doppia entrata (spiegazione della tabella) ➜Analisi riferita a quei casi in cui su ogni unità statistica sono rilevate due variabili contemporaneamente. DISTRIBUZIONI DOPPIE/bivariate Dati due caratteri X, Y si definisce distribuzione doppia di frequenze , l’insieme delle frequenze congiunte. Costruzione delle distribuzioni doppie. TABELLA DOPPIA La distribuzione unitaria doppia riferita a due caratteri può essere sintetizzata attraverso una distribuzione doppia di frequenze o tabella a doppia entrata. library(MASS) data(survey); attach(survey) #consideriamo i caratteri Smoke e Exer del dataset survey table(Smoke, Exer) #frequenze congiunte assolute prop.table(table(Smoke, Exer)) #frequenze congiunte relative round(prop.table(table(Smoke, Exer)),3) #frequenze congiunte relative arrotondate round(prop.table(table(Smoke, Exer)),3)*100#frequenze congiunte relative percentuali
table(Smoke) #frequenza marginale del carattere Smoke table(Exer) #frequenza marginale del carattere Exer
library(labstatR) bubbleplot( table(Smoke, Exer) ) # Grafico a bolle ● Interpretazione del bubbleplot: In base a quanto è la frequenza che abbiamo all’interno delle parentesi, avremo la grandezza della bolla coerente. #consideriamo i caratteri Sex e Exer del dataset survey table(Sex, Exer) prop.table(table(Sex, Exer)) bubbleplot(table(Sex, Exer), main="Grafico a bolle")
Quando due caratteri sono di natura qualitativa uno degli indici più importanti che si possono utilizzare per valutare se c’è concordanza o meno tra caratteri è quello del Chi-quadrato di Pearson. In R per calcolarlo basta utilizzare la funzione chisq.test() e all’interno metterci la distribuzione delle frequenze assolute delle due variabili che stiamo considerando, in questo caso Sex ed Exer.
chisq.test(table( Sex , Exer )) #X-squared è il valore dell'indice Chi-quadrato #X-squared > 0: non c'è indipendenza tra i caratteri X-squared rappresenta l ’indice Chi-quadrato. Se questo indice è > di 0 vuol dire che c’è concordanza tra i due caratteri. Essendo in questo caso maggiore di 0 c’è una forma di dipendenza tra i due caratteri, che quindi non sono indipendenti. L’ indice Chi-quadrato fondamentalmente è un indice assoluto , cioè è un indice che non varia all’interno di un intervallo ristretto/limitato, ma appunto tra -infinito e infinito. Per ottenere un indice che sia relativo dobbiamo utilizzare l ’indice Chi-quadrato relativo. Io L’indice Chi-quadrato relativo si trova facendo la radice dell’indice Chi-quadrato e si divide tutto per n piccolo che è la numerosità della
H1 <- Holders[District==1] H2 <- Holders[District==2] H3 <- Holders[District==3] H4 <- Holders[District==4] m1 <- mean(H1) m2 <- mean(H2) m3 <- mean(H3) m4 <- mean(H4) eta2 <- var(mediecondizionate)/var(Holders) eta2 # (indipendenza in media) 0 <= eta2 <= 1 (dipendenza perfetta) L’indice eta2, quando ci troviamo di fronte ad una variabile qualitativa e una variabile quantitativa, calcola il rapporto tra la varianza delle medie condizionate e la varianza della variabile Holders. Eta2 ci dice se c’è dipendenza o indipendenza in media tra le variabili considerate. Abbiamo indipendenza in media quando eta2 è esattamente pari a 0, mentre abbiamo una dipendenza perfetta quando eta2 è = a 1. In questo caso ci troviamo di fronte al caso di indipendenza in media perché è più vicino a 0 che a 1. In una situazione di indipendenza in media perfetta la retta sarebbe dovuta essere esattamente orizzontale.
Quando invece vogliamo realizzare il grado di concordanza tra due variabili entrambe quantitative utilizzeremo gli indici di covarianza e di correlazione. Vogliamo vedere se esiste una relazione tra le variabili speed e dist, ovvero la velocità con cui si procede e la distanza percorsa al momento della frenata. Queste due variabili sono contenute all’interno del dataset cars, quindi innanzitutto richiamiamo il dataset. data(cars); attach(cars) str(cars) View(cars) Poi visualizziamo plot di speed e dist. Visualizziamo la nuvola di punti che caratterizza queste due variabili. La prima variabile che mettiamo va sull’asse delle ascisse, mentre la seconda variabile che mettiamo va nelle coordinate. Se facessi l’inverso è leggermente diverso il grafico però la tendenza è più o meno la stessa. Effettivamente è indipendente scegliere o l’una o l’altra da mettere sopra l’asse delle ordinate o delle ascisse, perché in generale la covarianza è un indice simmetrico.
#Rappresentazione grafica di una distr. doppia con caratteri quantitativi plot(speed,dist) plot(dist,speed) La covarianza si trova facendo la media dei prodotti degli scarti dalle media di x e dalla media di y. E per farlo graficamente dovremmo in teoria dividere il quadrante in 4 parti e per dividere la mia finestra in 4 parti posso sovrapporre delle rette verticali ed orizzontali nel grafico utilizzando la funzione abline() che significa “aggiungi retta” (funzione che mi permette di farlo a grafici già esistenti). Tra parentesi inseriamo h che sta per horizontal = mean di speed, perché sull’asse delle ordinate ho speed. In corrispondenza della media di dist quella verticale, la retta verticale. V= verticale. abline(h=mean(speed)) abline(v=mean(dist)) #notiamo che le osservazioni occupano prevalentemente i due quadranti in cui #i prodotti degli scarti hanno segno positivo Abbiamo 4 quadranti. In base a dove si concentrano le osservazioni possiamo dire se le due variabili che sono messe sugli assi covariano positivamente o negativamente.
reg$coef #coefficienti stimati reg$fitted #valori di Y stimati (y_i) tramite il modello di regressione reg$residuals #residui: y_i-y_i con reg$(=dollaro)coef posso estrarre dal modello di regressione le stime dei coefficienti con reg$fitted estraggo i valori stimati tramite il modello di regressione con reg$residuals estraggo i residui. I residui possiamo calcolarli manualmente oppure utilizzando reg$residuals. Per aggiungere i valori stimati utilizzo la funzione points: points( speed, reg$fitted, pch=19, col="red" ) ➜ a funzione points() permette di aggiungere dei punti ad un grafico già esistente. summary(reg) Il quadrato del coefficiente di correlazione si fa facendo cor al quadrato. Il coefficiente di correlazione è il rapporto tra la covarianza tra x e y diviso deviazione standard di x per deviazione standard di y. Quindi, cov(x,y)/sd(speed)sd(dist). cov(x,y)/sd(speed)sd(dist). Il valore va elevato al quadrato e si trova l’indice di determinazione quindi l’R quadro. RQUADRO = indice di determinazione: misura la bontà di adattamento del modello ai dati; è
un indice compreso tra 0 e 1. Se il valore è vicino a 0 non spiega bene i dati, se è vicino a 1 invece il modello è in grado di spiegare/interpretare bene i nostri dati. par(mfrow=c(2,2)) serve per visualizzare tutti e 4 i grafici insieme plot(reg) #analisi grafica dei residui Analisi dei residui
1. Residuals vs Fitted Plot Il grafico in alto a sinistra serve per capire se i residui hanno un comportamento casuale. Perché, se non hanno un comportamento casuale, quindi se mostrano una tendenza, vuol dire che all’interno dei residui, c’è dell'informazione ulteriore sui dati, che il nostro modello di regressione non è riuscito a catturare, e quindi il modello non è adeguato. Affinché i residui abbiano un comportamento casuale innanzitutto devono essere sparsi nel grafico, devono occuparlo tutto. E poi la curva rossa deve coincidere con la curva tratteggiata o comunque deve avvicinarsi il più possibile alla curva tratteggiata. La situazione ideale sarebbe che coincidessero. 2 .Normal Q-Q (quantile-quantile) Plot Il grafico in alto a destra ci consente di vedere se i residui sono normali. questo caso se i residui sono normali. Se i pallini tendono a coincidere con la retta tratteggiata che rappresenta la bisettrice, allora sicuramente dirò che sono normali, altrimenti no.