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.