ESERCITAZIONI SOFTWARE R
TUTORATO 1
Comandi principali
#PER SCRIVERE COMMENTI#
help()
help("if")
?mean
help.search("mean")
example(mean)
demo(graphics)
#ASSEGNAZIONE DI VALORI#
x<-1
x
y<-3
y
x*y
#STRINGA DI VALORI#
d<-c(1,2,3,4)
d
is.vector(d)
f<-vector(length=4, mode="numeric")
f
k<-rep(2,6)
k
h<-seq(2,6,0.5)
h
assign("y", c(2,7,4,1))
y
ls()
#INIZIARE UNA NUOVA SESSIONE DI LAVORO#
rm(list=ls())
ls()
#MATRICI#
x<-4
x
y<-c(2,7,4,1)
y
x*y
y>3
X<-matrix(1:30,5,6)
X
X[,j]
X[i,]
Y<-matrix(1:30,5,6,byrow=TRUE)
Y
dim(Y)
Z<-array(dim=c(2,5))
Z
Z<-array(dim=c(2,5),1:10)
Z
t(X)
t(X)%*%Y
#ACCEDERE AD ELEMENTI DI VETTORI#
y[4]
yy<-y[c(1,3)]
yy
X[2,1]
X[3,]
X[,1]
#INFORMAZIONI SUI VETTORI#
length(y)
max(y)
min(y)
sum(y)
prod(y)
mean(y)
range(y)
#FREQUENZE#
table(X)
table(X)/length(X)
table(X)/length(X)*100
Caso Orange juice (dataset presente in R)
library(bayesm)
data(orangeJuice)
?orangeJuice
logvend <- orangeJuice$yx$logmove
brand <- orangeJuice$yx$brand
summary(logvend)
#GRAFICI#
hist(logvend, main="istogramma logvend", col="red")
boxplot(logvend)
boxplot(logvend ~ brand)#BOXPLOT PER OGNI MARCA#
#STANDARDIZZARE#
z <-(logvend-mean(logvend))/sd(logvend)
mean(z)
sd(z)
#con i dati originali senza log#
vend <- exp(logvend)
sd(vend)
sd(logvend)
TUTORATO 2
Caso BigMac2003( dataset presente in R)
library(alr3)
data(BigMac2003)
BigMac2003
?BigMac2003
boxplot(BigMac2003$BigMac, BigMac2003$Bread, BigMac2003$Rice,main="boxplot
BigMac, Bread, Rice")
#PER CALCOLARE COVARIANZA E CORRELAZIONE#
cov(BigMac2003$FoodIndex, BigMac2003$BigMac)
cor(BigMac2003$FoodIndex, BigMac2003$BigMac)
#PER LO SCATTERPLOT#
plot(BigMac2003$FoodIndex, BigMac2003$BigMac,main="scatterplot foodIndexBigMac")
#TOGLIERE VARIABILE QUALITATIVA CITY#
xx <- BigMac2003[,-1]
xx
cor(xx)
pairs(xx,main="scatterplot matrice di correlazione")
#RIDURRE IL GRAFICO A POCHE VARIABILI#
xx.red <- cbind(xx$BigMac, xx$Bread, xx$Rice, xx$FoodIndex, xx$Apt)
cor(xx.red)
pairs(xx.red,main="corr BigMac,Bread,Rice,FoodIndex,Apt", labels=c("BigMac",
"Bread", "Rice", "Index", "Apt"))
#MODELLO DI REGRESSIONE LINEARE#
fit<-lm(BigMac2003$FoodIndex ~ BigMac2003$Apt)
summary(fit)
plot(BigMac2003$Apt, BigMac2003$FoodIndex, xlab="Canone affitto", ylab="Indice")
abline(fit)#PER AGGIUNGERE LA RETTA DI REGRESSIONE#
#PER VALUTARE I RESIDUI DELLA REGRESSIONE E LA LORO NORMALITÀ#
residual=resid(fit)
residual
plot(residual, main="Grafico dei residui", ylab=" ", xlab="Città")
qqnorm(residual, main="Q-Q Plot dei residui")
qqline(residual)
Caso 1 capitolo 1 del libro (dati libro_cap1_1)
#IMPORTAZIONE DEI DATI#
x <- read.table(file.choose(), col.names=c("imp", "prezzi", "pubbl"))
import <- x$imp
prezzi <- x$prezzi
pubbl <- x$pubbl
boxplot(x, main="Variazioni relative di importazioni, prezzi, pubblicità")
boxplot(import, prezzi, pubbl, main="Variazioni relative di importazioni,
prezzi, pubblicità")
summary(import)
summary(prezzi)
summary(pubbl)
hist(import, main="Istogramma variazioni relative delle importazioni", xlab=" ",
ylab=" ",prob=TRUE)
hist(prezzi, main="Istogramma variazioni relative dei prezzi", xlab=" ", ylab="
",probability=TRUE)
hist(pubbl, main="Istogramma variazioni relative delle spese pubblicitarie",
xlab=" ", ylab=" ",probability=TRUE)
#MATRICE DI CORRELAZIONE E SCATTERPLOT#
pairs(x,labels=c("Import", "Prezzi", "Pubblicità"))
cor(x)
#MODELLO DI REGRESSIONE LINEARE#
fit <- lm(import ~ prezzi)
summary(fit)
plot(prezzi,import,xlab="Variazioni relative prezzi",ylab="Variazioni relative
importazioni", main="Stima retta di regressione")
abline(fit)
#DIAGNOSTICA PER LA BONTÀ DEL MODELLO#
plot(resid(fit), xlab="i", ylab="Residui")
abline(c(0,0),col=2,lwd=2)
#NORMALITÀ DEI RESIDUI#
qqnorm(resid(fit),main="Q-Q plot dei residui")
qqline(resid(fit))
#NON CORRELAZIONE DEI RESIDUI CON I VALORI STIMATI Y#
plot(fitted(fit),resid(fit), main="Valori di y stimati vs. residui
stimati",xlab="Stima di y",ylab="Residui")
#OMOSCHEDASTICITÀ#
plot(prezzi,resid(fit), main="Prezzi vs. residui
stimati",xlab="Prezzi",ylab="Residui")
abline(c(0,0),col=2)
#DISTANZA DI COOK#
plot(import ~ prezzi, cex=10*sqrt(cooks.distance(fit)), main="Dati influenti
nella regressione di IMPORT su PREZZI")
#TABELLA ANOVA#
fit_aov <- aov(import ~ prezzi)
summary(fit_aov)
#PREVISIONE( 3 SCENARI DEL LIBRO)#
x.mean <- mean(import)
pred.fit1 <- predict(fit, newdata=data.frame(prezzi=-0.001),interval="pred")
pred.fit1
pred.fit2 <- predict(fit, newdata=data.frame(prezzi=-0.097),interval="pred")
pred.fit2
pred.fit3 <- predict(fit, newdata=data.frame(prezzi=0.061),interval="pred")
pred.fit3
#INTERVALLI DI PREVISIONE#
x.mean <- mean(prezzi)
#CREO UN VETTORE DI VALORI CHE CONTENGA IL VALORE MEDIA#
zz <- c(-3,-2.5,-2,-1.5,-1,-0.9,-0.5,-0.4,-0.3,-0.2,-0.1,-0.097,-0.01,0.001,0,0.001,0.01,x.mean,0.015,0.02,0.05,0.06,0.07,0.1,0.2,0.3,0.5,0.8,1,1.5,2,
2.5,3,3.5)
pred <- predict(fit, newdata=data.frame(prezzi=zz),interval="pred")
pred
#GRAFICO DELLA PREVISIONE#
plot(zz,pred[,1],type="l",xlim=c(-3.2,3.7),ylim=c(-4.1,3.6),main="Previzioni e
intervallo di confidenza al 95%",xlab="x",ylab="Previsione")
lines(zz,pred[,2],type="l",lty=2,col=2,lwd=2)
lines(zz,pred[,3],type="l",lty=2,col=2,lwd=2)
abline(v=x.mean,lty=3)
#REGRESSIONE MULTIPLA: IMPORT=F(PREZZI,PUBBLICITÀ)#
fitmult <- lm(import ~ prezzi + pubbl)
fitmult1 <- update(fit, . ~ . + pubbl)#COMANDO ALTERNATIVO#
summary(fitmult)
#ANOVA#
fitmult_aov <- anova(fitmult)
fitmult_aov
#CALCOLO DEL FATTORE DI INCREMENTO DELLA VARIANZA#
library(car)
vif(fitmult)
TUTORATO 3
Caso 2 capitolo 1 del libro (dati indmkt)
library(car)
xx <- read.table(file.choose(), col.names=c("prod", "serv", "prezzo", "imgn",
"veloc", "acq"))
xx
y <- xx$acq
x1 <- xx$prod
x2 <- xx$serv
x3 <- xx$prezzo
x4 <- xx$imgn
x5 <- xx$veloc
# SCATTERPLOT#
pairs(xx,labels=c("prod", "serv", "prezzo", "imgn", "veloc", "acq"))
cor(xx)
#MODELLO REGRESSIONE MULTIPLA#
fit_caso2 <- lm( y ~ x1 + x2 + x3 + x4 + x5 )
summary(fit_caso2)
anova(fit_caso2)
#CALCOLO DEL FATTORE DI INCREMENTO DELLA VARIANZA#
vif(fit_caso2)
# STIMA DEL MODELLO RIDOTTO #(senza intercetta)
fit1_caso2 <- lm(y ~ x1 + x2 + x3 -1 ) #
summary(fit1_caso2)
fit1_caso2 <- update(fit_caso2, . ~.-1 - x4 - x5) # comando alternativo#
summary(fit1_caso2)
#NORMALITÀ DEI RESIDUI#
qqnorm(rstandard(fit1_caso2),main="Q-Q plot dei residui")
qqline(rstandard(fit1_caso2))
# NON CORRELAZIONE DEI RESIDUI CON I VALORI STIMATI Y #
plot(fitted(fit1_caso2),rstandard(fit1_caso2), main="Valori di y stimati vs.
residui stimati",xlab="Stima di y",ylab="Residui")
# NON CORRELAZIONE DEI RESIDUI CON I PREDITTORI#
par(mfrow=c(2,2))
plot(x1,resid(fit1_caso2), main="Qualità prodotto vs. residui
stimati",xlab="Qualità prodotto",ylab="Residui")
abline(c(0,0),col=2)
plot(x2,resid(fit1_caso2), main="Qualità servizio vs. residui
stimati",xlab="Qualità servizio",ylab="Residui")
abline(c(0,0),col=2)
plot(x3,resid(fit1_caso2), main="Prezzo vs. residui
stimati",xlab="Prezzo",ylab="Residui")
abline(c(0,0),col=2)
# PREVISIONI (4 SCENARI DEL LIBRO)#
pred <- predict(fit1_caso2, newdata=xx, interval="pred")
plot(pred[,"fit"], ylim=c(18,74),main="Valori osservati, stimati e intervalli di
confidenza",xlab=" ",ylab=" ")
points(y,col=2)
lines(pred[,"lwr"], lty=2, type="b", col=4)
lines(pred[,"upr"], lty=2, type="b", col=4)
TUTORATO 4
Caso space shuttle (dati spacshu)
spacshu <- read.table(file.choose(), col.names=c("temp", "damage"))
#PER DISTANZIARE I VALORI DI DAMAGE#
plot(jitter(damage, factor=0.2) ~ temp, ylab="damage",data=spacshu,main="Dati
osservati")
Regressione logistica
spacshu.bin.glm <- glm(damage ~ temp, data=spacshu, family="binomial")
summary(spacshu.bin.glm)
anova(spacshu.bin.glm, test="Chi")
#PREVISIONE#
library(lattice)
pred.disaster <- predict(spacshu.bin.glm, data.frame(temp=31), type="response",
se.fit=T)
spacshu.pred <-predict(spacshu.bin.glm, data.frame(temp=30:85), type="response",
se.fit=T)
#GRAFICO DELLA PREVISIONE#
plot(jitter(damage, factor=0.2) ~ temp, data=spacshu,ylab="proportion damaged",
main="Stima della probabilità di malfunzionamento di un o-ring",xlim=c(30,85),
ylim=c(-.1,1.5))
#PER INSERIRE GLI INTERVALLI DI CONFIDENZA#
lines(x=30:85,y=spacshu.pred$fit,lty=trellis.par.get("superpose.line")$lty[1],co
l=trellis.par.get("superpose.line")$col[1])
lines(x=30:85,y=spacshu.pred$fit+2*spacshu.pred$se.fit,lty=trellis.par.get("supe
rpose.line")$lty[2],col=trellis.par.get("superpose.line")$col[2])
lines(x=30:85,y=spacshu.pred$fit2*spacshu.pred$se.fit,lty=trellis.par.get("super
pose.line")$lty[2],col=trellis.par.get("superpose.line")$col[2])
TUTORATO 5
Caso pazienti cardiopatici Los Angeles (dati chapman)
x = read.table(file.choose(), header=TRUE)
##
##
##
##
##
##
##
##
##
##
##
Variabili nel dataset
Ag = età in anni
S
= Pressione sistolica (mm di mercurio)
D
= Pressione diastolica (mm di mercurio)
Ch = Colesterolo (mg per DL)
H
= Altezza (inches --> 1 inch = 2.5 cm)
W
= Peso (libbre --> 1 libbra = 450 g)
CNT = Attacco cardiaco
CNT = 1 --> attacco cardiaco
CNT = 0 --> no attacco cardiaco
200 osservazioni con 26 attacchi cardiaci
#RINOMINO IN R LE VARIABILI#
Ag = x$Ag
S = x$S
D = x$D
Ch = x$Ch
H = x$H
W = x$W
Cnt = x$Cnt
sum(Cnt)
#CORRELAZIONE NON CONSIDERANDO LA PRIMA COLONNA#
pairs(x[,2:8])
#DISTANZIO I VALORI DI Cnt E NE VALUTO LA RELAZIONE CON Ch,W E Ag#
jit.cnt = jitter(Cnt, factor=0.2)
plot(Ch, jit.cnt, main="Scatterplot Attacco cardiaco vs Colesterolo",
xlab="Colesterolo",lwd=2,col=2)
abline(v=240,lty=3,lwd=2)
plot(W, jit.cnt, main="Scatterplot Attacco cardiaco vs Peso", xlab="Peso (in
libbre)",lwd=2,col=2)
plot(Ag, jit.cnt, main="Scatterplot Attacco cardiaco vs Età",
xlab="Età",lwd=2,col=2)
#MODELLO DI REGRESSIONE LOGISTICA# p=prob(attacco cardiaco)
# logit(p)=log(p/(1-p))=beta_0 + beta_1*Ag + beta_2*S + beta_3*D + beta_4*Ch +
beta_5*H + beta_6*W#
fit <- glm(Cnt ~ Ag + S + D + Ch + H + W, family="binomial", data=x)
summary(fit)
#PREVISIONI#
logit.p = predict(fit, newdata=data.frame(Ag=60, S=140, D=100, Ch=250, H=72,
W=155.55), se.fit=TRUE)
logit.p
# MODELLO CON LA PREVISIONE#
hat.p = exp(logit.p$fit)/(1+exp(logit.p$fit))
hat.p
#INTERVALLI DI CONFIDENZA PER LA PREVISIONE#
lwr = hat.p - 1.96*logit.p$se.fit
upr = hat.p + 1.96*logit.p$se.fit
lwr
upr
# MODELLO RIDOTTO CON SOLI: ETÀ E PESO#
fit1 = glm(Cnt ~ Ag + W, family="binomial", data=x)
summary(fit1)
anova(fit1, test="Chi")
#IL TEST CHI-QUADRO PER LA D#
chi.obs<-154.55-138.77
chi.obs
pchisq(chi.obs,df=2,lower.tail=FALSE)
CLUSTERING
#esempio numerico con osservazioni 1,2,3,4,5#
d <- matrix(c(0,9,3,6,11, 9,0,7,5,10, 3,7,0,9,2, 6,5,9,0,8, 11,10,2,8,0),
nrow=5, ncol=5, byrow=TRUE)
#trasformazione della matrice d in matrice di distanze#
dd <- as.dist(d)
dd
#cluster con 3 diversi metodi#
xs <- hclust(dd, method="single")
plot(xs, main="Dendrogramma (legame singolo)")
xc <- hclust(dd, method="complete")
plot(xc, main="Dendrogramma (legame completo)")
xm <- hclust(dd, method="average")
plot(xm, main="Dendrogramma (legame medio)")
Caso arresti nei 50 stati americani (dati presenti in R)
data(USArrests)
?USArrests
x<-USArrests
x
#CLUSTER CON METODO DI WARD#
hc <- hclust(dist(USArrests), "ward")
plot(hc)
#RIDUZIONE DEL NUMERO DI CLUSTER#
rect.hclust(hc, k=3, border="red")
rect.hclust(hc, k=7, border="red")
#CLUSTER CON IL METODO DELLA K-MEANS#
library(vegan)
km <- kmeans(USArrests, centers=3, nstart=25,iter.max=10, algorithm="MacQueen")
km
#CRITERIO DI CALINSKY#
km1 <- cascadeKM(USArrests, inf.gr=2, sup.gr=6, iter=100, criterion="calinski")
km1
plot(km1,grpmts.plot=TRUE)