#Haetaan data data <- read.csv("opintopisteet_tutkinnot_2010_aloittaneet_25v.csv", #ennen tiedoston nimeä 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 useampia samoja muuttujia 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)) #Muutetaan hyväksiluvut, avoimen opinnot ja ulkomailla tehdyt opinnot tarvittaessa binäärisiksi muuttujiksi #opiskelijat2$hyvaksiluvut_max[opiskelijat2$hyvaksiluvut_max >= 1] <- 1 #opiskelijat2$hyvaksiluvut_max <- as.numeric(opiskelijat2$hyvaksiluvut_max) #opiskelijat2$avoimessa_opintoja_max[opiskelijat2$avoimessa_opintoja_max >= 1] <- 1 #opiskelijat2$avoimessa_opintoja_max <- as.numeric(opiskelijat2$avoimessa_opintoja_max) #opiskelijat2$ulkomailla_opintoja_max[opiskelijat2$ulkomailla_opintoja_max >= 1] <- 1 #opiskelijat2$ulkomailla_opintoja_max <- as.numeric(opiskelijat2$ulkomailla_opintoja_max) #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 eri 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 ja opintopisteille voi ottaa käyttöön alta poistamalla kommenttimerkin #Rajattu vuodessa suoritettujen opintopisteiden määrä 100:n #Poistetaan NA:t 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(ulkomailla_opintoja < 100) %>% # filter(avoimessa_opintoja < 100) %>% select(tavoiteajassa_valmistunut, sukupuoli, ika_aloittaessa_min, on_aiempi_tutkinto, hyvaksiluvut, avoimessa_opintoja, ulkomailla_opintoja, ensimmaisen_vuoden_op, toisen_vuoden_op, kolmannen_vuoden_op) %>% filter(is.na(tavoiteajassa_valmistunut) == FALSE) #Ladataan lisää kirjastoja tarkastelua varten install.packages(c("tidyverse", "caret", "cellranger")) library(tidyverse) library(caret) theme_set(theme_bw()) #Luodaan harjoitus ja testisetit training.samples <- logreg_testi$tavoiteajassa_valmistunut %>% createDataPartition(p = 0.8, list = FALSE) train.data <- logreg_testi[training.samples, ] test.data <- logreg_testi[-training.samples, ] #Luodaan malli logistisen regression pohjaksi #Halutaan tarkastella tavoiteajassa valmistumisen kulmasta malli <- glm(tavoiteajassa_valmistunut~., family = "binomial"(link="logit"), data = train.data) #Tiivistelmät mallista summary(malli) summary(malli)$coef coef(malli) #todennäköisydet todennakoisyydet <- malli %>% predict(test.data, type = "response") #alku ja loppu datasetin todennäköisyyksistä head(todennakoisyydet) tail(todennakoisyydet) #ennustetut arvot predicted.classes <- ifelse(todennakoisyydet > 0.5, "1", "0") head(predicted.classes) #mallin tarkkuus mean(predicted.classes == test.data$tavoiteajassa_valmistunut)