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')
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