library(haven)
escuelas <- read_sas("CY08MSP_SCH_QQQ.SAS7BDAT", NULL)
View(escuelas)
tabla_frecuencias <- table(escuelas$CNT)
print(tabla_frecuencias)
## 
## ALB ARE ARG AUS AUT BEL BGR BRA BRN CAN CHE CHL COL CRI CZE DEU DNK DOM ESP EST 
## 274 840 457 743 302 285 202 598  54 863 260 230 262 198 430 257 347 253 966 196 
## FIN FRA GBR GEO GRC GTM HKG HRV HUN IDN IRL ISL ISR ITA JAM JOR JPN KAZ KHM KOR 
## 241 282 451 267 230 290 163 180 262 410 170 134 193 344 147 260 182 571 183 186 
## KSV LTU LVA MAC MAR MDA MEX MKD MLT MNE MNG MYS NLD NOR NZL PAN PER PHL POL PRT 
## 229 292 225  46 178 265 280 111  46  63 195 199 154 265 169 215 336 188 240 224 
## PRY PSE QAT QAZ QUR ROU SAU SGP SLV SRB SVK SVN SWE TAP THA TUR URY USA UZB VNM 
## 281 273 229 199 164 262 193 164 290 183 288 345 262 182 279 196 222 154 202 178
df <- as.data.frame(tabla_frecuencias)
colnames(df) = c("iso_a3","Frecuencia")

# Ver la matriz de frecuencias
print(df)
##    iso_a3 Frecuencia
## 1     ALB        274
## 2     ARE        840
## 3     ARG        457
## 4     AUS        743
## 5     AUT        302
## 6     BEL        285
## 7     BGR        202
## 8     BRA        598
## 9     BRN         54
## 10    CAN        863
## 11    CHE        260
## 12    CHL        230
## 13    COL        262
## 14    CRI        198
## 15    CZE        430
## 16    DEU        257
## 17    DNK        347
## 18    DOM        253
## 19    ESP        966
## 20    EST        196
## 21    FIN        241
## 22    FRA        282
## 23    GBR        451
## 24    GEO        267
## 25    GRC        230
## 26    GTM        290
## 27    HKG        163
## 28    HRV        180
## 29    HUN        262
## 30    IDN        410
## 31    IRL        170
## 32    ISL        134
## 33    ISR        193
## 34    ITA        344
## 35    JAM        147
## 36    JOR        260
## 37    JPN        182
## 38    KAZ        571
## 39    KHM        183
## 40    KOR        186
## 41    KSV        229
## 42    LTU        292
## 43    LVA        225
## 44    MAC         46
## 45    MAR        178
## 46    MDA        265
## 47    MEX        280
## 48    MKD        111
## 49    MLT         46
## 50    MNE         63
## 51    MNG        195
## 52    MYS        199
## 53    NLD        154
## 54    NOR        265
## 55    NZL        169
## 56    PAN        215
## 57    PER        336
## 58    PHL        188
## 59    POL        240
## 60    PRT        224
## 61    PRY        281
## 62    PSE        273
## 63    QAT        229
## 64    QAZ        199
## 65    QUR        164
## 66    ROU        262
## 67    SAU        193
## 68    SGP        164
## 69    SLV        290
## 70    SRB        183
## 71    SVK        288
## 72    SVN        345
## 73    SWE        262
## 74    TAP        182
## 75    THA        279
## 76    TUR        196
## 77    URY        222
## 78    USA        154
## 79    UZB        202
## 80    VNM        178
world <- ne_countries(scale = "medium", returnclass = "sf")
world_datos <- world %>%
  left_join(df, by = "iso_a3") %>% #O el nombre correcto de tu columna
  mutate(Frecuencia = ifelse(is.na(Frecuencia), 0, Frecuencia))

ggplot(data = world_datos) +
  geom_sf(aes(fill = Frecuencia)) +
  scale_fill_gradient(low = "white", high = "red") +
  theme_minimal() +
  labs(title = "Valores por país (número escuelas)", fill = "Frecuencia")

load("estudiantesPISAfiltrados.R")
estudiantes <- datosPisaEstudiantes_filtrado
rm(datosPisaEstudiantes_filtrado)

tabla_frecuencias.es <- table(estudiantes$CNT)
print(tabla_frecuencias.es)
## 
##   ALB   ARE   ARG   AUS   AUT   BEL   BGR   BRA   BRN   CAN   CHE   CHL   COL 
##  5087 22717 11274 12974  6012  7810  5616  9868  5535 20405  6710  5716  7342 
##   CRI   CZE   DEU   DNK   DOM   ESP   EST   FIN   FRA   GBR   GEO   GRC   HKG 
##  5284  8268  5336  5757  6403 29727  6300  9889  6559 11345  5946  6282  5630 
##   HRV   HUN   IDN   IRL   ISL   ISR   ITA   JAM   JOR   JPN   KAZ   KOR   KSV 
##  6054  6021 13253  5532  3169  5868 10455  3535  7283  5735 19688  6388  5582 
##   LTU   LVA   MAC   MAR   MDA   MEX   MKD   MLT   MNE   MNG   MYS   NLD   NOR 
##  7118  5221  4381  6684  6102  6229  6150  2957  5585  6950  6984  4722  6186 
##   NZL   PAN   PER   PHL   POL   PRT   PSE   QAT   QAZ   QUR   ROU   SAU   SGP 
##  4481  3897  6810  7118  5901  6683  7408  6876  6539  3597  7233  6630  6564 
##   SLV   SRB   SVK   SVN   SWE   TAP   THA   TUR   URY   USA   UZB 
##  6261  6297  5586  6429  5868  5795  8410  7238  6297  4100  7066
df.es <- as.data.frame(tabla_frecuencias.es)
colnames(df.es) = c("iso_a3","Frecuencia.es")
world_datos <- world %>%
  left_join(df.es, by = "iso_a3") %>% #O el nombre correcto de tu columna
  mutate(Frecuencia.es = ifelse(is.na(Frecuencia.es), 0, Frecuencia.es))

ggplot(data = world_datos) +
  geom_sf(aes(fill = Frecuencia.es)) +
  scale_fill_gradient2(low = "white", high = "red") +
  theme_minimal() +
  labs(title = "Valores por país (número estudiantes)", fill = "Frecuencia")

conteo <- escuelas %>%
  group_by(CNT, SC013Q01TA) %>%
  summarise(cantidad = n(), .groups = "drop")

library(tidyr)

# Pivotear el conteo para tener SC013Q01TA como columnas
conteo_2 <- conteo %>%
  pivot_wider(
    names_from = SC013Q01TA,  # Los valores que quieres como nombres de columna
    values_from = cantidad,   # Los valores que irán en las celdas
    values_fill = 0           # Opcional: rellena los NA con 0
  )
conteo_df = as.data.frame(conteo_2)
colnames(conteo_df) = c("país", "publica", "privada", "sin_datos")
conteo_df$total <- conteo_df$publica + conteo_df$privada + conteo_df$sin_datos

tipo_es_por = data.frame(
  iso_a3 = conteo_df$país,
  publica_relativa = conteo_df$publica / conteo_df$total,
  privada_relativa = conteo_df$privada / conteo_df$total,
  sin_datos_relativa = conteo_df$sin_datos / conteo_df$total
)

tipo_es_por
##    iso_a3 publica_relativa privada_relativa sin_datos_relativa
## 1     ALB        0.8613139      0.113138686        0.025547445
## 2     ARE        0.2964286      0.583333333        0.120238095
## 3     ARG        0.6630197      0.315098468        0.021881838
## 4     AUS        0.5208614      0.397039031        0.082099596
## 5     AUT        0.8344371      0.129139073        0.036423841
## 6     BEL        0.1368421      0.217543860        0.645614035
## 7     BGR        0.9158416      0.024752475        0.059405941
## 8     BRA        0.7424749      0.105351171        0.152173913
## 9     BRN        0.7407407      0.259259259        0.000000000
## 10    CAN        0.8690614      0.064889919        0.066048667
## 11    CHE        0.8423077      0.065384615        0.092307692
## 12    CHL        0.3304348      0.639130435        0.030434783
## 13    COL        0.7404580      0.213740458        0.045801527
## 14    CRI        0.7424242      0.146464646        0.111111111
## 15    CZE        0.8953488      0.102325581        0.002325581
## 16    DEU        0.7859922      0.035019455        0.178988327
## 17    DNK        0.6916427      0.207492795        0.100864553
## 18    DOM        0.6007905      0.154150198        0.245059289
## 19    ESP        0.5962733      0.347826087        0.055900621
## 20    EST        0.9336735      0.066326531        0.000000000
## 21    FIN        0.9253112      0.070539419        0.004149378
## 22    FRA        0.7163121      0.191489362        0.092198582
## 23    GBR        0.6274945      0.310421286        0.062084257
## 24    GEO        0.8801498      0.112359551        0.007490637
## 25    GRC        0.9000000      0.056521739        0.043478261
## 26    GTM        0.4620690      0.493103448        0.044827586
## 27    HKG        0.0797546      0.650306748        0.269938650
## 28    HRV        0.9666667      0.027777778        0.005555556
## 29    HUN        0.6564885      0.232824427        0.110687023
## 30    IDN        0.5780488      0.421951220        0.000000000
## 31    IRL        0.0000000      0.000000000        1.000000000
## 32    ISL        0.0000000      0.000000000        1.000000000
## 33    ISR        0.0000000      0.000000000        1.000000000
## 34    ITA        0.8197674      0.139534884        0.040697674
## 35    JAM        0.6598639      0.088435374        0.251700680
## 36    JOR        0.8307692      0.169230769        0.000000000
## 37    JPN        0.7142857      0.285714286        0.000000000
## 38    KAZ        0.9211909      0.078809107        0.000000000
## 39    KHM        0.9398907      0.060109290        0.000000000
## 40    KOR        0.6451613      0.354838710        0.000000000
## 41    KSV        0.8253275      0.061135371        0.113537118
## 42    LTU        0.9486301      0.044520548        0.006849315
## 43    LVA        0.9022222      0.017777778        0.080000000
## 44    MAC        0.0000000      0.000000000        1.000000000
## 45    MAR        0.8764045      0.117977528        0.005617978
## 46    MDA        0.9811321      0.015094340        0.003773585
## 47    MEX        0.8535714      0.146428571        0.000000000
## 48    MKD        0.9009009      0.063063063        0.036036036
## 49    MLT        0.3043478      0.586956522        0.108695652
## 50    MNE        0.0000000      0.000000000        1.000000000
## 51    MNG        0.8717949      0.128205128        0.000000000
## 52    MYS        0.9246231      0.075376884        0.000000000
## 53    NLD        0.3896104      0.448051948        0.162337662
## 54    NOR        0.0000000      0.000000000        1.000000000
## 55    NZL        0.9349112      0.065088757        0.000000000
## 56    PAN        0.6046512      0.144186047        0.251162791
## 57    PER        0.7321429      0.267857143        0.000000000
## 58    PHL        0.8138298      0.186170213        0.000000000
## 59    POL        0.9208333      0.079166667        0.000000000
## 60    PRT        0.8348214      0.165178571        0.000000000
## 61    PRY        0.7971530      0.185053381        0.017793594
## 62    PSE        0.9413919      0.058608059        0.000000000
## 63    QAT        0.4890830      0.510917031        0.000000000
## 64    QAZ        0.6884422      0.010050251        0.301507538
## 65    QUR        0.9695122      0.024390244        0.006097561
## 66    ROU        0.9732824      0.007633588        0.019083969
## 67    SAU        0.7823834      0.212435233        0.005181347
## 68    SGP        0.9085366      0.091463415        0.000000000
## 69    SLV        0.7551724      0.189655172        0.055172414
## 70    SRB        0.9672131      0.032786885        0.000000000
## 71    SVK        0.8680556      0.100694444        0.031250000
## 72    SVN        0.9391304      0.017391304        0.043478261
## 73    SWE        0.0000000      0.000000000        1.000000000
## 74    TAP        0.7087912      0.291208791        0.000000000
## 75    THA        0.8602151      0.139784946        0.000000000
## 76    TUR        0.8724490      0.122448980        0.005102041
## 77    URY        0.8423423      0.157657658        0.000000000
## 78    USA        0.9220779      0.025974026        0.051948052
## 79    UZB        0.9950495      0.004950495        0.000000000
## 80    VNM        0.9157303      0.073033708        0.011235955
world_datos <- world %>%
  left_join(tipo_es_por, by = "iso_a3")

ggplot(data = world_datos) +
  geom_sf(aes(fill = sin_datos_relativa)) +
  scale_fill_gradient(low = "white", high = "red", na.value = NA) + theme_minimal() +
  labs(title = "Valores por país (número estudiantes)", fill = "Frecuencia")

paises_faltantes_25 <- subset(tipo_es_por, sin_datos_relativa > 0.25)
print(paises_faltantes_25)
##    iso_a3 publica_relativa privada_relativa sin_datos_relativa
## 6     BEL        0.1368421       0.21754386          0.6456140
## 27    HKG        0.0797546       0.65030675          0.2699387
## 31    IRL        0.0000000       0.00000000          1.0000000
## 32    ISL        0.0000000       0.00000000          1.0000000
## 33    ISR        0.0000000       0.00000000          1.0000000
## 35    JAM        0.6598639       0.08843537          0.2517007
## 44    MAC        0.0000000       0.00000000          1.0000000
## 50    MNE        0.0000000       0.00000000          1.0000000
## 54    NOR        0.0000000       0.00000000          1.0000000
## 56    PAN        0.6046512       0.14418605          0.2511628
## 64    QAZ        0.6884422       0.01005025          0.3015075
## 73    SWE        0.0000000       0.00000000          1.0000000
tipo_escuela <- tipo_es_por %>% anti_join(paises_faltantes_25, by = "iso_a3")
colnames(tipo_escuela) <- c("CNT", "publica", "privada", "sin_datos")

table(estudiantes$ST004D01T)
## 
##      1      2 
## 283078 279561
resultados <- estudiantes %>%
  group_by(CNT, ST004D01T) %>%
  summarise(cantidad = n(), .groups = "drop_last") %>% # Usamos drop_last para mantener el grupo CNT
  mutate(frecuencia_relativa = cantidad / sum(cantidad)) 
colnames(resultados) = c("CNT", "Gender", "cantidad", "frecuencia_relativa")

NotasPlausibles = estudiantes %>%
  select(matches("^PV|^CNT$|^CNTSCHID$|^ST004D01T$"))
NotasMedias = NotasPlausibles %>% transmute(CNT = NotasPlausibles$CNT,
                                        CNTSCHID = NotasPlausibles$CNTSCHID,
                                        Gender = NotasPlausibles$ST004D01T,
                                        MathMean = rowMeans(NotasPlausibles[,3:12]),
                                        LectureMean = rowMeans(NotasPlausibles[,13:22]),
                                        ScienceMean = rowMeans(NotasPlausibles[,23:32]))

NotasMediasPaisGenero = NotasMedias %>% group_by(CNT,Gender) %>% summarise(
  MathMean_Country = mean(MathMean, na.rm = TRUE),
  LectureMean_Country = mean(LectureMean, na.rm = TRUE),
  ScienceMean_Country = mean(ScienceMean, na.rm = TRUE), .groups = "drop")

NotasMediasPaisGenero <- NotasMediasPaisGenero[complete.cases(NotasMediasPaisGenero), ]

resultados_temp <- resultados %>%
  select(CNT, Gender, frecuencia_relativa)

NotasMediasPaisGenero <- NotasMediasPaisGenero %>%
  left_join(resultados_temp, by = c("CNT","Gender"))

NotasMediasPaisGenero$TotalMean = rowMeans(NotasMediasPaisGenero[,3:5])

NotasMediasPaisGenero <- NotasMediasPaisGenero %>%
  relocate(frecuencia_relativa, .after = Gender)

NotasMediasPaisGenero %>%
  group_by(Gender) %>%
  summarise(MediaGlobal_TotalMean = mean(TotalMean, na.rm = TRUE))
## # A tibble: 2 × 2
##   Gender MediaGlobal_TotalMean
##    <dbl>                 <dbl>
## 1      1                  436.
## 2      2                  429.