Το σύνολο δεδομένων Heart Disease UCI περιλαμβάνει ιατρικές και δημογραφικές πληροφορίες από 303 ασθενείς, με στόχο την πρόβλεψη της ύπαρξης καρδιοπάθειας. Περιλαμβάνει μεταβλητές όπως ηλικία, φύλο, πίεση, χοληστερίνη και αποτελέσματα ηλεκτροκαρδιογραφήματος. Η εξαρτημένη μεταβλητή είναι δυαδική (1 = υπάρχει καρδιοπάθεια, 0 = δεν υπάρχει), κάτι που το καθιστά ιδανικό για λογιστική παλινδρόμηση. Μέσα από την ανάλυση του, μπορούμε να εντοπίσουμε τους πιο σημαντικούς παράγοντες κινδύνου και να δημιουργήσουμε προγνωστικά μοντέλα, προσφέροντας υποστήριξη σε ιατρικές αποφάσεις και πρόληψη ασθενειών.
Όνομα Μεταβλητής | Τύπος | Περιγραφή |
---|---|---|
age | Αριθμητική | Ηλικία ασθενούς σε έτη |
sex | Κατηγορική | Φύλο (0=Γυναίκα, 1=Άνδρας) |
cp | Κατηγορική | Τύπος θωρακικού πόνου: 1 = Τυπικός στηθαγχικός πόνος |
trestbps | Αριθμητική | Αρτηριακή πίεση (σε mm Hg |
chol | Αριθμητική | Ολική χοληστερίνη στο αίμα (mg/dl) |
fbs | Δυαδική | Σάκχαρο νηστείας > 120 mg/dl (0=Όχι, 1=Ναι) |
restecg | Κατηγορική | Αποτελέσματα ηρεμίας ηλεκτροκαρδιογραφήματος: 0 = Κανονικό 1 = Ανωμαλία ST-T κυμάτων 2 = Υπερτροφία κοιλιών |
thalach | Αριθμητική | Μέγιστος καρδιακός ρυθμός (σε παλμούς ανά λεπτό) |
exang | Δυαδική | Πόνος στο στήθος λόγω άσκησης (0=Όχι, 1=Ναι) |
oldpeak | Αριθμητική | Κατάθλιψη ST κατά την άσκηση σε σύγκριση με την ηρεμία |
slope | Κατηγορική | Κλίση ST τμήματος κατά την άσκηση: 1 = ανερχόμενη 2 = επίπεδη 3 = κατερχόμενη |
ca | Κατηγορική | Αριθμός κύριων αιμοφόρων αγγείων με χρώση φλουοροσκόπησης |
thal | Κατηγορική | Αποτελέσματα σπινθηρογραφήματος με θάλλιο: 3 = Κανονικό 6 = Σταθερό ελάττωμα 7 = Αντιστρέψιμο ελάττωμα |
condition | Κατηγορική | Ένδειξη ύπαρξης καρδιοπάθειας (0=Όχι, 1=Ναι) |
cat("Σύνολο ελλιπών τιμών:", sum(is.na(df)), "\n") #Έλεγχος για ελλιπείς τιμές (NA). Αν αποτέλεσμα > 0 τότε έχουμε ελλιπείς τιμές
## Σύνολο ελλιπών τιμών: 0
cat("Διπλότυπες γραμμές:", sum(duplicated(df)), "\n") #Έλεγχος για διπλότυπες εγγραφές. Αν το αποτέλεσμα είναι > 0, τότε υπάρχουν διπλές εγγραφές.
## Διπλότυπες γραμμές: 0
Διαχωρίζουμε τα δεδομένα σε training και testing set με τυχαίο τρόπο. Το 65% των δεδομένων θα χρησιμοποιηθεί για το training set και το υπόλοιπο 35% για το testing set.
set.seed(960)
split <- sample.split(df$condition, SplitRatio = 0.65)
train <- subset(df, split == TRUE)
test <- subset(df, split == FALSE)
cat("Καταχωρήσεις στο training set:", nrow(train), "\n")
## Καταχωρήσεις στο training set: 193
## Καταχωρήσεις στο test set: 104
Δημιουργούμε το μοντέλο Λογιστικής Παλινδρόμησης χρησιμοποιώντας το training set και συμπεριλαμβάνοντας όλες τις ανεξάρτητες μεταβλητές. Προηγήθηκε, βέβαια, μετατροπή των κατηγορικών μεταβλητών σε factors ώστε να μην οδηγηθούμε σε λανθασμένα συμπεράσματα.
##
## Call:
## glm(formula = condition ~ ., family = "binomial", data = train)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -3.528060 3.415666 -1.033 0.301648
## age -0.020176 0.030444 -0.663 0.507506
## sex 1.137447 0.615851 1.847 0.064754 .
## cp 0.518006 0.229315 2.259 0.023888 *
## trestbps 0.032896 0.013705 2.400 0.016380 *
## chol 0.004750 0.005356 0.887 0.375181
## fbs -1.384655 0.663692 -2.086 0.036952 *
## restecg 0.309008 0.236391 1.307 0.191149
## thalach -0.033620 0.012915 -2.603 0.009236 **
## exang 0.760678 0.548848 1.386 0.165761
## oldpeak 0.219196 0.248920 0.881 0.378541
## slope 0.444541 0.436597 1.018 0.308586
## ca 1.083007 0.310856 3.484 0.000494 ***
## thal 0.752168 0.259760 2.896 0.003784 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 266.39 on 192 degrees of freedom
## Residual deviance: 133.03 on 179 degrees of freedom
## AIC: 161.03
##
## Number of Fisher Scoring iterations: 6
Με βάση τα αποτελέσματα του μοντέλου λογιστικής παλινδρόμησης,
εντοπίζουμε τις ανεξάρτητες μεταβλητές που έχουν στατιστικά
σημαντική συσχέτιση με την εξαρτημένη μεταβλητή
condition
(παρουσία καρδιοπάθειας). Η αξιολόγηση βασίζεται
στις τιμές p-value και στα επίπεδα σημαντικότητας.
Μεταβλητή | Συντελεστής (Estimate) | P-value | Σημασία |
---|---|---|---|
cp |
0.5180 | 0.0239 | Σημαντική |
trestbps |
0.0329 | 0.0164 | Σημαντική |
fbs |
-1.3847 | 0.0370 | Σημαντική |
thalach |
-0.0336 | 0.0092 | Πολύ Σημαντική |
ca |
1.0830 | 0.0005 | Εξαιρετικά Σημαντική |
thal |
0.7522 | 0.0038 | Πολύ Σημαντική |
Μεταβλητή | Συντελεστής | P-value | Σχόλιο |
---|---|---|---|
sex |
1.1374 | 0.0648 | Οριακά Σημαντική |
Αυτές οι μεταβλητές δεν εμφανίζουν στατιστικά σημαντική επίδραση στο συγκεκριμένο μοντέλο:
Μεταβλητή | Συντελεστής (Estimate) | P-value | Σχόλιο |
---|---|---|---|
age |
-0.0202 | 0.5075 | Χαμηλή συσχέτιση |
chol |
0.0048 | 0.3752 | Δεν σχετίζεται έντονα |
restecg |
0.3090 | 0.1911 | Μη σημαντικό |
exang |
0.7607 | 0.1658 | Δεν είναι στατιστικά ισχυρό |
oldpeak |
0.2192 | 0.3785 | Αδύναμη συσχέτιση |
slope |
0.4445 | 0.3086 | Δεν επηρεάζει σημαντικά |
Στο επόμενο βήμα εφαρμόζουμε το μοντέλο λογιστικής παλινδρόμησης στο
σύνολο ελέγχου (test set
) με τη χρήση της συνάρτησης
predict()
. Η συνάρτηση αυτή επιστρέφει την πιθανότητα κάθε
παρατήρησης να ανήκει στην κατηγορία “1” (δηλαδή
παρουσία καρδιοπάθειας).
## 4 6 15 18 23 24
## 0.06881633 0.61680511 0.24614816 0.56714895 0.02759315 0.30146628
Οι παραπάνω αριθμοί αποτελούν ενδεικτικά αποτελέσματα της συνάρτησης
predict()
για έξι παρατηρήσεις από το test set.
Αντιστοιχούν στις εκτιμώμενες πιθανότητες ότι κάθε
άτομο έχει καρδιοπάθεια, σύμφωνα με το μοντέλο λογιστικής
παλινδρόμησης.
Η τιμή 0.06881633 στη γραμμή 4 του test set μας δείχνει ότι υπάρχει 6.88% πιθανότητα ο άνθρωπος αυτός να ανήκει στην κατηγορία των καρδιοπαθών.
Αντίθετα, η τιμή 0.61680511 στη γραμμή 6 του test set δείχνει αυξημένη πιθανότητα, 61.68%, ο άνθρωπος να είναι καρδιοπαθής.
Από την ανάλυση της λογιστικής παλινδρόμησης προέκυψε ότι ορισμένες μεταβλητές, όπως οι thalac, ca, thal, trestbps, fbs και cp, έχουν στατιστικά σημαντική συσχέτιση με την πιθανότητα εμφάνισης καρδιοπάθειας. Αντίθετα, άλλες μεταβλητές, όπως η age, chol και oldpeak δεν φάνηκαν να επηρεάζουν σημαντικά το αποτέλεσμα στο συγκεκριμένο μοντέλο.
Οι προβλέψεις που προέκυψαν από το test set μάς δίνουν την πιθανότητα κάθε παρατήρησης να παρουσιάζει καρδιοπάθεια, και είναι χρήσιμες για την κατηγοριοποίηση μελλοντικών περιπτώσεων. Οι τιμές των πιθανοτήτων κυμαίνονται από χαμηλές (π.χ. 6%) έως μέτριες ή υψηλές (π.χ. 61%), γεγονός που δείχνει πως το μοντέλο μπορεί να διακρίνει περιπτώσεις με διαφορετικό βαθμό κινδύνου.
Συνολικά, το μοντέλο δείχνει ικανοποιητική προγνωστική ισχύ και προσφέρει αξιόπιστες ενδείξεις για μελλοντική ανάλυση ή υποστήριξη αποφάσεων.