Berikut Packages yang diperlukan dalam menyusun laporan ini
# Berguna untuk memanipulasi data
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
# Berguna untuk imputasi nilai
library(Hmisc)
## Warning: package 'Hmisc' was built under R version 3.6.3
## Loading required package: lattice
## Loading required package: survival
## Warning: package 'survival' was built under R version 3.6.3
## Loading required package: Formula
## Loading required package: ggplot2
##
## Attaching package: 'Hmisc'
## The following objects are masked from 'package:dplyr':
##
## src, summarize
## The following objects are masked from 'package:base':
##
## format.pval, units
# Berguna untuk menyusun tabel
library(knitr)
# Berguna untuk membuat tabel yang kompleks
library(kableExtra)
##
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
##
## group_rows
# Berguna untuk membuat catatan
library(rmarkdown)
# Berguna untuk merapikan dataset
library(tidyr)
# Berguna untuk transformasi
library(forecast)
## Warning: package 'forecast' was built under R version 3.6.3
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
# Berguna untuk memanipulasi tanggal
library(lubridate)
##
## Attaching package: 'lubridate'
## The following object is masked from 'package:base':
##
## date
# Bergua untuk korelasi
library(psychometric)
## Warning: package 'psychometric' was built under R version 3.6.3
## Loading required package: multilevel
## Warning: package 'multilevel' was built under R version 3.6.3
## Loading required package: nlme
##
## Attaching package: 'nlme'
## The following object is masked from 'package:forecast':
##
## getResponse
## The following object is masked from 'package:dplyr':
##
## collapse
## Loading required package: MASS
##
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
##
## select
##
## Attaching package: 'psychometric'
## The following object is masked from 'package:ggplot2':
##
## alpha
# BErguna untuk ouliers Outliers
library(outliers)
Tujuan dari laporan ini adalah untuk mengetahui apakah ada korelasi antara tingkat bunuh diri dan tingkat gangguan kesehatan mental selama periode waktu tertentu. Untuk membuat penyelidikan ini, saya telah mengambil tiga kumpulan data dan memproses data sebelumnya sebagai berikut.
Dataset “Angka Bunuh Diri”, “Gangguan_Mental” dan “Populasi” data berdasarkan negara, milik Tahun 1990 hingga 2016 sudah diperhitungkan. Nama kolom disertakan. Dataset dari data “Gangguan_Mental” digabungkan dengan data “Angka Bunuh Diri” berdasarkan variabel “Tahun”, “Negara” dan “kode”. Pada dataset yang digabungkan, verifikasi dan konversi tipe data dilakukan. Untuk pemahamannya, nilai rata-rata Angka Bunuh Diri dan “tingkat gangguan mental” dihitung dan persentase tingkat bunuh diri per tingkat gangguan mental yang dihitung. Semua nilai numerik diperiksa untuk outliers menggunakan Z-score dan menggantinya dengan nilai terdekat yang menggunakan teknik capping. Untuk memahami distribusi variabel tingkat bunuh diri dan persentase, plot histogram menemukan datanya miring ke kanan. Lalu kemudian ditransformasikan menggunakan transformasi akar kuadrat.
Kemudian dilakukan paired t-test untuk mengetahui hubungan antara angka bunuh diri dan angka gangguan kesehatan mental. Berdasarkan hal tersebut, kami dapat menemukan hubungan yang signifikan secara statistik antara tingkat bunuh diri dan tingkat gangguan kesehatan mental.
Data angka kematian akibat bunuh diri terdiri dari 297 observasi dari 4 variabel yaitu nama negara, kode negara, tahun dan angka kematian karena bunuh diri. Kolom angka kematian akibat bunuh diri menunjukkan angka kematian standar usia akibat bunuh diri, diukur sebagai jumlah kematian per 100.000 orang. Standarisasi usia mengasumsikan usia & struktur Populasi konstan untuk memungkinkan perbandingan antar negara dan dengan waktu tanpa pengaruh perubahan distribusi usia dalam Populasi (misalnya penuaan). Data tersebut dicatat dari tahun 1990 hingga 2016.
Data gangguan kesehatan jiwa terdiri dari 297 observasi dari 4 variabel yaitu nama negara, kode negara, Tahun dan jumlah gangguan jiwa. Kolom hitung gangguan jiwa terdiri dari jumlah penderita gangguan kesehatan jiwa dan perkembangan saraf, tidak termasuk gangguan penyalahgunaan alkohol dan narkoba. Angka-angka berusaha memberikan perkiraan yang benar (melampaui diagnosis yang dilaporkan) dari prevalensi berdasarkan data medis, epidemiologi, survei, dan pemodelan meta-regresi. Data tersebut dicatat dari tahun 1990 hingga 2016.
# Reading and importing Angka Bunuh Diri data
Angka_Kematian <-read.csv("Angka Bunuh Diri.csv",header = TRUE,
stringsAsFactors = FALSE,
col.names = c("Negara","Kode","Tahun","Angka_Kematian"))
str(Angka_Kematian)
## 'data.frame': 297 obs. of 4 variables:
## $ Negara : chr "Brunei" "Brunei" "Brunei" "Brunei" ...
## $ Kode : chr "BRN" "BRN" "BRN" "BRN" ...
## $ Tahun : int 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 ...
## $ Angka_Kematian: num 4.45 4.37 4.25 4.11 4.03 ...
head(Angka_Kematian)
## Negara Kode Tahun Angka_Kematian
## 1 Brunei BRN 1990 4.448610
## 2 Brunei BRN 1991 4.368282
## 3 Brunei BRN 1992 4.252322
## 4 Brunei BRN 1993 4.114453
## 5 Brunei BRN 1994 4.031928
## 6 Brunei BRN 1995 3.887114
# Reading and importing Gangguan_Mental data
gangguan_mental <-read.csv("Data Gangguan Mental.csv", header = TRUE,
stringsAsFactors = FALSE,
col.names = c("Negara","Kode","Tahun","Gangguan_Mental") )
str( gangguan_mental)
## 'data.frame': 297 obs. of 4 variables:
## $ Negara : chr "Brunei" "Brunei" "Brunei" "Brunei" ...
## $ Kode : chr "BRN" "BRN" "BRN" "BRN" ...
## $ Tahun : int 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 ...
## $ Gangguan_Mental: num 26858 27667 28515 29326 30172 ...
head( gangguan_mental)
## Negara Kode Tahun Gangguan_Mental
## 1 Brunei BRN 1990 26857.91
## 2 Brunei BRN 1991 27667.30
## 3 Brunei BRN 1992 28515.37
## 4 Brunei BRN 1993 29326.16
## 5 Brunei BRN 1994 30172.25
## 6 Brunei BRN 1995 31046.24
# Reading and importing Gangguan_Mental data
Populasi <-read.csv("Populasi.csv", header = TRUE,
stringsAsFactors = FALSE,
col.names = c("Negara","Kode","Tahun","Total_Populasi") )
str(Populasi)
## 'data.frame': 298 obs. of 4 variables:
## $ Negara : chr "Brunei" "Brunei" "Brunei" "Brunei" ...
## $ Kode : chr "BRN" "BRN" "BRN" "BRN" ...
## $ Tahun : int 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 ...
## $ Total_Populasi: int 259000 266000 274000 282000 289000 297000 305000 312000 319000 326000 ...
head(Populasi)
## Negara Kode Tahun Total_Populasi
## 1 Brunei BRN 1990 259000
## 2 Brunei BRN 1991 266000
## 3 Brunei BRN 1992 274000
## 4 Brunei BRN 1993 282000
## 5 Brunei BRN 1994 289000
## 6 Brunei BRN 1995 297000
# joining Angka Bunuh Diri and Gangguan_Mental datasets
joined_rates_data <- right_join(Angka_Kematian, gangguan_mental,
by = c('Negara','Kode','Tahun'))
# joining joined_rates_data and Populasi
joined_rates_data <- left_join(joined_rates_data, Populasi,
by= c('Negara','Kode','Tahun'))
head(joined_rates_data)
## Negara Kode Tahun Angka_Kematian Gangguan_Mental Total_Populasi
## 1 Brunei BRN 1990 4.448610 26857.91 259000
## 2 Brunei BRN 1991 4.368282 27667.30 266000
## 3 Brunei BRN 1992 4.252322 28515.37 274000
## 4 Brunei BRN 1993 4.114453 29326.16 282000
## 5 Brunei BRN 1994 4.031928 30172.25 289000
## 6 Brunei BRN 1995 3.887114 31046.24 297000
Untuk memahami struktur data frame data ‘join_rates_data’, fungsi str() digunakan. Berdasarkan struktur yang ada, terlihat bahwa tipe data variabel ‘Kode’, ‘Negara’ dapat diubah dari karakter menjadi faktor karena hanya ada 297 negara yang memungkinkan. Jenis data kolom Tahun dibiarkan sebagai bilangan bulat karena manipulasi dapat dilakukan di atas Tahun tanpa konversi tanggal. Variabel ‘Negara’ dan ‘Kode’ diubah menjadi faktor tipe data menggunakan as.factor(). Variabel ‘Gangguan_Mental’ dan ‘Total_Populasi’ diubah menjadi tipe data integer menggunakan as.integer(). Jenis data variabel yang dikonversi dilihat menggunakan class().
#Structure of joined data
str(joined_rates_data)
## 'data.frame': 297 obs. of 6 variables:
## $ Negara : chr "Brunei" "Brunei" "Brunei" "Brunei" ...
## $ Kode : chr "BRN" "BRN" "BRN" "BRN" ...
## $ Tahun : int 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 ...
## $ Angka_Kematian : num 4.45 4.37 4.25 4.11 4.03 ...
## $ Gangguan_Mental: num 26858 27667 28515 29326 30172 ...
## $ Total_Populasi : int 259000 266000 274000 282000 289000 297000 305000 312000 319000 326000 ...
# Applying type conversion
joined_rates_data$Negara <- as.factor(joined_rates_data$Negara)
joined_rates_data$Kode <- as.factor(joined_rates_data$Kode)
joined_rates_data$Gangguan_Mental <- as.integer(joined_rates_data$Gangguan_Mental)
joined_rates_data$Total_Populasi <- as.integer(joined_rates_data$Total_Populasi)
# Verifying type of variables
class(joined_rates_data$Negara)
## [1] "factor"
class(joined_rates_data$Kode)
## [1] "factor"
class(joined_rates_data$Gangguan_Mental)
## [1] "integer"
class(joined_rates_data$Total_Populasi)
## [1] "integer"
Pada langkah ini, kumpulan data diperiksa dengan karakteristik berikut yang ditetapkan dengan: Setiap variabel harus memiliki kolomnya sendiri. Setiap pengamatan unik memiliki barisnya sendiri. Semua nilai memiliki selnya sendiri. Teramati bahwa kumpulan data memenuhi prinsip rapi dan tersedia dalam format rapi. Oleh karena itu, tidak diperlukan manipulasi lebih lanjut. * Variabel Kode telah dihapus karena dapat diperoleh dari nama negara dan tidak diperlukan untuk analisis. * Rata-rata angka bunuh diri dan rata-rata orang dengan gangguan mental dihitung dengan menggunakan fungsi group_by() dan fungsi summarize ().
# removing county_code column
joined_rates_data <- subset(joined_rates_data,
select= c('Negara','Tahun','Angka_Kematian','Gangguan_Mental','Total_Populasi'))
joined_rates_data%>% group_by(Negara) %>% summarise(avg_Angka_Kematian = round(mean(Angka_Kematian),3),
avg_person_mental_disorder = round(mean(Gangguan_Mental,na.rm = TRUE),3))
## # A tibble: 11 x 3
## Negara avg_Angka_Kematian avg_person_mental_disorder
## <fct> <dbl> <dbl>
## 1 Brunei 4.82 37867.
## 2 Cambodia 5.49 1399570.
## 3 Indonesia 3.63 24018013.
## 4 Laos 13.0 605974.
## 5 Malaysia 8.41 2835615.
## 6 Myanmar 6.60 5265071.
## 7 Philippines 6.57 8599871.
## 8 Singapore 10.9 424369.
## 9 Thailand 13.3 8074463.
## 10 Timor 9.01 99420
## 11 Vietnam 8.40 8174077.
head(joined_rates_data)
## Negara Tahun Angka_Kematian Gangguan_Mental Total_Populasi
## 1 Brunei 1990 4.448610 26857 259000
## 2 Brunei 1991 4.368282 27667 266000
## 3 Brunei 1992 4.252322 28515 274000
## 4 Brunei 1993 4.114453 29326 282000
## 5 Brunei 1994 4.031928 30172 289000
## 6 Brunei 1995 3.887114 31046 297000
Untuk menemukan tingkat gangguan_mental, setiap variabel ‘Gangguan_Mental’ dibagi dengan nilai Total_Populasi masing-masing dan dikonversi sebagai rasio dengan mengalikan 100000. Karena tingkat bunuh diri adalah untuk tingkat 100000 Populasi.
Kolom Persentase ditambahkan untuk memahami hubungan antara Angka_Kematian dan Gangguan_Mental_rate.
# Mutating Gangguan_Mental_rate
joined_rates_data <- mutate(joined_rates_data,
Gangguan_Mental_rate =((Gangguan_Mental/Total_Populasi)*100000))
head(joined_rates_data)
## Negara Tahun Angka_Kematian Gangguan_Mental Total_Populasi
## 1 Brunei 1990 4.448610 26857 259000
## 2 Brunei 1991 4.368282 27667 266000
## 3 Brunei 1992 4.252322 28515 274000
## 4 Brunei 1993 4.114453 29326 282000
## 5 Brunei 1994 4.031928 30172 289000
## 6 Brunei 1995 3.887114 31046 297000
## Gangguan_Mental_rate
## 1 10369.50
## 2 10401.13
## 3 10406.93
## 4 10399.29
## 5 10440.14
## 6 10453.20
#Mutating percentage
joined_rates_data <- mutate(joined_rates_data, percentage = (Angka_Kematian/ Gangguan_Mental_rate)*100)
head(joined_rates_data)
## Negara Tahun Angka_Kematian Gangguan_Mental Total_Populasi
## 1 Brunei 1990 4.448610 26857 259000
## 2 Brunei 1991 4.368282 27667 266000
## 3 Brunei 1992 4.252322 28515 274000
## 4 Brunei 1993 4.114453 29326 282000
## 5 Brunei 1994 4.031928 30172 289000
## 6 Brunei 1995 3.887114 31046 297000
## Gangguan_Mental_rate percentage
## 1 10369.50 0.04290092
## 2 10401.13 0.04199816
## 3 10406.93 0.04086046
## 4 10399.29 0.03956475
## 5 10440.14 0.03861949
## 6 10453.20 0.03718588
Pada langkah ini, bingkai data ‘join_rates_data’ dipindai untuk mencari nilai yang hilang, inkonsistensi, dan kesalahan yang jelas. Nilai yang hilang untuk setiap kolom dipindai menggunakan fungsi colsums(). Karena nilai yang hilang terjadi terutama dalam hitungan Populasi, dan Gangguan_Mental_rate serta persentase dihitung berdasarkan Total_Populasi, nilai Total_Populasi yang hilang dihitung dengan menggunakan mean. Nilai NA diperhitungkan sebagai ganti penghapusan, untuk menjaga data. Variabel lainnya seperti Gangguan_Mental_rate dan persentase dihitung ulang hanya untuk nilai yang hilang dan dimutasi dengan aslinya. Nilai yang tidak konsisten dipindai menggunakan fungsi khusus dan diamati tidak memiliki nilai khusus.
#Finding sum of missing values in each column
colSums(is.na(joined_rates_data))
## Negara Tahun Angka_Kematian
## 0 0 0
## Gangguan_Mental Total_Populasi Gangguan_Mental_rate
## 0 0 0
## percentage
## 0
# mean imputation (for numerical variables)
joined_rates_data$Total_Populasi<- impute(joined_rates_data$Total_Populasi, fun = mean)
joined_rates_data <- mutate(joined_rates_data,
Gangguan_Mental_rate = ifelse(is.na( Gangguan_Mental_rate),
( Gangguan_Mental/Total_Populasi)*100000, Gangguan_Mental_rate))
joined_rates_data <- mutate(joined_rates_data,
percentage = ifelse(is.na(percentage),(Angka_Kematian/ Gangguan_Mental_rate)*100,
percentage))
#re verifying for na values
sum(is.na(joined_rates_data$Total_Populasi))
## [1] 0
sum(is.na(joined_rates_data$ Gangguan_Mental_rate))
## [1] 0
sum(is.na(joined_rates_data$percentage))
## [1] 0
# special function to find NaN and inconsistent values
is.special <- function(x){
if (is.numeric(x)) (is.infinite(x) | is.nan(x))
}
#finding number of inconsistent values in data
sapply(joined_rates_data, function(x) sum(is.special(x)))
## Negara Tahun Angka_Kematian
## 0 0 0
## Gangguan_Mental Total_Populasi Gangguan_Mental_rate
## 0 0 0
## percentage
## 0
Untuk mendeteksi outlier, join_rates_data disubset dengan hanya memilih variabel numerik seperti Angka_Kematian, Gangguan_Mental, Total_Populasi, Gangguan_Mental_rate dan persentase. Bingkai data baru join_data_sub digunakan untuk mendeteksi pencilan melalui metode Z-score. Karena semua variabel numerik, itu termasuk univariat. Oleh karena itu metode Z-score digunakan. Metode Z-score dan capping digunakan untuk mengidentifikasi dan memperhitungkan outlier saat mereka bekerja lebih baik pada nilai berkelanjutan.
# Subsetting joined_rates_data
joined_data_sub <- joined_rates_data %>% dplyr:: select(Angka_Kematian,Gangguan_Mental,Total_Populasi,
Gangguan_Mental_rate,percentage)
summary(joined_data_sub)
## Angka_Kematian Gangguan_Mental Total_Populasi
## Min. : 3.151 Min. : 26857 Min. : 259000
## 1st Qu.: 5.405 1st Qu.: 461429 1st Qu.: 4579000
## Median : 7.634 Median : 2853116 Median : 24699000
## Mean : 8.197 Mean : 5412210 Mean : 49576337
## 3rd Qu.: 9.911 3rd Qu.: 8025093 3rd Qu.: 69437000
## Max. :18.388 Max. :28463312 Max. :261556000
## Gangguan_Mental_rate percentage
## Min. : 8578 Min. :0.02895
## 1st Qu.:10314 1st Qu.:0.04948
## Median :10898 Median :0.07248
## Mean :10860 Mean :0.07542
## 3rd Qu.:11174 3rd Qu.:0.09552
## Max. :12842 Max. :0.16963
#z-score method for detecting ouliers
z.scores <- joined_data_sub %>% scores(type = "z")
length(which( abs(z.scores) >3 ))
## [1] 16
# capping for imputing outliers
cap <- function(x){
quantiles <- quantile( x, c(.05, 0.25, 0.75, .95 ))
x[ x < quantiles[2] - 1.5*IQR(x) ] <- quantiles[1]
x[ x > quantiles[3] + 1.5*IQR(x) ] <- quantiles[4]
x
}
# Apply a user defined function "cap" to a data frame
joined_data_capped <- as.data.frame(sapply(joined_data_sub, FUN = cap ))
summary(joined_data_capped)
## Angka_Kematian Gangguan_Mental Total_Populasi
## Min. : 3.151 Min. : 26857 Min. : 259000
## 1st Qu.: 5.405 1st Qu.: 461429 1st Qu.: 4579000
## Median : 7.634 Median : 2853116 Median : 24699000
## Mean : 8.129 Mean : 5363496 Mean : 49043012
## 3rd Qu.: 9.911 3rd Qu.: 8025093 3rd Qu.: 69437000
## Max. :16.561 Max. :23482156 Max. :215013206
## Gangguan_Mental_rate percentage
## Min. : 9076 Min. :0.02895
## 1st Qu.:10314 1st Qu.:0.04948
## Median :10898 Median :0.07248
## Mean :10876 Mean :0.07496
## 3rd Qu.:11174 3rd Qu.:0.09552
## Max. :12642 Max. :0.16324
Untuk memahami distribusi angka bunuh diri dan kolom persentase, plot histogram menemukan bahwa data yang miring ke kanan mengurangi kemiringan kolom persentase dan angka bunuh diri, perubahan ini yang telah diterapkan dan diamati bahwa data ini berdistribusi normal
# Histogram
Angka_Kematian <- joined_data_capped$Angka_Kematian
hist(Angka_Kematian )
#Square root Transformation
Angka_Kematian_transformed<- sqrt(joined_data_capped$Angka_Kematian)
hist(Angka_Kematian_transformed)
# Histogram
percentage <- joined_data_capped$ percentage
hist( percentage)
#Square root Transformation
percentage_transformed <- sqrt(joined_data_capped$ percentage)
hist(percentage_transformed)
Untuk mengetahui hubungan antara angka bunuh diri dengan angka gangguan kesehatan jiwa, dilakukan uji paired t-test dengan asumsi bahwa data berdistribusi normal.
pttest <- t.test(joined_data_capped$Angka_Kematian, joined_data_capped$ Gangguan_Mental_rate,
paired = TRUE,alternative = "two.sided",conf.level = .95)
pttest
##
## Paired t-test
##
## data: joined_data_capped$Angka_Kematian and joined_data_capped$Gangguan_Mental_rate
## t = -242.62, df = 296, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -10955.58 -10779.27
## sample estimates:
## mean of the differences
## -10867.42
Hipotesis nol: Tidak ada hubungan antara tingkat bunuh diri dan tingkat gangguan kesehatan mental. Hipotesis alternatif: Ada hubungan antara angka bunuh diri dengan angka gangguan kesehatan jiwa. Temuan dari hasil uji hipotesis dengan memperoleh nilai p dan interval kepercayaan.
Uji-t sampel berpasangan dilakukan untuk analisis. Uji-t menghasilkan nilai p dengan nilai p <2.2e-16 lebih kecil dari nilai alpha 0.05. Perbedaan rata-rata tidak termasuk dalam 95% CI. Hasilnya signifikan secara statistik. Jadi, hasil kami mendukung Hipotesis alternatif Oleh karena itu kami sampai pada kesimpulan bahwa:
Uji-t sampel berpasangan menemukan hubungan yang signifikan secara statistik antara tingkat bunuh diri dan tingkat gangguan kesehatan mental
Analisisnya akan lebih baik jika dilakukan lagi penelitian kepada orang yang berbeda usia dan keadaan yang berbeda seperti masalah pendapatan, masalah pernikahan dan sebagainya