Anteprima
Vedrai una selezione di 3 pagine su 7
Appunti Completi di R - Analisi Statistica Multivariata Pag. 1 Appunti Completi di R - Analisi Statistica Multivariata Pag. 2
Anteprima di 3 pagg. su 7.
Scarica il documento per vederlo tutto.
Appunti Completi di R - Analisi Statistica Multivariata Pag. 6
1 su 7
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

crescente le varie categorie. Per farlo, inseriamo il vettore nella funzione

ordered() e successivamente stabiliamo i livelli:

taglie_ordinate=ordered(c("large","medium","extra-

large","small","medium","extra-small","extra-large","small","extra-

large","medium"), levels=c("extra-small","small","medium","large","extra-

large")) # --> Levels: extra-small < small < medium < large < extra-large

is.ordered(taglie) # --> FALSE

is.ordered(taglie_ordinate) # --> TRUE

table(taglie) #restituisce la distribuzione delle frequenze assolute

table(taglie)+3 #restituisce la distribuzione delle frequenze assolute con la

maggiorazione scritta

names(table(taglie)) #restituisce i nomi delle categorie

genere=factor(rep(c("F","M"), c(4,4))) #crea un vettore categoriale. la funzione

rep(), fa si che gli elementi del primo sotto-vettore siano ripetuti

rispettivamente tante volte quante sono indicate nel secondo sotto-vettore

altezza=c(165,176,171,177,176,193,180,193)

tabella=data.frame(genere,altezza) #questo comando crea una tabella in cui gli

elementi passati dentro a data.frame() vengono associati

subset(tabella, subset=genere == "M" & altezza > 190) #mi permette di

selezionare certe RIGHE da tabella

subset(tabella, select=altezza) #mi permette di selezionare certe COLONNE da

tabella

#oppure

tabella$altezza

sort(altezza) #ordina in senso crescente il vettore altezza

sort(altezza, decreasing=TRUE) #ordina in senso decrescente il vettore altezza

order(altezza) #mi restituisce le posizioni dei valori ordinati in senso

crescente

o=order(tabella$altezza)

tabella[o,] #mi restituisce la tabella in ordine di altezza

whatsapp=c(76,74,86,34,48,12,48,54,98,108,64,72,28,52,82,88,92,54,106,60)

#campione di 20 osservazioni sul numero di sms inviati il giorno di natale

classi_whatsapp=cut(whatsapp, breaks=c(10,30,50,70,90,110), include.lowest=TRUE)

#creo le classi di valori

f.assolute=table(classi_whatsapp) #frequenze assolute

f.relative=f.assolute/sum(table(classi_whatsapp)) #frequenze relative

f.cumulate=cumsum(f.relative) #frequenze cumulate

distribuzione.frequenze=data.frame(f.assolute,f.relative,f.cumulate) #tabella

della distribuzione di frequenze

hist(whatsapp,freq=FALSE,main="Istogramma") #Istogramma della distribuzione

#esempio analogo al precedente eccetto che per il fatto che le classi hanno

diversa ampiezza

whatsapp=c(76,74,86,34,48,12,48,54,98,108,64,72,28,52,82,88,92,54,106,60)

classi_whatsapp=cut(whatsapp, breaks=c(5,15,30,50,100), include.lowest=TRUE)

estremi=c(5,15,30,50,120)

differenza_estremi=diff(estremi)

densità_frequenza=f.relative/differenza_estremi

hist(whatsapp, breaks=estremi,freq=FALSE,main="Istogramma") #Istogramma

#RIASSUNTO DISPENSA 3

whatsapp = c(76,74,86,34,48,12,48,54,98,108,64,72,28,52,82,88,92,54,106,60)

n=length(whatsapp)

#CALCOLARE LE FREQUENZE ASSOLUTE

table(whatsapp)

#oppure

fi=table(whatsapp)

#CALCOLARE LE FREQUENZE RELATIVE

prop.table(table(whatsapp))

#oppure

pi=fi/n

#CALCOLARE LA MEDIA

mean(whatsapp)

#oppure

media=sum(whatsapp)/n

#CALCOLARE LA MEDIANA

median(whatsapp)

#oppure

posizione.mediana=0.5*(n+1)

mean(sort(whatsapp)[c(floor(posizione.mediana), ceiling(posizione.mediana))])

#CALCOLARE LA MODA

moda=table(whatsapp)[table(whatsapp)==max(table(whatsapp))]

#CALCOLARE IL MASSIMO

max(whatsapp)

#CALCOLARE IL MINIMO

min(whatsapp)

#CALCOLARE I QUARTILI

quantile(whatsapp)

#se voglio un quartile in particolare:

quantile(whatsapp, probs=0.25)

#DIFFERENZA INTERQUARTILE

IQR(whatsapp)

#PER SINTETIZZARE TUTTI GLI INDICI DI POSIZION

summary(whatsapp)

#GRAFICO DELLA DISTRIBUZIONE

boxplot(whatsapp)

#STUDIARE LA SIMMETRIA

median(whatsapp)==mean(whatsapp)

#FALSE --> asimmetria

median(whatsapp)>mean(whatsapp)

#TRUE --> asimmetria negativa

A=c(1,1,1,4,7,7,7)

#MISURA LA DIFFERENZA FRA IL VALORE PIU' GRANDE E QUELLO PIU' PICCOLO

diff(range(A))

#CALCOLARE LA VARIANZA

var(A)

#CALCOLARE LA DEVIAZIONE STANDARD

sd(A)

#fatturato misurato su due campioni di 5 aziende ciascuno; il primo costituito

da 5 multinazionali, il secondo da 5 aziende locali. Calcolare i coefficenti di

variazione e commentare i risultati

multinazionali=c(500,700,380,450,850)

locali=c(30,60,25,10,85)

media.m=mean(multinazionali)

media.l=mean(locali)

deviazionestandard.m=sd(multinazionali)

deviazionestandard.l=sd(locali)

#CALCOLO COEFFICENTE DI VARIAZIONE

cv.m=deviazionestandard.m/abs(media.m) #abs mi restituisce il valore assoluto,

dunque privato di segno

cv.l=deviazionestandard.l/abs(media.l)

cv.m #0.33

cv.l #0.71

#dunque il fatturato della aziende locali è piu varibaile rispetto a quello

delle multinazionali

#azienda di arredamento osserva per 8 settimane due variabili quantitative:

x=viste al sito web, y=preventivi via email per settimana. Rappresentare le due

variabili in modo congiunto, calcolare covarianza e correlazione

x=c(1210,1290,2492,708,902,2798,1115,1485)

y=c(15,17,24,18,14,32,18,23)

#GRAFICO X,Y CONGIUNTO

plot(x,y, xlab="viste", ylab="preventivi", xlim=c(0,3000), ylim=c(0,35))

#CALCOLARE LA COVARIANZA

cov(x,y)

#CALCOLARE LA CORRELAZIONE

cor(x,y) #0.88 --> più è alta, e più le variabili sono correlate fra loro.

[range correlazione: (0,1)]

#RIASSUNTO DISPENSA 4

#COSTRUZIONE DELLA TAVOLA DEI DATI GREZZI

residenza=c("milano","fuori milano","fuori milano","fuori milano","milano",

"fuori milano","fuori milano","milano")

expo=c("si","si","no","no","no","si","si","no")

dati=data.frame(expo,residenza) #crea la tabella dei dati grezzi

#FREQUENZE CONGIUNTE ASSOLUTE

freq.congiunte=table(dati) #crea la tabella a doppia entrata con i valori

assoluti delle osservazioni

freq.congiunte.marginali=addmargins(freq.congiunte) #aggiunge la marginale

table(dati$expo) #restituisce la marginale di expo

table(dati$residenza) #restituisce la marginale di residenza

#FREQUENZE CONGIUNTE RELATIVE

n=sum(freq.congiunte) #totale osservazioni

freq.congiunte.rel=table(dati)/n #crea la tabella a doppia entrata coi valori

relativi

#oppure

prop.table(freq.congiunte)

freq.congiunte.marginali.rel=addmargins(freq.congiunte.rel) #aggiunge la

marginale relativa delle variabili

table(dati$expo)/sum(table(dati$expo)) #restituisce la marginale relativa expo

table(dati$residenza)/sum(table(dati$residenza)) #restituisce la marginale

relativa di residenza

#FREQUENZE CONDIZIONATE

prop.table(freq.congiunte,1) #condizion righe -> expo condiziona la residenza

prop.table(freq.congiunte,2) #condizion colonne ->resi denza condiziona expo

#LETTURA DI FILE IN R

read.table(file="a.txt",header=TRUE) #importo il file in r, il comando header fa

si che la prima riga non sia quella con scritti i nomi delle variabili. Se il

file non viene preso in automatico, usare il comando getwd() per conoscere a

quale cartella sta puntando R e assicurarsi che il file si trovi proprio in

quella cartella

read.csv(file="a.txt",header=TRUE) #per importare un file csv ben codifito

#APPLICARE FUNZIONI A OGGETTI R

mat=matrix(0, nrow=3, ncol=4) #crea una matrice di 3 righe e 4 colonne, composta

di soli "0"

mat[1,] = c(1,2,3,4) #riempo la prima riga

mat[2,] = c(4,5,6,7) #riempo la seconda riga

mat[3,] = c(7,8,9,10) #riempo la terza riga

apply(X=mat, MARGIN = 1, FUN = mean) #la funzione apply permette di applicare

una funzione (in questo caso: 'mean') alle righe/colonne di una matrice o

data.frame (in questo caso 1 --> righe)

apply(X=mat, MARGIN = 2, FUN = mean) #media per colonna

mat2=matrix(1:12, nrow=3, ncol=4, byrow=TRUE) #crea una matrice composta dei

numeri da 1 a 12 ordinati per riga (per questo: byrow=TRUE)

lista=list() #crea lista vuota

lista$matrice = mat2

lista$categoriale = rep(c("A","B"),2)

lista$intera = 1:100

lista$continua = seq(0,1,len=10)

lapply(X=lista, FUN=length) #applico la funzione length() alla mia nuova lista.

Il risultato è dato dalla lunghezza delle varie componenti:

$matrice $categoriale $intera $continua

[1] 12 [1] 4 [1] 100 [1] 10

#R permette di definire proprie funzioni. Ogni funzione deve avere nome e

argomenti. La sintassi è: nome.funzione =

function(argomento1,argomento2,...,argomentoN){corpo della funzione}

#RIASSUNTO DISPENSA 5

sample(1:6) #questa funzione genera numeri casuali. In particolare, costruita

così restituisce una permutazione degli elementi passati dentro alla funzione

lotto=sample(1:90,size=5) #se omessi, di default: size=length(x), replace=FALSE

(ossia estrazioni senza reinserimento --> dipendenti) e prob=1/n

set.seed(1) #essendo numeri generati da un algoritmo, sono 'pseudo-casuali',

dunque prevedibili. Per impostare ad uno stato iniziale il generatore di numeri

usiamo questa funzione

sum(lotto==20) #interrogo R sulla presenza del numero '20' all'interno

dell'estrazione

#voglio studiare empiricamente quante volte esce il numero '6' in 20 campioni di

100 lanci di dadi. Per farlo:

campioni=20

lanci=100

successi=vector(len=campioni) #crea il vettore successi di lunghezza pari al

numero di campioni, nel quale verrà inserito, per ogni campione, il numero di

volte che esce '6'

set.seed(12345) #imposto la generazione di numeri casuali

for (i in 1:20){ #per ogni campione da 1 a 20

prove=sample(1:6,lanci,replace=TRUE) #genera 100 lanci con reinserimento

successi[i]=sum(prove==6) #e inserisci nel vettore successi i risultati

}

gruppo=c("A","B","0","AB") #vogliamo calcolare empiricamente la probabilità che

un donatore sia di gruppo AB

n_simu=100000 #campioni

n=20 #estrazioni per campione

prove=sample(gruppo,n*n_simu,replace=TRUE,prob=c(0.4,0.1,0.45,0.05)) #Simuliamo

n_simu volte l'esperimento di estrarre il gruppo sanguigno da n soggetti.

Facciamo ricorso all'argomento prob, essendo i valori attesi associati ai

singoli esiti diversi

prove=matrix(prove,ncol=20,byrow=TRUE) #organizziamo i risultati in una matrice:

ogni riga corrisponde al risultato di un campionamento

job=function(x) sum(x=="AB") #creiamo una funzione che, dato un vettore, conti

quanti elementi sono pari ad "AB"

successi=apply(prove,1,job) #applichiamo la funzione appena creata alle righe

della matrice

sum(successi==0) #conta il numero di campioni in cui il gruppo "AB&

Dettagli
Publisher
A.A. 2019-2020
7 pagine
2 download
SSD Scienze economiche e statistiche SECS-S/01 Statistica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Erika.Valle di informazioni apprese con la frequenza delle lezioni di Analisi statistica multivariata e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Milano - Bicocca o del prof Lunardon Nicola.