#('create_datasets.R')
library(readr)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
library(openintro)
## Loading required package: airports
## Loading required package: cherryblossom
## Loading required package: usdata
cars <- read.csv("https://assets.datacamp.com/production/course_1796/datasets/cars04.csv")
comics <- read.csv("https://assets.datacamp.com/production/course_1796/datasets/comics.csv")
life <- read.csv("https://assets.datacamp.com/production/course_1796/datasets/life_exp_raw.csv")
head(comics)
## name id align eye hair
## 1 Spider-Man (Peter Parker) Secret Good Hazel Eyes Brown Hair
## 2 Captain America (Steven Rogers) Public Good Blue Eyes White Hair
## 3 Wolverine (James \\"Logan\\" Howlett) Public Neutral Blue Eyes Black Hair
## 4 Iron Man (Anthony \\"Tony\\" Stark) Public Good Blue Eyes Black Hair
## 5 Thor (Thor Odinson) No Dual Good Blue Eyes Blond Hair
## 6 Benjamin Grimm (Earth-616) Public Good Blue Eyes No Hair
## gender gsm alive appearances first_appear publisher
## 1 Male <NA> Living Characters 4043 Aug-62 marvel
## 2 Male <NA> Living Characters 3360 Mar-41 marvel
## 3 Male <NA> Living Characters 3061 Oct-74 marvel
## 4 Male <NA> Living Characters 2961 Mar-63 marvel
## 5 Male <NA> Living Characters 2258 Nov-50 marvel
## 6 Male <NA> Living Characters 2255 Nov-61 marvel
#Explanation : Dataset comics berisikan 11 kolom, dengan 10 kolom memiliki tipe data karakter, dan 1 kolom yakni appearances bertipe data integer. Name adalah nama dari karakter comics, id menunjukkan identitasnya, rahasia atau terbuka. Align adalah peran dari karakter. Eye adalah warna mata karakter. Hair warna rambut, gender, gsm, alive whether the characters deceased or living. First appear, the date when they appear at first, and last publisher name.
#check levels of align
levels(comics$align)
## NULL
comics$align <- as.factor(comics$align)
levels(comics$align)
## [1] "Bad" "Good" "Neutral"
## [4] "Reformed Criminals"
#Explanation : Align (Keselerasan) dalam datasets comics terdiri atas bad, neutral, good, atau reformed criminals.
#check levels of gender
gender <- as.factor(comics$gender)
levels(gender)
## [1] "Female" "Male" "Other"
#Explanation : Gender dalam comics terdiri atas female, male dan juga other.
#create 2 way contigency table
table(comics$align, comics$gender)
##
## Female Male Other
## Bad 1573 7561 32
## Good 2490 4809 17
## Neutral 836 1799 17
## Reformed Criminals 1 2 0
#Explanation : Most of female character has bad good align, most of male character has bad aligns and gender other has bad aligns.
# Print tab
tab <- table(comics$align, comics$gender)
tab
##
## Female Male Other
## Bad 1573 7561 32
## Good 2490 4809 17
## Neutral 836 1799 17
## Reformed Criminals 1 2 0
# Remove align level
comics <- comics %>% filter(align != 'Reformed Criminals') %>%
droplevels()
levels(comics$align)
## [1] "Bad" "Good" "Neutral"
# %>% = forward pipe operator
#Explanation : Menghapus elemen reformed criminals untuk membuat proses analisis lebih ringkas. Jika dibandingkan dengan align lain, reformed Criminals tidak memiliki banyak elemen sehingga tidak berpengaruh besar terhadap hasil akhir dataset.
Side-by-side barcharts
# Create side-by-side barchart of gender by alignment
ggplot(comics, aes(x = align, fill = gender)) +
geom_bar(position = 'dodge')
Terdapat 3 align, bad, good dan neutral. Dari setiap align, semuanya
didominasi oleh gender male. Kemudian diikuti tingginya bar chart gender
female, NA dan terakhir other.
# Create side-by-side barchart of alignment by gender
ggplot(comics, aes(x=gender, fill = align)) +
geom_bar(position = 'dodge') +
theme(axis.text.x = element_text(angle = 90))
Terdapat NA sebagai nilai yang tidak diketahui. Male merupakan bar
tertinggi di setiap jenis align, diikuti gender female kemudian NA.
Sedangkan other adalah gender dengan bar terendah di setiap align. Dapat
disimpulkan, gender laki-laki menjadi mayoritas di setiap align.
#Count vs Proportions
# simplify display format
options(scipen = 999, digits = 3)
## create table of counts
tbl_cnt <- table(comics$id, comics$align)
tbl_cnt
##
## Bad Good Neutral
## No Dual 474 647 390
## Public 2172 2930 965
## Secret 4493 2475 959
## Unknown 7 0 2
Tabel menunjukkan banyaknya variabel align yang memiliki variabel id. Karakter yang memiliki align bad, kebanyakan merahasiakan identitasnya. Kemudian, karakter yang memiliki align good (peran baik, ex. superhero) kebanyakan tidak merahasiakan identitasnya (public). Terakhir karakter dengan neutral align (peran netral) paling banyak tidak merahasiakan identitasnya (public).
# Proportional table
# All values add up to 1
prop.table(tbl_cnt)
##
## Bad Good Neutral
## No Dual 0.030553 0.041704 0.025139
## Public 0.140003 0.188862 0.062202
## Secret 0.289609 0.159533 0.061815
## Unknown 0.000451 0.000000 0.000129
#Explanation : Banyaknya karakter komik yang memiliki align bad(peran buruk) dan merahasiakan identitasnya mencapai hampir 29%. Kemudian 18% dari keseluruhan dimiliki oleh karakter dengan align good(peran baik) dan identitas yang dipublikasikan. Lalu mayoritas dari karakter dengan peran netral memiliki identitas yang dipublikasi, yaitu sebanyak lebih dari 6%.
sum(prop.table(tbl_cnt))
## [1] 1
#Explanation : Tabel proporsi di atas secara keseluruhan berjumlah 1 sehingga dapat dideklarasikan dalam bentuk persentase.
prop.table(tbl_cnt, 1)
##
## Bad Good Neutral
## No Dual 0.314 0.428 0.258
## Public 0.358 0.483 0.159
## Secret 0.567 0.312 0.121
## Unknown 0.778 0.000 0.222
#Explanation : Berbeda dengan tabel sebelumnya, proporsi tabel kali ini dihitung berdasarkan baris / variabel identity(id). Berdasarkan tabel, mayoritas dari no dual berasal dari karakter dengan align good(peran baik), yakni mencapai 42,8% dari keseluruhan no dual. Mayoritas dari public, adalah karakter dengan peran baik dengan persentase 48,3%. Kemudian karakter dengan bad align yang menjadi mayoritas identitas secret (56,7%). Terakhir untuk variabel unknown didominasi karakter dengan bad align (7,78%).
prop.table(tbl_cnt, 2)
##
## Bad Good Neutral
## No Dual 0.066331 0.106907 0.168394
## Public 0.303946 0.484137 0.416667
## Secret 0.628743 0.408956 0.414076
## Unknown 0.000980 0.000000 0.000864
#Explanation : Proporsi tabel kali ini dihitung berdasarkan kolom/variabel align. Align Bad didominasi oleh karakter yang identitasnya dirahasiakan, good paling banyak diisi oleh karakter dengan identitas publik, dan karakter terbanyak dengan peran netral memiliki identitas yang dipublikasi.
ggplot(comics, aes(x = id, fill = align)) +
geom_bar(position = "fill") +
ylab("proportion")
#Explanation : Berdasarkan geombar, kita dapat mengetahui data paling
banyak di setiap variabel id dengan melihat besarnya area yang dimiliki
setiap elemen align. Bad align adalah data paling banyak di setiap
elemen variabel id, kecuali public dengan Good align sebagai data
terbanyak.
ggplot(comics, aes(x = align, fill = id)) +
geom_bar(position = "fill") +
ylab("proportion")
#Explanation : Geom bar di atas menunjukkan banyaknya data id dalam
variabel align. Geom bar menunjukkan proporsi data dengan area yang
digambarkan. Semakin besar areanya, maka semakin banyak datanya.
Identitas secret memiliki bad align terbanyak, dan identitas publik
memiliki good align dan neutral align paling banyak dibanding yang
lain.
#Conditional Proportions
tab <- table(comics$align, comics$gender)
options(scipen = 999, digits = 3) # Print fewer digits
prop.table(tab) # Joint proportions
##
## Female Male Other
## Bad 0.082210 0.395160 0.001672
## Good 0.130135 0.251333 0.000888
## Neutral 0.043692 0.094021 0.000888
#Explanation : Proporsi ini merupakan joint/gabungan, sehingga keseluruhan dari data adalah 1 atau 100%. Data tersebut menunjukkan banyaknya karakter dengan gender female yang memiliki align good adalah 13% dari keseluruhan, kemudian male dengan align bad berjumlah 39,5%, dan 25% dari data adalah male dengan good align.
prop.table(tab, 2)
##
## Female Male Other
## Bad 0.321 0.534 0.485
## Good 0.508 0.339 0.258
## Neutral 0.171 0.127 0.258
#Explanation : Proporsi tabel dihitung berdasarkan kolom/variabel gender. Pada gender Female, lebih dari 50% memiliki align good, kemudian pada gender male, lebih dari 50% berisikan karakter dengan bad align, dan gender other didominasi oleh karakter dengan peran buruk(bad align).
# Plot of gender by align
ggplot(comics, aes(x = align, fill = gender)) +
geom_bar()
#Explanation : Geom bar di atas menunjukkan banyaknya data gender dalam
variabel align berdasarkan jumlahnya, bukan areanya. Gender male
memiliki data terbanyak di setiap elemen variabel align.
# Plot proportion of gender, conditional on align
ggplot(comics, aes(x = align, fill = gender)) +
geom_bar(position = "fill")
#Explanation : Geom bar di atas menunjukkan banyaknya data gender dalam
variabel align. Geom bar menunjukkan proporsi data dengan area yang
digambarkan. Semakin besar areanya, maka semakin banyak datanya. Gender
male memiliki data terbanyak di setiap elemen variabel align.
# Can use table function on just one variable
# This is called a marginal distribution
table(comics$id)
##
## No Dual Public Secret Unknown
## 1511 6067 7927 9
#Explanation : Identitas secret merupakan identitas yang paling banyak digunakan dalam dataset.
# Simple barchart
ggplot(comics, aes(x = id)) +
geom_bar()
#Explanation : Geom bar di atas ini menunjukkan banyaknya data
berdasarkan variabel identitasnya. Bar tertinggi adalah secret, dan bar
terendah adalah unknown.
ggplot(comics, aes(x = id)) +
geom_bar() +
facet_wrap(~align)
#Explanation : Geom bar di atas menunjukkan banyaknya data dengan
variabel identitas yang dikelompokkan berdasarkan variabel align. Pada
align bad, secret merupakan bar tertinggi dan unknown sebagai bar
terendah. Pada align good, bar tertinggi adalah identitas public dan bar
terendah no dual, serta tidak ada data unknown. Dan pada align neutral,
data public mendominasi diikuti dengan data secret yang memiliki selisih
tidak jauh, dan data terendah adalah unknown.
# Change the order of the levels in align
comics$align <- factor(comics$align,
levels = c("Bad", "Neutral", "Good"))
# Create plot of align
ggplot(comics, aes(x = align)) +
geom_bar()
#Explanation : Dari geom bar, diketahui bad align sebagai mayoritas
memiliki jumlah lebih dari 7500, dan neutral data terendah dengan jumlah
tidak lebih dari 5000.
# Plot of alignment broken down by gender
ggplot(comics, aes(x = align)) +
geom_bar() +
facet_wrap(~ gender)
#Explanation : Geom bar diatas menunjukkan jumlah setiap variabel align
yang dikelompokkan berdasarkan variabel gender. Female didominasi oleh
elemen good, Male, other dan NA didominasi oleh elemen bad.
pies <- data.frame(flavors = as.factor(rep(c("apple", "blueberry", "boston creme", "cherry", "key lime", "pumpkin", "strawberry"), times = c(17, 14, 15, 13, 16, 12, 11))))
# Put levels of flavor in decending order
lev <- c("apple", "key lime", "boston creme", "blueberry", "cherry", "pumpkin", "strawberry")
pies$flavor <- factor(pies$flavor, levels = lev)
head(pies$flavor)
## [1] apple apple apple apple apple apple
## Levels: apple key lime boston creme blueberry cherry pumpkin strawberry
# Create barchart of flavor
ggplot(pies, aes(x = flavor)) +
geom_bar(fill = "chartreuse") +
theme(axis.text.x = element_text(angle = 90))
#Explanation : Berdasarkan barchart, rasa yang paling banyak adalah apel
dan paling sedikit adalah stroberi.
#Exploring Numerical Data
# Learn data structure
str(cars)
## 'data.frame': 428 obs. of 19 variables:
## $ name : chr "Chevrolet Aveo 4dr" "Chevrolet Aveo LS 4dr hatch" "Chevrolet Cavalier 2dr" "Chevrolet Cavalier 4dr" ...
## $ sports_car : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
## $ suv : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
## $ wagon : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
## $ minivan : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
## $ pickup : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
## $ all_wheel : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
## $ rear_wheel : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
## $ msrp : int 11690 12585 14610 14810 16385 13670 15040 13270 13730 15460 ...
## $ dealer_cost: int 10965 11802 13697 13884 15357 12849 14086 12482 12906 14496 ...
## $ eng_size : num 1.6 1.6 2.2 2.2 2.2 2 2 2 2 2 ...
## $ ncyl : int 4 4 4 4 4 4 4 4 4 4 ...
## $ horsepwr : int 103 103 140 140 140 132 132 130 110 130 ...
## $ city_mpg : int 28 28 26 26 26 29 29 26 27 26 ...
## $ hwy_mpg : int 34 34 37 37 37 36 36 33 36 33 ...
## $ weight : int 2370 2348 2617 2676 2617 2581 2626 2612 2606 2606 ...
## $ wheel_base : int 98 98 104 104 104 105 105 103 103 103 ...
## $ length : int 167 153 183 183 183 174 174 168 168 168 ...
## $ width : int 66 66 69 68 69 67 67 67 67 67 ...
#Explanation : Terdapat 19 variabel, 7 diantaranya bertipe data logi, 1 variabel karakter, 1 variabel numerik dan sisanya variabel integer.
# A dot plot shows all the datapoints
ggplot(cars, aes(x = weight)) +
geom_dotplot(dotsize = 0.4)
## Bin width defaults to 1/30 of the range of the data. Pick better value with `binwidth`.
## Warning: Removed 2 rows containing non-finite values (stat_bindot).
#Explanation : geom bar di atas menunjukkan jumlah weight yang dimiliki
setiap mobil. Berat mobil yang paling banyak dimiliki mobil berkisar
antara 3000 - 4000.
# A histogram groups the points into bins so it does not get overwhelming
ggplot(cars, aes(x = weight)) +
geom_histogram(dotsize = 0.4, binwidth = 500)
## Warning: Ignoring unknown parameters: dotsize
## Warning: Removed 2 rows containing non-finite values (stat_bin).
#Explanation : Berdasarkan histogram di atas, mayoritas berat mobil pada
dataset berada pada kisaran 3000-4000.
# A density plot gives a bigger picture representation of the distribution
# It more helpful when there is a lot of data
ggplot(cars, aes(x = weight)) +
geom_density()
## Warning: Removed 2 rows containing non-finite values (stat_density).
#Explanation : Density plot menunjukkan distribusi dataset, selain itu
density plot juga menunjukkan mayoritas data, yakni berada pada
3000-4000.
# A boxplot is a good way to just show the summary info of the distriubtion
ggplot(cars, aes(x = 1, y = weight)) +
geom_boxplot() +
coord_flip()
## Warning: Removed 2 rows containing non-finite values (stat_boxplot).
#Explanation : Dari boxplot, ditunjukkan mayoritas data berat mobil
berada pada 3000-4000.
# Create faceted histogram
ggplot(cars, aes(x = city_mpg)) +
geom_histogram() +
facet_wrap(~ suv)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 14 rows containing non-finite values (stat_bin).
#Explanation : mayoritas mobil dengan suv(sport utility vehicle) tidak
memiliki city mpg(miles per galon)
unique(cars$ncyl)
## [1] 4 6 3 8 5 12 10 -1
#Explanation : Mobil pada datset memiliki silinder -1, 3, 4, 5, 6, 8, 10, atau 12.
table(cars$ncyl)
##
## -1 3 4 5 6 8 10 12
## 2 1 136 7 190 87 2 3
#Explanation : Mayoritas mobil memiliki 4, 6 atau 8 silinder.
# Filter cars with 4, 6, 8 cylinders
common_cyl <- filter(cars, ncyl %in% c(4,6,8))
# Create box plots of city mpg by ncyl
ggplot(common_cyl, aes(x = as.factor(ncyl), y = city_mpg)) +
geom_boxplot()
## Warning: Removed 11 rows containing non-finite values (stat_boxplot).
#Explanation : Menggunakan data silinder 4, 6 dan 8 karena data yang
lain hanya sedikit sehingga tidak memberikan perubahan besar jika
dihapus.Dari boxplot, 4 merupakan banyaknya silinder yang paling banyak
dipakai berkisar antara 20-30.
# Create overlaid density plots for same data
ggplot(common_cyl, aes(x = city_mpg, fill = as.factor(ncyl))) +
geom_density(alpha = .3)
## Warning: Removed 11 rows containing non-finite values (stat_density).
#Explanation : silinder 4 memiliki distribusi yang paling bagus
dibanding yang lain.
# Create hist of horsepwr
cars %>%
ggplot(aes(horsepwr)) +
geom_histogram() +
ggtitle("Horsepower distribution")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
#Explanation : Mayoritas mobil memiliki horsepower di antara
200-250.
# Create hist of horsepwr for affordable cars
cars %>%
filter(msrp < 25000) %>%
ggplot(aes(horsepwr)) +
geom_histogram() +
xlim(c(90, 550)) +
ggtitle("Horsepower distribtion for msrp < 25000")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 1 rows containing non-finite values (stat_bin).
## Warning: Removed 2 rows containing missing values (geom_bar).
#Explanation : Untuk harga yang lebih terjangkau, mayoritas mobilnya
memiliki horsepower antara 100-200.
# Create hist of horsepwr with binwidth of 3
cars %>%
ggplot(aes(horsepwr)) +
geom_histogram(binwidth = 3) +
ggtitle("binwidth = 3")
# Create hist of horsepwr with binwidth of 30
cars %>%
ggplot(aes(horsepwr)) +
geom_histogram(binwidth = 30) +
ggtitle("binwidth = 30")
#Explanation : Mayoritas mobil menggunakan horsepower 200-250.
# Create hist of horsepwr with binwidth of 60
cars %>%
ggplot(aes(horsepwr)) +
geom_histogram(binwidth = 60) +
ggtitle("binwidth = 60")
# Construct box plot of msrp
cars %>%
ggplot(aes(x=1, y=msrp))+geom_boxplot()
cars %>%
ggplot(aes(x = 1, y = msrp)) +
geom_boxplot()
#Explanation :
cars %>%
ggplot(aes(x = width)) +
geom_density()
## Warning: Removed 28 rows containing non-finite values (stat_density).
#Explanation : Density plot menunjukkan mayoritas lebar(width) mobil
berada pada kisaran 70-72,5.
# Facet hists using hwy mileage and ncyl
common_cyl %>%
ggplot(aes(x = hwy_mpg)) +
geom_histogram() +
facet_grid(ncyl ~ suv) +
ggtitle("hwy_mpg by ncyl and suv")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 11 rows containing non-finite values (stat_bin).
head(life)
## State County fips Year Female.life.expectancy..years.
## 1 Alabama Autauga County 1001 1985 77.0
## 2 Alabama Baldwin County 1003 1985 78.8
## 3 Alabama Barbour County 1005 1985 76.0
## 4 Alabama Bibb County 1007 1985 76.6
## 5 Alabama Blount County 1009 1985 78.9
## 6 Alabama Bullock County 1011 1985 75.1
## Female.life.expectancy..national..years.
## 1 77.8
## 2 77.8
## 3 77.8
## 4 77.8
## 5 77.8
## 6 77.8
## Female.life.expectancy..state..years. Male.life.expectancy..years.
## 1 76.9 68.1
## 2 76.9 71.1
## 3 76.9 66.8
## 4 76.9 67.3
## 5 76.9 70.6
## 6 76.9 66.6
## Male.life.expectancy..national..years. Male.life.expectancy..state..years.
## 1 70.8 69.1
## 2 70.8 69.1
## 3 70.8 69.1
## 4 70.8 69.1
## 5 70.8 69.1
## 6 70.8 69.1
#Explanation : Terdapat 10 kolom, 6 bertipe data double, 2 variabel integer, dan 2 variabel karakter. Terdiri atas kolom state, negara, fips, tahun, harapan hidup perempuan per tahun, harapan hidup perempuan secara nasional per tahun, harapan hidup perempuan per negara setiap tahun, harapan hidup laki-laki per tahun, harapan hidup laki-laki secara nasional per tahun, harapan hidup laki-laki per negara setiap tahun.
x <- head(round(life$Female.life.expectancy..years.), 11)
x
## [1] 77 79 76 77 79 75 77 77 77 78 77
#Explanation : Dari 11 data teratas, terlihat harapan hidup perempuan berada di kisaran 75 - 79 tahun.
sum(x)/11
## [1] 77.2
mean(x)
## [1] 77.2
#Explanation : Dari 11 data teratas, terlihat harapan hidup perempuan berada di rata-rata 77,2 tahun.
sort(x)
## [1] 75 76 77 77 77 77 77 77 78 79 79
median(x)
## [1] 77
#Explanation : 77 tahun merupakan angka median dari harapan hidup 11 data perempuan teratas.
table(x)
## x
## 75 76 77 78 79
## 1 1 6 1 2
library(gapminder)
str(gapminder)
## tibble [1,704 x 6] (S3: tbl_df/tbl/data.frame)
## $ country : Factor w/ 142 levels "Afghanistan",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ continent: Factor w/ 5 levels "Africa","Americas",..: 3 3 3 3 3 3 3 3 3 3 ...
## $ year : int [1:1704] 1952 1957 1962 1967 1972 1977 1982 1987 1992 1997 ...
## $ lifeExp : num [1:1704] 28.8 30.3 32 34 36.1 ...
## $ pop : int [1:1704] 8425333 9240934 10267083 11537966 13079460 14880372 12881816 13867957 16317921 22227415 ...
## $ gdpPercap: num [1:1704] 779 821 853 836 740 ...
#Explanation :
Terdapat atas 6 kolom, 2 variabel faktor, 2 variabel integer dan 2 variabel numerik. Terdiri atas negara, benua, tahun, harapan hidup, pop dan gdp perkapita.
# Create dataset of 2007 data
gap2007 <- filter(gapminder, year == 2007)
# Compute groupwise mean and median lifeExp
gap2007 %>%
group_by(continent) %>%
summarize(mean(lifeExp),
median(lifeExp))
## # A tibble: 5 x 3
## continent `mean(lifeExp)` `median(lifeExp)`
## <fct> <dbl> <dbl>
## 1 Africa 54.8 52.9
## 2 Americas 73.6 72.9
## 3 Asia 70.7 72.4
## 4 Europe 77.6 78.6
## 5 Oceania 80.7 80.7
#Explanation : Terdapat 3 kolom, 2 variabel double dan 1 variabel faktor, terdiri atas continent(benua), mean/rata-rata harapan hidup, dan median/nilai tengah dari harapan hidup.
# Generate box plots of lifeExp for each continent
gap2007 %>%
ggplot(aes(x = continent, y = lifeExp)) +
geom_boxplot()
#Explanation : Oceania merupakan benua dengan harapan hidup paling
tinggi yakni di atas 80 tahun. Kemudian afrika sebagai benua dengan
harapan hidup paling rendah yakni berada pada kisaran 45-60.
Measures of variability
x
## [1] 77 79 76 77 79 75 77 77 77 78 77
# Look at the difference between each point and the mean
sum(x - mean(x))
## [1] -0.0000000000000568
#Explanation :
# Square each difference to get rid of negatives then sum
sum((x - mean(x))^2)
## [1] 13.6
#Explanation :
sum((x - mean(x))^2)/(length(x) - 1)
## [1] 1.36
#Explanation :
var(x)
## [1] 1.36
sqrt(sum((x - mean(x))^2)/(length(x) - 1))
## [1] 1.17
sd(x)
## [1] 1.17
Inter Quartile Range
summary(x)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 75.0 77.0 77.0 77.2 77.5 79.0
IQR(x)
## [1] 0.5
Range
max(x)
## [1] 79
min(x)
## [1] 75
diff(range(x))
## [1] 4
– Calculate spread measures
str(gap2007)
## tibble [142 x 6] (S3: tbl_df/tbl/data.frame)
## $ country : Factor w/ 142 levels "Afghanistan",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ continent: Factor w/ 5 levels "Africa","Americas",..: 3 4 1 1 2 5 4 3 3 4 ...
## $ year : int [1:142] 2007 2007 2007 2007 2007 2007 2007 2007 2007 2007 ...
## $ lifeExp : num [1:142] 43.8 76.4 72.3 42.7 75.3 ...
## $ pop : int [1:142] 31889923 3600523 33333216 12420476 40301927 20434176 8199783 708573 150448339 10392226 ...
## $ gdpPercap: num [1:142] 975 5937 6223 4797 12779 ...
#Explanation : Terdiri atas 6 kolom, country(negara), benua, tahun, harapan hidup, populasi, gdp perkapita.
# Compute groupwise measures of spread
gap2007 %>%
group_by(continent) %>%
summarize(sd(lifeExp),
IQR(lifeExp),
n())
## # A tibble: 5 x 4
## continent `sd(lifeExp)` `IQR(lifeExp)` `n()`
## <fct> <dbl> <dbl> <int>
## 1 Africa 9.63 11.6 52
## 2 Americas 4.44 4.63 25
## 3 Asia 7.96 10.2 33
## 4 Europe 2.98 4.78 30
## 5 Oceania 0.729 0.516 2
#Explanation :
# Generate overlaid density plots
gap2007 %>%
ggplot(aes(x = lifeExp, fill = continent)) +
geom_density(alpha = 0.3)
#Explanation : Dari ke 5 benua yang ada pada data, tidak ada yang
memiliki distribusi cenderung normal.
Choose measures for center and spread
# Compute stats for lifeExp in Americas
head(gap2007)
## # A tibble: 6 x 6
## country continent year lifeExp pop gdpPercap
## <fct> <fct> <int> <dbl> <int> <dbl>
## 1 Afghanistan Asia 2007 43.8 31889923 975.
## 2 Albania Europe 2007 76.4 3600523 5937.
## 3 Algeria Africa 2007 72.3 33333216 6223.
## 4 Angola Africa 2007 42.7 12420476 4797.
## 5 Argentina Americas 2007 75.3 40301927 12779.
## 6 Australia Oceania 2007 81.2 20434176 34435.
gap2007 %>%
filter(continent == "Americas") %>%
summarize(mean(lifeExp),
sd(lifeExp))
## # A tibble: 1 x 2
## `mean(lifeExp)` `sd(lifeExp)`
## <dbl> <dbl>
## 1 73.6 4.44
# Compute stats for population
gap2007 %>%
summarize(median(pop),
IQR(pop))
## # A tibble: 1 x 2
## `median(pop)` `IQR(pop)`
## <dbl> <dbl>
## 1 10517531 26702008.