baza_df <- import("baza.xlsx")
baza_df <- clean_names(baza_df)

1. Strip plot sa prosekom ± SD po danima u nedelji

2. Strip plot sa prosekom ± SD po satima u danu

3. Strip plot sa prosekom ± SD po mesecima u godini

4. Heatmapa sa apsolutnim vrednostima

## `summarise()` has grouped output by 'DanBaze'. You can override using the
## `.groups` argument.

4.a.

Izokrenuta heat mapa sirov skor

## png 
##   3

5. Heatmapa sa kategorijskim vrednostima

Izokrenuta heat mapa kategorija

## png 
##   3

6. Histogram sirovih NEDOCS vrednosti

7. Histogram sirovih NEDOCS vrednosti

8. 7-day average —proveri

## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: Removed 6 rows containing missing values or values outside the scale range
## (`geom_line()`).

9. Dani sa najvecim NEDOCs skoroma

## ### Dani sa najvećim prosečnim NEDOCS skorom
Top 10 dana sa najvišim NEDOCS skorom
Datum srednji_nedocs
2022-10-11 70.2
2023-02-24 67.8
2022-11-29 67.1
2022-10-25 65.8
2022-06-07 65.2
2022-04-26 64.3
2022-05-24 63.9
2023-03-21 63.9
2022-12-27 63.7
2023-03-31 63.4
## 
## 
## ### Dani sa najmanjim prosečnim NEDOCS skorom
Dani sa najmanjim prosečnim NEDOCS skorom
Datum srednji_nedocs
2023-04-09 2.7
2023-04-08 3.2
2023-04-07 4.0
2023-04-10 13.5
2023-02-15 14.2
2023-04-06 18.3
2022-07-20 19.4
2022-07-13 20.2
2022-08-24 21.0
2022-05-11 21.3

Dani i sati sa skorovima 5 i 6

### Trenuci sa kategorijom 6! (Katastrofalna gužva)
Datum Dan Sat_pocetak
2022-04-30 Saturday 11
2022-05-24 Tuesday 8
2022-05-24 Tuesday 9
2022-06-07 Tuesday 11
2022-07-14 Thursday 11
2022-09-14 Wednesday 7
2022-09-15 Thursday 10
2022-09-27 Tuesday 13
2022-09-29 Thursday 14
2022-10-09 Sunday 13
2022-10-17 Monday 9
2022-10-25 Tuesday 9
2022-11-29 Tuesday 10
2022-12-11 Sunday 13
2022-12-27 Tuesday 9
2023-01-03 Tuesday 11
2023-01-08 Sunday 13
2023-01-19 Thursday 13
2023-02-08 Wednesday 11
2023-02-09 Thursday 14
2023-02-14 Tuesday 19

Table:

Trenuci sa kategorijom 5 (Ekstremna gužva)

Datum Dan Sat_pocetak
2022-04-13 Wednesday 14
2022-04-13 Wednesday 15
2022-04-18 Monday 7
2022-04-18 Monday 11
2022-04-23 Saturday 18
2022-04-26 Tuesday 15
2022-04-30 Saturday 10
2022-05-16 Monday 8
2022-05-27 Friday 9
2022-06-07 Tuesday 21
2022-06-10 Friday 12
2022-06-14 Tuesday 11
2022-06-24 Friday 9
2022-06-28 Tuesday 10
2022-06-29 Wednesday 8
2022-07-03 Sunday 11
2022-07-04 Monday 8
2022-07-05 Tuesday 9
2022-07-07 Thursday 10
2022-07-12 Tuesday 9
2022-07-16 Saturday 10
2022-07-22 Friday 9
2022-07-29 Friday 20
2022-08-03 Wednesday 10
2022-08-04 Thursday 15
2022-08-05 Friday 17
2022-08-11 Thursday 16
2022-08-30 Tuesday 11
2022-09-09 Friday 7
2022-09-19 Monday 9
2022-09-20 Tuesday 12
2022-09-26 Monday 12
2022-10-01 Saturday 20
2022-10-05 Wednesday 14
2022-10-10 Monday 12
2022-10-11 Tuesday 13
2022-10-11 Tuesday 16
2022-10-12 Wednesday 10
2022-10-21 Friday 8
2022-10-24 Monday 8
2022-10-25 Tuesday 18
2022-11-04 Friday 8
2022-11-08 Tuesday 8
2022-11-08 Tuesday 16
2022-11-15 Tuesday 8
2022-11-16 Wednesday 9
2022-11-17 Thursday 13
2022-11-21 Monday 12
2022-11-24 Thursday 11
2022-11-25 Friday 8
2022-11-28 Monday 9
2022-11-28 Monday 11
2022-11-29 Tuesday 13
2022-11-30 Wednesday 8
2022-12-05 Monday 17
2022-12-16 Friday 9
2022-12-28 Wednesday 7
2023-01-11 Wednesday 8
2023-01-12 Thursday 13
2023-01-31 Tuesday 13
2023-02-02 Thursday 10
2023-02-03 Friday 11
2023-02-08 Wednesday 9
2023-02-08 Wednesday 10
2023-02-17 Friday 8
2023-02-28 Tuesday 10
2023-03-02 Thursday 8
2023-03-02 Thursday 9
2023-03-03 Friday 8
2023-03-08 Wednesday 10
2023-03-13 Monday 8
2023-03-16 Thursday 9
2023-03-21 Tuesday 15
2023-03-22 Wednesday 9
2023-03-27 Monday 10
2023-04-03 Monday 8

10. Trend analiza

10a Decompozicija trenda

10b Dekompozicija trenda

## Registered S3 method overwritten by 'tsibble':
##   method               from 
##   as_tibble.grouped_df dplyr
## 
## Attaching package: 'tsibble'
## The following object is masked from 'package:zoo':
## 
##     index
## The following object is masked from 'package:lubridate':
## 
##     interval
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, union
## Loading required package: fabletools

10c Remainder

original = trend + seasonal + remainder

##               datetime remainder
## 1  2022-09-14 07:00:00  136.2044
## 2  2023-01-08 13:00:00  132.0216
## 3  2022-07-14 11:00:00  127.3560
## 4  2022-10-09 13:00:00  125.5390
## 5  2022-09-29 14:00:00  124.9093
## 6  2023-02-14 19:00:00  117.3846
## 7  2022-07-29 20:00:00  116.4408
## 8  2022-12-11 13:00:00  115.1490
## 9  2023-02-08 11:00:00  114.9995
## 10 2023-01-03 11:00:00  113.7423
## 11 2022-04-30 11:00:00  113.3940
## 12 2023-02-09 14:00:00  113.3481
## 13 2023-01-19 13:00:00  112.9615
## 14 2022-09-15 10:00:00  106.5487
## 15 2022-09-26 12:00:00  105.3690
## 16 2022-11-29 10:00:00  103.1678
## 17 2022-08-03 10:00:00  102.7484
## 18 2022-09-27 13:00:00  102.1118
## 19 2022-12-27 09:00:00  100.1917
## 20 2022-05-24 09:00:00  100.1308
## # A tibble: 13 × 5
##    datum        sat remainder sat_next remainder_next
##    <date>     <int>     <dbl>    <int>          <dbl>
##  1 2022-04-13    14      93.2       15           97.3
##  2 2022-04-30    10      87.1       11          113. 
##  3 2022-05-24     8      95.1        9          100. 
##  4 2022-06-29     8      86.8        9           57.3
##  5 2022-10-18    18      55.5       19           59.0
##  6 2022-10-18    19      59.0       20           56.9
##  7 2022-11-09     7      54.0        8           69.0
##  8 2022-11-30     7      51.1        8           69.5
##  9 2023-02-03    11      63.2       12           53.4
## 10 2023-02-08     9      70.8       10           86.7
## 11 2023-02-08    10      86.7       11          115. 
## 12 2023-03-02     8      74.0        9           64.4
## 13 2023-03-22     8      56.8        9           67.9
Incidentni sati
datum sat remainder sat_next remainder_next
2022-04-13 14 93.2 15 97.3
2022-04-30 10 87.1 11 113.4
2022-05-24 8 95.1 9 100.1
2022-06-29 8 86.8 9 57.3
2022-10-18 18 55.5 19 59.0
2022-10-18 19 59.0 20 56.9
2022-11-09 7 54.0 8 69.0
2022-11-30 7 51.1 8 69.5
2023-02-03 11 63.2 12 53.4
2023-02-08 9 70.8 10 86.7
2023-02-08 10 86.7 11 115.0
2023-03-02 8 74.0 9 64.4
2023-03-22 8 56.8 9 67.9

11. Kategorije

11.1. Po satima

11.2. Po danima

11.3. Po nedeljama

11.4. Po mesecima

12. Mortalitet

Smrtni slučajevi po NEDOCS kategorijama sa ukupnim sumama
nedocs_kategorija broj_sati broj_smrtnih smrtnost_na_1000_sati
1 2652 73 27.53
2 3413 118 34.57
3 2205 87 39.46
4 393 14 35.62
5 76 2 26.32
6 21 2 95.24
Ukupno 8760 296 33.79
Smrtni slučajevi po NEDOCS kategorijama sa ukupnim sumama i maksimalnim brojem umrlih
nedocs_kategorija broj_sati broj_smrtnih maksimalni_broj_umrlih smrtnost_na_1000_sati
1 2652 73 1 27.53
2 3413 118 2 34.57
3 2205 87 2 39.46
4 393 14 1 35.62
5 76 2 1 26.32
6 21 2 1 95.24
Ukupno 8760 296 2 33.79

12.1. Da li smrt prethodi ili ishodi NEDOCsu

## Waiting for profiling to be done...
## Waiting for profiling to be done...
## Waiting for profiling to be done...
## Waiting for profiling to be done...
Relativni rizici sa 95% intervalima poverenja za lag/lead modele
model RR CI_low CI_high p_value
nedocs_lag1 lag1 1.0029 0.9997 1.0061 0.0748
nedocs_lag2 lag2 1.0032 1.0000 1.0064 0.0456
nedocs_lead1 lead1 1.0045 1.0013 1.0076 0.0048
nedocs_lead2 lead2 1.0016 0.9984 1.0048 0.3231
## 
## Call:
## lm(formula = final_nedocs_korigovano ~ broj_umrlih_lag1, data = baza_df)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -50.100 -30.223  -1.528  22.277 155.565 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)       44.4352     0.3752 118.439  < 2e-16 ***
## broj_umrlih_lag1   5.6646     2.0072   2.822  0.00478 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 34.53 on 8757 degrees of freedom
##   (1 observation deleted due to missingness)
## Multiple R-squared:  0.0009086,  Adjusted R-squared:  0.0007945 
## F-statistic: 7.964 on 1 and 8757 DF,  p-value: 0.004782
##    2.5 %   97.5 % 
## 1.729943 9.599252

Kategorije

## Call:
## polr(formula = nedocs_kategorija_lead1 ~ broj_umrlih_kojima_su_otvoreni_kartoni_u_toku_24h, 
##     data = baza_df, Hess = TRUE)
## 
## Coefficients:
##                                                    Value Std. Error t value
## broj_umrlih_kojima_su_otvoreni_kartoni_u_toku_24h 0.2798      0.107   2.614
## 
## Intercepts:
##     Value    Std. Error t value 
## 1|2  -0.8260   0.0235   -35.1617
## 2|3   0.8206   0.0235    34.9746
## 3|4   2.8366   0.0467    60.7410
## 4|5   4.5029   0.1022    44.0599
## 5|6   6.0418   0.2185    27.6481
## 
## Residual Deviance: 22260.96 
## AIC: 22272.96 
## (1 observation deleted due to missingness)
## Waiting for profiling to be done...
##                                                                                           Varijabla
## broj_umrlih_kojima_su_otvoreni_kartoni_u_toku_24h broj_umrlih_kojima_su_otvoreni_kartoni_u_toku_24h
##                                                       RR CI_low CI_high p_value
## broj_umrlih_kojima_su_otvoreni_kartoni_u_toku_24h 1.3228 1.0722  1.6313  0.0089

samo od 7 do 19h morao bih ovaj model da popravim!!!

Korelacija smrti u tom satu sa SKOROM

slaba povezanost

## Warning in
## cor.test.default(baza_df$broj_umrlih_kojima_su_otvoreni_kartoni_u_toku_24h, :
## Cannot compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  baza_df$broj_umrlih_kojima_su_otvoreni_kartoni_u_toku_24h and baza_df$final_nedocs_korigovano
## S = 1.0912e+11, p-value = 0.0149
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##        rho 
## 0.02601266

Korelacija smrti u tom satu sa Kategorijom

slaba povezanost

## Warning in
## cor.test.default(baza_df$broj_umrlih_kojima_su_otvoreni_kartoni_u_toku_24h, :
## Cannot compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  baza_df$broj_umrlih_kojima_su_otvoreni_kartoni_u_toku_24h and as.numeric(baza_df$nedocs_kategorija)
## S = 1.0955e+11, p-value = 0.03759
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##       rho 
## 0.0222164

Bilo je smrti ili nije bilo smrti

Zakljucak: Sistem je vrlo stabila. Okreni-obrni.

## # A tibble: 2 × 4
##   bilo_smrti broj_sati srednji_nedocs sd_nedocs
##        <dbl>     <int>          <dbl>     <dbl>
## 1          0      8469           44.5      34.5
## 2          1       291           49.1      34.9

## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  final_nedocs_korigovano by bilo_smrti
## W = 1129259, p-value = 0.01509
## alternative hypothesis: true location shift is not equal to 0

Neka razmatranja

Uloga službe hitne pomoći (SHP) u tumačenju NEDOCS skora

U kontekstu zdravstvenog sistema u Srbiji, važno je istaći da služba hitne pomoći (SHP) ne obavlja isključivo transportnu funkciju, već i samostalno pruža hitnu medicinsku pomoć na terenu. SHP timovi procenjuju i zbrinjavaju pacijente na licu mesta, pri čemu značajan broj slučajeva ne biva transportovan u bolnicu, već se rešava u kućnim ili vanbolničkim uslovima.

Ova sistemska osobenost ima važnu metodološku posledicu: svi pokazatelji opterećenosti hitne bolničke službe (uključujući NEDOCS skor) odnose se isključivo na pacijente koji su došli do bolnice, a ne na ukupno opterećenje hitne medicinske službe. Samim tim, posmatrani nivo opterećenja ED-a odražava selektivnu sliku urgentne populacije — onu koju je SHP procenila kao indikovanu za transport. Blagi ili umereni urgentni slučajevi koji su rešeni na terenu ostaju van obuhvata ovog istraživanja.

Dodatno, deo smrtnih ishoda može se desiti van bolnice, pre dolaska u ED, i samim tim ne ulazi u povezane NEDOCS vrednosti. Ove okolnosti zahtevaju oprez u tumačenju odnosa između gužve, ishoda i sistemskih kapaciteta. U tom smislu, NEDOCS skor ne odražava ukupno sistemsko opterećenje hitne službe, već njen bolnički segment, uslovljen prethodnom trijažom od strane SHP-a. Ovde je vazno napomenuti, da iako se ED vodi kao primarna zdravstvena zastita, to je defakto ambulanta usluga u bolnici koja se obavlja bez uputa. U sistemima na koje se mi refereisemo, primarna zdravstvena zastitaj je po pravilu planirana. Da neko dodje kod lekara opste prakse i da se zali da bol u grudima ili na prelom klavikule je izuzetak. U Srbiji, postoji izabrani lekar i SHP u kojoj rade obuceni zdravsteni radnici (na zalost) u kojoj se resavaju ovi problemi. Tek najtezi ili najuporniji slucajevi u Beogradu stignu u ED.

13. Mortality: Description

13.1. Strip plot (jitter + prosek ± SD) — po satima. Nije dobar za ovo

13.2. Jitter + mean ± SD po danima u nedelji. Nije dobar za ovo

13.3. Jitter + mean ± SD po mesecima. Nije dobar za ovo

14. Mortalitet: Sezonalnosti

14.1 Pokretni prosek

## Warning: Removed 6 rows containing missing values or values outside the scale range
## (`geom_line()`).

14.2. Sezonska dekompozicija

# 15. Mortality: Bar plot

15.1. Ukupan broj umrlih po satima

15.2. Ukupan broj umrlih po danima u nedelji

15.3. Ukupan broj umrlih po mesecima

16. Zero inlfilted model

Da li je overdisperison

## 
##  Overdispersion test
## 
## data:  poisson_model
## z = -0.24326, p-value = 0.5961
## alternative hypothesis: true dispersion is greater than 1
## sample estimates:
## dispersion 
##  0.9967767
## Classes and Methods for R originally developed in the
## Political Science Computational Laboratory
## Department of Political Science
## Stanford University (2002-2015),
## by and under the direction of Simon Jackman.
## hurdle and zeroinfl functions by Achim Zeileis.
## 
## Call:
## zeroinfl(formula = broj_umrlih_kojima_su_otvoreni_kartoni_u_toku_24h ~ 
##     nedocs_kategorija | nedocs_kategorija, data = baza_df, dist = "poisson")
## 
## Pearson residuals:
##     Min      1Q  Median      3Q     Max 
## -0.3086 -0.1887 -0.1859 -0.1659 10.5698 
## 
## Count model coefficients (poisson with log link):
##                    Estimate Std. Error z value Pr(>|z|)    
## (Intercept)        -3.59242    0.11782 -30.490   <2e-16 ***
## nedocs_kategorija2  0.22947    0.31489   0.729   0.4662    
## nedocs_kategorija3  0.94147    0.58599   1.607   0.1081    
## nedocs_kategorija4  0.25766    0.29220   0.882   0.3779    
## nedocs_kategorija5 -0.04502    0.72057  -0.062   0.9502    
## nedocs_kategorija6  1.24110    0.71702   1.731   0.0835 .  
## 
## Zero-inflation model coefficients (binomial with logit link):
##                    Estimate Std. Error z value Pr(>|z|)
## (Intercept)         -8.5782    72.0561  -0.119    0.905
## nedocs_kategorija2   2.1965   179.1637   0.012    0.990
## nedocs_kategorija3   8.3411    72.0674   0.116    0.908
## nedocs_kategorija4  -2.3492   472.1335  -0.005    0.996
## nedocs_kategorija5  -0.2751   516.2027  -0.001    1.000
## nedocs_kategorija6  -1.9862   622.0291  -0.003    0.997
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 
## 
## Number of iterations in BFGS optimization: 60 
## Log-likelihood: -1298 on 12 Df

Model ne nalazi nikakvu statističku vezu između nedocs_kategorija i verovatnoće da nema smrti.

17. Poason

## 
## Call:
## glm(formula = broj_umrlih_kojima_su_otvoreni_kartoni_u_toku_24h ~ 
##     nedocs_kategorija, family = poisson, data = baza_df)
## 
## Coefficients:
##                    Estimate Std. Error z value Pr(>|z|)    
## (Intercept)        -3.59261    0.11704 -30.695   <2e-16 ***
## nedocs_kategorija2  0.22795    0.14891   1.531   0.1258    
## nedocs_kategorija3  0.36004    0.15872   2.268   0.0233 *  
## nedocs_kategorija4  0.25786    0.29177   0.884   0.3768    
## nedocs_kategorija5 -0.04498    0.71673  -0.063   0.9500    
## nedocs_kategorija6  1.24123    0.71673   1.732   0.0833 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for poisson family taken to be 1)
## 
##     Null deviance: 2019.3  on 8759  degrees of freedom
## Residual deviance: 2012.2  on 8754  degrees of freedom
## AIC: 2609.3
## 
## Number of Fisher Scoring iterations: 6

Kategorija 3 (gužva) je statistički značajno povezana sa povećanim brojem umrlih (p = 0.023)

Kategorija 6 (ekstremna gužva) pokazuje potencijalno snažan efekat, ali je na granici značajnosti (p = 0.083) — verovatno zbog malog broja sati u toj kategoriji

Ostale kategorije nisu značajno različite od “Nema gužve”

##        (Intercept) nedocs_kategorija2 nedocs_kategorija3 nedocs_kategorija4 
##          0.0275264          1.2560195          1.4333799          1.2941546 
## nedocs_kategorija5 nedocs_kategorija6 
##          0.9560202          3.4598826
##                       Estimate Std. Error     z value   Pr(>|z|)
## nedocs_kategorija2  0.22794759  0.1489065  1.53081041 0.12581626
## nedocs_kategorija3  0.36003524  0.1587225  2.26833214 0.02330897
## nedocs_kategorija4  0.25785763  0.2917654  0.88378410 0.37681277
## nedocs_kategorija5 -0.04497625  0.7167260 -0.06275236 0.94996370
## nedocs_kategorija6  1.24123465  0.7167276  1.73180798 0.08330776
##                            kategorija       IRR  CI_lower  CI_upper
## nedocs_kategorija2 nedocs_kategorija2 1.2560195 0.9380903  1.681698
## nedocs_kategorija3 nedocs_kategorija3 1.4333799 1.0501565  1.956449
## nedocs_kategorija4 nedocs_kategorija4 1.2941546 0.7305172  2.292672
## nedocs_kategorija5 nedocs_kategorija5 0.9560202 0.2346268  3.895440
## nedocs_kategorija6 nedocs_kategorija6 3.4598826 0.8491227 14.097829

18. Sprimena korelacija. Umrli i Skor. Slabo. Ima previse 0

## Warning in
## cor.test.default(baza_df$broj_umrlih_kojima_su_otvoreni_kartoni_u_toku_24h, :
## Cannot compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  baza_df$broj_umrlih_kojima_su_otvoreni_kartoni_u_toku_24h and baza_df$final_nedocs_korigovano
## S = 1.0912e+11, p-value = 0.0149
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##        rho 
## 0.02601266

19. LGM. Skor i umrli. Slabo objasnjava.

## 
## Call:  glm(formula = broj_umrlih_kojima_su_otvoreni_kartoni_u_toku_24h ~ 
##     final_nedocs_korigovano, family = poisson, data = baza_df)
## 
## Coefficients:
##             (Intercept)  final_nedocs_korigovano  
##               -3.564744                 0.003774  
## 
## Degrees of Freedom: 8759 Total (i.e. Null);  8758 Residual
## Null Deviance:       2019 
## Residual Deviance: 2014  AIC: 2603

20. Graficka prezentacija Broja umrlih po satu i Skora

20.1. Graficka prezentacija Broja umrlih po satu i Kategorije

nije nesto koristan prikaz

21. Oni koji koji su otisli bez pregleda

21.1. Ukupan broj LWBS po satu

21.1. Ukupan broj LWBS po satu (kategorije)

21.1. Korelacije sa NEDOCS skorom

## Warning in
## cor.test.default(baza_df$broj_odustalih_od_pregleda_storniranih_kartona, :
## Cannot compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  baza_df$broj_odustalih_od_pregleda_storniranih_kartona and baza_df$final_nedocs_korigovano
## S = 6.0787e+10, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##       rho 
## 0.4574355
## `geom_smooth()` using formula = 'y ~ x'

  • Do NEDOCS ≈ 100–120, veći skor → više ljudi odlazi bez pregleda

  • Posle toga kriva se izravnava ili opada

Moguće interpretacije:

  • Plateau efekat: kada je ekstremna gužva, svi ostaju jer se osećaju “zarobljeno”?

  • Selektivno ponašanje: samo najhitniji ostaju

  • Manje sati sa jako visokim skorom, pa je kriva manje pouzdana tu

## 
## Call:  glm(formula = broj_odustalih_od_pregleda_storniranih_kartona ~ 
##     final_nedocs_korigovano, family = poisson, data = baza_df)
## 
## Coefficients:
##             (Intercept)  final_nedocs_korigovano  
##                -1.46878                  0.01726  
## 
## Degrees of Freedom: 8759 Total (i.e. Null);  8758 Residual
## Null Deviance:       12480 
## Residual Deviance: 9938  AIC: 17430

Transformacija u IRR (exp(beta)):

## [1] 1.01741

Ako se NEDOCS skor poveza za 50 poena

## [1] 2.370261

Ugradi kvadratni termin u Poisson model

## 
## Call:  glm(formula = broj_odustalih_od_pregleda_storniranih_kartona ~ 
##     final_nedocs_korigovano + I(final_nedocs_korigovano^2), family = poisson, 
##     data = baza_df)
## 
## Coefficients:
##                  (Intercept)       final_nedocs_korigovano  
##                   -2.3076176                     0.0449044  
## I(final_nedocs_korigovano^2)  
##                   -0.0001745  
## 
## Degrees of Freedom: 8759 Total (i.e. Null);  8757 Residual
## Null Deviance:       12480 
## Residual Deviance: 9308  AIC: 16810
  • Pozitivan linearni koeficijent → veći NEDOCS = više odlazaka bez pregleda

  • Negativan kvadratni koeficijent → ali efekat se usporava i potencijalno opada pri vrlo visokim skorovima

👉 rast do ~100–120, zatim blago opadanje ili zasićenje

##   NEDOCS_skor                                       formula           mu_tekst
## 1          50  -2.308 + 0.045 × 50 + -0.000 × 50^2 = -0.499 exp(-0.499) = 0.61
## 2         100 -2.308 + 0.045 × 100 + -0.000 × 100^2 = 0.438  exp(0.438) = 1.55
## 3         150 -2.308 + 0.045 × 150 + -0.000 × 150^2 = 0.502  exp(0.502) = 1.65
##                                                                        interpretacija
## 1  Ako je NEDOCS skor 50, očekuje se 0.61 lica koja će otići bez pregleda u tom satu.
## 2 Ako je NEDOCS skor 100, očekuje se 1.55 lica koja će otići bez pregleda u tom satu.
## 3 Ako je NEDOCS skor 150, očekuje se 1.65 lica koja će otići bez pregleda u tom satu.

Generalizovani aditivni model (GAM) za fleksibilnu zakrivljenost

## Loading required package: nlme
## 
## Attaching package: 'nlme'
## The following object is masked from 'package:feasts':
## 
##     ACF
## The following object is masked from 'package:dplyr':
## 
##     collapse
## The following object is masked from 'package:forecast':
## 
##     getResponse
## This is mgcv 1.9-3. For overview type 'help("mgcv-package")'.

kada se lomi linija.

##   final_nedocs_korigovano    log_mu       mu
## 1                     129 0.7025809 2.018957

Kada je NEDOCS skor oko 129, očekuje se najveći broj pacijenata koji će otići bez pregleda u jednom satu — otprilike 2 osobe.

Posle 129: Efekat NEDOCS skora postaje negativan — znači:

iako je gužva sve veća, broj pacijenata koji odu se više ne povećava

moguće objašnjenje: nema ko da ode (svi su već zadržani ili preozbiljni slučajevi)

22.2. Broj otovrenih kartona u satu po nedosc skorovima

baza_df %>%
  group_by(nedocs_kategorija) %>%
  summarise(otvoreni = sum(c_broj_otvorenih_kartona, na.rm = TRUE),
            .groups = "drop") %>%
  ggplot(aes(x = nedocs_kategorija, y = otvoreni)) +
  geom_col(fill = "steelblue") +
  geom_text(aes(label = otvoreni), vjust = -0.3, size = 3.5) +
  labs(title = "Otvoreni kartoni po NEDOCS kategorijama",
       x = "NEDOCS kategorija", y = "Broj otvorenih kartona") +
  theme_minimal()

23. Broj umrlih u odnosu na broj otvorenih kartona

23.1. broj_umrlih_kojima_su_otvoreni_kartoni_u_toku_24h

mortalitet_df <- baza_df %>%
  group_by(nedocs_kategorija) %>%
  summarise(
    umrli = sum(broj_umrlih_kojima_su_otvoreni_kartoni_u_toku_24h, na.rm = TRUE),
    otvoreni = sum(c_broj_otvorenih_kartona, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  mutate(mortalitet_na_100 = (umrli / otvoreni) * 100)

mortalitet_df
## # A tibble: 6 × 4
##   nedocs_kategorija umrli otvoreni mortalitet_na_100
##   <fct>             <dbl>    <dbl>             <dbl>
## 1 1                    73    16089            0.454 
## 2 2                   118    71861            0.164 
## 3 3                    87    70831            0.123 
## 4 4                    14    16316            0.0858
## 5 5                     2     3014            0.0664
## 6 6                     2      858            0.233

Plot

ggplot(mortalitet_df, aes(x = nedocs_kategorija, y = mortalitet_na_100)) +
  geom_col(fill = "firebrick") +
  geom_text(aes(label = sprintf("%.2f%%", mortalitet_na_100)), 
            vjust = -0.3, size = 3.5) +
  labs(title = "Mortalitet (%) po NEDOCS kategorijama",
       x = "NEDOCS kategorija", y = "Mortalitet (%)") +
  theme_minimal()

23.1. broj_umrlih_kojima_su_otvoreni_kartoni_u_toku_24h + Broj umrlih po prijemu u toku 24h(od otvaranja istorije bolesti)

mortalitet_df <- baza_df %>%
  group_by(nedocs_kategorija) %>%
  summarise(
    umrli_otvoreni = sum(broj_umrlih_kojima_su_otvoreni_kartoni_u_toku_24h, na.rm = TRUE),
    umrli_prijem = sum(broj_umrlih_po_prijemu_u_toku_24h_od_otvaranja_istorije_bolesti, na.rm = TRUE),
    otvoreni = sum(c_broj_otvorenih_kartona, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  mutate(
    umrli_ukupno = umrli_otvoreni + umrli_prijem,
    mortalitet_na_100 = (umrli_ukupno / otvoreni) * 100
  )

mortalitet_df
## # A tibble: 6 × 6
##   nedocs_kategorija umrli_otvoreni umrli_prijem otvoreni umrli_ukupno
##   <fct>                      <dbl>        <dbl>    <dbl>        <dbl>
## 1 1                             73          130    16089          203
## 2 2                            118          198    71861          316
## 3 3                             87          124    70831          211
## 4 4                             14           25    16316           39
## 5 5                              2            5     3014            7
## 6 6                              2            1      858            3
## # ℹ 1 more variable: mortalitet_na_100 <dbl>

Plot

ggplot(mortalitet_df, aes(x = nedocs_kategorija, y = mortalitet_na_100))+
  geom_col(fill = "firebrick") +
  geom_text(aes(label = sprintf("%.2f%%", mortalitet_na_100)),
            vjust = -0.3, size = 3.5) +
  labs(
    title = "Mortalitet (%) po NEDOCS kategorijama",
    subtitle = "Sabran broj umrlih sa otvorenim kartonom i po prijemu u 24h",
    x = "NEDOCS kategorija", y = "Mortalitet (%)"
  ) +
  theme_minimal()

23.1.1. broj_umrlih_kojima_su_otvoreni_kartoni_u_toku_24h + Broj umrlih po prijemu u toku 24h(od otvaranja istorije bolesti) : Ukupan broj umrlih po satima

baza_df_clean %>%
  group_by(sat_pocetak) %>%
  summarise(
    ukupno_umrlih = sum(
      broj_umrlih_kojima_su_otvoreni_kartoni_u_toku_24h +
      broj_umrlih_po_prijemu_u_toku_24h_od_otvaranja_istorije_bolesti,
      na.rm = TRUE
    ),
    .groups = "drop"
  ) %>%
  ggplot(aes(x = sat_pocetak, y = ukupno_umrlih)) +
  geom_col(fill = "steelblue") +
  geom_text(aes(label = ukupno_umrlih), vjust = -0.5, size = 3) +
  labs(title = "Ukupan broj umrlih (zbir) po satima u danu",
       x = "Sat (početak časa)", y = "Ukupan broj umrlih (zbir)") +
  theme_minimal()

23.1.2. broj_umrlih_kojima_su_otvoreni_kartoni_u_toku_24h + Broj umrlih po prijemu u toku 24h(od otvaranja istorije bolesti) : Ukupan broj umrlih po danima u nedelji

baza_df_clean %>%
  group_by(dan_u_nedelji) %>%
  summarise(
    ukupno_umrlih = sum(
      broj_umrlih_kojima_su_otvoreni_kartoni_u_toku_24h +
      broj_umrlih_po_prijemu_u_toku_24h_od_otvaranja_istorije_bolesti,
      na.rm = TRUE
    ),
    .groups = "drop"
  ) %>%
  ggplot(aes(x = dan_u_nedelji, y = ukupno_umrlih)) +
  geom_col(fill = "tomato") +
  geom_text(aes(label = ukupno_umrlih), vjust = -0.5, size = 3) +
  labs(title = "Ukupan broj umrlih (zbir) po danima u nedelji",
       x = "Dan u nedelji", y = "Ukupan broj umrlih (zbir)") +
  theme_minimal()

23.1.3. broj_umrlih_kojima_su_otvoreni_kartoni_u_toku_24h + Broj umrlih po prijemu u toku 24h(od otvaranja istorije bolesti) : Ukupan broj umrlih po mesecima

baza_df_clean %>%
  group_by(mesec) %>%
  summarise(
    ukupno_umrlih = sum(
      broj_umrlih_kojima_su_otvoreni_kartoni_u_toku_24h +
      broj_umrlih_po_prijemu_u_toku_24h_od_otvaranja_istorije_bolesti,
      na.rm = TRUE
    ),
    .groups = "drop"
  ) %>%
  ggplot(aes(x = mesec, y = ukupno_umrlih)) +
  geom_col(fill = "darkseagreen") +
  geom_text(aes(label = ukupno_umrlih), vjust = -0.5, size = 3) +
  labs(title = "Ukupan broj umrlih (zbir) po mesecima",
       x = "Mesec", y = "Ukupan broj umrlih (zbir)") +
  theme_minimal()

24. Broj odustalih u odnosu na broj otvorenih kartona

24.1. Po satim

library(dplyr)
library(ggplot2)

baza_df %>%
  group_by(sat_pocetak) %>%
  summarise(
    odustali = sum(broj_odustalih_od_pregleda_storniranih_kartona, na.rm = TRUE),
    otvoreni = sum(c_broj_otvorenih_kartona, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  mutate(
    stopa_odustalih = (odustali / otvoreni) * 100   # procentualno
  ) %>%
  ggplot(aes(x = sat_pocetak, y = stopa_odustalih)) +
  geom_col(fill = "tomato") +
  geom_text(aes(label = sprintf("%.1f%%", stopa_odustalih)),
            vjust = -0.5, size = 3) +
  labs(title = "Udeo odustalih u odnosu na broj otvorenih kartona po satima",
       x = "Sat", y = "Odustali (%)") +
  theme_minimal()

24.2. Po danima

# definicija redosleda dana (ako imaš samo radne dane Monday–Friday)
dan_levels <- c("Monday","Tuesday","Wednesday","Thursday","Friday",
                "Saturday", "Sunday")

baza_df %>%
  group_by(Dan) %>%
  summarise(
    odustali = sum(broj_odustalih_od_pregleda_storniranih_kartona, na.rm = TRUE),
    otvoreni = sum(c_broj_otvorenih_kartona, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  mutate(
    stopa_odustalih = 100 * odustali / pmax(otvoreni, 1),
    Dan = factor(Dan, levels = dan_levels, ordered = TRUE)
  ) %>%
  ggplot(aes(x = Dan, y = stopa_odustalih)) +
  geom_col(fill = "tomato") +
  geom_text(aes(label = sprintf("%.1f%%", stopa_odustalih)), vjust = -0.5, size = 3) +
  labs(
    title = "Udeo odustalih u odnosu na broj otvorenih kartona po danima",
    x = "Dan u nedelji", y = "Odustali (%)"
  ) +
  theme_minimal()

24.3. Po mesecima

library(dplyr)
library(ggplot2)
library(lubridate)

baza_df %>%
  mutate(
    mesec = as.Date(mesec)                  # "2022-04-01" -> Date
  ) %>%
  filter(mesec >= as.Date("2022-04-01")) %>% # start od Apr 2022
  mutate(
    mesec_label = format(mesec, "%b %Y")    # npr. "Apr 2022"
  ) %>%
  group_by(mesec, mesec_label) %>%
  summarise(
    odustali = sum(broj_odustalih_od_pregleda_storniranih_kartona, na.rm = TRUE),
    otvoreni = sum(c_broj_otvorenih_kartona, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  arrange(mesec) %>%
  mutate(
    stopa_odustalih = 100 * odustali / pmax(otvoreni, 1),
    mesec_label = factor(mesec_label, levels = unique(mesec_label), ordered = TRUE)
  ) %>%
  ggplot(aes(x = mesec_label, y = stopa_odustalih)) +
  geom_col(fill = "tomato") +
  geom_text(aes(label = sprintf("%.1f%%", stopa_odustalih)),
            vjust = -0.5, size = 3) +
  labs(
    title = "Udeo odustalih u odnosu na broj otvorenih kartona po mesecima",
    x = "Mesec", y = "Odustali (%)"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

24.4. Po nedosc skoru

library(dplyr)
library(ggplot2)
library(scales)

baza_df %>%
  group_by(nedocs_kategorija) %>%
  summarise(
    odustali = sum(broj_odustalih_od_pregleda_storniranih_kartona, na.rm = TRUE),
    otvoreni = sum(c_broj_otvorenih_kartona, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  mutate(stopa_odustalih = (odustali / otvoreni) * 100) %>%
  ggplot(aes(x = nedocs_kategorija, y = stopa_odustalih)) +
  geom_col(fill = "steelblue") +
  geom_text(aes(label = sprintf("%.1f%%", stopa_odustalih)), 
            vjust = -0.4, size = 3.5) +
  scale_y_continuous(expand = expansion(mult = c(0.02, 0.1))) +
  labs(
    title = "Udeo odustalih (LWBS) po NEDOCS kategorijama",
    x = "NEDOCS kategorija", y = "LWBS (%)"
  ) +
  theme_minimal()

2025/08/30