setwd('../') # nie wykonywać przy ręcznym uruchamianiu library(dplyr) devtools::load_all(".") load('dane/stare/daneMS.RData') load('dane/stare/zlaczone.RData') nUsun1 = daneMS %>% group_by(ID, KIERUNEK_ID, JEDNOSTKA_ID, UCZELNIA_ID) %>% mutate(n = n()) %>% filter(n > 1) %>% nrow() nUsun2 = wszystko %>% filter(DATA_ZAK == data2okres('2015-03')) %>% nrow() daneMS = daneMS %>% group_by(ID, KIERUNEK_ID, JEDNOSTKA_ID, UCZELNIA_ID) %>% mutate(n = n()) %>% filter(n == 1) %>% select(-n) wszystko = wszystko %>% group_by(ID, KIERUNEK_ID, JEDNOSTKA_ID, UCZELNIA_ID) %>% mutate(n = n()) %>% filter(n == 1) %>% select(-n) daneMS = wszystko %>% select(ID, KIERUNEK_ID, JEDNOSTKA_ID, UCZELNIA_ID, ID_ZDAU) %>% right_join(daneMS) stopifnot( nrow(daneMS) == nrow(wszystko), all(!is.na(daneMS$ID_ZDAU)) ) # odfiltruj osobników, którzy uzyskali dyplom w ostatnim miesiącu okresu wszystko = wszystko %>% filter(!is.na(NME)) daneMS = daneMS %>% semi_join(wszystko %>% select(ID_ZDAU)) load('cache/ZUS.RData') load('cache/utrataEtatu.RData') zdau = przygotuj_zdau() pnaPowiaty = polacz_pna_powiaty(przygotuj_pna(), przygotuj_powiaty(), '2014-01-01', '2015-03-31')
Porównując dane wyliczone przez MS i przeze mnie złączam je po kombinacji {ID, KIERUNEK_ID, JEDNOSTKA_ID, UCZELNIA_ID}.
Ponieważ kombinacja ta nie pozwala na unikalną identyfikację obserwacji w zbiorze absolwentów (ale też nie mamy do dyspozycji żadnego lepszego klucza podstawowego), obserwacje nieunikalne są wcześniej usuwane. Liczba usuniętych obserwacji wynosi r nUsun1
(r round(nUsun1 * 100 / nrow(daneMS), 2)
%), a więc można się nimi specjalnie nie przejmować.
Zmiennym liczonym "od miesiąca po uzyskaniu dyplomu do końca obserwacji" wyliczanym dla absolwentów, którzy uzyskali dyplom w miesiącu kończącym obserwację, MS przypisuje wartość 0, ja natomiast brak danych (wychodząc z założenia, że skoro okres opisywany przez te zmienne wychodzi poza "okienko obserwacji", to w ogóle nie da się ich policzyć).
Ponieważ jest to różnica systematyczna i globalna (niezwiązana ze sposobem wyliczania konkretnej zmiennej), obserwacje takie również zostały usunięte z porównania. Jest ich r nUsun2
(r round(nUsun2 * 100 / nrow(daneMS), 2)
%), a więc można się nimi specjalnie nie przejmować.
Funkcja porownaj(zbiorA, zbiorB, zmienna) (opcjonalnie porownaj(zbiorA, zbiorB, zmiennaWZbiorzeA, zmiennaWZbiorzeB), jeśli nazwy zmiennych różnią się między zbiorami) zwraca tablicę, w której:
porownaj(daneMS, wszystko, 'LEN1', 'LEN_P1') %>% group_by(d) %>% summarize(n = n())
round(quantile((porownaj(daneMS, wszystko, 'SZE'))$d, c(0, 0.001, 0.1, 0.9999, 0.99999, 1)), 1) porownaj(daneMS, wszystko, 'SZE') %>% filter(d > 1) %>% left_join(zus %>% filter(okres == koniec) %>% select(id, podst) %>% rename(ID = id))
Sprawa jest jasna, MS wlicza okres składkowy zgonu, a ja wykluczam (vide mail MB z 2016-01-02)
porownaj(daneMS, wszystko, 'NME') %>% group_by(d) %>% summarize(n = n())
Zgodność utracona po wyeliminowaniu ze zbioru ZUS składek dla miesięcy, w których absolwent zmarł. Tak więc prawdopodobnie MS wlicza te miesiące przy liczeniu NME.
porownaj(daneMS, wszystko, 'NMP') %>% group_by(d) %>% summarize(n = n())
porownaj(daneMS, wszystko, 'NMJ') %>% group_by(d) %>% summarize(n = n())
porownaj(daneMS, wszystko, 'NMM') %>% group_by(d) %>% summarize(n = n())
porownaj(daneMS, wszystko, 'NMS') %>% group_by(d) %>% summarize(n = n()) porownaj(daneMS, wszystko, 'NMS') %>% filter(d == 2) zdau %>% filter(id == 4828272) zus %>% filter(id == 4828272, okres >= 24174, samoz == 1) %>% select(okres) %>% distinct() %>% arrange(okres) zdau %>% filter(id == 198443994) zus %>% filter(id == 198443994, okres >= 24174, samoz == 1) %>% select(okres) %>% distinct() %>% arrange(okres)
Na losowo wybranych przykładach wydaje mi się, że liczę dobrze i nie mam pomysłu, skąd się wzięły wartości MS.
Wymaga dyskusji.
porownaj(daneMS, wszystko, 'NMB', 'NMB_V2') %>% group_by(d) %>% summarize(n = n()) porownaj(daneMS, wszystko, 'NMB', 'NMB_V2') %>% filter(d > 7) zus %>% filter(id == 15045163) %>% arrange(okres) %>% as.data.frame() %>% select(okres, etat, netat, samoz, bezrob, rentemer, student) # MS najwyraźniej nie wyklucza po rentemer porownaj(daneMS, wszystko, 'NMB', 'NMB_V2') %>% filter(d == 3) zus %>% filter(id == 221631525) %>% arrange(okres) %>% as.data.frame() %>% select(okres, etat, netat, samoz, bezrob, rentemer, student) # MS najwyraźniej nie wyklucza po samoz
Wygląda na to, że NMB wg MS to coś pomiędzy NMB opisnym przez MJ+MB (tylko po bezrob) a NMB_V2 opisanym przez MJ+MB (bezrob i żadno z etat, netat, samoz, rentemer, student)
porownaj(daneMS, wszystko, 'KONT') %>% group_by(d, is.na(a), is.na(b)) %>% summarize(n = n()) porownaj(daneMS, wszystko, 'KONT') %>% filter(d == -1) zdau %>% filter(id == 2019916) porownaj(daneMS, wszystko, 'KONT') %>% filter(d == -2) zdau %>% filter(id == 2040429)
Na losowo wybranych przykładach wydaje mi się, że liczę dobrze i nie mam pomysłu, skąd się wzięły wartości MS (nie tylko różnice w wartościach, ale też liczba braków danych u MS).
Wymaga dyskusji.
plot(density(na.exclude((porownaj(daneMS, wszystko, 'GBEZD'))$d), from = -10, to = 10)) porownaj(daneMS, wszystko, 'GBEZD') %>% group_by(abs(d) > 2, abs(d) > 1, abs(d) > 0.5, abs(d) > 0.1) %>% summarize(n = n()) %>% ungroup() %>% mutate(n_skum = cumsum(n), ods_skum = n_skum / sum(n)) porownaj(daneMS, wszystko, 'GBEZD') %>% filter(abs(d) > 30) zus %>% filter(id == 196758920) %>% select(okres, pna) %>% left_join(pnaPowiaty %>% select(pna, okres, powpbezd, powpbezd_sr))
Tutaj pole do rozbieżności jest szerokie, począwszy od sposobu identyfikacji powiatów (własne id PEJK-u versus TERYT), poprzez sposób agregacji/zastępowania przy niejednoznacznym mapowaniu PNA na powiat, skończywszy na jakichś drobniejszych różnicach.
Do dyskusji.
porownaj(daneMS, wszystko, 'NMLE') %>% group_by(d) %>% summarize(n = n()) %>% as.data.frame() porownaj(daneMS, wszystko, 'NMLE') %>% filter(d == 4) zdau %>% filter(id == 2020720) zus %>% filter(id == 2020720, okres > 24175) %>% select(id_platnika, okres, etat) %>% arrange(id_platnika, okres) %>% as.data.frame() utrataEtatu %>% filter(id == 2020720, utretatu == TRUE) %>% ungroup() %>%arrange(okres) porownaj(daneMS, wszystko, 'NMLE') %>% filter(d == -3) zdau %>% filter(id == 209459645) zus %>% filter(id == 209459645, okres >= 24173) %>% select(id_platnika, okres, etat) %>% arrange(id_platnika, okres) %>% as.data.frame() utrataEtatu %>% filter(id == 209459645, utretatu == TRUE) %>% ungroup() %>% arrange(okres)
Na losowo wybranych przykładach wydaje mi się, że liczę dobrze i nie mam pomysłu, skąd się wzięły wartości MS.
Wymaga dyskusji.
porownaj(daneMS, wszystko, 'CZASPRD') %>% group_by(d, is.na(a), is.na(b)) %>% summarize(n = n()) %>% as.data.frame() porownaj(daneMS, wszystko, 'CZASPRD') %>% filter(d == 3) zdau %>% filter(id == 2767003) zus %>% filter(id == 2767003, okres >= 24175) %>% arrange(id_platnika, okres) %>% select(id_platnika, okres, etat, netat, samoz) zdau %>% filter(id == 3618686) zus %>% filter(id == 3618686, okres >= 24172) %>% arrange(id_platnika, okres) %>% select(id_platnika, okres, etat, netat, samoz)
Czyżby MS pomijał pracę posiadaną w momencie uzyskania dyplomu? A może nie wlicza samozatrudnienia?
Wymaga dyskusji
porownaj(daneMS, wszystko, 'NMN') %>% group_by(d) %>% summarize(n = n()) porownaj(daneMS, wszystko, 'NMN') %>% filter(d == -3) zdau %>% filter(id == 2020720) zus %>% filter(id == 2020720, okres > 24175, netat == 1) %>% select(okres, netat, etat, samoz) %>% distinct() %>% arrange(okres) porownaj(daneMS, wszystko, 'NMN') %>% filter(d == -3, b == 11) zdau %>% filter(id == 9504381) zus %>% filter(id == 9504381, okres > 24172, netat == 1) %>% select(okres, netat, etat, samoz) %>% distinct() %>% arrange(okres)
Na losowo wybranych przykładach wydaje mi się, że liczę dobrze i nie mam pomysłu, skąd się wzięły wartości MS.
Wymaga dyskusji.
porownaj(daneMS, wszystko, 'NEM') %>% group_by(d) %>% summarize(n = n()) porownaj(daneMS, wszystko, 'NEM') %>% filter(d == 10) zdau %>% filter(id == 3377711) zus %>% filter(id == 3377711, okres > 24171, etat == 1) %>% select(okres, id_platnika, etat) %>% arrange(okres) %>% as.data.frame()
Wygląda na to, że w wypadku wielu rekordów od jednego pracodawcy w jednym okresie MS zliczał je oddzielnie, ja natomiast redukuję je do jednego "etatodacomiesiąca" dla danego okresu.
porownaj(daneMS, wszystko, 'NDE') %>% group_by(d) %>% summarize(n = n()) porownaj(daneMS, wszystko, 'NDE') %>% filter(d == 2) zdau %>% filter(id == 2760309) zus %>% filter(id == 2760309, etat == 1) %>% select(okres, id_platnika, etat) %>% distinct() %>% arrange(id_platnika, okres) zdau %>% filter(id == 193048437) zus %>% filter(id == 193048437, etat == 1) %>% select(okres, id_platnika, etat) %>% distinct() %>% arrange(id_platnika, okres)
Wygląda na to, że MS liczy NDE dla całego badanego okresu, a nie od pierwszego miesiąca po uzyskaniu dyplomu.
porownaj(daneMS, wszystko, 'NDN') %>% group_by(d) %>% summarize(n = n()) porownaj(daneMS, wszystko, 'NDN') %>% filter(d == 2) zdau %>% filter(id == 14237862) zus %>% filter(id == 14237862, netat == 1) %>% select(okres, id_platnika, netat) %>% distinct() %>% arrange(id_platnika, okres) zdau %>% filter(id == 190210781) zus %>% filter(id == 190210781, netat == 1) %>% select(okres, id_platnika, netat) %>% distinct() %>% arrange(id_platnika, okres)
Wygląda na to, że MS liczy NDN dla całego badanego okresu, a nie od pierwszego miesiąca po uzyskaniu dyplomu.
porownaj(daneMS, wszystko, 'NNNN1', 'NNNN_P1') %>% group_by(d) %>% summarize(n = n()) porownaj(daneMS, wszystko, 'NNNN1', 'NNNN_P1') %>% filter(d == 1) zdau %>% filter(id == 2031468) zus %>% filter(id == 2031468) %>% select(okres, id_platnika, netat) %>% distinct() %>% arrange(id_platnika, okres) zdau %>% filter(id == 2209367) zus %>% filter(id == 2209367) %>% select(okres, id_platnika, netat) %>% distinct() %>% arrange(id_platnika, okres)
MS najwyraźniej liczy pracodawcę jako znanego jeśli zatrudniał on wcześniej absolwenta na netat, ja natomiast dostałem informację, że "znaność" pracodawcy należy wyliczać bez względu na formę zatrudnienia.
porownaj(daneMS, wszystko, 'NNDN1', 'NNDN_P1') %>% group_by(d) %>% summarize(n = n()) porownaj(daneMS, wszystko, 'NNDN1', 'NNDN_P1') %>% filter(d == -2) zdau %>% filter(id == 2840128) zus %>% filter(id == 2840128) %>% select(okres, id_platnika, etat) %>% distinct() %>% arrange(id_platnika, okres) zdau %>% filter(id == 14183396) zus %>% filter(id == 14183396) %>% select(okres, id_platnika, etat) %>% distinct() %>% arrange(id_platnika, okres) %>% as.data.frame()
Na losowo wybranych przykładach wydaje mi się, że liczę dobrze i nie mam pomysłu, skąd się wzięły wartości MS.
Wymaga dyskusji.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.