1. Kütüphanelerin Yüklenmesi

library(readr)
library(tidyverse)
library(tidyr)
library(dendextend)
library(knitr)
library(gridExtra)
library(ggplot2)
library(VIM)
library(corrplot)
library(car)
library(ResourceSelection)
library(glmulti)
library(tree)
library(randomForest)
library(ISLR)
library(class)
library(pROC)
library(gtools)
library(tidyverse)
library(GGally)
library(superml)
library(caret)
library(Boruta)
library("stringr")
library("tidyr")
library("readr")
library("here")
library("skimr")
library("janitor")
library("lubridate")
library(gridExtra)
library(ggplot2)
library(VIM)
library(corrplot)
library(car)
library(ResourceSelection)
library(glmulti)
library(tree)
library(randomForest)
library(ISLR)
library(class)
library(pROC)
library(gtools)
library(tidyverse)
library("scales")
library("ggcorrplot")
library("ggrepel")
library("forcats")
library("corrgram")
library(tidymodels)
library(baguette)
library(discrim)
library(bonsai)
library(ResourceSelection)
library(kableExtra)
library(broom)
library(dplyr)
library(caret)
library(tidyr)
library(corrplot)
library("Hmisc")
library(psych)
library(factoextra)
library("DescTools")
library(ResourceSelection)
library(haven)
library(effectsize)
library(rstatix)
library(ggpubr)
library(biotools)
library(PerformanceAnalytics)
library(heplots)
library(gplots)
clean_df <- read.csv('/home/ilke/Downloads/clean_heart.csv')

2. Diskriminant Analizi

Bu analiz için MaxHR,Age ve Cholesterol değişkenleri kullanıldı. Bağımsız değişkenler bağımlı değişkenin bütün gruplarında normal dağılım göstermektedir.çok değişkenli normallik testi için de normal dağıldığı söylenebilir.

Bağımsız değişkenleri arasında çoklu doğrusallık (multicollinearity) yoktur. (0.70denküçük)

target_df <- clean_df[, c("Age","Cholesterol","MaxHR","HeartDisease")]

corrplot(cor(target_df[,-4], method = "spearman"), method="number") 

target_df %>% 
  dplyr::select(!c(HeartDisease)) %>%
  mshapiro_test()
## # A tibble: 1 × 2
##   statistic p.value
##       <dbl>   <dbl>
## 1     0.997   0.283
boxM(target_df[,-4], target_df$HeartDisease)
## 
##  Box's M-test for Homogeneity of Covariance Matrices
## 
## data:  target_df[, -4]
## Chi-Sq (approx.) = 9.8579, df = 6, p-value = 0.1308
lda_heart <- lda(HeartDisease ~ Age+Cholesterol+MaxHR, data=target_df) 
lda_heart
## Call:
## lda(HeartDisease ~ Age + Cholesterol + MaxHR, data = target_df)
## 
## Prior probabilities of groups:
##        0        1 
## 0.537037 0.462963 
## 
## Group means:
##        Age Cholesterol    MaxHR
## 0 50.02387    235.0955 149.4881
## 1 55.85231    245.0615 130.1815
## 
## Coefficients of linear discriminants:
##                      LD1
## Age          0.044680593
## Cholesterol  0.004318988
## MaxHR       -0.034365772
#constant:
cons<-apply(target_df[,-4], 2, mean)
(-cons)%*%(lda_heart$scaling)
##           LD1
## [1,] 1.439142

Y = 1.44 + 0.044Age + 0.004Cholesterol + -0.034MaxHR

#Grup tahmini yapilmasi
lda_pred <- predict(lda_heart)
lda_pred$class # Sinifatamalari 
##   [1] 0 0 1 1 1 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 1 0 0
##  [38] 0 1 1 0 0 0 1 0 0 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 1 1 1 0 0
##  [75] 0 0 0 1 0 1 1 1 0 0 1 0 0 0 1 0 1 0 0 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 0 0 1
## [112] 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 1 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 1 0 1 0 1 0
## [149] 0 1 1 1 1 0 0 0 0 1 1 0 0 0 0 0 1 0 1 0 0 1 1 0 1 0 1 1 1 0 1 1 0 1 0 1 1
## [186] 0 1 1 0 0 0 0 1 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0
## [223] 1 0 1 1 1 1 0 1 1 1 0 0 0 0 1 1 1 0 1 1 1 0 1 0 0 0 1 1 0 0 1 0 1 0 0 0 1
## [260] 1 0 1 0 1 1 0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1
## [297] 0 1 0 1 0 1 1 1 0 0 1 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 0 0 1 1 1 1 1
## [334] 1 0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 0 0 0 1 0
## [371] 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 0 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1
## [408] 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 1 0 0 1 0 1 0 1 1 0 1 0 1 0 0 0 0 0 0 0
## [445] 0 1 0 1 0 1 1 0 1 1 0 0 0 0 0 0 1 0 0 0 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 1 0
## [482] 0 0 0 1 0 1 1 1 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 0 1 1 0 1 1 0 1 0 0 1 0 1 1
## [519] 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 1
## [556] 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 1 0 0 1 0
## [593] 1 1 0 1 0 0 0 0 1 0 1 1 1 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 1 0 1 0
## [630] 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 1 1 0 0 1 0 1 1 1 1 0 0 1 0 0
## [667] 0 0 0 0 1 1 0 0 0 0 0 1 0 0 1 1 0 1 0 0 0 0 0 0 1 0 0 1 0 1 1 0 1 1 0 0
## Levels: 0 1
#Diskriminant skorları için
#lda_pred$x
#plots
#ldahist(lda_pred$x, g = target_df$HeartDisease)

Tablo göre, ayırma fonksiyonu kalp hastalığı olmayanları yüzde 70.3, Kalp hastalığı olanları yüzde 69 oranında doğru sınıflandırdı. Ortalama doğru sınıflandırma oranı yüzde 70’dir.

tablo<-table(target_df$HeartDisease,lda_pred$class)
tablo
##    
##       0   1
##   0 277 100
##   1 114 211
classrate<-sum(diag(tablo))/sum(tablo)
classrate
## [1] 0.6951567
#Nispi sans kriteri p1^2+p^2
lda_heart$prior[1]^2 + lda_heart$prior[2]^2
##         0 
## 0.5027435
#Orjinal gruplar ile Tahmin edilen grupların karşılaştırılması
comp<-cbind(target_df$HeartDisease,lda_pred$class) 

Tablo yer alan ANOVA değerleri (p<.05), bağımlı değişken grupları arasında bağımsız değişken ortalamaları açısından anlamlı fark olduğunu gösteriyor. Wilks’ Lambdaya bakılarak ayrım için en kuvvetli değişkenin MaxHr olduğu söylenebilir.

##Stepwise 
#install.packages(klaR)
library(klaR)
heartstep<-greedy.wilks(HeartDisease~.,data=target_df)
heartstep$results
##          vars Wilks.lambda F.statistics.overall p.value.overall
## 1       MaxHR    0.8436175            129.75993    1.071075e-27
## 2         Age    0.8182620             77.62479    3.596609e-31
## 3 Cholesterol    0.8109463             54.24093    1.597772e-31
##   F.statistics.diff p.value.diff
## 1        129.759929 1.071075e-27
## 2         21.659904 3.893943e-06
## 3          6.296773 1.232087e-02