# Creazione dataframe contenente dati esempio dat <- structure(list(x = c(1, 2, 3, 4, 5), y = c(8, 12, 22, 28, 30)), .Names = c("x", "y"), row.names = c(NA, -5L), class = "data.frame") # informazioni su valori x e valori y summary(dat$x) summary(dat$y) # Fitting modelli lineari: # modello y dato valore di x fm1 <- lm(dat$y ~ dat$x, data = dat) fm1 # modello x dato valore di y fm2 <- lm(dat$x ~ dat$y, data = dat) fm2 # salvo intercette e coefficienti angolari dei modelli in 4 variabili fm2_q <- fm2$coefficients[1] fm2_m <- fm2$coefficients[2] fm1_q <- fm1$coefficients[1] fm1_m <- fm1$coefficients[2] # utilizzo dei modelli per predizione: # a) predizione di valori y dati valori x (modello 1: fm1) yhat1 <- predict(fm1, list(x = dat$x)) # b) utilizzo intercetta e coefficiente angolare modello 2 (fm2) per predire x dato y # problema: non possiamo utilizzare direttamente lafunzione predict(modello, osservazioni) # per predire poiche' vogliamo una retta che sia confrontabile con la retta delle predizio- # ni effettuate con l'altro modello (modello1, fm1). Dobbiamo creare una funzione che ruo- # ti la seconda retta per far si che le rette siano confrontabili. # Definiamo la funzione: convyval <- function(e){(1/fm2_m)*e - (fm2_q/fm2_m)} # ed utilizziamola per la predizione al posto di predict() yhat2 <- convyval(dat$x) # Ora confrontiamo i valori osservati di y, i valori di y predetti dal modello 1 (fm1) ed i valori di # y ottenuti RUOTANDO la retta delle predizioni dei valori reali di x a partire dai valori reali di y dat$y # valori reali y yhat1 # valori di y predetti a partire da valori x utilizzando fm1 (y ~ x) yhat2 # valori di y ottenuti da valori predetti di x a partire da valori reali di y # mediante rotazione della retta definita da fm2 (x ~ y) usando convyval() # Creazione grafico rette modelli: # 3 fasi: # a) scatterplot coppie x,y plot(dat$x,dat$y) # B) aggiunta retta ottenuta dal modello 1 (fm1) lines(dat$x, yhat1, col="blue", lwd=2) # c) aggiunta retta ottenuta dal modello 2 (fm2) lines(dat$x, convyval(dat$x), col="red", lwd=2) # salvaaggio grafico in formato PDF # NB: prima di procedere chiudere il grafico creato in precedenza # Definizione device grafico di tipo PDF (crea un file PDF e lo utilizza al posto dello schermo per # mostrare in grafici) pdf("esercizio2rette.pdf") # rieffettuare le medesime operazioni svolte in precedenza per creare il grafico (esso non viene mostrato # sullo schermo) plot(dat$x,dat$y) lines(dat$x, yhat1, col="blue", lwd=2) lines(dat$x, convyval(dat$x), col="red", lwd=2) # chiusura device (da qui in poi se creiamo grafici saranno di nuovo mostrati sullo schermo) dev.off() ################################################################################################################## r <- sqrt(fm1_m*fm2_m) R.sq <- fm1_m*fm2_m summary(fm1)$r.squared summary(fm2)$r.squared