#Haetaan data data <- read.csv("opintopisteet_tutkinnot_2010_aloittaneet_25v.csv", #ennen tiedostonnimeä polku sep = ";", encoding = "UTF-8", stringsAsFactors = FALSE) #Asennetaan kirjastot install.packages(c("dplyr", "tidyr", "lubridate")) library(dplyr) library(tidyr) library(lubridate) #Luodaan uusi taulukko, johon otetaan datasta tietyt sarakkeet opiskelijat <- data[,c(1:11, 17:18, 25:36)] #Muokataan uutta taulukkoa lisaamalla 'uusiavain', johon yhdistetaan opiskelijaAvain, #organisaatio_koodi ja koulutuskoodi opiskelijat <- opiskelijat %>% mutate(uusiavain = paste0(opiskelijaAvain, "_", organisaatio_koodi, "_", koulutuskoodi)) %>% mutate(hyvaksiluvut = hyvaksiluettu_opsyys + hyvaksiluettu_opkevat) %>% mutate(avoimessa_opintoja = avoimessa_opsyys + avoimessa_opkevat) %>% mutate(ulkomailla_opintoja = ulkomaa_opsyys + ulkomaa_opkevat) %>% select(-hyvaksiluettu_opsyys, -hyvaksiluettu_opkevat, -avoimessa_opsyys, -avoimessa_opkevat, -ulkomaa_opsyys, -ulkomaa_opkevat) #Luodaan uusi taulukko, jossa groupataan sarakkeita ja poistetaan sarakkeet, joissa #on useampi aloitus- ja lopetusvuosi opiskelijat2 <- opiskelijat %>% group_by_at(setdiff(names(opiskelijat), c("ika_aloittaessa", "aloitusvuosi", "tutkintovuosi", "ika_valmistuessa", "hyvaksiluvut", "avoimessa_opintoja", "ulkomailla_opintoja"))) %>% summarise(ika_aloittaessa_min = min(ika_aloittaessa), aloitusvuosi_min = min(aloitusvuosi), tutkintovuosi_max = max(tutkintovuosi), ika_valmistuessa_max = max(ika_valmistuessa), hyvaksiluvut_max = max(hyvaksiluvut), avoimessa_opintoja_max = max(avoimessa_opintoja), ulkomailla_opintoja_max = max(ulkomailla_opintoja)) #Luodaan uusi taulukko jossa liitetaan aikaisemmin karsitut sarakkeet takaisin data2 <- data %>% mutate(uusiavain = paste0(opiskelijaAvain, "_", organisaatio_koodi, "_", koulutuskoodi)) %>% mutate(opintopisteet = opsyys + opkevat) %>% select(uusiavain, lukuvuosi, opintopisteet) %>% distinct() %>% left_join(opiskelijat2, by = "uusiavain") %>% mutate(lukuvuosi_vuosi = as.numeric(substr(lukuvuosi, 2, 5))) %>% mutate(jarjestysvuosi = lukuvuosi_vuosi - aloitusvuosi_min + 1) %>% select(-lukuvuosi, -lukuvuosi_vuosi) #Luodaan uusi taulukko, jossa pivotoidaan jarjestysvuoden mukaan opintopisteet data3 <- data2 %>% group_by_at(setdiff(names(data2), "opintopisteet")) %>% summarise(opintopisteet_max = max(opintopisteet)) %>% pivot_wider(names_from = jarjestysvuosi, values_from = opintopisteet_max) #Muutetaan opintopistesarakkeiden nimet names(data3)[21] <- "hyvaksiluvut" names(data3)[22] <- "avoimessa_opintoja" names(data3)[23] <- "ulkomailla_opintoja" names(data3)[24] <- "ensimmaisen_vuoden_op" names(data3)[25] <- "toisen_vuoden_op" names(data3)[26] <- "kolmannen_vuoden_op" #Luodaan uusi taulukko, johon poimitaan kerrallaan tietty sarake regressiotarkastelua varten #filtterit sektoreille voi ottaa käyttöön alta #Rajattu vuodessa suoritettujen opintopisteiden määrä 100:n #Poistetaan NA:t #Varmistetaan että tarkasteltavat arvot ovat rajallisia logreg_testi <- data3 %>% ungroup() %>% # filter(sektori == "AMK") %>% # filter(sektori == "YLIOPISTO") %>% filter(ensimmaisen_vuoden_op < 100) %>% filter(toisen_vuoden_op < 100) %>% filter(kolmannen_vuoden_op < 100) %>% filter(hyvaksiluvut < 100) %>% filter(avoimessa_opintoja < 100) %>% filter(ulkomailla_opintoja < 100) %>% select(tavoiteajassa_valmistunut, hyvaksiluvut) %>% #toista kohtaa pitää muuttaa sen mukaan mitä haluaa tutkailla, nyt valittuna hyväksiluvut filter(is.na(tavoiteajassa_valmistunut) == FALSE) # filter(is.finite(sukupuoli) == TRUE) # filter(sukupuoli != "9") #logreg_testi$sukupuoli[logreg_testi$sukupuoli == "1"] <- "0" #logreg_testi$sukupuoli[logreg_testi$sukupuoli == "2"] <- "1" #Erilaisia kuvaajia voi tarkastella sen mukaan mikä sarake on valittu aikaisemmassa vaiheessa, aja vain valittu muuttuja plot(logreg_testi$ensimmaisen_vuoden_op, logreg_testi$tavoiteajassa_valmistunut) plot(logreg_testi$toisen_vuoden_op, logreg_testi$tavoiteajassa_valmistunut) plot(logreg_testi$kolmannen_vuoden_op, logreg_testi$tavoiteajassa_valmistunut) plot(logreg_testi$on_aiempi_tutkinto, logreg_testi$tavoiteajassa_valmistunut) plot(logreg_testi$ika_aloittaessa, logreg_testi$tavoiteajassa_valmistunut) plot(logreg_testi$sukupuoli, logreg_testi$tavoiteajassa_valmistunut) plot(logreg_testi$hyvaksiluvut, logreg_testi$tavoiteajassa_valmistunut) plot(logreg_testi$avoimessa_opintoja, logreg_testi$tavoiteajassa_valmistunut) plot(logreg_testi$ulkomailla_opintoja, logreg_testi$tavoiteajassa_valmistunut) #Luodaan malli logistisen regression pohjaksi #Halutaan tarkastella tavoiteajassa valmistumisen kulmasta malli <- glm(tavoiteajassa_valmistunut~., family = "binomial"(link="logit"), data = logreg_testi) #Tiivistelmä mallista summary(malli) #Alla luotuja muuttujia, valitaan tarkasteltavan sarakkeen mukaan mitä ajetaan xv <- seq(min(logreg_testi$on_aiempi_tutkinto), max(logreg_testi$on_aiempi_tutkinto), 0.01) yv <- predict(malli, list(on_aiempi_tutkinto = xv), type="response", data = logreg_testi) xv <- seq(min(logreg_testi$ika_aloittaessa), max(logreg_testi$ika_aloittaessa), 0.01) yv <- predict(malli, list(ika_aloittaessa = xv), type="response", data = logreg_testi) xv <- seq(min(logreg_testi$ensimmaisen_vuoden_op), max(logreg_testi$ensimmaisen_vuoden_op), 0.01) yv <- predict(malli, list(ensimmaisen_vuoden_op = xv), type="response", data = logreg_testi) xv <- seq(min(logreg_testi$toisen_vuoden_op), max(logreg_testi$toisen_vuoden_op), 0.01) yv <- predict(malli, list(toisen_vuoden_op = xv), type="response", data = logreg_testi) xv <- seq(min(logreg_testi$kolmannen_vuoden_op), max(logreg_testi$kolmannen_vuoden_op), 0.01) yv <- predict(malli, list(kolmannen_vuoden_op = xv), type="response", data = logreg_testi) xv <- seq(min(logreg_testi$sukupuoli), max(logreg_testi$sukupuoli), 0.01) yv <- predict(malli, list(sukupuoli = xv), type="response", data = logreg_testi) xv <- seq(min(logreg_testi$hyvaksiluvut), max(logreg_testi$hyvaksiluvut), 0.01) yv <- predict(malli, list(hyvaksiluvut = xv), type="response", data = logreg_testi) xv <- seq(min(logreg_testi$avoimessa_opintoja), max(logreg_testi$avoimessa_opintoja), 0.01) yv <- predict(malli, list(avoimessa_opintoja = xv), type="response", data = logreg_testi) xv <- seq(min(logreg_testi$ulkomailla_opintoja), max(logreg_testi$ulkomailla_opintoja), 0.01) yv <- predict(malli, list(ulkomailla_opintoja = xv), type="response", data = logreg_testi) #Piirtää logistisen regressioviivan lines(xv, yv)