This is an R Markdown
Notebook. When you execute code within the notebook, the results appear
beneath the code.
Try executing this chunk by clicking the Run button within
the chunk or by placing your cursor inside it and pressing
Cmd+Shift+Enter.
# Load dataset
heart <- read.csv("ClevelandHeart.csv")
# 1. How many patients are male?
table(heart$Sex)
female male
97 206
# 2. Missing values in Thal
sum(is.na(heart$Thal))
[1] 2
which(is.na(heart$Thal))
[1] 88 267
heart[which(is.na(heart$Thal)), ]
# 3. Scatterplot: Age vs MaxHR
plot(heart$Age, heart$MaxHR,
xlab="Age (years)",
ylab="Maximum Heart Rate",
main="Scatterplot of Age vs MaxHR",
pch=19,
col="blue")

# 4a. Histogram of Chol (default)
hist(heart$Chol,
xlab="Cholesterol (mg/dl)",
main="Histogram of Cholesterol")

# 4b. Histogram of Chol (20 breaks)
hist(heart$Chol,
breaks=20,
xlab="Cholesterol (mg/dl)",
main="Histogram of Cholesterol (20 breaks)")

# 4c. Boxplot of Chol
boxplot(heart$Chol,
ylab="Cholesterol (mg/dl)",
main="Boxplot of Cholesterol")

# 4d. QQ Plot of Chol
qqnorm(heart$Chol)
qqline(heart$Chol)

# 5. Summary statistics for Chol
mean(heart$Chol, na.rm=TRUE)
[1] 246.6931
median(heart$Chol, na.rm=TRUE)
[1] 241
sd(heart$Chol, na.rm=TRUE)
[1] 51.77692
IQR(heart$Chol, na.rm=TRUE)
[1] 64
# 6. Max Chol and fractions
max(heart$Chol, na.rm=TRUE)
[1] 564
n <- nrow(heart)
# Fraction normal (<200)
sum(heart$Chol < 200, na.rm=TRUE) / n
[1] 0.1617162
# Fraction high (>240)
sum(heart$Chol > 240, na.rm=TRUE) / n
[1] 0.5016502
# 7. Side-by-side boxplot of Chol by Sex
boxplot(Chol ~ Sex,
data=heart,
xlab="Sex (0=Female, 1=Male)",
ylab="Cholesterol (mg/dl)",
main="Cholesterol by Sex")

str(men$Chol)
int [1:206] 233 286 229 250 236 254 203 192 256 263 ...
nrow(men)
[1] 206
table(heart$Sex)
female male
97 206
# 8. Men only
men <- subset(heart, Sex == "male")
hist(men$Chol,
xlab="Cholesterol (mg/dl)",
main="Histogram of Cholesterol (Men)")

boxplot(men$Chol,
ylab="Cholesterol (mg/dl)",
main="Boxplot of Cholesterol (Men)")

qqnorm(men$Chol)
qqline(men$Chol)

mean(men$Chol, na.rm=TRUE)
[1] 239.6019
median(men$Chol, na.rm=TRUE)
[1] 235
sd(men$Chol, na.rm=TRUE)
[1] 42.64976
IQR(men$Chol, na.rm=TRUE)
[1] 59.75
# 9. Women only
women <- subset(heart, Sex == "female")
hist(women$Chol,
xlab="Cholesterol (mg/dl)",
main="Histogram of Cholesterol (Women)")

boxplot(women$Chol,
ylab="Cholesterol (mg/dl)",
main="Boxplot of Cholesterol (Women)")

qqnorm(women$Chol)
qqline(women$Chol)

mean(women$Chol, na.rm=TRUE)
[1] 261.7526
median(women$Chol, na.rm=TRUE)
[1] 254
sd(women$Chol, na.rm=TRUE)
[1] 64.90089
IQR(women$Chol, na.rm=TRUE)
[1] 87
# 10. MaxHR by heart disease (AHD)
boxplot(MaxHR ~ AHD,
data=heart,
xlab="Heart Disease (Yes/No)",
ylab="Maximum Heart Rate",
main="MaxHR by Heart Disease Status")

Add a new chunk by clicking the Insert Chunk button on the
toolbar or by pressing Cmd+Option+I.
When you save the notebook, an HTML file containing the code and
output will be saved alongside it (click the Preview button or
press Cmd+Shift+K to preview the HTML file).
The preview shows you a rendered HTML copy of the contents of the
editor. Consequently, unlike Knit, Preview does not
run any R code chunks. Instead, the output of the chunk when it was last
run in the editor is displayed.
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKVGhpcyBpcyBhbiBbUiBNYXJrZG93bl0oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbSkgTm90ZWJvb2suIFdoZW4geW91IGV4ZWN1dGUgY29kZSB3aXRoaW4gdGhlIG5vdGVib29rLCB0aGUgcmVzdWx0cyBhcHBlYXIgYmVuZWF0aCB0aGUgY29kZS4gCgpUcnkgZXhlY3V0aW5nIHRoaXMgY2h1bmsgYnkgY2xpY2tpbmcgdGhlICpSdW4qIGJ1dHRvbiB3aXRoaW4gdGhlIGNodW5rIG9yIGJ5IHBsYWNpbmcgeW91ciBjdXJzb3IgaW5zaWRlIGl0IGFuZCBwcmVzc2luZyAqQ21kK1NoaWZ0K0VudGVyKi4gCgpgYGB7cn0KIyBMb2FkIGRhdGFzZXQKaGVhcnQgPC0gcmVhZC5jc3YoIkNsZXZlbGFuZEhlYXJ0LmNzdiIpCmBgYAoKYGBge3J9CiMgMS4gSG93IG1hbnkgcGF0aWVudHMgYXJlIG1hbGU/CnRhYmxlKGhlYXJ0JFNleCkKYGBgCgpgYGB7cn0KIyAyLiBNaXNzaW5nIHZhbHVlcyBpbiBUaGFsCnN1bShpcy5uYShoZWFydCRUaGFsKSkKd2hpY2goaXMubmEoaGVhcnQkVGhhbCkpCmhlYXJ0W3doaWNoKGlzLm5hKGhlYXJ0JFRoYWwpKSwgXQpgYGAKCmBgYHtyfQojIDMuIFNjYXR0ZXJwbG90OiBBZ2UgdnMgTWF4SFIKcGxvdChoZWFydCRBZ2UsIGhlYXJ0JE1heEhSLAogICAgIHhsYWI9IkFnZSAoeWVhcnMpIiwKICAgICB5bGFiPSJNYXhpbXVtIEhlYXJ0IFJhdGUiLAogICAgIG1haW49IlNjYXR0ZXJwbG90IG9mIEFnZSB2cyBNYXhIUiIsCiAgICAgcGNoPTE5LAogICAgIGNvbD0iYmx1ZSIpCmBgYAoKYGBge3J9CiMgNGEuIEhpc3RvZ3JhbSBvZiBDaG9sIChkZWZhdWx0KQpoaXN0KGhlYXJ0JENob2wsCiAgICAgeGxhYj0iQ2hvbGVzdGVyb2wgKG1nL2RsKSIsCiAgICAgbWFpbj0iSGlzdG9ncmFtIG9mIENob2xlc3Rlcm9sIikKYGBgCgpgYGB7cn0KIyA0Yi4gSGlzdG9ncmFtIG9mIENob2wgKDIwIGJyZWFrcykKaGlzdChoZWFydCRDaG9sLAogICAgIGJyZWFrcz0yMCwKICAgICB4bGFiPSJDaG9sZXN0ZXJvbCAobWcvZGwpIiwKICAgICBtYWluPSJIaXN0b2dyYW0gb2YgQ2hvbGVzdGVyb2wgKDIwIGJyZWFrcykiKQpgYGAKCmBgYHtyfQojIDRjLiBCb3hwbG90IG9mIENob2wKYm94cGxvdChoZWFydCRDaG9sLAogICAgICAgIHlsYWI9IkNob2xlc3Rlcm9sIChtZy9kbCkiLAogICAgICAgIG1haW49IkJveHBsb3Qgb2YgQ2hvbGVzdGVyb2wiKQpgYGAKCmBgYHtyfQojIDRkLiBRUSBQbG90IG9mIENob2wKcXFub3JtKGhlYXJ0JENob2wpCnFxbGluZShoZWFydCRDaG9sKQpgYGAKCmBgYHtyfQojIDUuIFN1bW1hcnkgc3RhdGlzdGljcyBmb3IgQ2hvbAptZWFuKGhlYXJ0JENob2wsIG5hLnJtPVRSVUUpCm1lZGlhbihoZWFydCRDaG9sLCBuYS5ybT1UUlVFKQpzZChoZWFydCRDaG9sLCBuYS5ybT1UUlVFKQpJUVIoaGVhcnQkQ2hvbCwgbmEucm09VFJVRSkKYGBgCgpgYGB7cn0KIyA2LiBNYXggQ2hvbCBhbmQgZnJhY3Rpb25zCm1heChoZWFydCRDaG9sLCBuYS5ybT1UUlVFKQoKbiA8LSBucm93KGhlYXJ0KQoKIyBGcmFjdGlvbiBub3JtYWwgKDwyMDApCnN1bShoZWFydCRDaG9sIDwgMjAwLCBuYS5ybT1UUlVFKSAvIG4KCiMgRnJhY3Rpb24gaGlnaCAoPjI0MCkKc3VtKGhlYXJ0JENob2wgPiAyNDAsIG5hLnJtPVRSVUUpIC8gbgpgYGAKCmBgYHtyfQojIDcuIFNpZGUtYnktc2lkZSBib3hwbG90IG9mIENob2wgYnkgU2V4CmJveHBsb3QoQ2hvbCB+IFNleCwKICAgICAgICBkYXRhPWhlYXJ0LAogICAgICAgIHhsYWI9IlNleCAoMD1GZW1hbGUsIDE9TWFsZSkiLAogICAgICAgIHlsYWI9IkNob2xlc3Rlcm9sIChtZy9kbCkiLAogICAgICAgIG1haW49IkNob2xlc3Rlcm9sIGJ5IFNleCIpCmBgYApgYGB7cn0Kc3RyKG1lbiRDaG9sKQpucm93KG1lbikKdGFibGUoaGVhcnQkU2V4KQpgYGAKCmBgYHtyfQojIDguIE1lbiBvbmx5Cm1lbiA8LSBzdWJzZXQoaGVhcnQsIFNleCA9PSAibWFsZSIpCgpoaXN0KG1lbiRDaG9sLAogICAgIHhsYWI9IkNob2xlc3Rlcm9sIChtZy9kbCkiLAogICAgIG1haW49Ikhpc3RvZ3JhbSBvZiBDaG9sZXN0ZXJvbCAoTWVuKSIpCgpib3hwbG90KG1lbiRDaG9sLAogICAgICAgIHlsYWI9IkNob2xlc3Rlcm9sIChtZy9kbCkiLAogICAgICAgIG1haW49IkJveHBsb3Qgb2YgQ2hvbGVzdGVyb2wgKE1lbikiKQoKcXFub3JtKG1lbiRDaG9sKQpxcWxpbmUobWVuJENob2wpCgptZWFuKG1lbiRDaG9sLCBuYS5ybT1UUlVFKQptZWRpYW4obWVuJENob2wsIG5hLnJtPVRSVUUpCnNkKG1lbiRDaG9sLCBuYS5ybT1UUlVFKQpJUVIobWVuJENob2wsIG5hLnJtPVRSVUUpCmBgYAoKYGBge3J9CiMgOS4gV29tZW4gb25seQp3b21lbiA8LSBzdWJzZXQoaGVhcnQsIFNleCA9PSAiZmVtYWxlIikKCmhpc3Qod29tZW4kQ2hvbCwKICAgICB4bGFiPSJDaG9sZXN0ZXJvbCAobWcvZGwpIiwKICAgICBtYWluPSJIaXN0b2dyYW0gb2YgQ2hvbGVzdGVyb2wgKFdvbWVuKSIpCgpib3hwbG90KHdvbWVuJENob2wsCiAgICAgICAgeWxhYj0iQ2hvbGVzdGVyb2wgKG1nL2RsKSIsCiAgICAgICAgbWFpbj0iQm94cGxvdCBvZiBDaG9sZXN0ZXJvbCAoV29tZW4pIikKCnFxbm9ybSh3b21lbiRDaG9sKQpxcWxpbmUod29tZW4kQ2hvbCkKCm1lYW4od29tZW4kQ2hvbCwgbmEucm09VFJVRSkKbWVkaWFuKHdvbWVuJENob2wsIG5hLnJtPVRSVUUpCnNkKHdvbWVuJENob2wsIG5hLnJtPVRSVUUpCklRUih3b21lbiRDaG9sLCBuYS5ybT1UUlVFKQpgYGAKCmBgYHtyfQojIDEwLiBNYXhIUiBieSBoZWFydCBkaXNlYXNlIChBSEQpCmJveHBsb3QoTWF4SFIgfiBBSEQsCiAgICAgICAgZGF0YT1oZWFydCwKICAgICAgICB4bGFiPSJIZWFydCBEaXNlYXNlIChZZXMvTm8pIiwKICAgICAgICB5bGFiPSJNYXhpbXVtIEhlYXJ0IFJhdGUiLAogICAgICAgIG1haW49Ik1heEhSIGJ5IEhlYXJ0IERpc2Vhc2UgU3RhdHVzIikKYGBgCgpBZGQgYSBuZXcgY2h1bmsgYnkgY2xpY2tpbmcgdGhlICpJbnNlcnQgQ2h1bmsqIGJ1dHRvbiBvbiB0aGUgdG9vbGJhciBvciBieSBwcmVzc2luZyAqQ21kK09wdGlvbitJKi4KCldoZW4geW91IHNhdmUgdGhlIG5vdGVib29rLCBhbiBIVE1MIGZpbGUgY29udGFpbmluZyB0aGUgY29kZSBhbmQgb3V0cHV0IHdpbGwgYmUgc2F2ZWQgYWxvbmdzaWRlIGl0IChjbGljayB0aGUgKlByZXZpZXcqIGJ1dHRvbiBvciBwcmVzcyAqQ21kK1NoaWZ0K0sqIHRvIHByZXZpZXcgdGhlIEhUTUwgZmlsZSkuIAoKVGhlIHByZXZpZXcgc2hvd3MgeW91IGEgcmVuZGVyZWQgSFRNTCBjb3B5IG9mIHRoZSBjb250ZW50cyBvZiB0aGUgZWRpdG9yLiBDb25zZXF1ZW50bHksIHVubGlrZSAqS25pdCosICpQcmV2aWV3KiBkb2VzIG5vdCBydW4gYW55IFIgY29kZSBjaHVua3MuIEluc3RlYWQsIHRoZSBvdXRwdXQgb2YgdGhlIGNodW5rIHdoZW4gaXQgd2FzIGxhc3QgcnVuIGluIHRoZSBlZGl0b3IgaXMgZGlzcGxheWVkLgoK