# Aan de slag met staat1cho

## Wat doet dit package?

`staat1cho` berekent vier studie-indicatoren per instroomcohort op basis van de 1CHO-aanlevering van DUO:

- Instroom: nieuwe studenten per cohortjaar
- Rendement: diploma behaald binnen 3, 5 of 8 jaar
- Uitval: student uitgeschreven zonder diploma binnen 1 of 3 jaar
- Studiewissel: student gewisseld van opleiding binnen 1 of 3 jaar

## De pipeline

De functies werken in vaste volgorde. Elke stap bouwt voort op de vorige.

    maak_basisbestand()
        └── maak_instroom_cohort()  ──┐
        └── maak_diploma_behaald()  ──┼── bereken_rendement()   ──┐
                                      ├── bereken_uitval()       ──┼── combineer_indicatoren()
                                      └── bereken_studiewissel() ──┘

## Voorbeeld met synthetische data

In productie begint de pipeline met `maak_basisbestand()`, die het 1CHO CSV-bestand inleest. Hier bouwen we een minibestand handmatig om de stappen te laten zien.

    library(tibble)

    ## Drie studenten, twee cohortjaren
    ## S1: behaalt diploma in 2022 (binnen 3 jaar na instroom 2020)
    ## S2: valt uit na 1 jaar (verschijnt alleen in 2020)
    ## S3: wisselt opleiding na 1 jaar (andere opleidingscode in 2021)

    hoofd <- "hoofdinschrijving binnen het domein actuele instelling"
    bachelor_diploma <- "Hoofd-bachelor-diploma binnen de actuele instelling"

    basisbestand <- tibble(
      persoonsgebonden_nummer = c("S1", "S1", "S2", "S3", "S3"),
      inschrijvingsjaar       = c(2020L, 2021L, 2020L, 2020L, 2021L),
      verblijfsjaar_actuele_instelling = c(1L, 2L, 1L, 1L, 2L),
      soort_hoger_onderwijs   = "hbo",
      soort_inschrijving_actuele_instelling = hoofd,
      soort_inschrijving_actuele_instelling_label = hoofd,
      diplomajaar             = c(NA_integer_, 2022L, NA_integer_, NA_integer_, NA_integer_),
      soort_diploma_instelling = c(NA, bachelor_diploma, NA, NA, NA),
      soort_diploma_instelling_label = c(NA, bachelor_diploma, NA, NA, NA),
      geslacht_label = "man",
      opleidingsvorm = "voltijd",
      opleidingsvorm_label = "voltijd",
      indicatie_internationale_student_label = "geen internationale student",
      indicatie_eer_actueel_label = "geen EER-student",
      croho_onderdeel_actuele_opleiding = "techniek",
      croho_onderdeel_actuele_opleiding_label = "techniek",
      opleiding_actueel_equivalent = c("34401", "34401", "34401", "34401", "39999"),
      type_hoger_onderwijs_binnen_soort_hoger_onderwijs = "ba",
      leeftijd_per_peildatum_1_oktober = 19L,
      postcodecijfers_student_op_1_oktober = "4818",
      postcodecijfers_van_de_hoogste_vooropl_voor_het_ho = "4818",
      locatie_label = "Breda"
    )

### Stap 1: instroomcohort

`maak_instroom_cohort()` filtert op nieuwe eerstejaarsstudenten. Studenten die al eerder waren ingeschreven (verblijfsjaar > 1) vallen af.

    cohorten <- maak_instroom_cohort(basisbestand, soort_ho = "hbo")
    cohorten[, c("persoonsgebonden_nummer", "inschrijvingsjaar", "eerstejaar_instelling")]
    #> # A tibble: 3 × 3
    #>   persoonsgebonden_nummer inschrijvingsjaar eerstejaar_instelling
    #>   <chr>                               <int>                 <int>
    #> 1 S1                                   2020                  2020
    #> 2 S2                                   2020                  2020
    #> 3 S3                                   2020                  2020

### Stap 2: diploma bepalen

`maak_diploma_behaald()` zoekt het vroegste diploma per student.

    diploma <- maak_diploma_behaald(basisbestand)
    diploma
    #> # A tibble: 1 × 4
    #>   persoonsgebonden_nummer jaar_eerste_diploma verblijfsjaar_eerste_dip…¹ diploma
    #>   <chr>                                 <int>                      <int> <chr>
    #> 1 S1                                     2022                          2 Diplom…
    #> # ℹ abbreviated name: ¹​verblijfsjaar_eerste_diploma

S1 heeft een diploma in 2022, S2 en S3 niet.

### Stap 3: rendement

`bereken_rendement()` berekent of een student binnen 3, 5 of 8 jaar een diploma heeft behaald.

    rendement <- bereken_rendement(cohorten, diploma)
    rendement[, c("persoonsgebonden_nummer", "rendement_3jr", "rendement_5jr", "rendement_8jr")]
    #> # A tibble: 3 × 4
    #>   persoonsgebonden_nummer rendement_3jr         rendement_5jr      rendement_8jr
    #>   <chr>                   <fct>                 <fct>              <fct>
    #> 1 S1                      Diploma binnen 3 jaar Diploma binnen 5 … Diploma binn…
    #> 2 S2                      Geen diploma          Geen diploma       Geen diploma
    #> 3 S3                      Geen diploma          Geen diploma       Geen diploma

### Stap 4: uitval

`bereken_uitval()` bepaalt de status van elke student: diploma behaald, zittend, of uitgevallen.

    ## peiljaar = het jaar na het laatste jaar in de data
    uitval <- bereken_uitval(basisbestand, diploma, cohorten, jaar = 2023L)
    uitval[, c("persoonsgebonden_nummer", "status", "uitval_1jr", "uitval_3jr")]
    #> # A tibble: 3 × 4
    #>   persoonsgebonden_nummer status          uitval_1jr                  uitval_3jr
    #>   <chr>                   <fct>           <fct>                       <fct>
    #> 1 S1                      Diploma behaald Na 1 jaar nog ingeschreven… Na 3 jaar…
    #> 2 S2                      Uitgevallen     Uitgevallen binnen 1 jaar   Uitgevall…
    #> 3 S3                      Uitgevallen     Na 1 jaar nog ingeschreven… Uitgevall…

### Stap 5: studiewissel

`bereken_studiewissel()` detecteert of een student binnen 1 of 3 jaar van opleiding is gewisseld.

    wissel <- bereken_studiewissel(basisbestand, cohorten, diploma, uitval)
    wissel[, c("persoonsgebonden_nummer", "studiewissel_1jr", "studiewissel_3jr")]
    #> # A tibble: 3 × 3
    #>   persoonsgebonden_nummer studiewissel_1jr             studiewissel_3jr
    #>   <chr>                   <fct>                        <fct>
    #> 1 S1                      Niet gewisseld binnen 1 jaar Geen switch bepaald
    #> 2 S2                      Geen switch bepaald          Geen switch bepaald
    #> 3 S3                      Gewisseld binnen 1 jaar      Geen switch bepaald

### Stap 6: combineren

`combineer_indicatoren()` voegt alle stappen samen tot één analysebestand.

    indicatoren <- combineer_indicatoren(cohorten, rendement, uitval, wissel)
    indicatoren[, c("inschrijvingsjaar", "opleidingscode", "status", "rendement", "uitval", "studiewissel")]
    #> # A tibble: 3 × 6
    #>   inschrijvingsjaar opleidingscode status          rendement uitval studiewissel
    #>               <int> <fct>          <fct>           <chr>     <chr>  <chr>
    #> 1              2020 34401          Diploma behaald Diploma … Niet … Niet gewiss…
    #> 2              2020 34401          Uitgevallen     Geen dip… Uitge… Niet gewiss…
    #> 3              2020 34401          Uitgevallen     Geen dip… Uitge… Gewisseld b…

## Dashboard

Voor interactieve verkenning van de data kun je het dashboard starten:

    start_dashboard()

Het dashboard vraagt om een 1CHO CSV-bestand en berekent automatisch alle indicatoren. Vanuit het dashboard kun je filteren op jaar, locatie, sector en opleiding, en de gefilterde data downloaden als CSV.