diff --git a/.Rbuildignore b/.Rbuildignore index 0aa69b3..9d82c39 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -1,3 +1,5 @@ +^codecov\.yml$ +^\.travis\.yml$ ^.*\.Rproj$ ^\.Rproj\.user$ ^dane$ @@ -5,3 +7,4 @@ ^cache$ ^dropbox$ ^vignettes/.*_cache$ +^data_local/.*$ diff --git a/.gitignore b/.gitignore index 92bda00..0141c8d 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,6 @@ vignettes/*.dia *.utf8.md *.knit.md .Rproj.user + +# test data not to be publicly available +/data_local/ diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..49791cf --- /dev/null +++ b/.travis.yml @@ -0,0 +1,14 @@ +# R for travis: see documentation at https://docs.travis-ci.com/user/languages/r + +language: R +cache: packages +r: + - release +warnings_are_errors: false +script: + - R CMD build . + - R CMD check *tar.gz --no-tests +notifications: + email: + - tomek@zozlak.org + - t.zoltak@ibe.edu.pl diff --git a/NAMESPACE b/NAMESPACE index b0fe232..44bb2a3 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,18 +1,21 @@ # Generated by roxygen2: do not edit by hand -export(imputuj_mies_pk_1rm) -export(imputuj_mies_pk_pilrm) +export(imputuj_miesiac_pk_1rm) +export(imputuj_miesiac_pk_pilrm) export(polacz_dane) export(przygotuj_absolwenci) export(przygotuj_studenci) export(przygotuj_szkoly) export(przygotuj_uczniowie) +export(przygotuj_zbior_osobo_miesiecy_1rm) +export(przygotuj_zbior_osobo_miesiecy_pilrm) export(przygotuj_zdajacy) export(wczytaj_wyniki_1rm) export(wczytaj_wyniki_pilrm) importFrom(dplyr,"%>%") importFrom(dplyr,.data) importFrom(dplyr,anti_join) +importFrom(dplyr,arrange) importFrom(dplyr,bind_cols) importFrom(dplyr,bind_rows) importFrom(dplyr,case_when) @@ -21,15 +24,19 @@ importFrom(dplyr,do) importFrom(dplyr,everything) importFrom(dplyr,filter) importFrom(dplyr,filter_) +importFrom(dplyr,first) importFrom(dplyr,group_by) +importFrom(dplyr,last) importFrom(dplyr,left_join) importFrom(dplyr,matches) importFrom(dplyr,mutate) importFrom(dplyr,mutate_) importFrom(dplyr,mutate_all) importFrom(dplyr,mutate_at) +importFrom(dplyr,n) importFrom(dplyr,one_of) importFrom(dplyr,rename) +importFrom(dplyr,right_join) importFrom(dplyr,select) importFrom(dplyr,select_) importFrom(dplyr,starts_with) @@ -45,4 +52,5 @@ importFrom(stats,relevel) importFrom(stats,setNames) importFrom(tidyr,gather) importFrom(tidyr,spread) +importFrom(tidyr,unnest) importFrom(utils,read.csv2) diff --git a/NEWS b/NEWS index 039c61d..555e71d 100644 --- a/NEWS +++ b/NEWS @@ -1,14 +1,21 @@ -# MLASZdane 0.0.2 (27.12.2017) +# MLASZdane 0.0.2 (25.02.2019) + +- Nowe funkcje: + - przygotuj_zbior_osobo_miesiecy_pilrm(); + - przygotuj_zbior_osobo_miesiecy_1rm(); + - koryguj_statusy() (nieeksportowana). + +# MLASZdane 0.0.2 (27.12.2018) - Nowe funkcje: - wczytaj_wyniki_1rm(); - - imputuj_mies_pk_1rm(). + - imputuj_miesiac_pk_1rm(). # MLASZdane 0.0.2 (27.12.2017) - Nowe funkcje: - wczytaj_wyniki_pilrm(); - - imputuj_mies_pk_pilrm(); + - imputuj_miesiac_pk_pilrm(); - przywroc_etykiety() (nieeksportowana). # MLASZdane 0.0.1 (23.12.2016) diff --git a/R/imputuj_miesiac_pk_1rm.R b/R/imputuj_miesiac_pk_1rm.R index 87bba18..08c3289 100644 --- a/R/imputuj_miesiac_pk_1rm.R +++ b/R/imputuj_miesiac_pk_1rm.R @@ -10,7 +10,7 @@ #' @importFrom stats lm model.frame predict relevel #' @importFrom dplyr .data bind_rows case_when do filter group_by left_join #' mutate rename summarise ungroup -imputuj_mies_pk_1rm = function(x) { +imputuj_miesiac_pk_1rm = function(x) { stopifnot(is.list(x), all(c("dane", "epizody") %in% names(x))) mp = options()$max.print @@ -123,10 +123,17 @@ imputuj_mies_pk_1rm = function(x) { return(table(przewidywanie = factor(round(predict(x), 0), levels = l[1]:l[2]), czas_rozp = factor(model.frame(x)[, 1], levels = l[1]:l[2]))) }) - message("R-kwadrat") - lapply(modeleCzas, function(x) {return(summary(x)$r.squared)}) %>% print() - message("odsetek poprawnych klasyfikacji") - lapply(tabeleCzas, function(x) {return(sum(diag(x)) / sum(x))}) %>% print() + cat(" statystyki dopasowania\n") + data.frame(zmienna = names(modeleCzas), + R2 = lapply(modeleCzas, function(x) {return(summary(x)$r.squared)}) %>% + unlist() %>% + round(3), + `odsetek poprawn. klasyf.` = + lapply(tabeleCzas, function(x) {return(sum(diag(x)) / sum(x))}) %>% + unlist() %>% + round(3), + check.names = FALSE) %>% + print(row.names = FALSE) epizodyImputM = mapply(function(x, m) { x = suppressWarnings( x %>% @@ -166,10 +173,17 @@ imputuj_mies_pk_1rm = function(x) { return(table(przewidywanie = factor(round(predict(x), 0), levels = l[1]:l[2]), dl = factor(model.frame(x)[, 1], levels = l[1]:l[2]))) }) - message("R-kwadrat") - lapply(modeleDl, function(x) {return(summary(x)$r.squared)}) %>% print() - message("odsetek poprawnych klasyfikacji") - lapply(tabeleDl, function(x) {return(sum(diag(x)) / sum(x))}) %>% print() + cat(" statystyki dopasowania\n") + data.frame(zmienna = names(modeleDl), + R2 = lapply(modeleDl, function(x) {return(summary(x)$r.squared)}) %>% + unlist() %>% + round(3), + `odsetek poprawn. klasyf.` = + lapply(tabeleDl, function(x) {return(sum(diag(x)) / sum(x))}) %>% + unlist() %>% + round(3), + check.names = FALSE) %>% + print(row.names = FALSE) epizodyImputM = mapply(function(x, m) { x = x %>% mutate(rok_zakon_f = @@ -201,6 +215,7 @@ imputuj_mies_pk_1rm = function(x) { select("ID_RESP", "typ_epizodu", "nr", "czas_rozp", "czas_zakon", "czy_zakonczony") %>% rename(imput_czas_rozp = .data$czas_rozp, imput_czas_zakon = .data$czas_zakon) + message("Wyniki imputacji:") table(imput_czas_rozp = epizodyImput$imput_czas_rozp, imput_czas_zakon = epizodyImput$imput_czas_zakon, exclude = NULL) %>% print() diff --git a/R/imputuj_mies_pk_pilrm.R b/R/imputuj_miesiac_pk_pilrm.R similarity index 92% rename from R/imputuj_mies_pk_pilrm.R rename to R/imputuj_miesiac_pk_pilrm.R index 31764b0..604f873 100644 --- a/R/imputuj_mies_pk_pilrm.R +++ b/R/imputuj_miesiac_pk_pilrm.R @@ -11,7 +11,7 @@ #' @importFrom tidyr gather spread #' @importFrom dplyr .data bind_rows case_when do filter group_by left_join #' mutate rename summarise ungroup -imputuj_mies_pk_pilrm = function(x) { +imputuj_miesiac_pk_pilrm = function(x) { stopifnot(is.list(x), all(c("dane", "epizody") %in% names(x))) mp = options()$max.print @@ -143,10 +143,17 @@ imputuj_mies_pk_pilrm = function(x) { return(table(przewidywanie = factor(round(predict(x), 0), levels = l[1]:l[2]), dl = factor(model.frame(x)[, 1], levels = l[1]:l[2]))) }) - message(" R-kwadrat") - lapply(modeleCzas, function(x) {return(summary(x)$r.squared)}) %>% print() - message(" odsetek poprawnych klasyfikacji") - lapply(tabeleCzas, function(x) {return(sum(diag(x)) / sum(x))}) %>% print() + cat(" statystyki dopasowania\n") + data.frame(zmienna = names(modeleCzas), + R2 = lapply(modeleCzas, function(x) {return(summary(x)$r.squared)}) %>% + unlist() %>% + round(3), + `odsetek poprawn. klasyf.` = + lapply(tabeleCzas, function(x) {return(sum(diag(x)) / sum(x))}) %>% + unlist() %>% + round(3), + check.names = FALSE) %>% + print(row.names = FALSE) epizodyImputM = mapply(function(x, m) { x = suppressWarnings( x %>% @@ -186,11 +193,17 @@ imputuj_mies_pk_pilrm = function(x) { return(table(przewidywanie = factor(round(predict(x), 0), levels = l[1]:l[2]), dl = factor(model.frame(x)[, 1], levels = l[1]:l[2]))) }) - - message(" R-kwadrat") - lapply(modeleDl, function(x) {return(summary(x)$r.squared)}) %>% print() - message(" odsetek poprawnych klasyfikacji") - lapply(tabeleDl, function(x) {return(sum(diag(x)) / sum(x))}) %>% print() + cat(" statystyki dopasowania\n") + data.frame(zmienna = names(modeleDl), + R2 = lapply(modeleDl, function(x) {return(summary(x)$r.squared)}) %>% + unlist() %>% + round(3), + `odsetek poprawn. klasyf.` = + lapply(tabeleDl, function(x) {return(sum(diag(x)) / sum(x))}) %>% + unlist() %>% + round(3), + check.names = FALSE) %>% + print(row.names = FALSE) epizodyImputM = mapply(function(x, m) { x = x %>% mutate(rok_kon_f = @@ -216,6 +229,7 @@ imputuj_mies_pk_pilrm = function(x) { epizodyImput = suppressWarnings(bind_rows(epizodyImputM)) %>% select("ID", "typ_epizodu", "nr", "czas_rozp", "czas_kon", "czy_zakonczony") %>% rename(czas_rozp_imput = .data$czas_rozp, czas_kon_imput = .data$czas_kon) + message("Wyniki imputacji:") table(czas_rozp_imput = epizodyImput$czas_rozp_imput, czas_kon_imput = epizodyImput$czas_kon_imput, exclude = NULL) %>% print() diff --git a/R/koryguj_statusy.R b/R/koryguj_statusy.R new file mode 100644 index 0000000..68255c4 --- /dev/null +++ b/R/koryguj_statusy.R @@ -0,0 +1,97 @@ +#' @title Tworzenie zbioru osobo-miesiecy +#' @description +#' Funkcja odpowiada za rozstrzyganie konfliktów pomiędzy statusami +#' nauki/pracy/bezrobocia w poszczególnych miesiącach wynikającymi z deklaracji +#' respondentów. Jest wykorzystywana wewnątrz wywołań funkcji +#' \code{\link{przygotuj_zbior_osobo_miesiecy_pilrm}} +#' i \code{\link{przygotuj_zbior_osobo_miesiecy_1rm}}. +#' @param x ramka danych obemująca opis statusów \strong{jednego} badanego +#' @param zmiennaID ciąg znaków - nazwa zmiennej przechowującej unikalne ID badanego +#' @param kodyPracyNaCzarno wektor liczbowy - wartości zmiennej \code{praca}, +#' które opisują pracę na czarno (czyli takie, które nie wchodzą w formalny +#' konflikt z posiadaniem statusu zarejestrwoanego bezrobotnego) +#' @return ramka danych ze skorygowanymi statusami i dopisanymi kolumnami +#' opisującymi, jakie zmiany zostały dokonane +#' @importFrom dplyr .data case_when mutate right_join select +koryguj_statusy = function(x, zmiennaID, + kodyPracyNaCzarno = vector(mode = "numeric", length = 0)) { + stopifnot(is.character(zmiennaID), length(zmiennaID) == 1, + is.numeric(kodyPracyNaCzarno)) + stopifnot(zmiennaID %in% names(x), + zmiennaID == "ID_RESP" | !("ID_RESP" %in% names(x))) + names(x)[names(x) == zmiennaID] = "ID_RESP" + + x = suppressMessages( + x %>% + right_join(data.frame(czas = min(x$czas):max(x$czas))) %>% + mutate(praca_a_bezrobocie = + case_when(is.na(.data$praca) | is.na(.data$bezrobocie) ~ "ndt.", + (.data$praca %in% kodyPracyNaCzarno) & + !is.na(.data$bezrobocie) ~ "praca na czarno na bezrobociu", + !(.data$praca %in% c(kodyPracyNaCzarno, NA) & + !is.na(.data$bezrobocie)) ~ "konflikt"), + korekta_ciaglosc_nauki = "ndt.")) + # jeśli mamy tylko jeden epizod, niewątpliwie nie ma konfliktów (a kod poniżej się wykrzaczy) + if (nrow(x) == 1) { + return(select(x, -"ID_RESP")) + } + # korekta "konfliktów" pracy i bezrobocia + for (i in 1:(nrow(x) - 1)) { + if (all(!(x$praca[i:(i + 1)] %in% c(kodyPracyNaCzarno, NA)) & + !is.na(x$bezrobocie[i:(i + 1)]))) { + if (i == 1) { + x$praca_a_bezrobocie[i] = "miesiąc graniczny" + } else if (x$imput_praca[i] %in% 0 & x$imput_bezrobocie[i] %in% 1) { + x$bezrobocie[i] = NA + x$praca_a_bezrobocie[i] = "skorygowano bezrobocie" + } else if (x$imput_praca[i] %in% 1 & x$imput_bezrobocie[i] %in% 0) { + x$praca[i] = NA + x$praca_a_bezrobocie[i] = "skorygowano pracę" + } else if (x$imput_praca[i] %in% 0 & x$imput_bezrobocie[i] %in% 0) { + x$praca_a_bezrobocie[i] = "sprzeczne deklaracje resp." + } else if (x$imput_praca[i] %in% 1 & x$imput_bezrobocie[i] %in% 1) { + x$praca_a_bezrobocie[i] = "sprzeczne wyniki imputacji" + } + if ((i + 1) == nrow(x)) { + if (x$imput_praca[i + 1] %in% 0 & x$imput_bezrobocie[i + 1] %in% 1) { + x$bezrobocie[i + 1] = NA + x$praca_a_bezrobocie[i + 1] = "skorygowano bezrobocie" + } else if (x$imput_praca[i + 1] %in% 1 & x$imput_bezrobocie[i + 1] %in% 0) { + x$praca[i + 1] = NA + x$praca_a_bezrobocie[i + 1] = "skorygowano pracę" + } else if (x$imput_praca[i + 1] %in% 0 & x$imput_bezrobocie[i + 1] %in% 0) { + x$praca_a_bezrobocie[i + 1] = "sprzeczne deklaracje resp." + } else if (x$imput_praca[i + 1] %in% 1 & x$imput_bezrobocie[i + 1] %in% 1) { + x$praca_a_bezrobocie[i + 1] = "sprzeczne wyniki imputacji" + } + } + } else if (!(x$praca[i] %in% c(kodyPracyNaCzarno, NA)) & + !is.na(x$bezrobocie[i])) { + x$praca_a_bezrobocie[i] = "miesiąc graniczny" + } else if (!(x$praca[i + 1] %in% c(kodyPracyNaCzarno, NA)) & + !is.na(x$bezrobocie[i + 1])) { + x$praca_a_bezrobocie[i + 1] = "miesiąc graniczny" + } + } + # korekta wakacji, gdy ciągłość nauki + for (i in setdiff(which(x$nauka %in% 2 & (x$czas %% 12) %in% 4), 1:5)) { + if (!is.na(x$nauka[i - 5])) { + x$korekta_ciaglosc_nauki[intersect((i - 4):(i - 1), + which(is.na(x$nauka)))] = "skorygowane" + x$nauka[(i - 4):(i - 1)] = + ifelse(is.na(x$nauka[(i - 4):(i - 1)]), + 2, x$nauka[(i - 4):(i - 1)]) + } + } + for (i in setdiff(which(x$nauka %in% 3 & (x$czas %% 12) %in% 3), 1:4)) { + if (!is.na(x$nauka[i - 4])) { + x$korekta_ciaglosc_nauki[intersect((i - 3):(i - 1), + which(is.na(x$nauka)))] = "skorygowane" + x$nauka[(i - 3):(i - 1)] = + ifelse(is.na(x$nauka[(i - 3):(i - 1)]), + 3, x$nauka[(i - 3):(i - 1)]) + } + } + # koniec + return(select(x, -"ID_RESP")) +} diff --git a/R/przygotuj_zbior_osobo_miesiecy_1rm.R b/R/przygotuj_zbior_osobo_miesiecy_1rm.R new file mode 100644 index 0000000..b80ad49 --- /dev/null +++ b/R/przygotuj_zbior_osobo_miesiecy_1rm.R @@ -0,0 +1,232 @@ +#' @title Tworzenie zbioru osobo-miesiecy +#' @description +#' Funkcja przekształca dane o epizodach nauki, pracy i bezrobocia, zebrane +#' w ramach 1. rundy monitoringu na zbiór, w którym obserwacją jest konkretny +#' badany w konkretnym miesiącu, a zmienne opisują jego status zatrudnienia/nauki. +#' @param x lista zwracana przez funkcję \code{\link{imputuj_miesiac_pk_1rm}} +#' @details +#' Tworzony w ten sposób zbiór wbrew pozorom nie jest wykorzystywany do +#' obliczania wskaźników wykorzystywanych później w raportach szkół, ale do +#' analiz na potrzeby raportu podsumowującego rundę monitorigu. +#' @return ramka danych +#' @export +#' @importFrom tidyr unnest +#' @importFrom dplyr .data arrange case_when filter first last left_join mutate +#' n select summarise +przygotuj_zbior_osobo_miesiecy_1rm = function(x) { + stopifnot(is.list(x), + all(c("dane", "epizody") %in% names(x))) + dane = x$dane + epizody = x$epizody + rm(x) + + message("Przygotowywanie danych.") + names(dane) = sub("ABS_", "", names(dane)) + names(dane) = names(dane) %>% tolower() + names(dane) = sub("^id_resp$", "ID_RESP", names(dane)) + labTemp = attributes(dane$m3) + dane$m3 = as.numeric(dane$m3) + attributes(dane$m3) = labTemp + dane$f6[dane$f6 == 7] = NA + dane$m2[!(dane$m2 %in% 1950:2000)] = NA + dane$m3[!(dane$m3 %in% (1:6))] = NA + + names(epizody) = sub("ABS_", "", names(epizody)) + epizody = suppressWarnings(suppressMessages( + epizody %>% + filter(.data$typ_epizodu %in% c("bezrobocie", "LO dla dorosłych", "praca", + "SPolic.", "studia", "szkoła objęta badaniem")) %>% + left_join(dane %>% + select("ID_RESP", "r5s2")))) %>% + mutate(typ_epizodu = ifelse(.data$typ_epizodu == "szkoła objęta badaniem", + "szkoła", .data$typ_epizodu), + praca = case_when(.data$pg2h %in% 1 ~ 1, + .data$pg2h %in% 2 ~ 2, + .data$pg2h %in% 3 ~ 3, + .data$pg2h %in% 4 ~ 4, + .data$pg2h %in% 5 ~ 5, + .data$pg2g %in% 6 ~ 6, + .data$pg2g %in% 7 ~ 7, + .data$pg2h %in% (7:8) ~ 8, + .data$pg2h %in% 6 ~ 9, + .data$typ_epizodu == "praca" ~ 10, + TRUE ~ NA_real_), + nauka = case_when(.data$typ_epizodu == "szkoła" ~ 1, + .data$typ_epizodu == "studia" ~ 2, + .data$typ_epizodu %in% c("LO dla dorosłych", "SPolic.") ~ 3, + TRUE ~ NA_real_), + bezrobocie = case_when(.data$pb1f %in% 1 ~ 1, + .data$pb1f %in% 2 ~ 2, + .data$typ_epizodu == "bezrobocie" ~ 3, + TRUE ~ NA_real_), + czas_zakon = ifelse(.data$czy_zakonczony %in% 1, + .data$czas_zakon, 5 + as.numeric(.data$r5s2)), + czas_rozp = ifelse(.data$typ_epizodu == "szkoła", + -9, .data$czas_rozp), + czas_rozp_imput = .data$czas_rozp_imput == 1, + czas_zakon_imput = .data$czas_zakon_imput == 1) %>% + select("ID_RESP", "typ_epizodu", "czas_rozp", "czas_zakon", "czy_zakonczony", + "czas_rozp_imput", "czas_zakon_imput", "praca", "nauka", "bezrobocie") + message("Moment przeprowadzenia wywiadu (w 2018 r.):") + table(`dzień` = factor(dane$r5s3, 1:31), `miesiąc` = dane$r5s2) %>% print() + + # przekształcanie + lBD = sum(is.na(epizody$czas_rozp) | is.na(epizody$czas_zakon)) + message("Do odrzucenia jest ", lBD, " rekordów (", + round(100 * lBD / nrow(epizody), 1), + "% odnotowanych epizodów),\n", + "odnośnie których respondenci nie byli w stanie podać nawet roku ich rozpoczęcia lub zakończenia.") + message("\nPrzekształcanie danych.") + message(" Tworzenie zbioru epizodo-miesięcy.") + epizodoMiesiace = epizody %>% + filter(!is.na(.data$czas_rozp) & !is.na(.data$czas_zakon)) %>% + filter(.data$czas_zakon >= -9) %>% + mutate(status = ifelse(!is.na(.data$praca), + .data$praca, + ifelse(!is.na(.data$nauka), + .data$nauka, + .data$bezrobocie)), + lp = 1:n(), + typ_epizodu = ifelse(.data$typ_epizodu %in% c("studia", "SPolic.", + "LO dla dorosłych", + "szkoła"), + "nauka", .data$typ_epizodu)) %>% + group_by(.data$ID_RESP, .data$lp, .data$typ_epizodu, .data$status, + .data$czas_rozp_imput, .data$czas_zakon_imput) %>% + do(data.frame(czas = .data$czas_rozp:.data$czas_zakon)) %>% # zapewne nie super wydajne, ale wygodne + arrange(.data$ID_RESP, .data$typ_epizodu, .data$lp, .data$czas) %>% + group_by(.data$ID_RESP, .data$typ_epizodu, .data$lp) %>% + mutate(imput = + case_when(n() == 1 ~ .data$czas_rozp_imput & .data$czas_zakon_imput, + czas == first(.data$czas) ~ .data$czas_rozp_imput, + czas == last(.data$czas) ~ .data$czas_zakon_imput, + TRUE ~ .data$czas_rozp_imput | .data$czas_zakon_imput) %>% + as.numeric()) + epizodoTypMiesiace = epizodoMiesiace %>% + arrange(.data$ID_RESP, .data$typ_epizodu, .data$czas, .data$imput, + .data$status) %>% + group_by(.data$ID_RESP, .data$typ_epizodu, .data$czas) %>% + summarise(status = first(.data$status), + imput = first(.data$imput)) + message("\n Tworzenie zbioru osobo-miesięcy.") + osoboMiesiace = epizodoTypMiesiace %>% + group_by(.data$ID_RESP, .data$czas) %>% + summarise(praca = ifelse(any(.data$typ_epizodu == "praca"), + .data$status[.data$typ_epizodu == "praca"], NA), + nauka = ifelse(any(.data$typ_epizodu == "nauka"), + .data$status[.data$typ_epizodu == "nauka"], NA), + bezrobocie = ifelse(any(.data$typ_epizodu == "bezrobocie"), + .data$status[.data$typ_epizodu == "bezrobocie"], NA), + imput_praca = ifelse(any(.data$typ_epizodu == "praca"), + .data$imput[.data$typ_epizodu == "praca"], NA), + imput_nauka = ifelse(any(.data$typ_epizodu == "nauka"), + .data$imput[.data$typ_epizodu == "nauka"], NA), + imput_bezrobocie = ifelse(any(.data$typ_epizodu == "bezrobocie"), + .data$imput[.data$typ_epizodu == "bezrobocie"], NA)) %>% + arrange(.data$ID_RESP, .data$czas) %>% + group_by(.data$ID_RESP) %>% + do(status = koryguj_statusy(.data, "ID_RESP", 9:10)) %>% + unnest() %>% + mutate(status = ifelse(is.na(.data$praca) & is.na(.data$nauka) & is.na(.data$bezrobocie), + "999", ""), + praca = ifelse(is.na(.data$praca), 0, .data$praca), + nauka = ifelse(is.na(.data$nauka), 0, .data$nauka), + bezrobocie = ifelse(is.na(.data$bezrobocie), 0, .data$bezrobocie), + bezrobocie = ifelse(.data$status == "999", 2, .data$bezrobocie), + status = ifelse(.data$status == "999", .data$status, + paste0(.data$praca, .data$nauka, .data$bezrobocie)), + data = paste0(2017 + (.data$czas + 5) %/% 12, "_", + sub(" ", "0", + format(1 + ((.data$czas - 7) %% 12), width = 2))), + imput_praca = 2 - .data$imput_praca, + imput_nauka = 2 - .data$imput_nauka, + imput_bezrobocie = 2 - .data$imput_bezrobocie, + praca_a_bezrobocie = factor(.data$praca_a_bezrobocie, + levels = c("ndt.", + "praca na czarno na bezrobociu", + "miesiąc graniczny", + "skorygowano pracę", + "skorygowano bezrobocie", + "sprzeczne deklaracje resp.", + "sprzeczne wyniki imputacji")), + korekta_ciaglosc_nauki = factor(.data$korekta_ciaglosc_nauki, + levels = c("ndt.", "skorygowane"))) + osoboMiesiace = suppressWarnings(suppressMessages( + osoboMiesiace %>% + left_join(dane %>% + select("ID_RESP", "typ_szkoly", "f4", "f6", "f7", + "m1", "m2", "m3", "r5s2")))) %>% + mutate(r5s2 = as.numeric(.data$r5s2)) %>% + filter(.data$czas < (6 + .data$r5s2), .data$czas >= -9) %>% + select("ID_RESP", "typ_szkoly", "r5s2", "f4", "f6", "f7", + "m1", "m2", "m3", "data", "czas", + "status", "praca", "nauka", "bezrobocie", "praca_a_bezrobocie", + "korekta_ciaglosc_nauki", starts_with("imput_")) + message("\nStatystyki korekt statusów:") + message(" praca a bezrobocie") + table(osoboMiesiace$praca_a_bezrobocie) %>% + as.data.frame() %>% + setNames(c("sytuacja", "n")) %>% + print(row.names = FALSE, right = FALSE) + message(" korekta ciągłości nauki") + table(osoboMiesiace$korekta_ciaglosc_nauki) %>% + as.data.frame() %>% + setNames(c("sytuacja", "n")) %>% + print(row.names = FALSE, right = FALSE) + + # upiększanie (etykietowanie) + message("Dodawanie etykiet.") + attributes(osoboMiesiace$ID_RESP)$label = attributes(dane$ID_RESP)$label + attributes(osoboMiesiace$r5s2)$label = attributes(dane$r5s2)$label + osoboMiesiace$f4 = factor(osoboMiesiace$f4) + attributes(osoboMiesiace$f4)$label = attributes(dane$f4)$label + attributes(osoboMiesiace$data)$label = "Miesiąc i rok" + attributes(osoboMiesiace$status)$label = "Zbiorcza informacja o statusie resp. w danym miesiącu" + attributes(osoboMiesiace$czas)$label = "Miesiąc i rok wyrażone jako liczba miesięcy od czerwca 2017" + attributes(osoboMiesiace$praca)$label = "Status zatrudnienia resp. w danym miesiącu" + attributes(osoboMiesiace$praca)$labels = c( + "zatrudniony na umowę o pracę na czas określony" = 1, + "zatrudniony na umowę o pracę na czas nieokreślony" = 2, + "zatrudniony przez agencję pracy tymczasowej" = 3, + "zatrudniony na umowie cywilnoprawnej" = 4, + "samozatrudniony (praca 'u kogoś')" = 5, + "prowadzi własną działalność ('praca 'u siebie')" = 6, + "prowadzi własne gosp. rolne" = 7, + "odbywa staż lub praktykę absolwencką" = 8, + "zatrudniony bez umowy (na czarno)" = 9, + "zatrudniony ale nie wiadomo w jakiej formie" = 10, + "niezatrudniony" = 0) + attributes(osoboMiesiace$nauka)$label = "Status uczestnictwa w edukacji formalnej resp. w danym miesiącu" + attributes(osoboMiesiace$nauka)$labels = c( + "uczy się w szkole, jako uczeń której był badany" = 1, + "studiuje" = 2, + "uczy się w LO dla dorosłych lub SPolic." = 3, + "nie uczy się" = 0) + attributes(osoboMiesiace$bezrobocie)$label = "Status poszukiwania pracy przez resp. w danym miesiącu" + attributes(osoboMiesiace$bezrobocie)$labels = c( + "bezrobotny, poszukuje pracy" = 1, + "bierny zawodowo" = 2, + "bez pracy, nie wiadomo, czy bierny, czy poszukuje pracy" = 3, + "nie jest bezrobotny" = 0) + attributes(osoboMiesiace$imput_praca)$label = "Czy status zatrudnienia był imputowany?" + attributes(osoboMiesiace$imput_praca)$labels = c("Tak" = 1, "Nie" = 2) + attributes(osoboMiesiace$imput_nauka)$label = "Czy status uczestnictwa w edukacji formalnej był imputowany?" + attributes(osoboMiesiace$imput_nauka)$labels = c("Tak" = 1, "Nie" = 2) + attributes(osoboMiesiace$imput_bezrobocie)$label = "Czy status poszukiwania pracy był imputowany?" + attributes(osoboMiesiace$imput_bezrobocie)$labels = c("Tak" = 1, "Nie" = 2) + attributes(osoboMiesiace$praca_a_bezrobocie)$label = "Informacja o 'konfliktach' pomiędzy statusem zatrudnienia a poszukiwania pracy" + attributes(osoboMiesiace$korekta_ciaglosc_nauki)$label = "Czy status uczestnictwa w edukacji formalnej był korygowany z powodu ciągłości nauki?" + + for (i in 1:ncol(osoboMiesiace)) { + if ("label" %in% names(attributes(osoboMiesiace[[i]]))) { + attributes(osoboMiesiace[[i]])$label = enc2native(attributes(osoboMiesiace[[i]])$label) + } + if ("labels" %in% names(attributes(osoboMiesiace[[i]]))) { + names(attributes(osoboMiesiace[[i]])$labels) = + enc2native(names(attributes(osoboMiesiace[[i]])$labels)) + class(osoboMiesiace[[i]]) = "haven_labelled" + } + } + + return(osoboMiesiace) +} diff --git a/R/przygotuj_zbior_osobo_miesiecy_pilrm.R b/R/przygotuj_zbior_osobo_miesiecy_pilrm.R new file mode 100644 index 0000000..15c651a --- /dev/null +++ b/R/przygotuj_zbior_osobo_miesiecy_pilrm.R @@ -0,0 +1,230 @@ +#' @title Tworzenie zbioru osobo-miesiecy +#' @description +#' Funkcja przekształca dane o epizodach nauki, pracy i bezrobocia, zebrane +#' w ramach pilotażowej rundy monitoringu na zbiór, w którym obserwacją jest konkretny +#' badany w konkretnym miesiącu, a zmienne opisują jego status zatrudnienia/nauki. +#' @param x lista zwracana przez funkcję \code{\link{imputuj_miesiac_pk_pilrm}} +#' @details +#' Tworzony w ten sposób zbiór wbrew pozorom nie jest wykorzystywany do +#' obliczania wskaźników wykorzystywanych później w raportach szkół, ale do +#' analiz na potrzeby raportu podsumowującego rundę monitorigu. +#' @return ramka danych +#' @export +#' @importFrom tidyr unnest +#' @importFrom dplyr .data arrange bind_rows case_when filter first last +#' left_join mutate n select summarise +przygotuj_zbior_osobo_miesiecy_pilrm = function(x) { + stopifnot(is.list(x), + all(c("dane", "epizody") %in% names(x))) + dane = x$dane + epizody = x$epizody + rm(x) + + message("Przygotowywanie danych.") + names(dane) = names(dane) %>% tolower() + names(dane) = sub("^(id_ibe|id)$", "ID", names(dane)) + dane$ID = as.numeric(dane$ID) + labTemp = attributes(dane$m3) + dane$m3 = as.numeric(dane$m3) + attributes(dane$m3) = labTemp + dane$f6[dane$f6 == 7] = NA + dane$m2[!(dane$m2 %in% 1950:2000)] = NA + dane$m3[!(dane$m3 %in% (1:6))] = NA + + epizody = suppressWarnings(suppressMessages( + epizody %>% + filter(.data$typ_epizodu %in% c("bezrobocie", "LO dla dorosłych", "praca", + "SPolic.", "studia")) %>% + left_join(dane %>% select("ID", "r5s2")))) + epizody = epizody %>% + mutate(praca = case_when(.data$pg2h %in% 1 ~ 1, + .data$pg2h %in% 2 ~ 2, + .data$pg2h %in% 3 ~ 3, + .data$pg2h %in% 4 ~ 4, + .data$pg2g %in% 4 ~ 5, + .data$pg2g %in% 5 ~ 6, + .data$pg2h %in% (6:7) ~ 7, + .data$pg2h %in% 5 ~ 8, + .data$typ_epizodu == "praca" ~ 9, + TRUE ~ NA_real_), + imput_mies_rozp = epizody %>% + select("zp2a", "sp6c1", "pp6c1", "pg2c", "pb1b") %>% + is.na() %>% + apply(1, all), + imput_mies_kon = epizody %>% + select("zp2f", "sp6e1", "pp6f1", "pg2e", "pb1d") %>% + is.na() %>% + apply(1, all) & .data$czy_zakonczony %in% 1, + nauka = case_when(.data$typ_epizodu %in% "studia" ~ 2, + .data$typ_epizodu %in% c("LO dla dorosłych", + "SPolic.") ~ 3, + TRUE ~ NA_real_), + bezrobocie = case_when(.data$pb1f %in% 1 ~ 1, + .data$pb1f %in% 2 ~ 2, + .data$typ_epizodu == "bezrobocie" ~ 3, + TRUE ~ NA_real_), + czas_kon = ifelse(.data$czy_zakonczony %in% 1, + .data$czas_kon, + 17 + as.numeric(.data$r5s2))) %>% + select("ID", "typ_epizodu", "czas_rozp", "czas_kon", "czy_zakonczony", + "imput_mies_rozp", "imput_mies_kon", "praca", "nauka", "bezrobocie") + epizody = suppressWarnings( + epizody %>% + bind_rows(data.frame(ID = dane$ID, typ_epizodu = "szkoła", czas_rozp = -9, + czas_kon = 0, czy_zakonczony = 1, + imput_mies_rozp = FALSE, imput_mies_kon = FALSE, + praca = NA, nauka = 1, bezrobocie = NA, + stringsAsFactors = FALSE))) + message("Moment przeprowadzenia wywiadu (w 2017 r.):") + table(`dzień` = factor(dane$r5s3, 1:31), `miesiąc` = dane$r5s2) %>% print() + + # przekształcanie + lBD = sum(is.na(epizody$czas_rozp) | is.na(epizody$czas_kon)) + message("Do odrzucenia jest ", lBD, " rekordów (", + round(100 * lBD / nrow(epizody), 1), + "% odnotowanych epizodów),\n", + "odnośnie których respondenci nie byli w stanie podać nawet roku ich rozpoczęcia lub zakończenia.") + message("\nPrzekształcanie danych.") + message(" Tworzenie zbioru epizodo-miesięcy.") + epizodoMiesiace = epizody %>% + filter(!is.na(.data$czas_rozp) & !is.na(.data$czas_kon)) %>% + mutate(status = ifelse(!is.na(.data$praca), + .data$praca, + ifelse(!is.na(.data$nauka), + .data$nauka, + .data$bezrobocie)), + lp = 1:n(), + typ_epizodu = ifelse(.data$typ_epizodu %in% c("studia", "SPolic.", + "LO dla dorosłych", + "szkoła"), + "nauka", .data$typ_epizodu)) %>% + group_by(.data$ID, .data$lp, .data$typ_epizodu, .data$status, + .data$imput_mies_rozp, .data$imput_mies_kon) %>% + do(data.frame(czas = .data$czas_rozp:.data$czas_kon)) %>% # zapewne nie super wydajne, ale wygodne + arrange(.data$ID, .data$typ_epizodu, .data$lp, .data$czas) %>% + group_by(.data$ID, .data$typ_epizodu, .data$lp) %>% + mutate(imput = case_when(n() == 1 ~ .data$imput_mies_rozp & .data$imput_mies_kon, + czas == first(.data$czas) ~ .data$imput_mies_rozp, + czas == last(.data$czas) ~ .data$imput_mies_kon, + TRUE ~ .data$imput_mies_rozp | .data$imput_mies_kon) %>% + as.numeric()) + epizodoTypMiesiace = epizodoMiesiace %>% + arrange(.data$ID, .data$typ_epizodu, .data$czas, .data$imput, .data$status) %>% + group_by(.data$ID, .data$typ_epizodu, .data$czas) %>% + summarise(status = first(.data$status), + imput = first(.data$imput)) + message("\n Tworzenie zbioru osobo-miesięcy.") + osoboMiesiace = epizodoTypMiesiace %>% + group_by(.data$ID, .data$czas) %>% + summarise(praca = ifelse(any(.data$typ_epizodu == "praca"), + .data$status[.data$typ_epizodu == "praca"], NA), + nauka = ifelse(any(.data$typ_epizodu == "nauka"), + .data$status[.data$typ_epizodu == "nauka"], NA), + bezrobocie = ifelse(any(.data$typ_epizodu == "bezrobocie"), + .data$status[.data$typ_epizodu == "bezrobocie"], NA), + imput_praca = ifelse(any(.data$typ_epizodu == "praca"), + .data$imput[.data$typ_epizodu == "praca"], NA), + imput_nauka = ifelse(any(.data$typ_epizodu == "nauka"), + .data$imput[.data$typ_epizodu == "nauka"], NA), + imput_bezrobocie = ifelse(any(.data$typ_epizodu == "bezrobocie"), + .data$imput[.data$typ_epizodu == "bezrobocie"], NA)) %>% + arrange(.data$ID, .data$czas) %>% + group_by(.data$ID) %>% + do(status = koryguj_statusy(.data, "ID", 8:9)) %>% + unnest() %>% + mutate(status = ifelse(is.na(.data$praca) & is.na(.data$nauka) & is.na(.data$bezrobocie), + "999", ""), + praca = ifelse(is.na(.data$praca), 0, .data$praca), + nauka = ifelse(is.na(.data$nauka), 0, .data$nauka), + bezrobocie = ifelse(is.na(.data$bezrobocie), 0, .data$bezrobocie), + bezrobocie = ifelse(.data$status == "999", 2, .data$bezrobocie), + status = ifelse(.data$status == "999", .data$status, + paste0(.data$praca, .data$nauka, .data$bezrobocie)), + data = paste0(2015 + (.data$czas + 5) %/% 12, "_", + sub(" ", "0", format(1 + (.data$czas %% 12), width = 2))), + imput_praca = 2 - .data$imput_praca, + imput_nauka = 2 - .data$imput_nauka, + imput_bezrobocie = 2 - .data$imput_bezrobocie, + praca_a_bezrobocie = factor(.data$praca_a_bezrobocie, + levels = c("ndt.", + "praca na czarno na bezrobociu", + "miesiąc graniczny", + "skorygowano pracę", + "skorygowano bezrobocie", + "sprzeczne deklaracje resp.", + "sprzeczne wyniki imputacji")), + korekta_ciaglosc_nauki = factor(.data$korekta_ciaglosc_nauki, + levels = c("ndt.", "skorygowane"))) + osoboMiesiace = suppressWarnings(suppressMessages( + osoboMiesiace %>% + left_join(dane %>% + select("ID", "typ_szkoly", "f6", "f7", "m1", "m2", "m3", "r5s2")))) %>% + mutate(r5s2 = as.numeric(.data$r5s2)) %>% + filter(.data$czas < (18 + .data$r5s2)) %>% + select("ID", "typ_szkoly", "r5s2", "f6", "f7", "m1", "m2", "m3", + "data", "czas", "status", "praca", "nauka", "bezrobocie", + "praca_a_bezrobocie", "korekta_ciaglosc_nauki", starts_with("imput_")) + message("\nStatystyki korekt statusów:") + message(" praca a bezrobocie") + table(osoboMiesiace$praca_a_bezrobocie) %>% + as.data.frame() %>% + setNames(c("sytuacja", "n")) %>% + print(row.names = FALSE, right = FALSE) + message(" korekta ciągłości nauki") + table(osoboMiesiace$korekta_ciaglosc_nauki) %>% + as.data.frame() %>% + setNames(c("sytuacja", "n")) %>% + print(row.names = FALSE, right = FALSE) + + # upiększanie (etykietowanie) + message("Dodawanie etykiet.") + attributes(osoboMiesiace$ID)$label = attributes(dane$ID)$label + attributes(osoboMiesiace$r5s2)$label = attributes(dane$r5s2)$label + attributes(osoboMiesiace$data)$label = "Miesiąc i rok" + attributes(osoboMiesiace$status)$label = "Zbiorcza informacja o statusie resp. w danym miesiącu" + attributes(osoboMiesiace$czas)$label = "Miesiąc i rok wyrażone jako liczba miesięcy od czerwca 2015" + attributes(osoboMiesiace$praca)$label = "Status zatrudnienia resp. w danym miesiącu" + attributes(osoboMiesiace$praca)$labels = c( + "zatrudniony na umowę o pracę" = 1, + "zatrudniony przez agencję pracy tymczasowej" = 2, + "zatrudniony na umowie cywilnoprawnej" = 3, + "samozatrudniony (praca 'u kogoś')" = 4, + "prowadzi własną działalność ('praca 'u siebie')" = 5, + "prowadzi własne gosp. rolne" = 6, + "odbywa staż lub praktykę absolwencką" = 7, + "zatrudniony bez umowy (na czarno)" = 8, + "zatrudniony ale nie wiadomo w jakiej formie" = 9, + "niezatrudniony" = 0) + attributes(osoboMiesiace$nauka)$label = "Status uczestnictwa w edukacji formalnej resp. w danym miesiącu" + attributes(osoboMiesiace$nauka)$labels = c( + "uczy się w szkole, jako uczeń której był badany" = 1, + "studiuje" = 2, + "uczy się w LO dla dorosłych lub SPolic." = 3, + "nie uczy się" = 0) + attributes(osoboMiesiace$bezrobocie)$label = "Status poszukiwania pracy przez resp. w danym miesiącu" + attributes(osoboMiesiace$bezrobocie)$labels = c( + "bezrobotny, poszukuje pracy" = 1, + "bierny zawodowo" = 2, + "bez pracy, nie wiadomo, czy bierny, czy poszukuje pracy" = 3, + "nie jest bezrobotny" = 0) + attributes(osoboMiesiace$imput_praca)$label = "Czy status zatrudnienia był imputowany?" + attributes(osoboMiesiace$imput_praca)$labels = c("Tak" = 1, "Nie" = 2) + attributes(osoboMiesiace$imput_nauka)$label = "Czy status uczestnictwa w edukacji formalnej był imputowany?" + attributes(osoboMiesiace$imput_nauka)$labels = c("Tak" = 1, "Nie" = 2) + attributes(osoboMiesiace$imput_bezrobocie)$label = "Czy status poszukiwania pracy był imputowany?" + attributes(osoboMiesiace$imput_bezrobocie)$labels = c("Tak" = 1, "Nie" = 2) + attributes(osoboMiesiace$praca_a_bezrobocie)$label = "Informacja o 'konfliktach' pomiędzy statusem zatrudnienia a poszukiwania pracy" + attributes(osoboMiesiace$korekta_ciaglosc_nauki)$label = "Czy status uczestnictwa w edukacji formalnej był korygowany z powodu ciągłości nauki?" + + for (i in 1:ncol(osoboMiesiace)) { + if ("label" %in% names(attributes(osoboMiesiace[[i]]))) { + attributes(osoboMiesiace[[i]])$label = enc2native(attributes(osoboMiesiace[[i]])$label) + } + if ("labels" %in% names(attributes(osoboMiesiace[[i]]))) { + names(attributes(osoboMiesiace[[i]])$labels) = + enc2native(names(attributes(osoboMiesiace[[i]])$labels)) + } + } + + return(osoboMiesiace) +} diff --git a/README.md b/README.md index 4f95d7c..01c8587 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,25 @@ ![KL+RP+IBE+EFS](inst/Belka-Losy-absolwentow-Kolor-PL.png) +[![Travis build status](https://travis-ci.org/tzoltak/MLASZraporty.svg?branch=master)](https://travis-ci.org/tzoltak/MLASZraporty) +[![Coverage status](https://codecov.io/gh/tzoltak/MLASZraporty/branch/master/graph/badge.svg)](https://codecov.io/github/tzoltak/MLASZraporty?branch=master) + # MLASZdane Pakiet został opracowany w ramach projektu *Monitorowanie losów edukacyjno-zawodowych absolwentów i młodych dorosłych* (POWR.02.15.00-IP.02-00-004/16) prowadzonego w Instytucie Badań Edukacyjnych w ramach działania 2.15. Kształcenie i szkolenie zawodowe dostosowane do potrzeb zmieniającej się gospodarki II. osi priorytetowej Efektywne polityki publiczne dla rynku pracy, gospodarki i edukacji Programu Operacyjnego Wiedza, Edukacja, Rozwój Pakiet służy do złączania danych z rejestrów, baz danych administracyjnych, baz danych wyników egzaminów i wyników badań sondażowych na potrzeby projektu MLEZAiMD. + +# Instalacja / aktualizacja + +Pakiet nie jest wypchnięty na CRAN, więc trzeba instalować go ze źródeł. + +Ponieważ jednak zawiera jedynie kod w R, nie ma potrzeby zaopatrywać się w kompilatory, itp. + +Instalację najproście przeprowadzić wykorzystując pakiet *devtools*: + +```r +install.packages('devtools') # potrzebne tylko, gdy nie jest jeszcze zainstalowany +devtools::install_github('tzoltak/MLASZdane') +``` + +Dokładnie w ten sam sposób można przeprowadzić aktualizację pakietu do najnowszej wersji. diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 0000000..8f36b6c --- /dev/null +++ b/codecov.yml @@ -0,0 +1,12 @@ +comment: false + +coverage: + status: + project: + default: + target: auto + threshold: 1% + patch: + default: + target: auto + threshold: 1% diff --git a/man/imputuj_mies_pk_1rm.Rd b/man/imputuj_miesiac_pk_1rm.Rd similarity index 87% rename from man/imputuj_mies_pk_1rm.Rd rename to man/imputuj_miesiac_pk_1rm.Rd index 2de2fcf..15ee988 100644 --- a/man/imputuj_mies_pk_1rm.Rd +++ b/man/imputuj_miesiac_pk_1rm.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/imputuj_miesiac_pk_1rm.R -\name{imputuj_mies_pk_1rm} -\alias{imputuj_mies_pk_1rm} +\name{imputuj_miesiac_pk_1rm} +\alias{imputuj_miesiac_pk_1rm} \title{Imputacja miesiacow rozpoczecia i zakonczenia epizodow w danych sondazowych} \usage{ -imputuj_mies_pk_1rm(x) +imputuj_miesiac_pk_1rm(x) } \arguments{ \item{x}{lista zwracana przez funkcję \code{\link{wczytaj_wyniki_1rm}}} diff --git a/man/imputuj_mies_pk_pilrm.Rd b/man/imputuj_miesiac_pk_pilrm.Rd similarity index 78% rename from man/imputuj_mies_pk_pilrm.Rd rename to man/imputuj_miesiac_pk_pilrm.Rd index 337d38b..9f10cb4 100644 --- a/man/imputuj_mies_pk_pilrm.Rd +++ b/man/imputuj_miesiac_pk_pilrm.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/imputuj_mies_pk_pilrm.R -\name{imputuj_mies_pk_pilrm} -\alias{imputuj_mies_pk_pilrm} +% Please edit documentation in R/imputuj_miesiac_pk_pilrm.R +\name{imputuj_miesiac_pk_pilrm} +\alias{imputuj_miesiac_pk_pilrm} \title{Imputacja miesiacow rozpoczecia i zakonczenia epizodow w danych sondazowych} \usage{ -imputuj_mies_pk_pilrm(x) +imputuj_miesiac_pk_pilrm(x) } \arguments{ \item{x}{lista zwracana przez funkcję \code{\link{wczytaj_wyniki_pilrm}}} diff --git a/man/koryguj_statusy.Rd b/man/koryguj_statusy.Rd new file mode 100644 index 0000000..e464aa3 --- /dev/null +++ b/man/koryguj_statusy.Rd @@ -0,0 +1,29 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/koryguj_statusy.R +\name{koryguj_statusy} +\alias{koryguj_statusy} +\title{Tworzenie zbioru osobo-miesiecy} +\usage{ +koryguj_statusy(x, zmiennaID, kodyPracyNaCzarno = vector(mode = + "numeric", length = 0)) +} +\arguments{ +\item{x}{ramka danych obemująca opis statusów \strong{jednego} badanego} + +\item{zmiennaID}{ciąg znaków - nazwa zmiennej przechowującej unikalne ID badanego} + +\item{kodyPracyNaCzarno}{wektor liczbowy - wartości zmiennej \code{praca}, +które opisują pracę na czarno (czyli takie, które nie wchodzą w formalny +konflikt z posiadaniem statusu zarejestrwoanego bezrobotnego)} +} +\value{ +ramka danych ze skorygowanymi statusami i dopisanymi kolumnami +opisującymi, jakie zmiany zostały dokonane +} +\description{ +Funkcja odpowiada za rozstrzyganie konfliktów pomiędzy statusami +nauki/pracy/bezrobocia w poszczególnych miesiącach wynikającymi z deklaracji +respondentów. Jest wykorzystywana wewnątrz wywołań funkcji +\code{\link{przygotuj_zbior_osobo_miesiecy_pilrm}} +i \code{\link{przygotuj_zbior_osobo_miesiecy_1rm}}. +} diff --git a/man/przygotuj_zbior_osobo_miesiecy_1rm.Rd b/man/przygotuj_zbior_osobo_miesiecy_1rm.Rd new file mode 100644 index 0000000..6944a5a --- /dev/null +++ b/man/przygotuj_zbior_osobo_miesiecy_1rm.Rd @@ -0,0 +1,24 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/przygotuj_zbior_osobo_miesiecy_1rm.R +\name{przygotuj_zbior_osobo_miesiecy_1rm} +\alias{przygotuj_zbior_osobo_miesiecy_1rm} +\title{Tworzenie zbioru osobo-miesiecy} +\usage{ +przygotuj_zbior_osobo_miesiecy_1rm(x) +} +\arguments{ +\item{x}{lista zwracana przez funkcję \code{\link{imputuj_miesiac_pk_1rm}}} +} +\value{ +ramka danych +} +\description{ +Funkcja przekształca dane o epizodach nauki, pracy i bezrobocia, zebrane +w ramach 1. rundy monitoringu na zbiór, w którym obserwacją jest konkretny +badany w konkretnym miesiącu, a zmienne opisują jego status zatrudnienia/nauki. +} +\details{ +Tworzony w ten sposób zbiór wbrew pozorom nie jest wykorzystywany do +obliczania wskaźników wykorzystywanych później w raportach szkół, ale do +analiz na potrzeby raportu podsumowującego rundę monitorigu. +} diff --git a/man/przygotuj_zbior_osobo_miesiecy_pilrm.Rd b/man/przygotuj_zbior_osobo_miesiecy_pilrm.Rd new file mode 100644 index 0000000..51dfdda --- /dev/null +++ b/man/przygotuj_zbior_osobo_miesiecy_pilrm.Rd @@ -0,0 +1,24 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/przygotuj_zbior_osobo_miesiecy_pilrm.R +\name{przygotuj_zbior_osobo_miesiecy_pilrm} +\alias{przygotuj_zbior_osobo_miesiecy_pilrm} +\title{Tworzenie zbioru osobo-miesiecy} +\usage{ +przygotuj_zbior_osobo_miesiecy_pilrm(x) +} +\arguments{ +\item{x}{lista zwracana przez funkcję \code{\link{imputuj_miesiac_pk_pilrm}}} +} +\value{ +ramka danych +} +\description{ +Funkcja przekształca dane o epizodach nauki, pracy i bezrobocia, zebrane +w ramach pilotażowej rundy monitoringu na zbiór, w którym obserwacją jest konkretny +badany w konkretnym miesiącu, a zmienne opisują jego status zatrudnienia/nauki. +} +\details{ +Tworzony w ten sposób zbiór wbrew pozorom nie jest wykorzystywany do +obliczania wskaźników wykorzystywanych później w raportach szkół, ale do +analiz na potrzeby raportu podsumowującego rundę monitorigu. +} diff --git a/tests/testthat.R b/tests/testthat.R index 511dce5..be59287 100644 --- a/tests/testthat.R +++ b/tests/testthat.R @@ -1,4 +1,4 @@ library(testthat) library(MLASZdane) -#test_check("MLASZdane") +test_check("MLASZdane") diff --git a/tests/testthat/test-MLASZdane_klasy.R b/tests/testthat/test-MLASZdane_klasy.R deleted file mode 100644 index e69de29..0000000 diff --git a/tests/testthat/test-przygotowanie_danych_1rm.R b/tests/testthat/test-przygotowanie_danych_1rm.R new file mode 100644 index 0000000..c83deb2 --- /dev/null +++ b/tests/testthat/test-przygotowanie_danych_1rm.R @@ -0,0 +1,32 @@ +if (dir.exists("../../data_local")) { + context("Wczytanie danych z 1. rundy monitoringu") + w1rm = wczytaj_wyniki_1rm("../../data_local/MLEZAiMD_I_runda_CAPI_absolwent_n7713_20180924_z_wagami_z_kodowaniem.sav") + test_that("wczytaj_wyniki_1rm()", { + + expect_type(w1rm, "list") + expect_named(w1rm, c("dane", "epizody", "gospDom")) + for (i in names(w1rm)) { + expect_is(w1rm[[i]], "data.frame", label = i) + } + }) + + context("Imputacja czasów rozpoczęcia i zakończenia w danych z 1. rundy monitoringu") + wi1rm = imputuj_miesiac_pk_1rm(w1rm) + test_that("imputuj_miesiac_pk_pilrm()", { + expect_type(wi1rm, "list") + expect_named(wi1rm, c("dane", "epizody", "gospDom")) + for (i in names(wi1rm)) { + expect_is(wi1rm[[i]], "data.frame", label = i) + } + }) + + context("Tworzenie zbioru osobo-miesięcy na podstawie danych z 1. rundy monitoringu") + om1rm = przygotuj_zbior_osobo_miesiecy_1rm(wi1rm) + test_that("przygotuj_zbior_osobo_miesiecy_1rm()", { + expect_is(om1rm, "data.frame") + nazwy = c("ID", "data", "czas", "status", "praca", "nauka", "bezrobocie", + "praca_a_bezrobocie", "korekta_ciaglosc_nauki", + "imput_praca", "imput_nauka", "imput_bezrobocie") + expect_named(om1rm[, names(om1rm) %in% nazwy], ignore.order = TRUE) + }) +} diff --git a/tests/testthat/test-przygotowanie_danych_pilrm.R b/tests/testthat/test-przygotowanie_danych_pilrm.R new file mode 100644 index 0000000..3c8e3ac --- /dev/null +++ b/tests/testthat/test-przygotowanie_danych_pilrm.R @@ -0,0 +1,31 @@ +if (dir.exists("../../data_local")) { + context("Wczytanie danych z pilotażowej rundy monitoringu") + wpilrm = wczytaj_wyniki_pilrm("../../data_local/MLEZAMiD_absolwent_n2959_20171013.sav") + test_that("wczytaj_wyniki_pilrm()", { + expect_type(wpilrm, "list") + expect_named(wpilrm, c("dane", "epizody", "gospDom", "czasy")) + for (i in names(wpilrm)) { + expect_is(wpilrm[[i]], "data.frame", label = i) + } + }) + + context("Imputacja czasów rozpoczęcia i zakończenia w danych z pilotażowej rundy monitoringu") + wipilrm = imputuj_miesiac_pk_pilrm(wpilrm) + test_that("imputuj_miesiac_pk_pilrm()", { + expect_type(wipilrm, "list") + expect_named(wipilrm, c("dane", "epizody", "gospDom", "czasy")) + for (i in names(wipilrm)) { + expect_is(wipilrm[[i]], "data.frame", label = i) + } + }) + + context("Tworzenie zbioru osobo-miesięcy na podstawie danych z pilotażowej rundy monitoringu") + ompilrm = przygotuj_zbior_osobo_miesiecy_pilrm(wipilrm) + test_that("przygotuj_zbior_osobo_miesiecy_1rm()", { + expect_is(ompilrm, "data.frame") + nazwy = c("ID", "data", "czas", "status", "praca", "nauka", "bezrobocie", + "praca_a_bezrobocie", "korekta_ciaglosc_nauki", + "imput_praca", "imput_nauka", "imput_bezrobocie") + expect_named(ompilrm[, names(ompilrm) %in% nazwy], ignore.order = TRUE) + }) +}