#### Bazirano na Poglavlju 3.2.1 u ESL #### ########################################### data=read.table("prostate_cancer.data") train=data$train ## koje podatke koristimo za prilagodbu modela data=data[,-10] ### Na pocetku pogledati podatke! head(data) summary(data) ### "svi" je kategorijalna varijabla (0/1), a gleason ordinalna. ### Obje cemo tretirati kao kvantitativne x=data[,-9] y=data[,9] pairs(y~., data=x) ## npr. izgleda da su lcavol i lcp korelirane s odzivom ### dijelimo podatke na skup za trening i testni skup, kovarijate cemo standardizirati ### tako da imaju uzoracko ocekivanje jednako 0, a varijancu 1. x=data[,-9] x=as.data.frame(scale(x, TRUE, TRUE)) x_tr=x[train,] x_te=x[!train,] y_tr=data[train,9] y_te=data[!train,9] lm1=lm(y_tr~., data=x_tr) summary(lm1) ## stupac "t value" daje z-vrijednosti za svaki od koeficijenata, a mjeri efekt izbacivanja ## te varijable iz modela (vidi Napomenu 2.4) -- najveci efekti: lcavol>lweight>svi ... ## uocimo da varijabla lcp ima malu z-vrijednost te negativan koeficijent ## iako se u pocetku cinilo da je pozitivno korelirana s odzivom cor(x_tr) ## korelacije medu kovarijatama -- velika korelacija izmedu lcavol i lcp! ## F testom provjerimo mozemo li izbaciti 4 varijable ## cija je z-vrijednost po apsolutnoj vrijednosti <2 lm0=lm(y_tr~.-age-lcp-gleason-pgg45, data=x_tr) summary(lm0) anova(lm0,lm1) ## p-vrijednost je 0.1693 (=P(F_{4,58}>F)) pa na razini znacajnosti 0.05 ne mozemo odbaciti ## hipotezu da su koeficijenti uz te 4 varijable =0. ## Vazna napomena: Pogresno bi bilo samo na temelju z-vrijednosti odluciti koje varijable ## ostavljamo u modelu! ##### procijenimo testnu gresku y_te_hat_1=predict(lm1, newdata = x_te) y_te_hat_0=predict(lm0, newdata = x_te) test_MSE_1=mean((y_te-y_te_hat_1)^2) test_MSE_0=mean((y_te-y_te_hat_0)^2) test_MSE_base=mean((y_te-mean(y_tr))^2) ### "base error rate" ### kolinearnost? library(car) vif(lm1) vif(lm0) ### ovaj model dopusta precizniju intepretaciju koeficijenata, ali uz losiju prediktivnu sposobnost