COMP4033 - Assignment 1 - R Programming
library(dplyr)
library(ggplot2)
library(tidyverse)
heart=read.csv("heart.csv")
Print the structure of your dataset
str(heart)
## 'data.frame': 1025 obs. of 14 variables:
## $ age : int 52 53 70 61 62 58 58 55 46 54 ...
## $ sex : int 1 1 1 1 0 0 1 1 1 1 ...
## $ cp : int 0 0 0 0 0 0 0 0 0 0 ...
## $ trestbps: int 125 140 145 148 138 100 114 160 120 122 ...
## $ chol : int 212 203 174 203 294 248 318 289 249 286 ...
## $ fbs : int 0 1 0 0 1 0 0 0 0 0 ...
## $ restecg : int 1 0 1 1 1 0 2 0 0 0 ...
## $ thalach : int 168 155 125 161 106 122 140 145 144 116 ...
## $ exang : int 0 1 1 0 0 0 0 1 0 1 ...
## $ oldpeak : num 1 3.1 2.6 0 1.9 1 4.4 0.8 0.8 3.2 ...
## $ slope : int 2 0 0 2 1 1 0 1 2 1 ...
## $ ca : int 2 0 0 1 3 0 3 1 0 2 ...
## $ thal : int 3 3 3 3 2 2 1 3 3 2 ...
## $ target : int 0 0 0 0 0 1 0 0 0 0 ...
The heart dataset has 1,025 observations with 14 variables:
13 integers and 1 numeric.
List the variables of your dataset
names(heart)
## [1] "age" "sex" "cp" "trestbps" "chol" "fbs"
## [7] "restecg" "thalach" "exang" "oldpeak" "slope" "ca"
## [13] "thal" "target"
colnames(heart)
## [1] "age" "sex" "cp" "trestbps" "chol" "fbs"
## [7] "restecg" "thalach" "exang" "oldpeak" "slope" "ca"
## [13] "thal" "target"
Using either “names” or “colnames”, both lists the 14
variables of the dataset.
Print the top 15 rows of your dataset
head(heart,n=15)
## age sex cp trestbps chol fbs restecg thalach exang oldpeak slope ca thal
## 1 52 1 0 125 212 0 1 168 0 1.0 2 2 3
## 2 53 1 0 140 203 1 0 155 1 3.1 0 0 3
## 3 70 1 0 145 174 0 1 125 1 2.6 0 0 3
## 4 61 1 0 148 203 0 1 161 0 0.0 2 1 3
## 5 62 0 0 138 294 1 1 106 0 1.9 1 3 2
## 6 58 0 0 100 248 0 0 122 0 1.0 1 0 2
## 7 58 1 0 114 318 0 2 140 0 4.4 0 3 1
## 8 55 1 0 160 289 0 0 145 1 0.8 1 1 3
## 9 46 1 0 120 249 0 0 144 0 0.8 2 0 3
## 10 54 1 0 122 286 0 0 116 1 3.2 1 2 2
## 11 71 0 0 112 149 0 1 125 0 1.6 1 0 2
## 12 43 0 0 132 341 1 0 136 1 3.0 1 0 3
## 13 34 0 1 118 210 0 1 192 0 0.7 2 0 2
## 14 51 1 0 140 298 0 1 122 1 4.2 1 3 3
## 15 52 1 0 128 204 1 1 156 1 1.0 1 0 0
## target
## 1 0
## 2 0
## 3 0
## 4 0
## 5 0
## 6 1
## 7 0
## 8 0
## 9 0
## 10 0
## 11 1
## 12 0
## 13 1
## 14 0
## 15 0
First 15 rows mostly are in the same age range (50s) with
some outliers (one with age 34 and two in their 40s).
Write a user defined function using any of the variables from the
data set
gender=function(x) {
if(is.na(x)) {
return("Unknown")
} else if (x == 1) {
return("Male")
} else if (x == 0) {
return("Female")
} else {
return("Other")
}
}
gender(heart$sex[2])
## [1] "Male"
gender(heart$sex[6])
## [1] "Female"
The “gender” function identifies whether the individual is
“male”, “female” or “other”. Using the sex column, it shows in the
generated sample that row 2 is “male” while row 6 is “female”.
Use data manipulation techniques and filter rows based on any
logical criteria that exist in your dataset
count(filter(heart,chol>240))
## n
## 1 503
filter(heart,chol>240)%>%head(20)
## age sex cp trestbps chol fbs restecg thalach exang oldpeak slope ca thal
## 1 62 0 0 138 294 1 1 106 0 1.9 1 3 2
## 2 58 0 0 100 248 0 0 122 0 1.0 1 0 2
## 3 58 1 0 114 318 0 2 140 0 4.4 0 3 1
## 4 55 1 0 160 289 0 0 145 1 0.8 1 1 3
## 5 46 1 0 120 249 0 0 144 0 0.8 2 0 3
## 6 54 1 0 122 286 0 0 116 1 3.2 1 2 2
## 7 43 0 0 132 341 1 0 136 1 3.0 1 0 3
## 8 51 1 0 140 298 0 1 122 1 4.2 1 3 3
## 9 51 0 2 140 308 0 0 142 0 1.5 2 1 2
## 10 54 1 0 124 266 0 0 109 1 2.2 1 1 3
## 11 50 0 1 120 244 0 1 162 0 1.1 2 0 2
## 12 63 0 2 135 252 0 0 172 0 0.0 2 0 2
## 13 61 0 0 145 307 0 0 146 1 1.0 1 0 3
## 14 58 0 1 136 319 1 0 152 0 0.0 2 2 2
## 15 56 1 2 130 256 1 0 142 1 0.6 1 1 1
## 16 55 0 0 180 327 0 2 117 1 3.4 1 0 2
## 17 50 0 1 120 244 0 1 162 0 1.1 2 0 2
## 18 70 1 2 160 269 0 1 112 1 2.9 1 1 3
## 19 59 1 0 138 271 0 0 182 0 0.0 2 0 2
## 20 64 1 0 128 263 0 1 105 1 0.2 1 1 3
## target
## 1 0
## 2 1
## 3 0
## 4 0
## 5 0
## 6 0
## 7 0
## 8 0
## 9 1
## 10 0
## 11 1
## 12 1
## 13 0
## 14 0
## 15 0
## 16 0
## 17 1
## 18 0
## 19 1
## 20 1
Filter was applied to variable “chol” where it should be
more than 240. It resulted to 503 rows with only the top 20 results
shown for readability.
Identify the dependent & independent variables and use reshaping
techniques and create a new data frame by joining those variables from
your dataset
demographics=as.data.frame(cbind(heart$age,heart$sex))
names(demographics)[1]="Age"
names(demographics)[2]="Sex"
head(demographics, n=10)
## Age Sex
## 1 52 1
## 2 53 1
## 3 70 1
## 4 61 1
## 5 62 0
## 6 58 0
## 7 58 1
## 8 55 1
## 9 46 1
## 10 54 1
symptoms=as.data.frame(cbind(heart$cp,heart$exang))
names(symptoms)[1]="Chest Pain Type"
names(symptoms)[2]="Exercise Induced Angina"
head(symptoms, n=10)
## Chest Pain Type Exercise Induced Angina
## 1 0 0
## 2 0 1
## 3 0 1
## 4 0 0
## 5 0 0
## 6 0 0
## 7 0 0
## 8 0 1
## 9 0 0
## 10 0 1
vitals=as.data.frame(cbind(heart$trestbps,heart$chol,heart$fbs,heart$thalach,heart$oldpeak))
names(vitals)[1]="Resting Blood Pressure"
names(vitals)[2]="Cholesterol"
names(vitals)[3]="Fasting Blood Sugar"
names(vitals)[4]="Max Heart Rate"
names(vitals)[5]="ST Depression"
head(vitals, n=10)
## Resting Blood Pressure Cholesterol Fasting Blood Sugar Max Heart Rate
## 1 125 212 0 168
## 2 140 203 1 155
## 3 145 174 0 125
## 4 148 203 0 161
## 5 138 294 1 106
## 6 100 248 0 122
## 7 114 318 0 140
## 8 160 289 0 145
## 9 120 249 0 144
## 10 122 286 0 116
## ST Depression
## 1 1.0
## 2 3.1
## 3 2.6
## 4 0.0
## 5 1.9
## 6 1.0
## 7 4.4
## 8 0.8
## 9 0.8
## 10 3.2
diagnostics=as.data.frame(cbind(heart$restecg,heart$slope,heart$ca,heart$thal))
names(diagnostics)[1]="Resting ECG Results"
names(diagnostics)[2]="ST Segment Slope"
names(diagnostics)[3]="No of Major Vessels"
names(diagnostics)[4]="Thalassemia"
head(diagnostics, n=10)
## Resting ECG Results ST Segment Slope No of Major Vessels Thalassemia
## 1 1 2 2 3
## 2 0 0 0 3
## 3 1 0 0 3
## 4 1 2 1 3
## 5 1 1 3 2
## 6 0 1 0 2
## 7 2 0 3 1
## 8 0 1 1 3
## 9 0 2 0 3
## 10 0 1 2 2
dependentvariable=as.data.frame(cbind(heart$target))
names(dependentvariable)[1]="Target"
head(dependentvariable, n=10)
## Target
## 1 0
## 2 0
## 3 0
## 4 0
## 5 0
## 6 1
## 7 0
## 8 0
## 9 0
## 10 0
In the heart dataset, only the “target” is the dependent
variable. The remaining are independent ones which have been subdivided
into 4 data frames: demographics, symptoms, vitals and diagnostics. For
readability purposes, only the top 10 data is shown per data frame.
Remove missing values in your dataset
sum(is.na(heart))
## [1] 0
is.na(heart)%>%head(20)
## age sex cp trestbps chol fbs restecg thalach exang oldpeak
## [1,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [2,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [3,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [4,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [5,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [6,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [7,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [8,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [9,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [10,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [11,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [12,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [14,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [15,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [16,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [17,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [18,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [19,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [20,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## slope ca thal target
## [1,] FALSE FALSE FALSE FALSE
## [2,] FALSE FALSE FALSE FALSE
## [3,] FALSE FALSE FALSE FALSE
## [4,] FALSE FALSE FALSE FALSE
## [5,] FALSE FALSE FALSE FALSE
## [6,] FALSE FALSE FALSE FALSE
## [7,] FALSE FALSE FALSE FALSE
## [8,] FALSE FALSE FALSE FALSE
## [9,] FALSE FALSE FALSE FALSE
## [10,] FALSE FALSE FALSE FALSE
## [11,] FALSE FALSE FALSE FALSE
## [12,] FALSE FALSE FALSE FALSE
## [13,] FALSE FALSE FALSE FALSE
## [14,] FALSE FALSE FALSE FALSE
## [15,] FALSE FALSE FALSE FALSE
## [16,] FALSE FALSE FALSE FALSE
## [17,] FALSE FALSE FALSE FALSE
## [18,] FALSE FALSE FALSE FALSE
## [19,] FALSE FALSE FALSE FALSE
## [20,] FALSE FALSE FALSE FALSE
heart1=na.omit(heart)
sum(is.na(heart1))
## [1] 0
is.na(heart1)%>%head(20)
## age sex cp trestbps chol fbs restecg thalach exang oldpeak slope
## 1 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 2 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 3 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 4 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 5 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 6 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 7 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 8 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 9 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 10 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 11 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 12 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 13 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 14 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 15 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 16 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 17 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 18 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 19 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## 20 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## ca thal target
## 1 FALSE FALSE FALSE
## 2 FALSE FALSE FALSE
## 3 FALSE FALSE FALSE
## 4 FALSE FALSE FALSE
## 5 FALSE FALSE FALSE
## 6 FALSE FALSE FALSE
## 7 FALSE FALSE FALSE
## 8 FALSE FALSE FALSE
## 9 FALSE FALSE FALSE
## 10 FALSE FALSE FALSE
## 11 FALSE FALSE FALSE
## 12 FALSE FALSE FALSE
## 13 FALSE FALSE FALSE
## 14 FALSE FALSE FALSE
## 15 FALSE FALSE FALSE
## 16 FALSE FALSE FALSE
## 17 FALSE FALSE FALSE
## 18 FALSE FALSE FALSE
## 19 FALSE FALSE FALSE
## 20 FALSE FALSE FALSE
There are no missing values in the dataset.
Identify and remove duplicated data in your dataset
sum(duplicated(heart))
## [1] 723
duplicated(heart)%>%head(50)
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13] FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
## [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
## [49] FALSE FALSE
cleanheart=unique(heart)
sum(duplicated(cleanheart))
## [1] 0
count(cleanheart)
## n
## 1 302
Initially, there were 723 duplicated data in the dataset.
Once cleaned, 302 data remained and stored in data frame
“cleanheart”.
Reorder multiple rows in descending order
(cleanheart%>%arrange(desc(age),desc(chol)))%>%head(20)
## age sex cp trestbps chol fbs restecg thalach exang oldpeak slope ca thal
## 1 77 1 0 125 304 0 0 162 1 0.0 2 3 2
## 2 76 0 2 140 197 0 2 116 0 1.1 1 0 2
## 3 74 0 1 120 269 0 0 121 1 0.2 2 1 2
## 4 71 0 1 160 302 0 1 162 0 0.4 2 2 2
## 5 71 0 2 110 265 1 0 130 0 0.0 2 1 2
## 6 71 0 0 112 149 0 1 125 0 1.6 1 0 2
## 7 70 1 0 130 322 0 0 109 0 2.4 1 3 2
## 8 70 1 2 160 269 0 1 112 1 2.9 1 1 3
## 9 70 1 1 156 245 0 0 143 0 0.0 2 0 2
## 10 70 1 0 145 174 0 1 125 1 2.6 0 0 3
## 11 69 1 2 140 254 0 0 146 0 2.0 1 3 3
## 12 69 0 3 140 239 0 1 151 0 1.8 2 2 2
## 13 69 1 3 160 234 1 0 131 0 0.1 1 1 2
## 14 68 1 2 118 277 0 1 151 0 1.0 2 1 3
## 15 68 1 2 180 274 1 0 150 1 1.6 1 0 3
## 16 68 0 2 120 211 0 0 115 0 1.5 1 0 2
## 17 68 1 0 144 193 1 1 141 0 3.4 1 2 3
## 18 67 0 2 115 564 0 0 160 0 1.6 1 0 3
## 19 67 1 0 100 299 0 0 125 1 0.9 1 2 2
## 20 67 1 0 160 286 0 0 108 1 1.5 1 3 2
## target
## 1 0
## 2 1
## 3 1
## 4 1
## 5 1
## 6 1
## 7 0
## 8 0
## 9 1
## 10 0
## 11 0
## 12 1
## 13 1
## 14 1
## 15 0
## 16 1
## 17 0
## 18 1
## 19 0
## 20 0
Variables age and chol has been set in descending order. In
the dataset, 77 is the oldest age with 302 as the highest cholesterol
level. Results have been limited to top 20 for readability.
Rename some of the column names in your dataset
names(cleanheart)[3]="chest pain type"
names(cleanheart)[4]="resting blood pressure"
names(cleanheart)[6]="fasting blood sugar"
names(cleanheart)[8]="max heart rate"
names(cleanheart)[9]="exercise induced angina"
names(cleanheart)[12]="no of major vessels"
names(cleanheart)[13]="thalassemia"
head(cleanheart,n=15)
## age sex chest pain type resting blood pressure chol fasting blood sugar
## 1 52 1 0 125 212 0
## 2 53 1 0 140 203 1
## 3 70 1 0 145 174 0
## 4 61 1 0 148 203 0
## 5 62 0 0 138 294 1
## 6 58 0 0 100 248 0
## 7 58 1 0 114 318 0
## 8 55 1 0 160 289 0
## 9 46 1 0 120 249 0
## 10 54 1 0 122 286 0
## 11 71 0 0 112 149 0
## 12 43 0 0 132 341 1
## 13 34 0 1 118 210 0
## 14 51 1 0 140 298 0
## 15 52 1 0 128 204 1
## restecg max heart rate exercise induced angina oldpeak slope
## 1 1 168 0 1.0 2
## 2 0 155 1 3.1 0
## 3 1 125 1 2.6 0
## 4 1 161 0 0.0 2
## 5 1 106 0 1.9 1
## 6 0 122 0 1.0 1
## 7 2 140 0 4.4 0
## 8 0 145 1 0.8 1
## 9 0 144 0 0.8 2
## 10 0 116 1 3.2 1
## 11 1 125 0 1.6 1
## 12 0 136 1 3.0 1
## 13 1 192 0 0.7 2
## 14 1 122 1 4.2 1
## 15 1 156 1 1.0 1
## no of major vessels thalassemia target
## 1 2 3 0
## 2 0 3 0
## 3 0 3 0
## 4 1 3 0
## 5 3 2 0
## 6 0 2 1
## 7 3 1 0
## 8 1 3 0
## 9 0 3 0
## 10 2 2 0
## 11 0 2 1
## 12 0 3 0
## 13 0 2 1
## 14 3 3 0
## 15 0 0 0
As the data had some acronyms/codes, it was renamed to its
actual description. Results have been limited to top 15 for
readability.
Add new variables in your data frame by using a mathematical
function (for e.g. – multiply an existing column by 2 and add it as a
new variable to your data frame)
cleanheart=cleanheart%>%mutate(chol_age=chol/age,cardiacriskscore=age*chol)
head(cleanheart,n=15)
## age sex chest pain type resting blood pressure chol fasting blood sugar
## 1 52 1 0 125 212 0
## 2 53 1 0 140 203 1
## 3 70 1 0 145 174 0
## 4 61 1 0 148 203 0
## 5 62 0 0 138 294 1
## 6 58 0 0 100 248 0
## 7 58 1 0 114 318 0
## 8 55 1 0 160 289 0
## 9 46 1 0 120 249 0
## 10 54 1 0 122 286 0
## 11 71 0 0 112 149 0
## 12 43 0 0 132 341 1
## 13 34 0 1 118 210 0
## 14 51 1 0 140 298 0
## 15 52 1 0 128 204 1
## restecg max heart rate exercise induced angina oldpeak slope
## 1 1 168 0 1.0 2
## 2 0 155 1 3.1 0
## 3 1 125 1 2.6 0
## 4 1 161 0 0.0 2
## 5 1 106 0 1.9 1
## 6 0 122 0 1.0 1
## 7 2 140 0 4.4 0
## 8 0 145 1 0.8 1
## 9 0 144 0 0.8 2
## 10 0 116 1 3.2 1
## 11 1 125 0 1.6 1
## 12 0 136 1 3.0 1
## 13 1 192 0 0.7 2
## 14 1 122 1 4.2 1
## 15 1 156 1 1.0 1
## no of major vessels thalassemia target chol_age cardiacriskscore
## 1 2 3 0 4.076923 11024
## 2 0 3 0 3.830189 10759
## 3 0 3 0 2.485714 12180
## 4 1 3 0 3.327869 12383
## 5 3 2 0 4.741935 18228
## 6 0 2 1 4.275862 14384
## 7 3 1 0 5.482759 18444
## 8 1 3 0 5.254545 15895
## 9 0 3 0 5.413043 11454
## 10 2 2 0 5.296296 15444
## 11 0 2 1 2.098592 10579
## 12 0 3 0 7.930233 14663
## 13 0 2 1 6.176471 7140
## 14 3 3 0 5.843137 15198
## 15 0 0 0 3.923077 10608
Variables chol_age and cardiacriskscore has been added. For
chol_age, it provides a ratio of the of the cholesterol and age while
cardiacriskscore calculates the score between the two. Results have been
limited to top 15 for readability.
Create a training set using random number generator engine
set.seed(1234)
cleanheart_training=cleanheart%>%sample_frac(0.60,replace=FALSE)
nrow(cleanheart_training)
## [1] 181
head(cleanheart_training,n=15)
## age sex chest pain type resting blood pressure chol fasting blood sugar
## 1 63 0 1 140 195 0
## 2 63 1 0 130 254 0
## 3 51 0 2 130 256 0
## 4 48 1 0 124 274 0
## 5 53 1 0 142 226 0
## 6 42 1 1 120 295 0
## 7 53 0 0 130 264 0
## 8 54 1 1 108 309 0
## 9 68 1 0 144 193 1
## 10 58 1 1 125 220 0
## 11 62 0 0 140 394 0
## 12 42 1 0 136 315 0
## 13 61 1 0 148 203 0
## 14 45 1 1 128 308 0
## 15 54 1 2 120 258 0
## restecg max heart rate exercise induced angina oldpeak slope
## 1 1 179 0 0.0 2
## 2 0 147 0 1.4 1
## 3 0 149 0 0.5 2
## 4 0 166 0 0.5 1
## 5 0 111 1 0.0 2
## 6 1 162 0 0.0 2
## 7 0 143 0 0.4 1
## 8 1 156 0 0.0 2
## 9 1 141 0 3.4 1
## 10 1 144 0 0.4 1
## 11 0 157 0 1.2 1
## 12 1 125 1 1.8 1
## 13 1 161 0 0.0 2
## 14 0 170 0 0.0 2
## 15 0 147 0 0.4 1
## no of major vessels thalassemia target chol_age cardiacriskscore
## 1 2 2 1 3.095238 12285
## 2 1 3 0 4.031746 16002
## 3 0 2 1 5.019608 13056
## 4 0 3 0 5.708333 13152
## 5 0 3 1 4.264151 11978
## 6 0 2 1 7.023810 12390
## 7 0 2 1 4.981132 13992
## 8 0 3 1 5.722222 16686
## 9 2 3 0 2.838235 13124
## 10 4 3 1 3.793103 12760
## 11 0 2 1 6.354839 24428
## 12 0 1 0 7.500000 13230
## 13 1 3 0 3.327869 12383
## 14 0 2 1 6.844444 13860
## 15 0 3 1 4.777778 13932
181 was generated as the training data from the cleanheart
dataset. Results have been limited to top 15 for readability.
Print the summary statistics of your dataset
summary(cleanheart)
## age sex chest pain type resting blood pressure
## Min. :29.00 Min. :0.0000 Min. :0.0000 Min. : 94.0
## 1st Qu.:48.00 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:120.0
## Median :55.50 Median :1.0000 Median :1.0000 Median :130.0
## Mean :54.42 Mean :0.6821 Mean :0.9636 Mean :131.6
## 3rd Qu.:61.00 3rd Qu.:1.0000 3rd Qu.:2.0000 3rd Qu.:140.0
## Max. :77.00 Max. :1.0000 Max. :3.0000 Max. :200.0
## chol fasting blood sugar restecg max heart rate
## Min. :126.0 Min. :0.000 Min. :0.0000 Min. : 71.0
## 1st Qu.:211.0 1st Qu.:0.000 1st Qu.:0.0000 1st Qu.:133.2
## Median :240.5 Median :0.000 Median :1.0000 Median :152.5
## Mean :246.5 Mean :0.149 Mean :0.5265 Mean :149.6
## 3rd Qu.:274.8 3rd Qu.:0.000 3rd Qu.:1.0000 3rd Qu.:166.0
## Max. :564.0 Max. :1.000 Max. :2.0000 Max. :202.0
## exercise induced angina oldpeak slope no of major vessels
## Min. :0.0000 Min. :0.000 Min. :0.000 Min. :0.0000
## 1st Qu.:0.0000 1st Qu.:0.000 1st Qu.:1.000 1st Qu.:0.0000
## Median :0.0000 Median :0.800 Median :1.000 Median :0.0000
## Mean :0.3278 Mean :1.043 Mean :1.397 Mean :0.7185
## 3rd Qu.:1.0000 3rd Qu.:1.600 3rd Qu.:2.000 3rd Qu.:1.0000
## Max. :1.0000 Max. :6.200 Max. :2.000 Max. :4.0000
## thalassemia target chol_age cardiacriskscore
## Min. :0.000 Min. :0.000 Min. :2.099 Min. : 5916
## 1st Qu.:2.000 1st Qu.:0.000 1st Qu.:3.836 1st Qu.:10665
## Median :2.000 Median :1.000 Median :4.471 Median :13052
## Mean :2.315 Mean :0.543 Mean :4.630 Mean :13511
## 3rd Qu.:3.000 3rd Qu.:1.000 3rd Qu.:5.309 3rd Qu.:15822
## Max. :3.000 Max. :1.000 Max. :8.418 Max. :37788
Code above has been generated the statistics of the dataset
per variable.
Statistical functions were applied to variables chol, age,
resting blood pressure and max heart rate.
For mean: chol-246.5, age-54, resting blood
pressure-131.60
For median: chol-240.5, age-55, resting blood
pressure-130
For mode: chol-204, age-58, resting blood pressure-120
For range: chol-438, resting blood pressure-106, max heart
rate-131
Plot a scatter plot for any 2 variables in your dataset
ggplot(data=cleanheart,aes(x=age,y=chol))+geom_point()

Q1=quantile(cleanheart$chol,0.25,na.rm = TRUE)
Q3=quantile(cleanheart$chol,0.75,na.rm = TRUE)
IQR_value=IQR(cleanheart$chol,na.rm = TRUE)
lower=Q1-1.5*IQR_value
upper=Q3+1.5*IQR_value
outliers=cleanheart$chol[cleanheart$chol<lower | cleanheart$chol>upper]
outliers
## [1] 417 564 409 394 407
length(outliers)
## [1] 5
cleanheart$outlier_flag=ifelse(cleanheart$chol<lower | cleanheart$chol>upper,
"Outlier",
"Normal")
ggplot(data=cleanheart,aes(x=age,y=chol,color=outlier_flag))+
geom_point()+
scale_color_manual(values=c("Normal"="black","Outlier"="red"))

Data shows that as one ages, cholesterol increases with
majority in the age range between 50 to 60. There are 5 outliers with
the highest one at age close to 70 and cholesterol level at above 500.
This needs to be checked further.
Plot a bar plot for any 2 variables in your dataset
ggplot(data=cleanheart,aes(x=`resting blood pressure`))+geom_bar(fill = "lightskyblue")

For resting blood pressure, highest is at 120 with more than
30 counts followed by a little over 120 (~128).
ggplot(data=cleanheart,aes(x=`max heart rate`))+geom_bar(fill = "red4")

For max heart rate, highest count is ~160 with values above
9 counts.
Find the correlation between any 2 variables by applying Pearson
correlation
corr=cor(cleanheart$age,cleanheart$chol,method='pearson')
corr
## [1] 0.2072155
Correlation value between age and chol is at 0.20. As the
value is near 0, this shows low correlation between the two
variables.