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)
#temizlenmiş veriyi yükledim ve faktöre dönüştürmedim. karakter olan girilenleri düzenledim.
df1 <- read.csv('/home/ilke/Downloads/clean_heart.csv')
df1 <- df1 %>%
  mutate(ST_Slope = case_when(
    ST_Slope == "Down" ~ 0,
    ST_Slope == "Flat" ~ 1,
    ST_Slope == "Up" ~ 2
  ))

# ExerciseAngina dönüşümü
df1 <- df1 %>%
  mutate(ExerciseAngina = ifelse(ExerciseAngina == "N", 0, ifelse(ExerciseAngina == "Y", 1, NA_integer_)))

df1 <- df1 %>%
  mutate(Sex = ifelse(Sex == "F", 0, ifelse(Sex == "M", 1, NA_integer_)))

# RestingECG dönüşümü
df1 <- df1 %>%
  mutate(RestingECG = case_when(
    RestingECG == "LVH" ~ 1,
    RestingECG == "Normal" ~ 2,
    RestingECG == "ST" ~ 3
  ))

# ChestPainType dönüşümü
df1 <- df1 %>%
  mutate(ChestPainType = case_when(
    ChestPainType == "ASY" ~ 1,
    ChestPainType == "ATA" ~ 2,
    ChestPainType == "NAP" ~ 3,
    ChestPainType == "TA" ~ 4
  ))

write.csv(df1, file = "/home/ilke/Downloads/df5.csv", row.names = FALSE)   #**düzenlenmiş veriyi kaydettim**

df_factor <- df1[, c("Sex", "ChestPainType","FastingBS", "ExerciseAngina", "ST_Slope", "HeartDisease")]
summary(df_factor)
##       Sex         ChestPainType     FastingBS      ExerciseAngina  
##  Min.   :0.0000   Min.   :1.000   Min.   :0.0000   Min.   :0.0000  
##  1st Qu.:1.0000   1st Qu.:1.000   1st Qu.:0.0000   1st Qu.:0.0000  
##  Median :1.0000   Median :2.000   Median :0.0000   Median :0.0000  
##  Mean   :0.7607   Mean   :1.859   Mean   :0.1624   Mean   :0.3746  
##  3rd Qu.:1.0000   3rd Qu.:3.000   3rd Qu.:0.0000   3rd Qu.:1.0000  
##  Max.   :1.0000   Max.   :4.000   Max.   :1.0000   Max.   :1.0000  
##     ST_Slope      HeartDisease  
##  Min.   :0.000   Min.   :0.000  
##  1st Qu.:1.000   1st Qu.:0.000  
##  Median :1.000   Median :0.000  
##  Mean   :1.436   Mean   :0.463  
##  3rd Qu.:2.000   3rd Qu.:1.000  
##  Max.   :2.000   Max.   :1.000
library(corrplot)
corrplot(cor(df_factor))

korelasyon<-cor(df_factor)
korelasyon
##                       Sex ChestPainType     FastingBS ExerciseAngina   ST_Slope
## Sex             1.0000000 -0.1347643789  0.1021312914      0.2134147 -0.1539422
## ChestPainType  -0.1347644  1.0000000000  0.0003099498     -0.3927091  0.2282053
## FastingBS       0.1021313  0.0003099498  1.0000000000      0.1060548 -0.1509679
## ExerciseAngina  0.2134147 -0.3927091187  0.1060548223      1.0000000 -0.4797515
## ST_Slope       -0.1539422  0.2282053327 -0.1509679096     -0.4797515  1.0000000
## HeartDisease    0.3065167 -0.3909190881  0.1643896708      0.5503264 -0.5986960
##                HeartDisease
## Sex               0.3065167
## ChestPainType    -0.3909191
## FastingBS         0.1643897
## ExerciseAngina    0.5503264
## ST_Slope         -0.5986960
## HeartDisease      1.0000000
library("Hmisc") #anlamlılık değerleriyle birlikte görmek istersek (2-tailed sonuçlar)
rcorr(as.matrix(df_factor),type="pearson") 
##                  Sex ChestPainType FastingBS ExerciseAngina ST_Slope
## Sex             1.00         -0.13      0.10           0.21    -0.15
## ChestPainType  -0.13          1.00      0.00          -0.39     0.23
## FastingBS       0.10          0.00      1.00           0.11    -0.15
## ExerciseAngina  0.21         -0.39      0.11           1.00    -0.48
## ST_Slope       -0.15          0.23     -0.15          -0.48     1.00
## HeartDisease    0.31         -0.39      0.16           0.55    -0.60
##                HeartDisease
## Sex                    0.31
## ChestPainType         -0.39
## FastingBS              0.16
## ExerciseAngina         0.55
## ST_Slope              -0.60
## HeartDisease           1.00
## 
## n= 702 
## 
## 
## P
##                Sex    ChestPainType FastingBS ExerciseAngina ST_Slope
## Sex                   0.0003        0.0068    0.0000         0.0000  
## ChestPainType  0.0003               0.9935    0.0000         0.0000  
## FastingBS      0.0068 0.9935                  0.0049         0.0000  
## ExerciseAngina 0.0000 0.0000        0.0049                   0.0000  
## ST_Slope       0.0000 0.0000        0.0000    0.0000                 
## HeartDisease   0.0000 0.0000        0.0000    0.0000         0.0000  
##                HeartDisease
## Sex            0.0000      
## ChestPainType  0.0000      
## FastingBS      0.0000      
## ExerciseAngina 0.0000      
## ST_Slope       0.0000      
## HeartDisease
library(matlib)
invkor<-inv(korelasyon)# korelasyon matrisinin tersi (VIF)
colnames(invkor)<-rownames(invkor)<-colnames(korelasyon) # değişken isimleri yazması için
invkor
##                        Sex ChestPainType   FastingBS ExerciseAngina    ST_Slope
## Sex             1.11404492    0.00606437 -0.06240734    -0.08498866 -0.07630702
## ChestPainType   0.00606437    1.25885065 -0.08478615     0.34025216  0.08392505
## FastingBS      -0.06240734   -0.08478615  1.04151952    -0.02320852  0.08197645
## ExerciseAngina -0.08498866    0.34025216 -0.02320852     1.60943332  0.38208888
## ST_Slope       -0.07630702    0.08392505  0.08197645     0.38208888  1.65918440
## HeartDisease   -0.32775681    0.36718373 -0.12337945    -0.49408180  0.82579459
##                HeartDisease
## Sex              -0.3277568
## ChestPainType     0.3671837
## FastingBS        -0.1233795
## ExerciseAngina   -0.4940818
## ST_Slope          0.8257946
## HeartDisease      2.0305905

Faktör analizi, ancak orijinal değişkenler birbirleri ile yeterince korelasyon gösteriyorsa anlamlı olur. Korelasyon matrislerine bakıldı ve 0.30’dan daha az ilişkiye sahip değişkenler var.KMO testi sonucuna (.74) göre örneklem uygunluğu orta düzeydedir. Bartlett’s Testi sonucuna göre ise (p<.001) değişkenler arasındaki korelasyonlar faktör Analizi yapabilmek için uygun düzeydedir. Bu yüzden hiçbir değişken çıkarılmadı.

#Faktor Analizi Uygulanabilirligi (KMO - Anti-Image - Bartlett Test)
library(psych)
KMO(df_factor) # KMO ve MSA Anti-image matris kosegenleri
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = df_factor)
## Overall MSA =  0.74
## MSA for each item = 
##            Sex  ChestPainType      FastingBS ExerciseAngina       ST_Slope 
##           0.77           0.76           0.78           0.80           0.72 
##   HeartDisease 
##           0.71
#Bartlett Küresellik Testi(Bartlett's Test of Spherecity) 
cortest.bartlett(cor(df_factor),nrow(df_factor)) #Bartlett test
## $chisq
## [1] 856.2601
## 
## $p.value
## [1] 8.039196e-173
## 
## $df
## [1] 15
fa_kokl <- principal(df_factor, nfactors =2, rotate = "none")
print(fa_kokl$loadings, digits=3, cutoff=.3, sort=TRUE) 
## 
## Loadings:
##                PC1    PC2   
## ChestPainType  -0.581  0.441
## ExerciseAngina  0.785       
## ST_Slope       -0.751       
## HeartDisease    0.855       
## FastingBS              0.859
## Sex             0.433       
## 
##                  PC1   PC2
## SS loadings    2.501 1.022
## Proportion Var 0.417 0.170
## Cumulative Var 0.417 0.587
fa_kokl$communality
##            Sex  ChestPainType      FastingBS ExerciseAngina       ST_Slope 
##      0.2543873      0.5319867      0.8029455      0.6364880      0.5657201 
##   HeartDisease 
##      0.7311256
colSums(fa_kokl$loadings[ , ]^2)/9 #varyans aciklama oranlari
##       PC1       PC2 
## 0.2778394 0.1135665
plot(fa_kokl$values, type="b", main="ScreePlot", xlab="Number of Factors", ylab="Eigenvalues")

fa_kokl <- principal(df_factor, nfactors =2, rotate = "varimax")
print(fa_kokl$loadings, digits=3, cutoff=.3, sort=TRUE)
## 
## Loadings:
##                RC1    RC2   
## ChestPainType  -0.689       
## ExerciseAngina  0.790       
## ST_Slope       -0.699       
## HeartDisease    0.813       
## FastingBS              0.896
## Sex             0.332  0.380
## 
##                  RC1   RC2
## SS loadings    2.359 1.163
## Proportion Var 0.393 0.194
## Cumulative Var 0.393 0.587

Faktör Yüklemeleri (Loadings): → “ChestPainType” değişkeni, “RC1” faktörü ile güçlü bir negatif ilişkiye (-0.689) sahiptir. → “ExerciseAngina” değişkeni, “RC1” faktörü ile güçlü bir pozitif ilişkiye (0.790) sahiptir. → “ST_Slope” değişkeni, “RC1” faktörü ile güçlü bir negatif ilişkiye (-0.699) sahiptir. → “HeartDisease” değişkeni, “RC1” faktörü ile güçlü bir pozitif ilişkiye (0.813) sahiptir. → “FastingBS” değişkeni, “RC1” faktörü ile güçlü bir pozitif ilişkiye (0.896) sahiptir. → “Sex” değişkeni, hem “RC1” faktörü (0.332) hem de “RC2” faktörü (0.380) ile pozitif ilişkilidir.

Toplam Varyansın Açıklaması: → “RC1” faktörü, toplam varyansın %39.3’ünü açıklar. → “RC2” faktörü, toplam varyansın %19.4’ünü açıklar. → Toplamda, iki faktör birlikte toplam varyansın %58.7’sini açıklar.

fa.diagram(fa_kokl)

Sex değişkenini çıkarırsam:

fa_kokl <- principal(df_factor[,-1], nfactors =2, rotate = "varimax")
print(fa_kokl$loadings, digits=3, cutoff=.3, sort=TRUE)
## 
## Loadings:
##                RC1    RC2   
## ChestPainType  -0.659  0.316
## ExerciseAngina  0.804       
## ST_Slope       -0.742       
## HeartDisease    0.837       
## FastingBS              0.928
## 
##                  RC1   RC2
## SS loadings    2.341 1.051
## Proportion Var 0.468 0.210
## Cumulative Var 0.468 0.678
fa.diagram(fa_kokl)

Faktör Yüklemeleri (Loadings): → “ChestPainType” değişkeni, “RC1” faktörü ile negatif bir yüklemeye (-0.659) sahiptir ve “RC2” faktörü ile pozitif bir yüklemeye (0.316) sahiptir. → “ExerciseAngina” değişkeni, sadece “RC1” faktörü ile güçlü bir pozitif yüklemeye (0.804) sahiptir. → “ST_Slope” değişkeni, sadece “RC1” faktörü ile güçlü bir negatif yüklemeye (-0.742) sahiptir. → “HeartDisease” değişkeni, sadece “RC1” faktörü ile güçlü bir pozitif yüklemeye (0.837) sahiptir. → “FastingBS” değişkeni, sadece “RC2” faktörü ile güçlü bir pozitif yüklemeye (0.928) sahiptir.

Toplam Varyansın Açıklaması: → “RC1” faktörü, toplam varyansın %46.8’ini açıklar. → “RC2” faktörü, toplam varyansın %21.0’unu açıklar. → Toplamda, iki faktör birlikte toplam varyansın %67.8’ini açıklar.