setwd("E:/Semester 2/Data Mining Visualisation/LabAss2")
df <- read.csv('E:/Semester 2/Data Mining Visualisation/LabAss2/bike_buyers.csv')
Data: ID : ID KTP STatus : status apakah maried/singgle gender: laki2/wanita income :pendapatan pembeli& peinjam children : jumlah anak yang dimiliki Education: latar belakang dari pembeli home owner: apakah punya rumah/engga cars: punya mobil/tidak comute distance : jarak rumah pembeli dengan company Region : apakah lokasi di mana peminjam age : usia pembeli /pemonajm purchased : apakah jadi meminjam / tidak
head(df)
## ï..ID Marital.Status Gender Income Children Education Occupation
## 1 12496 Married Female 40000 1 Bachelors Skilled Manual
## 2 24107 Married Male 30000 3 Partial College Clerical
## 3 14177 Married Male 80000 5 Partial College Professional
## 4 24381 Single 70000 0 Bachelors Professional
## 5 25597 Single Male 30000 0 Bachelors Clerical
## 6 13507 Married Female 10000 2 Partial College Manual
## Home.Owner Cars Commute.Distance Region Age Purchased.Bike
## 1 Yes 0 0-1 Miles Europe 42 No
## 2 Yes 1 0-1 Miles Europe 43 No
## 3 No 2 2-5 Miles Europe 60 No
## 4 Yes 1 5-10 Miles Pacific 41 Yes
## 5 No 0 0-1 Miles Europe 36 Yes
## 6 Yes 0 1-2 Miles Europe 50 No
tail(df)
## ï..ID Marital.Status Gender Income Children Education Occupation
## 995 13466 Married Male 80000 5 Partial College Professional
## 996 23731 Married Male 60000 2 High School Professional
## 997 28672 Single Male 70000 4 Graduate Degree Professional
## 998 11809 Married 60000 2 Bachelors Skilled Manual
## 999 19664 Single Male 100000 3 Bachelors Management
## 1000 12121 Single Male 60000 3 High School Professional
## Home.Owner Cars Commute.Distance Region Age Purchased.Bike
## 995 Yes 3 1-2 Miles North America 46 No
## 996 Yes 2 2-5 Miles North America 54 Yes
## 997 Yes 0 2-5 Miles North America 35 Yes
## 998 Yes 0 0-1 Miles North America 38 Yes
## 999 No 3 1-2 Miles North America 38 No
## 1000 Yes 2 10+ Miles North America 53 Yes
EXPLANATION Dari data bike buyers dapat dilihat bahwa tidak ada variabel yang terdistribusi normal. Hanya variabel age/usia sajalah yang hampir berbentuk seperti lonceng (bell curved).
dim(df)
## [1] 1000 13
EXPLANATION Data Insurance terdiri dari 1000 observasi dan 13 variables.
str(df)
## 'data.frame': 1000 obs. of 13 variables:
## $ ï..ID : int 12496 24107 14177 24381 25597 13507 27974 19364 22155 19280 ...
## $ Marital.Status : chr "Married" "Married" "Married" "Single" ...
## $ Gender : chr "Female" "Male" "Male" "" ...
## $ Income : int 40000 30000 80000 70000 30000 10000 160000 40000 20000 NA ...
## $ Children : int 1 3 5 0 0 2 2 1 2 2 ...
## $ Education : chr "Bachelors" "Partial College" "Partial College" "Bachelors" ...
## $ Occupation : chr "Skilled Manual" "Clerical" "Professional" "Professional" ...
## $ Home.Owner : chr "Yes" "Yes" "No" "Yes" ...
## $ Cars : int 0 1 2 1 0 0 4 0 2 1 ...
## $ Commute.Distance: chr "0-1 Miles" "0-1 Miles" "2-5 Miles" "5-10 Miles" ...
## $ Region : chr "Europe" "Europe" "Europe" "Pacific" ...
## $ Age : int 42 43 60 41 36 50 33 43 58 NA ...
## $ Purchased.Bike : chr "No" "No" "No" "Yes" ...
EXPLANATION Data bike buyers trdiri dari 1000 observasi dan 13 variabel yakni ID, Martial Status, Gender, Income, Children, Education, Occupation, Home Owner, Cars, Commute Distance, Region, Age, dan Purchased Bike. Data bike buyrs hanya memiliki 2 jenis tipe data yakni integer yakni pada variabel ID, Income, Children, Cars, dan Age sedangkan tipe data characther dimiliki pada variabel Martial status, Gender, Education, Occupation, Home Owner, Region, dan Purchased Bike.
*Pada data bike buyers jumlah tipe data characther lebih banyak dari pada tipe data integer.
Catatan: int = integer -> nilai bulat char = characther -> nilai yang tidak dapat dioperasikan / string
BasicSummary <- function(df, dgts = 3){
## #
## ################################################################
## #
## # Create a basic summary of variables in the data frame df,
## # a data frame with one row for each column of df giving the
## # variable name, type, number of unique levels, the most
## # frequent level, its frequency and corresponding fraction of
## # records, the number of missing values and its corresponding
## # fraction of records
## #
## ################################################################
## #
m <- ncol(df)
varNames <- colnames(df)
varType <- vector("character",m)
topLevel <- vector("character",m)
topCount <- vector("numeric",m)
missCount <- vector("numeric",m)
levels <- vector("numeric", m)
for (i in 1:m){
x <- df[,i]
varType[i] <- class(x)
xtab <- table(x, useNA = "ifany")
levels[i] <- length(xtab)
nums <- as.numeric(xtab)
maxnum <- max(nums)
topCount[i] <- maxnum
maxIndex <- which.max(nums)
lvls <- names(xtab)
topLevel[i] <- lvls[maxIndex]
missIndex <- which((is.na(x)) | (x == "") | (x == " "))
missCount[i] <- length(missIndex)
}
n <- nrow(df)
topFrac <- round(topCount/n, digits = dgts)
missFrac <- round(missCount/n, digits = dgts)
## #
summaryFrame <- data.frame(variable = varNames, type = varType,
levels = levels, topLevel = topLevel,
topCount = topCount, topFrac = topFrac,
missFreq = missCount, missFrac = missFrac)
return(summaryFrame)
}
BasicSummary(df)
## variable type levels topLevel topCount topFrac missFreq
## 1 ï..ID integer 1000 11000 1 0.001 0
## 2 Marital.Status character 3 Married 535 0.535 7
## 3 Gender character 3 Male 500 0.500 11
## 4 Income integer 17 60000 165 0.165 6
## 5 Children integer 7 0 274 0.274 8
## 6 Education character 5 Bachelors 306 0.306 0
## 7 Occupation character 5 Professional 276 0.276 0
## 8 Home.Owner character 3 Yes 682 0.682 4
## 9 Cars integer 6 2 342 0.342 9
## 10 Commute.Distance character 5 0-1 Miles 366 0.366 0
## 11 Region character 3 North America 508 0.508 0
## 12 Age integer 54 40 40 0.040 8
## 13 Purchased.Bike character 2 No 519 0.519 0
## missFrac
## 1 0.000
## 2 0.007
## 3 0.011
## 4 0.006
## 5 0.008
## 6 0.000
## 7 0.000
## 8 0.004
## 9 0.009
## 10 0.000
## 11 0.000
## 12 0.008
## 13 0.000
EXPLANATION * Data insurance memiliki 1000 observasi dan 13 variabel dengan 2 jenis tipe data. * Pada variabel ID, terdapat 1000 nilai berbeda, hal ini merupakan hal yang wajar dikarenakan ID merupakan penanda masing-masing orang jadi tidak mungkin ada data ID yag terduplikasi. * Pada variabel MArtial Status terdapat 3 nilai yang berbeda, dengan status “menikah” terbanyak yakni sebanyan 535. Pada variabel Gender terdapt 3 nilai yang berbeda, terlihat bahwa pembeli/peminjam sepeda kebanyakan bergender laki-laki yakni sebanyak 500 observasi atau sekitar 50% dari observasi. Pada variabel income terdapat 17 nilai berbeda dengan nilai paling sering muncul adalah 60.000 sebanyak 165 kali. * Pada variabel Children terdapat 7 nilai berbeda dengan pemasukan 0 sebagai nilai yang paling seing muncul. Pada vriabel education terdiri dari 5 nilai berbeda dengan gelar yang paling banyak disandang oleh pembeli maupun pembeli adalah “Bachelors” yakni sebanyak 306 observasi. Pada variabel Occupation, tedapat 5 nilai berbeda dengan pekerjaan yang paling banyak muncul ialah “Professional” yakni sebanyak 276 observasi. * Pada variabel Home Owenr terdapat 3 nilai berbeda dengan “Ya” sebagai modus sebanyak 682, atau dengan kata lain dari 1000 observasi, lebih dari sebagian pembeli maupun peminjam sepeda memiliki rumah. Pada variabel Cars terdapat 6 nilai berbeda dengan 2 sebagai nilai yang paling sering muncul (342 kalib atau setara dengan 34,2%) Pada variabel commute Distance terdpat 5 nilai berbeda dengan modus 0-1 Miles (sebanyak 366 kali atau setara dengan 36,6%) Pada variabel region terdapat 3 nilai berbeda dengan modus “North America” (sebanyak 508 atau setara dengan 50.8%) Pada variabel region terdapat 54 nilai berbeda dengan nilai modus ialah usia 40 tahun (sebanyak 40 atau setara dengan 4%) *Pada variabel prchased Bike terdapt 2 nilau berbeda dengan “No” sebagai nilai yang paling sering muncul(sebanyak 519 atau setara dengan51.9%)
Dari penjelasan diatas didapatkan insight sebagai berikut:
Data bike buyer juga merupakan data yang tidak lengkap atau memiliki nilai missing value yakni pada seluruh variabel kecuali ID, Education, Occupation, Coummute Distance,Region, dan Purchased bike, sehingga perlu dilakukan penanganan khusus sebelum berlanjut pada tahapan pengelolahan data selanjutnya.
Nilia missing value terbanyak tercatat pada variabel gender yakni sebanyak 11 observasi mengalami nilai missing value.
sapply(df[,c(4,5,9,12)],mean, na.rm=TRUE)
## Income Children Cars Age
## 56267.605634 1.910282 1.455096 44.181452
sapply(df[,c(4,5,9,12)],quantile, na.rm=TRUE)
## Income Children Cars Age
## 0% 10000 0 0 25
## 25% 30000 0 1 35
## 50% 60000 2 1 43
## 75% 70000 3 2 52
## 100% 170000 5 4 89
EXPLANATION Dari data diatas dapat di peroleh infoemasi sebagai berikut: * 1. Rata - rata pendapatan dari pembeli/peminjam sepeda adalah 56.267,rata-rata ini terbilang cukup besar sebab pendapatan rata-rata di Amerika ialah sebesar 33,740 dolar. * 2. Mayoritas pembeli/peminjam seepeda memiliki anak sebanyak 1- 2 anak * 3. Rata-rata pembeli/peminjam sepeda juga telah memiliki transportasi pribadi yakni mobil sebanyak 1-2 buah * 4. Rata-rata peminjam/pembeli sepeda berusia 44 tahun * 5. Pendapatan terkecil dari pembeli/peminjam sebpeda adalah 10.00 dolar, dengan usia termuda yakni 25 tahun, dan terdapat pembeli/peminjam sepeda yang belum memiliki anak, serta terdapat pembeli/peminjam sepeda yang tidak memiliki mobil * 6. Sebaliknya pendapatan terbesar dari peminjam/pembeli mobil ialah 170.000 * 7. Terdapat pembeli/peminjma sepeda yang meiliki 5 orang anak (paling banyak) * 8. Terdapat pembeli/peminjma sepeda yang meiliki 4 buah mobil (paling banyak) * 9. Terdapat pembeli/peminjma sepeda yang berusia 89 tahun (paling banyak)
library(Hmisc)
## Warning: package 'Hmisc' was built under R version 4.1.3
## Loading required package: lattice
## Loading required package: survival
## Loading required package: Formula
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.1.3
##
## Attaching package: 'Hmisc'
## The following objects are masked from 'package:base':
##
## format.pval, units
describe(df)
## df
##
## 13 Variables 1000 Observations
## --------------------------------------------------------------------------------
## ï..ID
## n missing distinct Info Mean Gmd .05 .10
## 1000 0 1000 1 19966 6176 11781 12627
## .25 .50 .75 .90 .95
## 15291 19744 24471 27544 28413
##
## lowest : 11000 11047 11061 11090 11116, highest: 29337 29355 29380 29424 29447
## --------------------------------------------------------------------------------
## Marital.Status
## n missing distinct
## 993 7 2
##
## Value Married Single
## Frequency 535 458
## Proportion 0.539 0.461
## --------------------------------------------------------------------------------
## Gender
## n missing distinct
## 989 11 2
##
## Value Female Male
## Frequency 489 500
## Proportion 0.494 0.506
## --------------------------------------------------------------------------------
## Income
## n missing distinct Info Mean Gmd .05 .10
## 994 6 16 0.986 56268 34273 10000 20000
## .25 .50 .75 .90 .95
## 30000 60000 70000 100000 120000
##
## lowest : 10000 20000 30000 40000 50000, highest: 120000 130000 150000 160000 170000
##
## Value 10000 20000 30000 40000 50000 60000 70000 80000 90000
## Frequency 73 74 134 153 40 165 123 90 38
## Proportion 0.073 0.074 0.135 0.154 0.040 0.166 0.124 0.091 0.038
##
## Value 100000 110000 120000 130000 150000 160000 170000
## Frequency 29 16 17 32 4 3 3
## Proportion 0.029 0.016 0.017 0.032 0.004 0.003 0.003
## --------------------------------------------------------------------------------
## Children
## n missing distinct Info Mean Gmd
## 992 8 6 0.96 1.91 1.827
##
## lowest : 0 1 2 3 4, highest: 1 2 3 4 5
##
## Value 0 1 2 3 4 5
## Frequency 274 169 209 133 126 81
## Proportion 0.276 0.170 0.211 0.134 0.127 0.082
## --------------------------------------------------------------------------------
## Education
## n missing distinct
## 1000 0 5
##
## lowest : Bachelors Graduate Degree High School Partial College Partial High School
## highest: Bachelors Graduate Degree High School Partial College Partial High School
##
## Value Bachelors Graduate Degree High School
## Frequency 306 174 179
## Proportion 0.306 0.174 0.179
##
## Value Partial College Partial High School
## Frequency 265 76
## Proportion 0.265 0.076
## --------------------------------------------------------------------------------
## Occupation
## n missing distinct
## 1000 0 5
##
## lowest : Clerical Management Manual Professional Skilled Manual
## highest: Clerical Management Manual Professional Skilled Manual
##
## Value Clerical Management Manual Professional
## Frequency 177 173 119 276
## Proportion 0.177 0.173 0.119 0.276
##
## Value Skilled Manual
## Frequency 255
## Proportion 0.255
## --------------------------------------------------------------------------------
## Home.Owner
## n missing distinct
## 996 4 2
##
## Value No Yes
## Frequency 314 682
## Proportion 0.315 0.685
## --------------------------------------------------------------------------------
## Cars
## n missing distinct Info Mean Gmd
## 991 9 5 0.925 1.455 1.226
##
## lowest : 0 1 2 3 4, highest: 0 1 2 3 4
##
## Value 0 1 2 3 4
## Frequency 238 267 342 85 59
## Proportion 0.240 0.269 0.345 0.086 0.060
## --------------------------------------------------------------------------------
## Commute.Distance
## n missing distinct
## 1000 0 5
##
## lowest : 0-1 Miles 1-2 Miles 10+ Miles 2-5 Miles 5-10 Miles
## highest: 0-1 Miles 1-2 Miles 10+ Miles 2-5 Miles 5-10 Miles
##
## Value 0-1 Miles 1-2 Miles 10+ Miles 2-5 Miles 5-10 Miles
## Frequency 366 169 111 162 192
## Proportion 0.366 0.169 0.111 0.162 0.192
## --------------------------------------------------------------------------------
## Region
## n missing distinct
## 1000 0 3
##
## Value Europe North America Pacific
## Frequency 300 508 192
## Proportion 0.300 0.508 0.192
## --------------------------------------------------------------------------------
## Age
## n missing distinct Info Mean Gmd .05 .10
## 992 8 53 0.999 44.18 12.85 28.00 30.00
## .25 .50 .75 .90 .95
## 35.00 43.00 52.00 60.90 65.45
##
## lowest : 25 26 27 28 29, highest: 73 74 78 80 89
## --------------------------------------------------------------------------------
## Purchased.Bike
## n missing distinct
## 1000 0 2
##
## Value No Yes
## Frequency 519 481
## Proportion 0.519 0.481
## --------------------------------------------------------------------------------
EXPLANATION DAri data diatas dapat dilihat bahwa * 1.Seluruh ID pembeli/peminjam sepeda terdiri dari 5 digit * 2. Status maried pada pembahasan sebelumnya memiliki 3 distinct value setelah diteluri 3 distict value tersebut adalah Married/Single/NA (missing value) * 3. Status gender pada pembahasan sebelumnya memiliki 3 distinct value setelah diteluri 3 distict value tersebut adalah Female/Male/NA (missing value) * 4. Status Education pada pembahasan sebelumnya memiliki 5 distinct value setelah diteluri 5 distict value tersebut adalah Bachelors/Graduate Degree/High School/Partial College/Partial High School * 5. Variabel COmmute Distance berbentuk kategori pilihan jarak * 6. Status Occupation pada pembahasan sebelumnya memiliki 5 distinct value setelah diteluri 5 distict value tersebut adalah Clerical/Management/Manual Professional/Skilled Manual * 7. Data pembeli/penjual sepeda didapat dari orang-orang yang tinggal di bumi belahan barat
###3. Look for data anomalies ####a.qqplot() function
library(car)
## Warning: package 'car' was built under R version 4.1.3
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.1.3
par(mfrow=c(1,2))
qqPlot(df$Income)
## [1] 13 44
qqPlot(df$Age)
## [1] 376 402
EXPLANATION Dari data diatas dapat dilihat bahwa variabel income nilai yang diskrit, tidak terdistribusi normal, dan memiliki cukup banyak outliers. Sedangkan pada variabel age dari grafik di atas terlihat nilai yang cenderung continu, cukup terdistribusi normal ealupun tidak sempurna (skewed), dan lebih sedikit memiliki nilai outliers.
library(car)
par(mfrow=c(1,2))
qqPlot(df$Children)
## [1] 3 13
qqPlot(df$Cars)
## [1] 7 12
EXPLANATION Dari garfik diatas dapat dilihat bahwa baik children maupun cars belum memiliki data yang terdistribusi normal. Dalam hal ini nilai outliers dari belum ditemukan sebab seorang yang memiliki jumlah anak 0 amupun 5 merupakan hal yang wajar, demikian halnya dengan Cars, hal ini merupakan hal yang wajar bila sesorang meiliki 4 mobil ataupun tidak meiliki mobil sama sekali.
out <- boxplot.stats(df$Income)$out
boxplot(df$Income,
ylab = "",
main = "Income"
)
mtext(paste("Outliers: ", paste(out, collapse = ", ")))
out <- boxplot.stats(df$Children)$out
boxplot(df$Children,
ylab = "",
main = "Children"
)
mtext(paste("Outliers: ", paste(out, collapse = ", ")))
out <- boxplot.stats(df$Cars)$out
boxplot(df$Cars,
ylab = "",
main = "Cars"
)
mtext(paste("Outliers: ", paste(out, collapse = ", ")))
out <- boxplot.stats(df$Age)$out
boxplot(df$Age,
ylab = "",
main = "Age"
)
mtext(paste("Outliers: ", paste(out, collapse = ", ")))
####c. Find Outlier()Function
ThreeSigma <- function(x, t = 3){
mu <- mean(x, na.rm = TRUE)
sig <- sd(x, na.rm = TRUE)
if (sig == 0){
message("All non-missing x-values are identical")
}
up <- mu + t * sig
down <- mu - t * sig
out <- list(up = up, down = down)
return(out)
}
Hampel <- function(x, t = 3){
mu <- median(x, na.rm = TRUE)
sig <- mad(x, na.rm = TRUE)
if (sig == 0){
message("Hampel identifer implosion: MAD scale estimate is zero")
}
up <- mu + t * sig
down <- mu - t * sig
out <- list(up = up, down = down)
return(out)
}
BoxplotRule<- function(x, t = 1.5){
xL <- quantile(x, na.rm = TRUE, probs = 0.25, names = FALSE)
xU <- quantile(x, na.rm = TRUE, probs = 0.75, names = FALSE)
Q <- xU - xL
if (Q == 0){
message("Boxplot rule implosion: interquartile distance is zero")
}
up <- xU + t * Q
down <- xU - t * Q
out <- list(up = up, down = down)
return(out)
}
ExtractDetails <- function(x, down, up){
outClass <- rep("N", length(x))
indexLo <- which(x < down)
indexHi <- which(x > up)
outClass[indexLo] <- "L"
outClass[indexHi] <- "U"
index <- union(indexLo, indexHi)
values <- x[index]
outClass <- outClass[index]
nOut <- length(index)
maxNom <- max(x[which(x <= up)])
minNom <- min(x[which(x >= down)])
outList <- list(nOut = nOut, lowLim = down,
upLim = up, minNom = minNom,
maxNom = maxNom, index = index,
values = values,
outClass = outClass)
return(outList)
}
FindOutliers <- function(x, t3 = 3, tH = 3, tb = 1.5){
threeLims <- ThreeSigma(x, t = t3)
HampLims <- Hampel(x, t = tH)
boxLims <- BoxplotRule(x, t = tb)
n <- length(x)
nMiss <- length(which(is.na(x)))
threeList <- ExtractDetails(x, threeLims$down, threeLims$up)
HampList <- ExtractDetails(x, HampLims$down, HampLims$up)
boxList <- ExtractDetails(x, boxLims$down, boxLims$up)
sumFrame <- data.frame(method = "ThreeSigma", n = n,
nMiss = nMiss, nOut = threeList$nOut,
lowLim = threeList$lowLim,
upLim = threeList$upLim,
minNom = threeList$minNom,
maxNom = threeList$maxNom)
upFrame <- data.frame(method = "Hampel", n = n,
nMiss = nMiss, nOut = HampList$nOut,
lowLim = HampList$lowLim,
upLim = HampList$upLim,
minNom = HampList$minNom,
maxNom = HampList$maxNom)
sumFrame <- rbind.data.frame(sumFrame, upFrame)
upFrame <- data.frame(method = "BoxplotRule", n = n,
nMiss = nMiss, nOut = boxList$nOut,
lowLim = boxList$lowLim,
upLim = boxList$upLim,
minNom = boxList$minNom,
maxNom = boxList$maxNom)
sumFrame <- rbind.data.frame(sumFrame, upFrame)
threeFrame <- data.frame(index = threeList$index,
values = threeList$values,
type = threeList$outClass)
HampFrame <- data.frame(index = HampList$index,
values = HampList$values,
type = HampList$outClass)
boxFrame <- data.frame(index = boxList$index,
values = boxList$values,
type = boxList$outClass)
outList <- list(summary = sumFrame, threeSigma = threeFrame,
Hampel = HampFrame, boxplotRule = boxFrame)
return(outList)
}
fullSummary <- FindOutliers(df$Income)
fullSummary$summary
## method n nMiss nOut lowLim upLim minNom maxNom
## 1 ThreeSigma 1000 6 10 -36935.85 149471.1 10000 130000
## 2 Hampel 1000 6 10 -28956.00 148956.0 10000 130000
## 3 BoxplotRule 1000 6 10 10000.00 130000.0 10000 130000
fullSummary <- FindOutliers(df$Children)
fullSummary$summary
## method n nMiss nOut lowLim upLim minNom maxNom
## 1 ThreeSigma 1000 8 0 -2.970448 6.791013 0 5
## 2 Hampel 1000 8 0 -2.447800 6.447800 0 5
## 3 BoxplotRule 1000 8 0 -1.500000 7.500000 0 5
fullSummary <- FindOutliers(df$Cars)
fullSummary$summary
## method n nMiss nOut lowLim upLim minNom maxNom
## 1 ThreeSigma 1000 9 0 -1.91017 4.820362 0 4
## 2 Hampel 1000 9 0 -3.44780 5.447800 0 4
## 3 BoxplotRule 1000 9 297 0.50000 3.500000 1 3
fullSummary <- FindOutliers(df$Age)
fullSummary$summary
## method n nMiss nOut lowLim upLim minNom maxNom
## 1 ThreeSigma 1000 8 2 10.09543 78.26747 25 78
## 2 Hampel 1000 8 2 7.41760 78.58240 25 78
## 3 BoxplotRule 1000 8 25 26.50000 77.50000 27 74
EXPLANATION Berdasarkan ketiga metode diatas dapat dilihat bahwa pada variabel vars dan chlidren tidak memiliki nilai outliers. Sedangkan untuk variabel Income terdapat 10 ouliers, sedangkan untuk Age terdapat 2 ouliers.
library(lattice)
df_new = subset(df, select = c(4,5,9,12))
df_new <- na.omit(df_new)
df_new <- as.data.frame(df_new)
cor_data <- cor(df_new[,setdiff(names(df_new), 'Age')])
#Numerical Correlation Matrix
cor_data
## Income Children Cars
## Income 1.0000000 0.2580830 0.4361234
## Children 0.2580830 1.0000000 0.2725464
## Cars 0.4361234 0.2725464 1.0000000
corrplot::corrplot(cor_data)
EXPLANATION Hubungan yang cukup kuat terlihat di antara
cars dengan income. sedangkan children dengan income memiliki hubungan
positif yang tidak terlalu kuat.
nf <- layout( matrix(c(1,1,2,3), nrow=2, byrow=TRUE) )
# Fill with plots
#buat kategori dengan kategori
mosaicplot(Age ~ Income, data = df, main = "", las = 1, shade = TRUE)
# Scatterplot between sugars and carbs
plot(df$Children, df$Age)
boxplot(Cars ~ Income, data= df, xlab = "Cars", ylab ="Income")