STATISTIKA
DISUSUN OLEH:
Penuli
+
DAFTAR ISI
COVER I
KATA PENGANTAR II
DAFTAR ISI III
BAB 1 STATISTIKA 1
1.1 Pengertian Statistika 1
1.2 Sejarah Statistika 2
1.3 Data Statistika 3
1.4 Metode Pengumpulan Data 6
1.5 Skala Pengukuran Variabel 16
2.1 Assignment 21
2.2 Operator Assignment Lainnya 21
2.3 Penamaan Objek 22
2.4 Working Directory 23
2.5 Vector 23
2.6 Factor 27
2.7 Matriks 27
2.8 Array 32
2.9 Dataframe 34
2.10 List 38
kuantitatif adalah data yang dinyatakan dalam bentuk angka bisa berupa hasil
perhitungan atau hasil pengukuran, misalnya berat badan, tinggi badan,
temperatur udara, banyaknya produk yang terjual.
Data menurut sumbernya dibedakan menjadi dua yaitu data intern dan
data eksternal. Data intern adalah data yang diperoleh atau bersumber dari
dalam suatu instansi (lembaga, organisasi), sedangkan data ekstern adalah data
yang diperoleh atau bersumber dari luar instansi (DR. Boediono, 2014).
Pengusaha mencatat segala aktivitas perusahaannya sendiri, misalnya keadaan
pegawai, pengeluaran, keadaan barang di gudang, hasil penjualan, keadaan
produksi pabriknya dan lain-lain aktivitas yang terjadi di dalam perusahaan itu.
Data yang diperoleh demikian merupakan data intern (Sudjana, 2005). Dalam
berbagai situasi, untuk perbandingan, misalnya diperlukan data dari sumber
lain di luar perusahaan tadi. Data demikian merupakan data ekstern (Sudjana,
2005).
Data menurut cara memperolehnya terbagi menjadi dua, yaitu data
primer dan data sekunder. Pada dasarnya data primer dan data sekunder
termasuk ke dalam data ekstern (DR.Boediono, 2014). Data primer adalah
data yang langsung dikumpulkan oleh orang yang berkepentingan atau yang
memakai data tersebut, data yang diperoleh melalui wawancara atau
kuesioner merupakan contoh data primer. Sedangkan data sekunder adalah
data yang tidak secara langsung dikumpulkan oleh orang yang
berkepentingan dengan data tersebut. Data yang diperoleh dari laporan
tahunan perusahaan untuk keperluan menulis skripsi merupakan contoh data
sekunder.
Data menurut waktu pengumpulannya terbagi menjadi dua yaitu data times
series dan data cross section. Data yang dikumpulkan dari waktu ke waktu
untuk menggambarkan suatu perkembangan atau kecenderungan keadaan atau
peristiwa atau kegiatan, dimana jarak atau interval dari waktu ke waktu sama
disebut sebagai data times series atau data berkala (DR. Boediono, 2014). Data
time series sering juga disebut sebagai data deret waktu yang merupakan
sekumpulan hasil observasi yang diatur dan didapat menurut urutan
kronologis, biasanya dalam interval waktu yang sama (Sudjana, 2005).
Pengertian lain diungkapkan oleh J.Supranto (2008), data berkala adalah data
yang dikumpulkan dari waktu ke waktu untuk menggambarkan perkembangan
suatu kegiatan misalnya perkembangan produksi, harga, hasil penjualan,
jumlah personil, penduduk, jumlah kecelakaan, jumlah kejahatan, jumlah
peserta KB dan lain sebagainya. Data berkala juga merupakan suatu rangkaian
atau seri dari nilai-nilai suatu variabel yang dicatat dalam jangka waktu yang
berurutan (Atmaja, 2009). Contoh dari data time series adalah penjualan
mingguan sebuah produk di toko, produksi bulanan di sebuah perusahaan
industri atau produksi tahunan bijih besi di Indonesia. Sementara, data cross
section adalah data yang dikumpulkan dalam satu waktu atau dalam titik waktu
tertentu. Contohnya adalah laporan keuangan per 31 Desember 2006 di sebuah
perusahaan tertentu, data pelanggan Telkom pada bulan Mei 2015.
Agar hasil sebuah penelitian yang dilakukan dapat dipercaya maka data
yang digunakanharuslah data yang baik. Sebuah data dikatakan data yang baik
jika memenuhi kriteria sebagai berikut :
1. Objektif, artinya data yang digunakan harus sesuai dengan kondisi
sebenarnya bukanmerupakan hasil penilaian subjektif dari penelitinya.
2. Refresentatif, artinya data yang digunakan harus mewakili semua
karakteristik darielemen-elemen dalam populasi.
3. Kesalahan sampling kecil artinya tingkat ketelitian lebih besar.
4. Tepat waktu
5. Relevan, artinya data yang digunakan harus sesuai dengan tujuan dari
penelitian yangdilakukan.
setiap satuan sampling dalam populasi mempunyai peluang yang sama besar
untuk terpilih kedalam sampel dan peluang itu diketahui sebelum pemilihan
dilakukan.
Teknik pengambilan sampling acak sederhana (simple random sampling)
adalah pengambilan sampel sebanyak n sedemikian rupa sehingga setiap unit
dalam populasi mempunyai kesempatan yang sama untuk terambil dan setiap
ukuran sampel n juga mempunyai kesempatan yang sama untuk terambil (DR.
Boediono, 2014).
Salah satu cara sederhana untuk mendapatkan sampel acak adalah sebagai
berikut, misalkan sebuah populasi berisikan 100 anggota misalnya pegawai,
rumah, keluarga, toko, industri, kotakan sawah, mobil, radio, makanan dalam
kaleng dan sebagainya. Dari populasi ini akan diambil sebuah sampel acak
terdiri atas 30 anggota. Tiap anggota dalam populasi kita beri nomo 1, 2, ...,
100 untuk anggota terakhir. Tuliskan nomor-nomor ini masing-masing pada
secarik kertas yang berukuran dan beridentitas, lalu gulung. Setelah diaduk
dengan baik,seseorang yang matanya tertutup mengambil satu-satu sampai 30
kali. Nomor-nomor yang tertulis pada kertas yang terambil akan memberikan
sampel acak terdiri atas 30 anggota dari populasi yang diberikan (Sudjana,
2005).
Cara yang lebih bersifat ilmiah untuk mendapatkan sebuah sampel acak
yaitu menggunakan daftar bilangan acak atau menggunakan kalkulator. Proses
sampling acak sederhana digunakan apabila memenuhi beberapa kondisi
sebagai berikut :
Variabel yang akan diteliti keadaannya relatif homogen dan tersebar
merata di seluruhpopulasi
Apabila disusun secara lengkap kerangka sampling (daftar tiap anggota
dalam populasi) yang menyangkut setiap satuan pengamatan yang ada
dalam populasi.
2) Systematic sampling
Sebuah sampel yang diperoleh dari penyeleksian satu unsur secara acak
dari k unsur yang pertama dalam sebuah kerangka sampling dan setiap unsur
ke-k kemudian disebut satu dalam k sampel sistematik. Jadi, suatu proses
memilih dikatakan sampling sistematik apabila dalam pemilihan itu dilakukan
pemilihan sistematik setelah terpilih bilangan acak dengan syarat bahwa
peluang terpilihnya 1/N.
Sampling sistematik digunakan apabila bisa disusun kerangka sampling
lengkap dan keadaan variabel yang sedang diteliti relatif homogen dan tersebar
merata di seluruh populasi. Sampling sistematik memberikan sebuah
alternatif yang berguna dari sampling acak sederhana untuk alasan sebagai
berikut :
Sampling sistematik lebih mudah untuk dilakuan dan oleh sebab itu lebih
sedikit subjekyang melakukan kesalahan wawancara daripada sampling
acak sederhana.
Sampling sistematik sering memberikan informasi yang lebih banyak
mengenai biaya per unit/satuan daripada yang diberikan sampling acak
sederhana.
Pada umunya sampling sistematik merupakan penyeleksian secara acak
pada suatu unsur dari k unsur yang pertama dan kemudian penyeleksian pada
setiap unsur k sesudahnya. Prosedur ini lebih mudah dibentuk dan biasanya
akan meminimalisisr kesalahan yang mungkin dilakukan oleh pewawancara
daripada proses sampling acak sederhana. Sebagai contoh, akan menjadi lebih
sulit apabila menggunakan sampling acak sederhana untuk menyeleksi n=50
pembeli pada sebuah Mall. Pewawancara tidak menentukan pembeli- pemblei
mana yang termasuk dalam sampelnya, karena ia tidaak memiliki kerangka
samplingserta tidak mengetahui ukuran populasi N. Sebagai solusinya, ia dapat
mengambil sampel secara sistematik, katakanlah 1 dari 20 pembeli, hingga
persyaratan sampelnya bisa didapatkan. Ini akan menjadi sebuah prosedur
yang mudah bahkan untuk pewawancara yang tidak berpengalaman sekalipun
dapat melakukannya.
kelompok semacam ini disebut sebagai strata (tunggalnya stratum) dan dalam
masing-masing stratum sampel diambli secara acak, yaitu melalui sampling
acak sederhana.
Dalam contoh, populasi dibagi dalam tiga strata, stratum pertama adalah
masyarakat yang tergolong berpenghasilan tinggi, stratum kedua yang
berpenghasilan menengah dan stratum ketiga masyarakat yang berpenghasilan
rendah.
Langkah-langkah pemilihan sampel dalam stratified random sampling
adalah sebagai berikut :
Stratum L : nL
Dari setiap stratum kemudian dipilih satuan sampling melalui teknik
sampel acaksederhana.
N1 N2 N3 n1 n2 n3
N=N1+N2+N3 n=n1+n2+n3
4) Cluster sampling
Andaikan seorang peneliti ingin mengetahui rata-rata pendapatan kepala
kelurga di sebuah kota besar. Apabila sampling acak sederhana atau sampling
acak stratifikasi digunakan, maka peneliti harus mempunyai kerangka
sampling yang berisikan daftar keluarga di kota tersebut. daftar keseluruhan
nama kelurga di kota yang besar pasti akan sulit diperoleh, kalaupun ada dan
sampling acak sederhana dilakukan maka sampel masyarakat yang terambil
bisa tersebar ke semua penjuru kota, dan ini akan melibatkan biaya
pengambilan sampel yang tinggi. Daftar yang mungkin bisa diperoleh adalah
daftar nama- nama kelurahan di kota tersebut. Kelurahan adalah kumpulan
kepala keluarga. Oleh karena itu kelurahan dipandang sebagai klaster.
Proses pengambilan sampling klaster dilakukan dengan memperhatikan
kerangka sampling yang berisikan dafatar klaster. Dalam contoh di atas daftar
nama kelurahan. Pengambilan sampel kemudian dilakukan dengan mengambil
secara acak klaster-klaster. Unit sampling yang berisikan klaster-klaster
dinamakan unit sampling utama (USU). Apabila semua unit observasi dalam
USU menjadi anggota sampel maka proses pengambilan sampel dilakukan
dengan sampling klaster satu tahap. Namun apabila USU dibagi lagi ke dalam
unit yang lebih kecil, misalnya kelurahan dibagi lagi ke dalam rukun-rukun
warga (RW) maka rukun warga disebut unit sampling ke dua (USD). Apabila
semua unit observasi dalam USD menjadi anggota sampel, maka proses
pengambilan sampel dilakukan dengan sampling klaster dua tahap.
Langkah-langkah pemilihan sampel dalam sampling klaster adalah sebagai
berikut :
Populasi dibagi-bagi ke dalam N buah klaster atau unit sampling utama.
Keadaan variabel yang diteliti dalam setiap klaster diusahakan heterogen
artinya tidak seragam.
Gunakan sampling acak sederhana untuk memilih n buah klaster
Pemilihan hanya dilakukan sekali yaitu memilih klaster, oleh karena itu
semua unit sampling kedua yang ada dalam klaster yang terpilih diperiksa.
Hal lain yang perlu dilakukan dalam sebuah pengumpulan data adalah
menentukan alatpengumpulan datanya. Terdapat beberapa macam alat
pengumpulan data, sebagai berikut “
1. Kuesioner
2. Wawancara
3. Observasi langsung atau pengamatan langsung
4. Melalui pos, telepon atau alat komunikasi lainnya
5. Alat ukur seperti meterean, timbangan, termometer, dll.
Setelah data terkumpul, maka selanjutnya hal yang perlu dilakukan
dalam sebuah penelitian adalah mengolah data tersebut. Tujuan dari
pengolahan data adalah untuk mendapatkan data statistik misalnya total, rata-
rata, persentase, angka indeks, simpangan baku, koefisien korelasi, koefisien
regresi, dll., yang dapat digunakan untuk melihat atau menjawab persoalan
secara kelompok, bukan satu per satu secara individu. Metode pengolahan data
bisa dilakukan secara manual atau menggunakan elektronik (kalkulator,
komputer)
Angka (1) untuk jawaban “ya” Angka (2) untuk jawaban “tidak”
Sebagai contoh variabel yang menunjukkan usia, berat badan, tinggi badan, jumlah
produkyang terjual, dkk.
BAB II
DASAR DASAR VISUAL R
Pada bab ini akan membahas hal-hal dasar tentang R yang harus diketahui dan
dikuasai. Hal yang paling sederhana yang dapat dilakukan R adalah sebagai
kalkulator. Coba Anda ketikan perintah di bawah ini pada console RStudio dan
tekan tombol Enter setelah selesai.
2+4
## [1] 6
Akan muncul hasil [1] 6. Hasil [1] menunjukkan bahwa yang ditampilkan adalah
dari elemen pertama. Hal ini akan dibahas di bagian 2.5.
Tanda > adalah prompt yang menunjukkan bahwa R sedang dalam posisi siap
menerima perintah baru. Jika perintah belum lengkap maka akan berganti menjadi
tanda +. Artinya ada perintah atau bagian script yang belum selesai.
>2+
+
Perhatikan setelah Anda tekan tombol Enter maka kursor di R yang
sebelumnya > berganti + yang menandakan bahwa perintah belum lengkap. Maka
jika Anda kembali menuliskan bilangan lain, misalkan 4 dan tekan tombol Enter
maka prompt di R akan kembali menjadi > setelah menuliskan hasilnya karena
perintah sudah lengkap dan selesai.
>2+
+4
## [1] 6
R adalah bahasa pemrograman yang case-sensitive. Artinya perbedaan huruf
kapital dan huruf kecil sangat berpengaruh. Karena itu, penulisan nama objek atau
nilai berupa karakter sangat tergantung dari kapitalisasinya. Perhatikan perbedaan
dari kedua contoh berikut ini.
a <- 3
a
## [1] 3
A
## Error: object 'A' not found
Misalnya Anda membuat sebuah objek bernama a dengan nilai sebuah konstanta.
Ketika Anda ingin mengambil nilai dari objek tersebut maka Anda hanya bisa
memanggil dengan nama yang sama persis. Anda tidak bisa memanggil objek
tersebut dengan nama lain meskipun ketika Anda mengucapkan dengan suara
pengucapan yang sama. Anda tidak bisa memanggil objek a tersebut dengan A.
Ketika objek yang Anda panggil belum ada di session atau workingspace R saat ini
maka akan muncuk error seperti contoh di atas.
2.1 Assignment
x <- 5
x
## [1] 5
Apakah tidak bisa menggunakan operator = sebagai operator assignment? Tentu
saja Anda juga bisa menggunakannya.
x=5
Hal ini sangat membantu jika Anda seorang programmer yang menggunakan
bahasa pemrograman lain yang menggunakan operator = sebagai
operator assignment. Jadi Anda tidak perlu bingung dengan “Kapan saya harus
menggunakan<- atau =?”. Tapi saya mendorong Anda untuk terbiasa
menggunakan <- saat membuat program menggunakan R. Jika Anda menggunakan
RStudio, Anda dapat menuliskan operator <- dengan menekan tombol ALT + -.
Jika Anda ingin mengetahui nilai suatu objek cukup panggil objek tersebut atau
gunakan fungsi print().
x
## [1] 5
# or
print(x)
## [1] 5
# Contoh 1
x <- 5
5 -> x
x
## [1] 5
# Contoh 1
y <- 2 + 4
2 + 4 -> y
y
## [1] 6
Seperti yang Anda lihat, operator -> memiliki sisi yang berlawanan dengan <-.
Nilai atau ekspresi yang mengembalikan nilai ada di sisi kiri, sedangkan objek di
sisi kanan. Untuk dua operator assignment yang lain kita membahasnya di
pembahasan function (Bab 2.11) dalam R. Karena mereka biasanya hanya
digunakan dalam sebuah fungsi.
Jika Anda memasukan nilai baru ke dalam sebuah objek yang sama maka nilai yang
sebelumnya akan dihapus dan digantikan dengan nilai yang baru.
# Nilai x sebelumnya
x
## [1] 5
# Nilai x yang baru
x <- 8 + 2
x
## [1] 10
# Nilai x yang baru
x <- x + 5
x
## [1] 15
Ketika menggunakan R, setiap yang ada di R disebut objek. Jenis-jenis objek data
yang ada di R adalah vector, factor, matriks, array, dataframe, list dan objek berupa
function.
Aturan penamaan objek di R, seperti vector (2.5), matriks (2.7), dataframe (2.9) dan
lain-lain, hampir sama dengan aturan penamaan pada bahasa pemrograman lain.
Namun ada beberapa aturan khusus yang terdapat di R. Berikut aturan penamaan
objek di R.
Menggunakan kombinasi alfabet (a-z, A-Z), angka (0-9), titik
atau underscore.
Diawali alfabet, titik atau underscore. Tidak boleh diawali dengan angka.
Tidak mengandung spasi, tab atau karakter khusus seperti !, @, # dan
lainnya.
Sebaiknya tidak menggunakan beberapa penamaan atau nilai yang sudah
digunakan oleh R (function dan keyword lainnya).
Misalnya c, q, TRUE, FALSE, df, dt, rnorm, runif, rf, exp, dan lain-lain.
Untuk mengetahui nama-nama yang sudah digunakan oleh R Anda dapat
mengetikkan perintah ?reserved di console RStudio Anda.
Untuk mengetahui di folder mana Anda bekerja dengan R saat ini, Anda dapat
gunakan fungsi getwd().
getwd()
## [1] "D:/aephidayatuloh/R/buku/introR_id"
Untuk mengatur lokasi folder Anda bekerja, Anda dapat gunakan fungsi setwd().
Misalnya Anda ingin mengganti working directory menjadi
“D:/aephidayatuloh/folder”.
setwd("D:/aephidayatuloh/folder")
Dengan begitu Anda dapat mengakses file atau data di dalam directory tersebut
lebih mudah dan praktis. Atau Anda jg dapat melakukannya dengan cara membuat
sebuah project di RStudio seperti yang sudah dibahas di bagian 1.3.1.
2.5 Vector
Vector adalah objek data paling sederhana yang ada di dalam R. Secara umum jenis
vector terbagi 2, yaitu numeric dan character. Ada banyak sekali cara untuk
membuat sebuah vector di R. Di bagian ini akan dibahas beberapa cara yang banyak
dan mungkin akan sering Anda gunakan.
Fungsi yang paling sering digunakan untuk membuat sebuah vector adalah dengan
menggunakan fungsi c().
x <- c(2, 1, 5, 3, 1)
x
## [1] 2 1 5 3 1
Pada script di atas, dibuat sebuah objek x berupa vector numeric. Setiap elemen
dipisah menggunakan tanda koma (,). Fungsi ini dapat digunakan untuk membuat
vector numeric atau character. Indeks di R dimulai dari 1, tidak seperti kebanyakan
bahasa pemrograman lain yang indeksnya dimulai dari 0. Hal ini cukup
memudahkan pengguna karena umumnya manusia menghitung mulai dari 1, bukan
dari 0.
ketika Anda ingin mengambil elemen ke 2 dari vector x, maka Anda dapat
menjalankan perintah
x[2]
## [1] 1
Untuk membuat sebuah vector numeric berurutan secara meningkat atau menurun.
Lihat contoh berikut ini.
# membuat vector numeric dengan nilai dari 10 s/d -10 secara menurun 1
x <- 10:-10 # 10 sampai -10
x
## [1] 10 9 8 7 6 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10
Mengambil sebuah kolom dari sebuah dataframe akan dibahas lebih jauh di bagian
dataframe (2.9). Dengan menggunakan tanda dolar $ dan diikuti dengan nama
kolom yang akan diambil dari dataframe tersebut.
mtcars$mpg
## [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4
10.4 14.7 32.4 30.4
## [20] 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7 15.0 21.4
Dari dataframe mtcars diambil semua nilai yang ada di kolom mpg
Cara ini akan dicontohkan lebih banyak pada bagian-bagian selanjutnya di bab ini.
Fungsi ini berguna untuk menjadikan sebuah objek list menjadi sebuah vector.
Pembahasan lebih lanjut akan dibahas di bagian 2.10.
Semua contoh di atas untuk membuat vector adalah vector numeric. Vector numeric
adalah vector yang semua elemennya bernilai dan bertipe numeric.
Dengan fungsi rep() Anda dapat membuat sebuah vector dengan mengulang-ulang
nilai yang diinginkan sebanyak yang dibutuhkan.
c(1, 2, 3, 5, "a")
## [1] "1" "2" "3" "5" "a"
Di R ada 2 buah vector khusus yang bertipe character, yaitu letters dan LETTERS.
letters
## [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t"
"u" "v" "w" "x"
## [25] "y" "z"
LETTERS
## [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R"
"S" "T" "U" "V" "W" "X"
## [25] "Y" "Z"
Dua buah vector atau lebih dapat digabungkan dengan fungsi c(). Namun, jika salah
satu vector bertipe character, maka vector hasil gabungan akan menjadi vector
character. Contoh di bawah ini menggabungkan vector x dan y. Vector x adalah
vector numeric, sedangkan y adalah vector character. Karena ada satu atau lebih
elemen yang berupa character, maka ketika x dan y digabungkan akan menjadi
vector character.
c(x, y)
## [1] "3" "3" "3" "3" "3" "3" "3" "3" "3" "3" "a" "A" "d" "c"
Cara lain yang dapat digunakan untuk membuat vector character adalah
menggunakan fungsi paste(), paste0() atau sprintf(). Jalankan dan perhatikan
perbedaan dari contoh perintah di bawah ini.
paste("A", 1:5)
## [1] "A 1" "A 2" "A 3" "A 4" "A 5"
paste0("A", 1:5)
## [1] "A1" "A2" "A3" "A4" "A5"
sprintf("A%s", 1:5)
## [1] "A1" "A2" "A3" "A4" "A5"
2.6 Factor
Factor merupakan bentuk lebih luas dari vector. Biasanya factor lebih sering
digunakan untuk menyimpan data nominal atau ordinal. Misalnya vector character
yang berisi "male" dan "female". Pada vector character, nilainya
adalah "male" dan "female" seperti terlihat apa adanya. Namun pada factor,
tampilan dari isi datanya mungkin "male" dan "female" tetapi isi dari factor adalah
pengkodean numerik. Misal untuk "female" nilai sebenarnya adalah 1,
sedangkan "male" berniali 2.
print.default(fc)
## [1] 1 2 3 3 1 2 1 3
Factor mempunyai level, secara default levelnya adalah berdasarkan urutan alfabet.
Untuk merubah level dari sebuah factor, gunakan argumen levels =.
2.7 Matriks
Matriks adalah objek di R yang memiliki 2 dimensi, baris (row/m) dan kolom
(column/n), dan tipe nilainya sama. Jika ketika membuat sebuah matriks elemennya
memiliki minimal 1 elemen bertipe character maka seluruh matriks tersebut akan
bertipe character. Membuat matriks di R menggunakan vector yang dikonversi
dimensinya. Karena seperti yang sudah diketahui bahwa sebuah vector di R tidak
mempunyai dimensi, tetapi dapat dibayangkan seperti matriks berukuran m baris
dan 1 (satu) kolom.
x <- c(1, 2, 5, 4, 2, 2, 3, 3, 5, 3, 1, 0, 4, 3, 0, 6)
x
## [1] 1 2 5 4 2 2 3 3 5 3 1 0 4 3 0 6
length(x)
## [1] 16
Karena vector x memiliki 16 elemen, maka dimensi matriks yang dapat dibuat
adalah 2 angka yang hasil perkaliannya menghasilkan nilai 16. Salah satunya
adalah 4 x 4 = 16. Untuk membuat matriks di R, kita dapat gunakan
fungsi matrix() dengan argumen pertama adalah vector. Argumen untuk
menentukan ukuran matriks kita dapat gunakan ncol atau nrow. Bisa kita gunakan
keduanya atau hanya salah satu saja. Misalnya kita gunakan nrow = 4 agar matriks
yang dihasilkan matriks persegi berukuran 4x4 karena 4 x 4 = 16. Artinya sama saja
dengan kita menggunakan ncol = 4 karena dengan nrow = 4 secara otomatis ncol =
4.
diag(m)
## [1] 21.0 19.2 30.4 30.4
Anda juga dapat mengganti nilai dari elemen suatu matriks dengan menggunakan
operator assignment.
m[4, 3] <- 0
m[4, 3]
## [1] 0
m # perhatikan elemen di baris 4 kolom 3 sudah berubah jadi 0.0
## [,1] [,2] [,3] [,4]
## [1,] 21.0 22.8 14.7 19.2
## [2,] 21.0 19.2 32.4 27.3
## [3,] 22.8 17.8 30.4 26.0
## [4,] 21.4 16.4 0.0 30.4
## [5,] 18.7 17.3 21.5 15.8
## [6,] 18.1 15.2 15.5 19.7
## [7,] 14.3 10.4 15.2 15.0
## [8,] 24.4 10.4 13.3 21.4
2.8 Array
Array merupakan objek seperti matriks dengan dimensi lebih banyak. Jika matriks
hanya mempunyai 2 dimensi, maka array dapat memiliki lebih dari 2 dimensi.
Gambar 2.1: Ilustrasi Array 3 dimensi
Untuk Array 3 dimensi Anda dapat bayangkan sebagai lapisan beberapa lembar
kertas seperti pada gambar di atas. Perhatikan contoh array di bawah ini. Berikut
ini merupakan contoh array berdimensi 3 berisi 2 lapis matriks masing-masing
berukuran 4 baris dan 4 kolom.
Titanic
## , , Age = Child, Survived = No
##
## Sex
## Class Male Female
## 1st 0 0
## 2nd 0 0
## 3rd 35 17
## Crew 0 0
##
## , , Age = Adult, Survived = No
##
## Sex
## Class Male Female
## 1st 118 4
## 2nd 154 13
## 3rd 387 89
## Crew 670 3
##
## , , Age = Child, Survived = Yes
##
## Sex
## Class Male Female
## 1st 5 1
## 2nd 11 13
## 3rd 13 14
## Crew 0 0
##
## , , Age = Adult, Survived = Yes
##
## Sex
## Class Male Female
## 1st 57 140
## 2nd 14 80
## 3rd 75 76
## Crew 192 20
Untuk mengetahui ukuran dimensi dari sebuah array Titanic dapat menggunakan
fungsi dim().
dim(Titanic)
## [1] 4 2 2 2
Artinya array Titanic adalah array 4 dimensi.
2.9 Dataframe
Dataframe layaknya sebuah tabel di Ms Excel, terdiri dari baris dan kolom dengan
nama masing-masing kolom berbeda. Apa bedanya dengan matriks? Matriks hanya
bisa menyimpan tipe data yang sama, numeric atau character seluruhnya. Pada
dataframe, masing-masing kolom boleh memiliki tipe data yang berbeda.
Dataframe seperti umumnya bentuk tabel yang sering kita gunakan.
Umumnya ketika Anda melakukan analisis data, maka data yang Anda
gunakan adalah berupa tabel. Di dalam R sebuah tabel yang terdiri dari baris dan
kolom disebut dataframe atau data.frame. Baris di dataframe
disebut observation dan kolom disebut variable (Gambar 2.2).
Gambar 2.2: Dataframe Terstruktur (sumber: https://r4ds.had.co.nz/tidy-
data.html)
Untuk membuat sebuah dataframe Anda dapat menggunakan fungsi data.frame().
Misalnya Anda akan membuat sebuah dataframe bernama data1 yang berisi 5
observation dan 2 variable. Variable pertama bernama x1 berisi sebuah vector
numeric dengan nilai {1, 3, 2, 6, 4} dan variable kedua bernama v2 berisi vector
character dengan nilai {“a”, “A”, “c”, “d”, “E”}. Anda dapat membuat
vector x1 dan v1 terlebih dahulu menggunakan fungsi c() (atau fungsi lain yang
sesuai untuk membuat vector). Kemudian membuat dataframe dari vector tersebut.
Perhatikan contoh berikut ini.
x1 <- c(1, 3, 2, 6, 4)
v1 <- c("a", "A", "c", "d", "E")
data1 <- data.frame(x1 = x1, v1 = v1)
Anda dapat melihat dataframe yang sudah dibuat tersebut dengan memanggil nama
objek dataframe.
data1
## x1 v1
## 1 1 a
## 2 3 A
## 3 2 c
## 4 6 d
## 5 4 E
Perhatian! Ketika Anda membuat sebuah dataframe yang berisi sebuah variable
character pada R dengan versi 3.6.3 atau sebelumnya, maka secara otomatis
variable dari vector character tersebut akan diubah menjadi variable factor (2.6).
Hal ini terjadi karena fungsi data.frame() mempunyai sebuah
argumen stringsAsFactors = TRUE. Pada R versi 4.0.0 atau lebih baru, variable dari
vector character akan tetap dijadikan sebuah variable character karena
argumen stringsAsFactors = FALSE. Tentu saja Anda dapat merubahnya dengan
menambahkan argumen tersebut ketika Anda membuat dataframe.
dim(data1)
## [1] 5 2
Hasil dari fungsi dim() untuk dataframe atau matrix adalah sebuah vector dengan
elemen pertama adalah banyaknya observation, sedangkan elemen kedua adalah
banyaknya variable. Pada contoh di atas berarti dataframe data1 memiliki 5
observation dan 2 variable.
str(data1)
## 'data.frame': 5 obs. of 2 variables:
## $ x1: num 1 3 2 6 4
## $ v1: Factor w/ 5 levels "a","A","c","d",..: 1 2 3 4 5
Dari hasil di atas Anda dapat ketahui bahwa objek data1 adalah sebuah dataframe
berukuran 5 observation (obs.) dan 2 variable. Nama variable yang ada
adalah x1 dan v1. Variable x1 adalah variable bertipe numeric,
sedangkan v1 adalah variable character alias factor. Nilai pada baris pertama
dataframe data1 untuk variable x1 adalah 1 dan variable v1 adalah “a”. Nilai “a”
dikodekan sebagai 1, “A” dikodekan sebagai 2, “c” dikodekan sebagai 3, dan
seterusnya.
Selanjutnya untuk mengambil nilai sebuah variable dari sebuah dataframe dapat
menggunakan tanda dollar ($) atau menggunakan indeks. Harus diakui bahwa
dalam bahasa pemrograman R, banyak cara yang dapat digunakan untuk melakukan
satu pekerjaan yang sama. Perhatikan contoh berikut.
Kemudian kita buat variable baru bernama x3 yang merupakan penjumlahan dari
variable x1 dan x2.
2.10 List
Objek list pada dasarnya mirip seperti vector, hanya saja tipe elemennya bisa
berbeda. Jika pada vector numeric semua elemennya harus berupa numerik. Pada
vector character semuanya harus karakter. Pada objek list elemennya dapat berupa
vector, factor, matriks, array, dataframe, bahkan list di dalam list atau objek lain
seperti model prediktif yang dibuat di R.
Karena dibuat untuk memudahkan analisis data, R mempunyai banyak fungsi yang
tersedia untuk melakukan analisis statistik. Untuk mendapatkan nilai rata-rata dari
sebuah vector numeric Anda dapat langsung gunakan fungsi mean(). Untuk
mendapatkan milai minimum atau maksimum tersedia fungsi min() dan max().
Fungsi sd() dapat digunakan untuk mendapatkan nilai standard deviasi atau
fungsi var() untuk mendapatkan nilai ragam (varians). Perhatikan contoh berikut
ini.
x <- seq(1, 100, by = 4)
# Rata-rata vector x
mean(x)
## [1] 49
# Minimum dari vector x
min(x)
## [1] 1
# Maksimum dari vector x
max(x)
## [1] 97
Jika Anda ingin mencari nilai minimum dan maksimum sekaligus, Anda dapat
gunakan fungsi range(). Output dari fungsi ini adalah vector numeric dengan dua
elemen berisi nilai minimum dan maksimum.
range(x)
## [1] 1 97
Jika Anda ingin mencari nilai statistik lima serangkai (minimum, Q1, Q2 atau
median, Q3, maksimum), Anda dapat gunakan fungsi summary().
summary(x)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1 25 49 49 73 97
install.packages("nycflights13")
Kaetika Anda akan install sebuah package, nama package tersebut harus
berupa string. Anda hanya perlu melakukan satu kali install saja, tidak perlu install
ketika setiap kali akan Anda gunakan. Sekarang Anda coba untuk memanggil
data flights dari package nycflights13 tanpa mengaktifkan package terlebih dahulu.
Maka akan muncul sebuah error yang menyatakan bahwa objek flights tidak
ditemukan.
flights
## Error: object 'flights' not found
Karena data flights ada di dalam package nycflights13 maka Anda perlu aktifkan
terlebih dahulu package tersebut. Anda dapat mengaktifkannya dengan perintah
berikut ini.
library(nycflights13)
Kemudian panggil data flights. Kita gunakan fungsi head() untuk menampilkan
beberapa baris pertama saja dari data. Secara default fungsi head() akan
menampilkan 6 baris pertama saja dari data yang kita sebutkan pada argumen
pertamanya.
head(flights)
## # A tibble: 6 × 19
## year month day dep_time sched_d…¹ dep_d…² arr_t…³ sched…⁴ arr_d…⁵
carrier flight tailnum origin
## <int> <int> <int> <int> <int> <dbl> <int> <int> <dbl> <chr> <int>
<chr> <chr>
## 1 2013 1 1 517 515 2 830 819 11 UA 1545 N14228
EWR
## 2 2013 1 1 533 529 4 850 830 20 UA 1714 N24211
LGA
## 3 2013 1 1 542 540 2 923 850 33 AA 1141 N619AA
JFK
## 4 2013 1 1 544 545 -1 1004 1022 -18 B6 725 N804JB
JFK
## 5 2013 1 1 554 600 -6 812 837 -25 DL 461 N668DN
LGA
## 6 2013 1 1 554 558 -4 740 728 12 UA 1696 N39463
EWR
## # … with 6 more variables: dest <chr>, air_time <dbl>, distance <dbl>, hour
<dbl>, minute <dbl>,
## # time_hour <dttm>, and abbreviated variable names ¹sched_dep_time, ²
dep_delay, ³arr_time,
## # ⁴sched_arr_time, ⁵arr_delay
Karena package nycflights13 sudah Anda aktifkan sebelumnya maka ketika
data flights dipanggil tidak akan muncul error.
2.11.2 Membuat fungsi sendiri
Ketika Anda membuat sebuah script yang akan digunakan berkali-kali namun
dengan nilai input yang berbeda-beda, maka ada baiknya script tersebut dibuat
menjadi sebuah fungsi atau function sesuai dengan kebutuhan Anda atau User-
Defined Function. Untuk membuat function di R Anda dapat menggunakan
fungsi function(). Misalnya Anda mempunyai script seperti berikut.
a <- 5
b <- 7
d <- a + b
d
## [1] 12
Kemudian ketika Anda ingin menggunakan nilai lain untuk a namun dengan
nilai b yang sama, misalnya a <- 2, Anda perlu menjalankan perintah seperti
berikut.
a <- 2
d <- a + b
d
## [1] 9
Jika script di atas dibuat sebuah fungsi, misalnya dengan nama
fungsi sum_ab, maka Anda dapat membuatnya seperti berikut ini. Fungsi
tersebut memiliki 2 buah parameter atau argumen, yaitu a dan b berupa
nilai numerik. Argumen a dan b harus diisi ketika memanggil fungsi
tersebut. Fungsi return() di dalam fungsi sum_ab() menentukan nilai yang
akan dijadikan keluaran (output) dari fungsi sum_ab().
sum_ab(a = 5, b = 7)
## [1] 12
Merubah nilai a <- 2 dapat dilakukan dengan lebih mudah.
sum_ab(a = 2, b = 7)
## [1] 9
Bagaimana jika tidak ada argumen yang diberikan ketika memanggil
fungsi tersebut? Dalam hal ini akan terjadi error. Error yang terjadi
karena argumen pada fungsi ini adalah tipe argumen yang harus diisi atau
tidak mempunyai nilai default.
sum_ab()
## Error in sum_ab() : argument "a" is missing, with no default
Apa itu nilai default argumen pada sebuah fungsi? Kita akan sedikit
memodifikasi fungsi sum_ab() yang sudah dibuat sebelumnya.
sum_ab()
## [1] 2
sum_ab(a = 5, b = 3)
## [1] 8
Package adalah sebuah kumpulan fungsi atau data yang dibuat untuk memudahkan
proses di R tanpa harus menuliskan ulang script yang dibutuhkan. Saat ini package
menjadi bagian yang sangat penting bagi Data Analyst atau Data Scientist ketika
menggunakan R. Karena dengan package tambahan (yang belum ada ketika install
R) pekerjaan dalam mengolah data menjadi lebih efisien.
Untuk dapat menggunakan fungsi atau data dari sebuah package tambahan Anda
perlu install terlebih dahulu. Salah satu contohnya sudah disampaikan pada
bagian 2.11.1, yaitu package {nycflights13}. Selanjutnya Anda dapat install juga
package {ggplot2}. Package ini sangat berguna untuk membuat visualisasi data di
R. Untuk melihat help dari package ini Anda dapat melakukannya dengan cara yang
akan di bahas di bagian 2.12.
install.packages("ggplot")
## Installing package into �C:/Users/Lenovo/Documents/R/win-library/4.0�
## (as �lib� is unspecified)
## Warning in install.packages :
## package ‘ggplot’ is not available (for R version 4.0.1)
Contoh di atas adalah pemberitahuan ketika package yang ingin Anda install tidak
tersedia. Ketika nama package yang Anda tuliskan ada di repository maka akan
ada pop-up download file package. Sekarang coba perhatikan contoh berikut ini.
install.packages("ggplot2")
## Installing package into �C:/Users/Lenovo/Documents/R/win-library/4.0�
## (as �lib� is unspecified)
## trying URL 'http://cran.rstudio.com/bin/windows/contrib/4.0/ggplot2_3.3.2.zip'
## Content type 'application/zip' length 4067278 bytes (3.9 MB)
## downloaded 3.9 MB
##
## package ‘ggplot2’ successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\Lenovo\AppData\Local\Temp\RtmpUd5mDA\downloaded_packages
Hal yang perlu Anda perhatikan selanjutnya adalah repository package. Ada
beberapa repository yang digunakan sebagai tempat penyimpanan
package. Reposiroty yang paling umum adalah Comprehensive R Archieve
Network (CRAN). Ketika Anda menggunakan fungsi install.packages() maka
secara otomatis package yang akan diinstall berasal dari CRAN. Selain itu ada
beberapa repository lain seperti GitHub, Bitbucket, Bioconductor dan lain-lain.
Pada kesempatan ini hanya akan membahas repository GitHub saja.
Umumnya GitHub digunakan sebagai tempat untuk repository package yang belum
ada di CRAN atau versi pengembangan (development) yang belum submit ke
CRAN. Untuk dapat install package dari GitHub Anda dapat gunakan package
{devtools} atau {remotes}. Saya sarankan untuk menggunakan package {devtools}
karena dapat Anda gunakan juga untuk membuat package jika dibutuhkan. Anda
juga mungkin perlu install RTools versi yang sesuai dengan versi R Anda jika
menggunakan OS Windows.
Misalnya Anda ingin install package {DataExplorer} dari Github. Yang perlu Anda
ketahui adalah link/username dari repository package tersebut. Repository GitHub
package {DataExplorer} adalah https://github.com/boxuancui/DataExplorer.
Argumen yang dibutuhkan adalah username dan nama repository. Username dari
package ini adalah boxuancui dan repository-nya adalah DataExplorer. Anda dapat
gunakan perintah berikut ini.
install.packages("devtools")
devtools::install_github("boxuancui/DataExplorer")
//TODO: Membahas cara mencari help dari sebuah fungsi dan package.
Ketika Anda akan menggunakan sebuah fungsi di R ada baiknya untuk Anda
mengetahui beberapa hal tentang fungsi tersebut. Yang harus Anda ketahui dari
sebuah fungsi paling tidak adalah untuk apa fungsi tersebut digunakan, apa saja
argumen yang diperlukan, bagaimana penggunaannya dan output seperti apa yang
dihasilkan.
Umumnya GitHub digunakan sebagai tempat untuk repository package yang belum
ada di CRAN atau versi pengembangan (development) yang belum submit ke
CRAN. Untuk dapat install package dari GitHub Anda dapat gunakan package
{devtools} atau {remotes}. Saya sarankan untuk menggunakan package {devtools}
karena dapat Anda gunakan juga untuk membuat package jika dibutuhkan. Anda
juga mungkin perlu install RTools versi yang sesuai dengan versi R Anda jika
menggunakan OS Windows.
Misalnya Anda ingin install package {DataExplorer} dari Github. Yang perlu Anda
ketahui adalah link/username dari repository package tersebut. Repository GitHub
package {DataExplorer} adalah https://github.com/boxuancui/DataExplorer.
Argumen yang dibutuhkan adalah username dan nama repository. Username dari
package ini adalah boxuancui dan repository-nya adalah DataExplorer. Anda dapat
gunakan perintah berikut ini.
Untuk dapat menggunakan fungsi atau data dari sebuah package tambahan Anda
perlu install terlebih dahulu. Salah satu contohnya sudah disampaikan pada
bagian 2.11.1, yaitu package {nycflights13}. Selanjutnya Anda dapat install juga
package {ggplot2}. Package ini sangat berguna untuk membuat visualisasi data di
R. Untuk melihat help dari package ini Anda dapat melakukannya dengan cara yang
akan di bahas di bagian 2.12.
Umumnya GitHub digunakan sebagai tempat untuk repository package yang belum
ada di CRAN atau versi pengembangan (development) yang belum submit ke
CRAN. Untuk dapat install package dari GitHub Anda dapat gunakan package
{devtools} atau {remotes}. Saya sarankan untuk menggunakan package {devtools}
karena dapat Anda gunakan juga untuk membuat package jika dibutuhkan. Anda
juga mungkin perlu install RTools versi yang sesuai dengan versi R Anda jika
menggunakan OS Windows.
Gambar 2.5: Halaman Help Fungsi mean().
Umumnya pada sebuah halaman help akan ada informasi fungsi tersebut berasal
dari package apa, pada Gambar 2.5 diketahui fungsi mean() berasal dari package
{base}. Kemudian deskripsi singkat tentang fungsi (Description), penggunaan
(Usage), penjelasan setiap argumen pada fungsi tersebut (Arguments), penjelasan
lebih detail (Value/Detail, jika ada) dan contoh penggunaan fungsi (Examples, jika
ada).
Hal ini jg berlaku jika Anda ingin melihat halaman help dari sebuah data yang ada
di R, baik itu dari package {base} ataupun package tambahan yang lain. Misalnya
halaman help dari data iris. Ketikkan ?iris pada console RStudio untuk
menampilkan halaman help data iris. Dari Gambar 2.6 diketahui bahwa
data iris berasal dari package {datasets}.
Gambar 2.6: Halaman Help Data Iris.
Jika Anda ingin mencari help sebuah fungsi yang berasal dari package tertentu yang
sudah Anda install sebelumnya tetapi belum Anda aktifkan package tersebut, maka
Anda dapat gunakan format namespace (namapackage::namafungsi). Sebagai
ilustrasi Anda dapat mencari help dari fungsi read_excel() dari package {readxl}
(https://readxl.tidyverse.org/). Untuk mencari hellp fungsi tersebut Anda dapat
ketikkan ?readxl::read_excel di console dan akan muncul halaman help seperti
pada Gambar 2.7.
Gambar 2.7: Halaman Help Fungsi read_excel().
Cara lain untuk mencari help di R adalah dengan menggunakan fungsi help().
Misalnya untuk help dari fungsi mean() Anda ketikkan di
console help('mean"), help("iris") untuk data iris. Untuk melihat help sebuah
fungsi dari package yang belum Anda aktifkan, Anda juga harus menyebutkan
nama packagenya seperti help("read_excel", package = "readxl"). Apa yang terjadi
jika Anda tidak menyebutkan nama packagenya?
help("read_excel")
Tetapi jika Anda sudah mengaktikan package tersebut, baik menggunakan
fungsi library(), require() ataupun dengan klik pada tab Packages, Anda tidak perlu
menyebutkan nama package tersebut. Cukup mengetikkan help("read_excel").
library(readxl)
help("read_excel")
Untuk melihat help dari suatu package, misalnya package {readxl}, Anda dapat
gunakan help(package = "readxl")
BAB III
OPRASIONAL R
Ketika membahas struktur kendali pada suatu bahasa pemrograman pasti akan
membahas tentang operator logika atau logical operator. Nilai dari logika akan
selalu bernilai TRUE atau FALSE. Berikut ini tabel operator logika dan
penjelasannya.
Operator lain yang juga sering digunakan adalah %in% (operator in). Operator ini
digunakan untuk mengetahui apakah suatu nilai yang ada dalam sebuah vector.
Misalnya contoh berikut ini.
2 %in% 1:5
## [1] TRUE
Program di atas artinya untuk mengetahui apakah nilai numerik 2 ada diantara
vector numeric yang nilainya 1 sampai dengan 5. Karena nilai 2 ada diantara 1
sampai dengan 5 maka nilai dari program di atas adalah TRUE. Begitu juga jika
nilai yang ingin diketahui adalah character. Seperti contoh berikut ini.
2 > 1:5
## [1] TRUE FALSE FALSE FALSE FALSE
Nilai 2 disebelah kiri operator dievaluasi terhadap masing-masing elemen pada
vector sebelah kanan. Maka dari itu karena 2 lebih besar dari 1 hasilnya
adalah TRUE. Selanjutnya karena 2 tidak lebih besar dari 2, 3, 4, dan 5 maka
sisanya bernilai FALSE. Perhatikan contoh berikut ini.
2 >= 1:5
## [1] TRUE TRUE FALSE FALSE FALSE
2 < 1:5
## [1] FALSE FALSE TRUE TRUE TRUE
2 <= 1:5
## [1] FALSE TRUE TRUE TRUE TRUE
Operator logika terakhir yang akan kita bahas adalah operator && dan ||.
Operator && adalah operator AND dan || adalah OR. Mungkin Anda bertanya,
“Apa perbedaannya dengan operator & dan |?”. Ingat bahwa
operator & dan | mengevaluasi masing-masing nilai ketika yang dibandingkan
adalah vector. Misalnya c(TRUE, FALSE) && c(FALSE, TRUE) akan
menghasilkan dua nilai, yaitu c(FALSE, FALSE) karena masing-masing elemen
dievaluasi terhadap pasangannya (elementwise). Pada operator && dan || yang
dievaluasi hanya elemen pertama pada setiap vector. Untuk lebih jelasnya
perhatikan contoh berikut ini.
p&q
## [1] TRUE FALSE FALSE FALSE
Berbeda halnya ketika kita gunakan operator &&. Ketika kita gunakan
operator && pada p && q maka yang akan dievaluasi adalah elemen pertama
dari p dan q. Elemen pertama dari p adalah TRUE dan elemen pertama
dari q adalah TRUE juga. Maka hasil dari p && q adalah TRUE &
TRUE yaitu TRUE. Perhatikan bahwa karena hanya elemen pertama dari masing-
masing vector yang dievaluasi sehingga hasilnya adalah sebuah vector dengan satu
elemen.
p && q
## Warning in p && q: 'length(x) = 4 > 1' in coercion to 'logical(1)'
p || q
## Warning in p || q: 'length(x) = 4 > 1' in coercion to 'logical(1)'
## [1] TRUE
c(TRUE, FALSE) || c(FALSE, TRUE)
## Warning in c(TRUE, FALSE) || c(FALSE, TRUE): 'length(x) = 2 > 1' in coercion
to 'logical(1)'
## [1] TRUE
c(FALSE, FALSE) || c(FALSE, TRUE)
## Warning in c(FALSE, FALSE) || c(FALSE, TRUE): 'length(x) = 2 > 1' in
coercion to 'logical(1)'
## Warning in c(FALSE, FALSE) || c(FALSE, TRUE): 'length(x) = 2 > 1' in
coercion to 'logical(1)'
## [1] FALSE
c(TRUE, TRUE) || c(FALSE, TRUE)
## Warning in c(TRUE, TRUE) || c(FALSE, TRUE): 'length(x) = 2 > 1' in coercion
to 'logical(1)'
## [1] TRUE
c(TRUE, FALSE) || TRUE
## Warning in c(TRUE, FALSE) || TRUE: 'length(x) = 2 > 1' in coercion to
'logical(1)'
## [1] TRUE
FALSE || c(FALSE, TRUE)
## Warning in FALSE || c(FALSE, TRUE): 'length(x) = 2 > 1' in coercion to
'logical(1)'
## [1] FALSE
2<3
## [1] TRUE
Bentuk umum dari perintah menggunakan if() adalah sebagai berikut.
if(kondisi) ekspresi
Berikut ini contoh program untuk menjalankan sebuah perintah menuliskan sebuah
teks ketika kondisi bernilai benar.
if(kondisi){
ekspresi jika kondisi benar
} else {
ekspresi jika kondisi salah
}
Perhatikan contoh berikut ini.
Di atas kita sudah membahas contoh sederhana penggunaan if() dengan hanya satu
kondisi. Selanjutnya bagaimana jika nilai yang ada pada kondisi berisi lebih dari
satu nilai benar atau salah? Kita ingat kembali bahwa sebelumnya kita telah
membuat sebuah objek bernama p yang merupakan sebuah vector berisi nilai
logical, yaitu TRUE, TRUE, FALSE, FALSE. Ketika Anda menggunakan R versi
< 4.2.0 dengan kondisi pada fungsi if() mempunyai lebih dari satu nilai (length >
1) maka hal yang pertama akan muncul adalah warning seperti berikut ini.
## the condition has length > 1 and only the first element will be used[1] TRUE
TRUE FALSE FALSE
Dari warning di atas dapat kita ketahui bahwa fungsi if() hanya menggunakan
elemen pertama dari vector p sebagai kondisi yang dievaluasi. Karena nilai pertama
dari vector p adalah TRUE maka perinath print(p) dijalankan, yaitu mencetak
semua nilai pada vector p. Jika kita buat negasi dari p dengan !p, maka elemen
pertamanya menjadi FALSE sehingga perintah print(p) tidak akan dijalankan.
Namun tetap ada warning yang muncul karena kondisi yang diberikan memiliki
lebih dari satu nilai logical.
Tetapi jika Anda menggunakan R versi >= 4.2.0 dan kondisi pada pada
fungsi if() lebih dari 1 (length > 1) maka akan muncul error seperti berikut.
Error in if (p) { : the condition has length > 1
Pada perubahan ketika R versi 4.2.0 release Anda akan menemukan pemberitahuan
sebagai berikut.
Calling if() or while() with a condition of length greater than one gives an error
rather than a warning. Consequently, environment
variable R_CHECK_LENGTH_1_CONDITION no longer has any effect.
Untuk dapat melakukan evaluasi pada masing-masing nilai logical dari vector p,
kita dapat gunakan fungsi ifelse(). Bentuk umumnya sedikit berbeda dibandingkan
dengan fungsi if() yang sudah kita bahas.
Selain fungsi if() yang dapat digunakan sebagai struktur kendali, di R juga terdapat
fungsi switch(). Cara kerja fungsi switch() secara umum mirip seperti fungsi if(),
yaitu menjalankan perintah yang sesuai dengan kondisi yang ada. Fungsi ini secara
umum digunakan untuk menjalankan suatu perintah berdasarkan pilihan yang sudah
ditentukan dan dibuat di dalam sebuah function. Sebagai contoh, di bawah ini kita
akan menggunakan fungsi switch() untuk menghitung
nilai mean, median atau trimmed (rataan terpotong). Argumen yang kita gunakan
pada contoh ini kita namakan type. Cara kerjanya adalah sebagai berikut.
Jika type yang digunakan adalah "mean" maka fungsi yang akan dijalankan adalah
fungsi mean dari input yang diberikan. Jika type = "median" maka fungsi yang
akan digunakan adalah median dari input yang diberikan, dan seterusnya.
x <- 1:12
type <- 'mean'
switch(type,
mean = mean(x),
median = median(x),
trimmed = mean(x, trim = .1))
## [1] 6.5
Misalnya kita buat sebuah fungsi bernama center untuk memudahkan penggunaan
perintah di atas.
center <- function(x, type) {
switch(type,
mean = mean(x),
median = median(x),
trimmed = mean(x, trim = .1))
}
Ketika kita ingin menghitung rata-rata dari vector x kita cukup menuliskannya
seperti berikut ini.
center(x, 'mean')
## [1] 6.5
Begitu juga ketika kita ingin menghitung median atau rata-rata terpangkas
(trimmed), maka kita cukup mengganti 'mean' dengan pilihan yang sesuai.
center(x, 'median')
## [1] 6.5
center(x, 'trimmed')
## [1] 6.5
for(i in 1:5){
msg <- paste0("looping for ke-", i)
message(msg)
}
## looping for ke-1
## looping for ke-2
## looping for ke-3
## looping for ke-4
## looping for ke-5
Argumen i in 1:5 pada looping for() di atas berarti looping ini akan menjalankan
perintah dengan indeks i bernilai 1 sampai dengan 5 pada setiap iterasinya. Atau
dengan kata lain kita memerintahkan R untuk melakukan iterasi sebanyak 5 kali.
Kemudian karena indeks i digunakan pada fungsi paste0(), maka nilai i akan
berubah sesuai dengan nilai i pada iterasi tersebut.
Berbeda dengan fungsi for() yang digunakan ketika kita sudah mengetahui
banayaknya iterasi yang akan dijalankan, baik itu secara eksplisit ataupun secara
pemrograman, while() digunakan ketika kita tidak mengetahui banyaknya iterasi
yang akan dijalankan namun mengetahui kondisi logical yang menjadi syarat
program tersebut tetap berjalan. Bentuk umum dari looping while() ini adalah
sebagai berikut.
while(kondisi) {
ekspresi
...
}
Argumen kondisi adalah sebuah nilai logical (TRUE atau FALSE). Ekspresi atau
perintah yang ada di dalam while() akan terus dijalankan
selama kondisi bernilai TRUE. Satu hal penting yang harus diingat ketika
menggunakan while() adalah kita harus bisa memastikan bahwa
argumen kondisi suatu saat akan bernilai FALSE agar iterasinya berhenti.
i <- 0
while(i < 5){
print(i)
i <- i + 1
}
## [1] 0
## [1] 1
## [1] 2
## [1] 3
## [1] 4
i <- 0
while(i < 5){
i <- i + 1
print(i)
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
Fungsi terakhir untuk looping yang akan dibahas pada buku ini adalah
menggunakan fungsi repeat untuk looping. Looping repeat ini lebih mirip
dengan while() karena syarat berhenti iterasinya berdasarkan suatu kondisi logical
menggunakan if(kondisi) break.
repeat {
ekspresi
...
if(kondisi) break
}
Perintah berikut ini adalah perintah untuk menjalankan hal yang sama dengan
perintah ketika kita menggunakan fungsi while().
i <- 0
repeat {
if(i>4) {
break # repeat selesai
}
i <- i + 1
print(i)
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
BAB IV
Sebagai alat bantu untuk mengolah, analisis dan visualisasi data sekaligus juga
sebagai bahasa pemrograman tentunya R harus memiliki kemampuan untuk mebaca
data. Oleh karena itu, R dibekali kemampuan membaca data atau import dari file
dan database. Selain harus bisa imprort data, kemampuan lain adalah export data
atau hasil analisis data. Tentu saja saat ini sangat banyak tipe data yang didukung
oleh R dengan bantuan tambahan package yang sesuai. Namun pada kesempatan
ini hanya akan membahas beberapa jenis data file eksternal dan jenis database.
{
if(!require(readr)){
install.packages("readr")
}
if(!require(readxl)){
install.packages("readxl")
}
if(!require(writexl)){
install.packages("writexl")
}
if(!require(RMySQL)){
install.packages("RMySQL")
}
if(!require(RPostgres)){
install.packages("RPostgres")
}
}
Jenis file yang akan dibahas adalah textfile (*.txt), CSV (*.csv) dan Excel file.
4.1.1 Textfile
Textfile adalah salah satu jenis file yang sering digunakan untuk menyimpan atau
bertukar data. Fungsi yang sudah tersedia di R untuk import textfile
adalah read.table() dan read.delim(). Apa perbedaan dari kedua fungsi ini? Kita
akan membahasnya di bagian ini.
Yang pertama kita akan membahas fungsi read.table(). Untuk mengetahui argumen
yang digunakan oleh fungsi ini dan contoh penggunaannya kita dapat lihat pada
help dengan mengetik perintah berikut ini di console.
?read.table
Misalnya kita akan import data dari file bernama iris.txt yang ada di dalam
folder D:\data dan kita simpan sebagai objek dataframe iris_txt. Kita dapat gunakan
perintah berikut ini.
head(iris_txt)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
Jika kita perhatikan, pemisah antar kolom (delimiter) pada file tersebut adalah spasi.
Ketika delimiter pada file yang akan kita import berbeda, kita dapat gunakan
fungsi read.delim(). Penggunaannya hampir sama dengan fungsi read.table().
Hanya saja menambahkan argumen sep = "\t". Delimiter default pada fungsi ini
adalah tab yang disimbolkan dengan \t. Kita cukup mengganti simbol tersebut
sesuai dengan yang ada pada file yang akan diimport. Misalnya ketika delimiter
pada file yang akan diimport adalah | maka delimiternya menjadi sep = "|" seperti
contoh berikut ini.
Menggunakan Package
Selain menggunakan fungsi dari R sendiri yang sudah kita bahas, ada banyak
package yang dapat digunakan untuk import data dari textfile.Salah satunya adalah
package {readr} yang menjadi bagian dari package {tidyverse}. Aktifkan package
yang dibutuhkan dengan menggunakan fungsi library(). Untuk import data dari
textfile, salah satunya kita dapat menggunakan fungsi read_delim() dari package
{readr}.
library(readr)
packageVersion("readr")
## [1] '2.1.2'
Sama halnya ketika kita akan import data dari textfile dengan delimiter tertentu
seperti yang sudah dibahas ketika menggunakan fungsi read.delim(). Kita dapat
menggunakan fungsi read_delim() seperti di bawah ini. Argumen file = adalah
lokasi dan nama file yang ingin kita import. Kemudian argumen delim = adalah
untuk menunjukkan delimiter/separator/pemisah kolom yang ada pada file tersebut.
Argumen col_names = TRUE jika baris pertama pada file tersebut adalah nama
kolom. Contoh perintah di bawah ini akan menyimpan hasil import (jika berhasil)
ke dalam sebuah objek dataframe bernama iris.
iris_txt <- read_delim(file = "D:/data/iris.txt", delim = " ", col_names = TRUE)
4.1.2 CSV
Selain textfile, CSV juga merupakan format file yang sering digunakan untuk
menyimpan atau bertukar data. Fungsi yang tersedia di R untuk dapat mengimport
data dari file CSV adalah read.csv() dan read.csv2(). Apa perbedaan dari kedua
fungsi bersaudara ini? Mari kita bahas.
Menggunakan Package
Package {readr} menyiapkan fungsi read_csv() untuk import data dari file CSV.
4.1.3 Excel
Jenis file lain yang juga sering digunakan adalah file Excel. Kita dapat
menggunakan package {readxl} dengan fungsi read_excel() untuk import data dari
file Excel. Argumen path = adalah lokasi dan nama file Excel yang akan kita
gunakan.
library(readxl)
iris_xl <- read_excel(path = "data/iris.xlsx", col_names = TRUE)
iris_xl
## # A tibble: 150 × 5
## `Sepal Length` `Sepal Width` `Petal Length` `Petal Width` Species
## <dbl> <dbl> <dbl> <dbl> <chr>
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
## 7 4.6 3.4 1.4 0.3 setosa
## 8 5 3.4 1.5 0.2 setosa
## 9 4.4 2.9 1.4 0.2 setosa
## 10 4.9 3.1 1.5 0.1 setosa
## # … with 140 more rows
4.2 Database
R sebagai program untuk statistik dan analisis data juga didukung dengan
kemampuan untuk mengakses data pada database. Kita akan demonstrasikan cara
import data dari Database Management System (DBMS) MySQL dan PostgreSQL.
4.2.1 MySQL
Agar R dapat berinteraksi dengan DBMS MySQL kita perlu install package
{RMySQL}. Package {RMySQL} hingga saat ini masih mempunyai keterbatasan,
yaitu dapat berjalan dengan baik pada DBMS MySQL versi 5. Namun pada MySQL
versi 8 tidak dapat eksport data dari R menjadi tabel di database.
Pertama kita harus membuat koneksi ke database yang akan diakses. Misalnya
database yang akan digunkana bernama mydatabase. Perintah di bawah ini tidak
dapat Anda jalankan kecuali Anda mempunyai database di lokal komputer Anda
dengan pengaturan yang sama.
library(RMySQL)
my_con <- dbConnect(drv = RMySQL::MySQL(),
# alamat IP database
host = "localhost",
# nama database
dbname = "mydatabase",
# user ID
user = "username",
# password
password = "Password",
# port database
port = 3306
)
my_con
Kita dapat mengetahui nama tabel yang ada di dalam database yang kita akses.
dbListTables(my_con)
Untuk dapat import tabel dari database menjadi dataframe di R, kita dapat gunakan
fungsi dbReadTable(). Sebutkan objek koneksi yang sebelumnya kita buat dan
nama tabel yang akan kita akses.
dbDisconnect(my_con)
4.2.2 PostgreSQL
DBMS lain yang akan digunakan untuk contoh kali ini adlaah PostgreSQL. Ada
beberapa package yang dapat digunakan untuk membuat koneksi dan akses DBMS
PostgreSQL dari R, diantaranya adalah package {RPostgres} dan {RPostgreSQL}.
Kali ini kita akan menggunakan package {RPostgress}. Contoh database yang
digunakan kali ini memanfaatkan jasa penyedia layanan database PostgreSQL
online secara gratis. Anda dapat mencoba akses database berikut ini jika Anda
mempunyai koneksi internet yang cukup baik. Jika Anda mengalami kesulitan atau
mengalami kendala ketika mengakses database yang digunakan berikut ini,
silahkan hubungi penulis. Anda juga dipersilahkan jika ingin mencoba membuat
database sendiri di https://elephantsql.com.
library(RPostgres)
pg_con <- dbConnect(RPostgres::Postgres(),
# alamat IP database
host = "rosie.db.elephantsql.com",
# port
port = 5432,
# nama database
dbname = "nfjvlkjy",
# username
user = "nfjvlkjy",
# password
password = "uDTq8jJo6kMxAg1TECN3WK8UeXGKqndJ"
)
pg_con
Anda dapat mencoba sendiri untuk membuat koneksi dan mengakses database dari
PostgreSQL yang sudah disiapkan dan dapat diakses secara remote. Gunakan
fungsi dbListTables() untuk mengetahui nama tabel yang sudah ada di dalam
database tersebut.
dbListTables(pg_con)
Sama seperti ketika kita import tabel dari DBMS MySQL, kita gunakan
fungsi dbReadTable() dengan menyebutkan nama tabel yang akan diimport.
dbDisconnect(pg_con)
File RDS adalah format file eksternal dari objek yang ada di R. Semua data ketika
kita mengolah data di disimpan di dalam memory. Oleh karena itu ketika kita
menutup sesi R yang sedang berjalan, maka semua data atau objek yang ada akan
hilang. Namun kita bisa ekspor objek yang nantinya ingin kita gunakan kembali di
dalam sebuah file eksternal dengan format RDS.
Untuk dapat menggunakan data yang ada di dalam file RDS kita dapat gunakan
fungsi readRDS() dari pakage {base} atau read_rds() dari package {readr}.
# dari {base}
data <- readRDS("data/iris.rds")
head(data)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
# dari package {readr}
data <- read_rds("data/iris.rds")
head(data)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
BAB V
STATISTIKA PADA R
Visualisasi data merupakan bagian yang sangat penting untuk
mengkomunikasikan hasil analisa yang telah kita lakukan. Selain itu, komunikasi
juga membantu kita untuk memperoleh gambaran terkait data selama proses
analisa data sehingga membantu kita dalam memutuskan metode analisa apa
yang dapat kita terapkan pada data tersebut.
R memiliki library visualisasi yang sangat beragam, baik yang merupakan fungsi
dasar pada R maupun dari sumber lain seperti ggplot dan lattice. Seluruh library
visualisasi tersebut memiliki kelebihan dan kekurangannya masing-masing.
Pada chapter ini kita tidak akan membahas seluruh library tersebut. Kita akab
berfokus pada fungsi visualisasi dasar bawaan dari R. kita akan mempelajari
mengenai jenis visualisasi data sampai dengan melakukan kustomisasi pada
parameter grafik yang kita buat.
x dan y: titik koordinat plot Berupa variabel dengan panjang atau jumlah
observasi yang sama.
type: jenis grafik yang hendak dibuat. Nilai yang dapat dimasukkan
antara lain:
o type=“p” : membuat plot titik atau scatterplot. Nilai ini merupakan
default pada fungsi plot().
o type=“l” : membuat plot garis.
o type=“b” : membuat plot titik yang terhubung dengan garis.
o type=“o” : membuat plot titik yang ditimpa oleh garis.
o type=“h” : membuat plot garis vertikal dari titik ke garis y=0.
o type=“s” : membuat fungsi tangga.
o type=“n” : tidak membuat grafik plot sama sekali, kecuali plot dari
axis. Dapat digunakan untuk mengatur tampilan suatu plot utama
yang diikuti oleh sekelompok plot tambahan.
Untuk lebih memahaminya berikut penulis akan sajikan contoh untuk masing-
masing grafik tersebut. Berikut adalah contoh sintaks dan hasil plot yang
disajikan pada Gambar 3.1:
# loop
type <- c("p","l","b","o","h","s","n")
for (i in type){
plot(x,y, type= i,
main= paste("type=", i))
}
Gambar 3.1: Plot berbagai jenis setting type
Pada contoh selanjutnya kita akan mencoba membuat kembali data yang akan
kita plotkan. Data pada contoh kali ini merupakan data suatu fungsi matematika.
Berikut adalah sintaks yang digunakan:
set.seed(123)
x <- seq(from=0, to=10, by=0.1)
y <- x^2*exp(-x/2)*(1+rnorm(n=length(x), mean=0, sd=0.05))
par(mfrow=c(1,2),
# mengatur margin grafik
mar=c(4,4,1.5,1.5),
# mengatur margin sumbu
mex=0.8,
# arah tick sumbu koordinat
tcl=0.3)
plot(x, y, type="l")
plot(x, y, type="o")
Gambar 3.2: Plot fungsi matematika
Fungsi lain yang dapat digunakan untuk membuat kurva suatu persamaan
matematis adalah fungsi curve(). Berbeda dengan fungsi plot() yang perlu
menspesifikasi objek pada sumbu x dan y, fungsi curve() hanya perlu
menspesifikasi objek sumbu x saja. Format fungsi curve() adalah sebagai
berikut:
curve(expr, from = NULL, to = NULL, add = FALSE)
Catatan:
# Grafik kanan
plot(x, y, pch=19, cex=0.7,
xlab="Waktu (detik)",
ylab="Sinyal Intensitas")
curve(expr=x^2*exp(-x/2),
from=0, to=10, add=TRUE)
par(mfrow=c(1,1))
Kita dapat mengubah warna pada masing-masing bar, baik outline bar maupun
box pada bar. Selain itu kita juga dapat mengubah nama grup yang telah
dihasilkan sebelumnya. Berikut sintaks untuk melakukannya dan output yang
dihasilkan pada Gambar 3.5:
Untuk bar plot dengan multiple group, tersedia dua pengaturan posisi
yaitu stacked bar plot(menunjukkan proporsi penyusun pada masing-masing
grup) dan grouped bar plot(melihat perbedaan individual pada masing-masing
grup). Pada Gambar 3.6 dan Gambar 3.7 , disajikan kedua jenis bar plot tersebut.
# staked
barplot(VADeaths,
col = c("lightblue", "mistyrose", "lightcyan",
"lavender", "cornsilk"),
legend = rownames(VADeaths))
Gambar 3.6: Stacked bar plot
# grouped
barplot(VADeaths,
col = c("lightblue", "mistyrose", "lightcyan",
"lavender", "cornsilk"),
legend = rownames(VADeaths), beside = TRUE)
x: vektor numerik
breaks: breakpoints antar sel histogram.
Pada dataset trees akan dibuat histogram variabel Height. Untuk melakukannya
jalankan sintaks berikut:
hist(trees$Height)
Output yang dihasilkan disajikan pada Gambar 3.8:
Density plot pada R dapat dibuat menggunakan fungsi density(). Berbeda dengan
fungsi hist(), fungsi ini tidak langsung menghasilkan grafik densitas.
Fungsi density() hanya menghitung kernel densitas pada data. Densitas yang
telah dihitung selanjutnya diplotkan menggunakan fungsi plot(). Berikut adalah
sintaks dan output yang dihasilkan pada Gambar 3.9:
# menghitung kernel density
dens <- density(trees$Height)
# histogram
hist(trees$Height, freq=FALSE, col="steelblue")
Kita juga dapat mengubah warna outline dan box pada boxplot. Berikut adalah
contoh sintaks yang digunakan untuk melakukannya dan output yang dihasilkan
disajikan pada Gambar 3.13:
boxplot(iris$Sepal.Length~iris$Species,
# ubah warna outline menjadi steelblue
border = "steelblue",
# ubah warna box berdasarkan grup
col= c("#999999", "#E69F00", "#56B4E9"))
# print
head(ToothGrowth)
## len supp dose
## 1 4.2 VC 0.5
## 2 11.5 VC 0.5
## 3 7.3 VC 0.5
## 4 5.8 VC 0.5
## 5 6.4 VC 0.5
## 6 10.0 VC 0.5
Contoh sintaks dan output boxplot multiple group disajikan pada Gambar 3.14:
# menambahkan judul
barplot(c(2,5), main="Main title",
xlab="X axis title",
ylab="Y axis title",
sub="Sub-title")
kita juga dapat melakukan kustomisasi pada warna, font style, dan ukuran font
judul. Untuk melakukan kustomisasi pada warna pada judul, kita dapat
menambahkan argumen sebagai berikut:
Penting!!!
Nilai yang dapat dimasukkan antara lain:
# menambahkan judul
barplot(c(2,5),
# menambahkan judul
main="Main title",
xlab="X axis title",
ylab="Y axis title",
sub="Sub-title",
# kustomisasi warna font
col.main="red",
col.lab="blue",
col.sub="black",
# kustomisasi font style
font.main=4,
font.lab=4,
font.sub=4,
# kustomisasi ukuran font
cex.main=2,
cex.lab=1.7,
cex.sub=1.2)
Gambar 3.16: Menambahkan Judul (2)
Kita telah belajar bagaimana menambahkan judul langsung pada fungsi plot.
Selain cara tersebut, telah penulis jelaskan bahwa kita dapat menambahkan judul
melalui fungsi title(). argumen yang dimasukkan pada dasarnya tidak berbeda
dengan ketika kita menambahkan judul secara langsung pada plot. Berikut adalah
contoh sintaks dan output yang dihasilkan pada Gambar 3.17:
# menambahkan judul
barplot(c(2,5,8))
# menambahkan judul
title(main="Main title",
xlab="X axis title",
ylab="Y axis title",
sub="Sub-title",
# kustomisasi warna font
col.main="red",
col.lab="blue",
col.sub="black",
# kustomisasi font style
font.main=4,
font.lab=4,
font.sub=4,
# kustomisasi ukuran font
cex.main=2,
cex.lab=1.7,
cex.sub=1.2)
Gambar 3.17: Menambahkan Judul (3)
Berikut adalah contoh sintaks dan ouput penerapan argumen disajikan pada
Gambar 3.18:
Kita dapat menambahkan judul, merubah font, dan merubah warna backgroud
pada legend. Argumen yang ditambahkan pada legend adalah sebagai berikut:
Berikut adalah penerapan sintaks dan output yang dihasilkan pada Gambar 3.19:
# menambahkan legend
legend(1, 95, legend=c("Line 1", "Line 2"),
col=c("red", "blue"), lty=1:2, cex=0.8,
title="Line types", text.font=4, bg='lightblue')
# menambahkan legend
legend(1, 95, legend=c("Line 1", "Line 2"),
col=c("red", "blue"), lty=1:2, cex=0.8,
title="Line types", text.font=4, bg='white',
box.lty=2, box.lwd=2, box.col="steelblue")
Gambar 3.20: Menambahkan legend (3)
# plot
plot(x,y, type = "n")
Berikut adalah contoh sintaks untuk memberi label pada sejumlah data yang
memiliki kriteria yang kita inginkan dan output yang dihasilkan pada
Gambar 3.22:
# plot
plot(mtcars$wt, mtcars$mpg, main="Milage vs. Car Weight",
xlab="Weight", ylab="Miles/(US) gallon")
# menambahkan text
text(d$wt, d$mpg, row.names(d),
cex=0.65, pos=3,col="red")
Gambar 3.22: Menambahkan teks
plot(1:10, 1:10,
main="text(...) examples\n~~~~~~~~~~~")
text(4, 9, expression(hat(beta) == (X^t * X)^{-1} * X^t * y))
text(7, 4, expression(bar(x) == sum(frac(x[i], n), i==1, n)))
Fungsi mtext() berguna untuk menambahkan teks pada frame sekitar bidang
grafik. Format yang digunakan adalah sebagai berikut:
mtext(text, side=3)
Catatan:
Berikut adalah contoh penerapan dan output yang dihasilkan pada Gambar 3.24:
plot(1:10, 1:10,
main="mtext(...) examples\n~~~~~~~~~~~")
mtext("Magic function", side=3)
pch = 0,square
pch = 1,circle (default)
pch = 2,triangle point up
pch = 3,plus
pch = 4,cross
pch = 5,diamond
pch = 6,triangle point down
pch = 7,square cross
pch = 8,star
pch = 9,diamond plus
pch = 10,circle plus
pch = 11,triangles up and down
pch = 12,square plus
pch = 13,circle cross
pch = 14,square and triangle down
pch = 15, filled square
pch = 16, filled circle
pch = 17, filled triangle point-up
pch = 18, filled diamond
pch = 19, solid circle
pch = 20,bullet (smaller circle)
pch = 21, filled circle blue
pch = 22, filled square blue
pch = 23, filled diamond blue
pch = 24, filled triangle point-up blue
pch = 25, filled triangle point down blue
Untuk lebih memahami bentuk simbol tersebut, penulis akan menyajikan sintaks
yang menampilkan seluruh simbol tersebut pada satu grafik. Output yang
dihasilkan disajikan pada Gambar 3.26:
generateRPointShapes<-function(){
# menentukan parameter plot
oldPar<-par()
par(font=2, mar=c(0.5,0,0,0))
# produksi titik axis
y=rev(c(rep(1,6),rep(2,5), rep(3,5), rep(4,5), rep(5,5)))
x=c(rep(1:5,5),6)
# plot seluruh titik dan label
plot(x, y, pch = 0:25, cex=1.5, ylim=c(1,5.5), xlim=c(1,6.5),
axes=FALSE, xlab="", ylab="", bg="blue")
text(x, y, labels=0:25, pos=3)
par(mar=oldPar$mar,font=oldPar$font )
}
# Print
generateRPointShapes()
lty = 0, blank
lty = 1, solid (default)
lty = 2, dashed
lty = 3, dotted
lty = 4, dotdash
lty = 5, longdash
lty = 6, twodash
Untuk lebih memahaminya, pada sintaks berikut disajikan plot seluruh jenis garis
tersebut beserta output yang dihasilkannya pada Gambar 3.27:
generateRLineTypes<-function(){
oldPar<-par()
par(font=2, mar=c(0,0,0,0))
plot(1, pch="", ylim=c(0,6), xlim=c(0,0.7), axes = FALSE ,xlab="", ylab="")
for(i in 0:6) lines(c(0.3,0.7), c(i,i), lty=i, lwd=3)
text(rep(0.1,6), 0:6,
labels=c("0.'blank'", "1.'solid'", "2.'dashed'", "3.'dotted'",
"4.'dotdash'", "5.'longdash'", "6.'twodash'"))
par(mar=oldPar$mar,font=oldPar$font )
}
generateRLineTypes()
Berikut contoh sintaks penerapan fungsi tersebut dan output yang dihasilkan pada
Gambar 3.28:
# plot
plot(x, y, pch=18, col="red", type="b",
frame=FALSE, xaxt="n") # Remove x axis
# menambahkan axis
# bawah
axis(1, 1:4, LETTERS[1:4], col.axis="blue")
# atas
axis(3, col = "darkgreen", lty = 2, lwd = 0.5)
# kanan
axis(4, col = "violet", col.axis = "dark violet", lwd = 2)
Gambar 3.28: Modifikasi axis
Berikut adalah contoh sintaks penerapan argumen tersebut beserta output yang
dihasilkan pada Gambar 3.29:
# membagi jendela grafik menjadi 1 baris dan 3 kolom
par(mfrow=c(1,3))
# simple plot
plot(x, y)
Kita dapat melakukan kustomisasi pada tick mark. Kustomisasi yang dapat
dilakukan adalah merubah warna, font style, ukuran font, orientasi, serta
menyembunyikan tick mark.
# plot
plot(x,y,
# warna
col.axis="red",
# font style
font.axis=2,
# ukuran
cex=1.5,
# orientasi
las=3,
# sembunyikan sumbu x
xaxt="n")
Gambar 3.30: Kustomisasi tick mark
Pada sintaks berikut disajikan visualisasi nama-nama warna bawaan yang ada
pada R. Output yang dihasilkan disajikan pada Gambar 3.31:
showCols <- function(cl=colors(), bg = "grey",
cex = 0.75, rot = 30) {
m <- ceiling(sqrt(n <-length(cl)))
length(cl) <- m*m; cm <- matrix(cl, m)
require("grid")
grid.newpage(); vp <- viewport(w = .92, h = .92)
grid.rect(gp=gpar(fill=bg))
grid.text(cm, x = col(cm)/m, y = rev(row(cm))/m, rot = rot,
vp=vp, gp=gpar(cex = cex, col = cm))
}
# plot pertama
image(z, col=gray(1:10/10))
# plot kedua
contour(z)
Gambar 3.32: image plot (kiri) dan contour plot (kanan)
par(mfrow=c(1,1))
Proyeksi 3 dimensi dapat dilakukan menggunakan fungsi persp(). Sudut
penglihatan dapat diatur melalui argumentheta (sudut) dan phi() (rotasi). Sintaks
berikut merupakan contoh bagaimana cara menghasilkan visualisasi 3 dimensi
dari data yang telah diproduksi sebelumnya:
par(mar=c(3,3,1.5,1.5), mex=0.8, mgp=c(2,0.5,0), tcl=0.3)
par(mfrow=c(1,2))
# plot pertama
persp(n,n,z, theta=45, phi=20)
# plot kedua
persp(n,n,z, theta=45, phi=20, shade=0.5)
Gambar 3.33: proyeksi 3 dimensi (kanan) dan proyeksi 3 dimensi dengan
pewarnaan
par(mfrow=c(1,1))
DAFTAR PUSTAKA
[6] Atmaja, Lukas Setia., Ph.D, Statistika untuk Bisnis dan Ekonomi,
Penerbit Andi,Yogyakarta, 2009.