## simulare da una funzione lineare a pezzi ------------------------------------ n <- 100 set.seed(5) # il valore qui fissato in set.seed garantisce che se tutti usano lo stesso "seme" avranno gli stessi dati generati in questo script. Sesi modifica questo valore il data set avrà dati simulati diversi ma generati dal medesimo modello casuale. Per cui se ometto set.seed e faccio girare questo script otterrò ogni volta un data set diverso # fissiamo i valori di x come sequenza equispaziata nell'intervallo (0,1] x<-seq(0.01,1,0.01) # oppure si potrebbe generare casualmente un vettore di n=100 valori fra 0 e 1 # x <- sort(runif(n)) # generiamo una funzione lineare a pezzi (kn sono i cosidetti nodi e li scegliamo così da ottenere una spezzata in quei punti) kn <- c(0.2,0.6,0.9) y.true <- 0.1*x + 2*(x-kn[1])*(x>kn[1])-4*(x-kn[2])*(x>kn[2])+2*(x-kn[3])*(x>kn[3]) # aggiungiamo rumore casuale (n valori da una gaussiana di deviazione standard pari a .1) e simuliamo i dati ey sarà la variabile da prevedere y <- y.true + rnorm(n,0,.1) # vediamo ora il grafico (scatterplot) delle coppie (x,y) plot(x, y, main = "funzione lineare a tratti") lines(x,y.true, type = "l") abline(v = kn, col = 2) # salviamo ora i dati in un data frame data.sim <- data.frame("y" = y, "x" = x, "y.true" = y.true) # Si può usare il data frame appena generato per ripetere l'esercizio già svolto in aula. Si noti che si potrebbe generare un data set più ampio (basta modificare il valore di n nella prima istruzione)