PEMROSESAN DATA TINGKAT BUNUH DIRI DAN GANGGUAN MENTAL DI ASIA TENGGARA

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)

Ringkasan

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

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

Pengertian

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"

Merapikan & Memanipulasi Data I

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

Merapikan dan Memanipulasi Data II

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

Pemindaian I

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

Pemindaian II

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

Perubahan

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) 

Analisis

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

Tafsiran

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

Opini:

Analisisnya akan lebih baik jika dilakukan lagi penelitian kepada orang yang berbeda usia dan keadaan yang berbeda seperti masalah pendapatan, masalah pernikahan dan sebagainya