COMP4033 - Assignment 1 - R Programming

library(dplyr)
library(ggplot2)
library(tidyverse)
heart=read.csv("heart.csv")

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.

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.

Code above has been generated the statistics of the dataset per variable.

Use any of the numerical variables from the dataset and perform the following statistical functions: Mean, Median, Mode and Range.

get_mode=function(x) {
  uniqv=unique(x)
  uniqv[which.max(tabulate(match(x, uniqv)))]
}

mean(cleanheart$chol)
## [1] 246.5
mean(cleanheart$age)
## [1] 54.42053
mean(cleanheart$`resting blood pressure`)
## [1] 131.6026
median(cleanheart$chol)
## [1] 240.5
median(cleanheart$age)
## [1] 55.5
median(cleanheart$`resting blood pressure`)
## [1] 130
get_mode(cleanheart$chol)
## [1] 204
get_mode(cleanheart$age)
## [1] 58
get_mode(cleanheart$`resting blood pressure`)
## [1] 120
print(max(cleanheart$chol, na.rm=TRUE)-min(cleanheart$chol, na.rm=TRUE))
## [1] 438
print(max(cleanheart$`resting blood pressure`, na.rm=TRUE)-min(cleanheart$`resting blood pressure`, na.rm=TRUE))
## [1] 106
print(max(cleanheart$`max heart rate`, na.rm=TRUE)-min(cleanheart$`max heart rate`, na.rm=TRUE))
## [1] 131

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.