Rangkuman Pemrograman Statistika Pertemuan 1-3

Annebel Diestya Clarissa

2/28/2021

Pertemuan 1 : Pengantar Algoritma Pemrograman

Algoritma adalah urutan instruksi atau langkah-langkah yang harus dilakukan untuk menyelesaikan masalah

Syarat Algoritma yang baik :
  • Efisien
  • Mudah diimplementasi
  • Mudah dipahami
  • Akurasi tinggi
  • Bersifat umum
  • Langkah jelas dan detail
  • Bisa dikembangkan

  • 5 ciri algoritma
  • Finiteness
  • Definiteness
  • Input
  • Output
  • Efectiveness

  • Struktur Algoritma
  • Runtunan
  • Percabangan
  • Perulangan : For, While , Repeat
  • Pertemuan 2 : Algoritma Pemrograman dalam Bahasa R

    Simbol dalam R

    Tanda “>” adalah prompt yang menunjukkan bahwa R sedang dalam posisi siap menerima perintah baru. Jika perintah belum lengkap, maka tanda akan berubah menjadi “+”

    2+
    4
    ## [1] 6

    Assignment

    A <- 1 artinya A didefinisikan sebagai angka 1

    A <- 1
    cat("nilai A adalah =",A)
    ## nilai A adalah = 1

    Operator Assigment lainnya :

    Operator Cakupan
    <- lokal/global
    -> lokal/global
    <<- global
    ->> global

    Case Sensitive

    Dalam R A=1 akan berbeda dengan a=10

    A <- 1
    a <- 10
    cat("nilai A adalah =",A, "dan nilai a adalah =",a)
    ## nilai A adalah = 1 dan nilai a adalah = 10

    Aturan penamaan objek

  • Diawali huruf (A-Z atau a-z) atau titik
  • Tidak menggunakan spasi atau karakter special (!,@,#, dll)
  • Menghindari kata-kata yang sudah digunakan oleh R (TRUE, FALSE, sin, cos, NULL, dll)
  • Objek di R

    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()

    #Membuat vektor numerik sederhana
    
    x <- c(1,2,3,4,5) 
    
    #Membuat vektor numerik berurutan meningkat dan menurun dengan semicolon
    y <- 1:10
    
    #Membuat vektor berurutan dengan increment tertentu
    z <- seq(1, 15, length.out = 3) #default by=1, length out : banyak elemen
    
    #Membuat vektor karakter berpola
    w <- paste("A",1:7,sep="-")

    Hasil Vektor

    ## Vektor numerik sederhana :  1 2 3 4 5
    ## Vektor numerik berurutan meningkat dan menurun :  1 2 3 4 5 6 7 8 9 10
    ## Vektor numerik berurutan dengan incremen tertentu :  1 8 15
    ## Vektor karakter berpola :  A-1 A-2 A-3 A-4 A-5 A-6 A-7

    r <- c("la","ye")[rep(c(1,2,2,1), times=4)]
    cat("Output syntax 1= ",r)
    ## Output syntax 1=  la ye ye la la ye ye la la ye ye la la ye ye la
    s <- c("la","ye")[rep(rep(1:2,each=3),2)]
    cat("Output syntax 2 = ", s)
    ## Output syntax 2 =  la la la ye ye ye la la la ye ye ye

    a1 <- rep(c("X","Y"),times=5)
    a2 <- c(1:10)
    a <- paste0(a1,a2)
    a
    ##  [1] "X1"  "Y2"  "X3"  "Y4"  "X5"  "Y6"  "X7"  "Y8"  "X9"  "Y10"
    b <- seq(1,28, by=3)
    b
    ##  [1]  1  4  7 10 13 16 19 22 25 28

    Matrix

    Matriks adalah objek di R yang memiliki 2 dimensi, baris (row) dan kolom (column), 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.

    matrix(1:10, ncol = 5, nrow = 2)
    ##      [,1] [,2] [,3] [,4] [,5]
    ## [1,]    1    3    5    7    9
    ## [2,]    2    4    6    8   10

    Argumen byrow = TRUE artinya matriks akan setiap elemen vek diisikan ke m memenuhi baris terlebih dahulu. Jika byrow = FALSE maka setiap elemen vek diisikan ke m berdasarkan kolom terlebih dahulu.

    matrix(1:10, ncol = 5, nrow = 2, byrow = TRUE)
    ##      [,1] [,2] [,3] [,4] [,5]
    ## [1,]    1    2    3    4    5
    ## [2,]    6    7    8    9   10
    matrix(1:10, ncol = 5, nrow = 2, byrow = FALSE)
    ##      [,1] [,2] [,3] [,4] [,5]
    ## [1,]    1    3    5    7    9
    ## [2,]    2    4    6    8   10

    Merubah objek vektor ke matriks

    vek <- mtcars$mpg # sebuah vector
    length(vek) 
    ## [1] 32

    Karena vector tersebut memiliki 32 elemen, maka dimensi matriks yang dapat dibuat adalah 2 angka yang hasil perkaliannya menghasilkan nilai 32. Salah satunya adalah 8 x 4 = 32.

    m <- matrix(data = vek, nrow = 8, ncol = 4)
    m
    ##      [,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 33.9 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

    Untuk mengakses elemen dari suatu matriks, dapat menggunakan indeks dari baris atau kolomnya.

    # Mengambil elemen matriks `m` di baris 4
    m[4, ]
    ## [1] 21.4 16.4 33.9 30.4
    #Mengambil elemen matriks `m` di kolom 3
    m[, 3]
    ## [1] 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3
    # Mengambil elemen matriks `m` di baris 4 dan kolom 3
    m[4, 3]
    ## [1] 33.9

    R menyediakan sebuah fungsi yaitu diag() untuk mengakses nilai-nilai pada diagonal utama sebuah matriks.

    diag(m)
    ## [1] 21.0 19.2 30.4 30.4

    Array

    Array merupakan objek seperti matriks dengan dimensi lebih banyak. Jika matriks hanya mempunyai 2 dimensi, maka array dapat memiliki lebih dari 2 dimensi.

    Ilustrasi array 3 dimensi:

    Salah satu array yang ada setelah diinstall di R adalah array Titanic.

    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.

    Membuat array sederhana

    ar1 <- array(1:12,dim=c(2,2,3))
    ar1
    ## , , 1
    ## 
    ##      [,1] [,2]
    ## [1,]    1    3
    ## [2,]    2    4
    ## 
    ## , , 2
    ## 
    ##      [,1] [,2]
    ## [1,]    5    7
    ## [2,]    6    8
    ## 
    ## , , 3
    ## 
    ##      [,1] [,2]
    ## [1,]    9   11
    ## [2,]   10   12
    ar2 <- array(1:12,dim=c(2,1,2,3))
    ar2
    ## , , 1, 1
    ## 
    ##      [,1]
    ## [1,]    1
    ## [2,]    2
    ## 
    ## , , 2, 1
    ## 
    ##      [,1]
    ## [1,]    3
    ## [2,]    4
    ## 
    ## , , 1, 2
    ## 
    ##      [,1]
    ## [1,]    5
    ## [2,]    6
    ## 
    ## , , 2, 2
    ## 
    ##      [,1]
    ## [1,]    7
    ## [2,]    8
    ## 
    ## , , 1, 3
    ## 
    ##      [,1]
    ## [1,]    9
    ## [2,]   10
    ## 
    ## , , 2, 3
    ## 
    ##      [,1]
    ## [1,]   11
    ## [2,]   12
    ar3 <- array(1:12,dim=c(1,2,4,2))
    ar3
    ## , , 1, 1
    ## 
    ##      [,1] [,2]
    ## [1,]    1    2
    ## 
    ## , , 2, 1
    ## 
    ##      [,1] [,2]
    ## [1,]    3    4
    ## 
    ## , , 3, 1
    ## 
    ##      [,1] [,2]
    ## [1,]    5    6
    ## 
    ## , , 4, 1
    ## 
    ##      [,1] [,2]
    ## [1,]    7    8
    ## 
    ## , , 1, 2
    ## 
    ##      [,1] [,2]
    ## [1,]    9   10
    ## 
    ## , , 2, 2
    ## 
    ##      [,1] [,2]
    ## [1,]   11   12
    ## 
    ## , , 3, 2
    ## 
    ##      [,1] [,2]
    ## [1,]    1    2
    ## 
    ## , , 4, 2
    ## 
    ##      [,1] [,2]
    ## [1,]    3    4
    ar4 <- array(1:12,dim=c(3,4))
    ar4
    ##      [,1] [,2] [,3] [,4]
    ## [1,]    1    4    7   10
    ## [2,]    2    5    8   11
    ## [3,]    3    6    9   12

    Cara mengakses array

    Array :

    ar2
    ## , , 1, 1
    ## 
    ##      [,1]
    ## [1,]    1
    ## [2,]    2
    ## 
    ## , , 2, 1
    ## 
    ##      [,1]
    ## [1,]    3
    ## [2,]    4
    ## 
    ## , , 1, 2
    ## 
    ##      [,1]
    ## [1,]    5
    ## [2,]    6
    ## 
    ## , , 2, 2
    ## 
    ##      [,1]
    ## [1,]    7
    ## [2,]    8
    ## 
    ## , , 1, 3
    ## 
    ##      [,1]
    ## [1,]    9
    ## [2,]   10
    ## 
    ## , , 2, 3
    ## 
    ##      [,1]
    ## [1,]   11
    ## [2,]   12
    # Lembar ke-1
    ar2[,,1,] 
    ##      [,1] [,2] [,3]
    ## [1,]    1    5    9
    ## [2,]    2    6   10
    #Buku ke-2
    ar2[,,,2]
    ##      [,1] [,2]
    ## [1,]    5    7
    ## [2,]    6    8
    #Lembar ke-1 buku ke-3
    ar2[,,1,3]
    ## [1]  9 10

    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.

    fc <- factor(c("SD", "SMA", "SMP", "SMP", "SD", "SMA", "SD", "SMP"))
    fc
    ## [1] SD  SMA SMP SMP SD  SMA SD  SMP
    ## Levels: SD SMA SMP

    Nilai sebenarnya dari vektor tersebut adalah :

    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 =.

    f <- factor(fc, levels = c("SD", "SMP", "SMA"))
    f
    ## [1] SD  SMA SMP SMP SD  SMA SD  SMP
    ## Levels: SD SMP SMA
    g <- factor(fc, levels = c("SD", "SMP", "SMA"), ordered = TRUE)
    g
    ## [1] SD  SMA SMP SMP SD  SMA SD  SMP
    ## Levels: SD < SMP < SMA

    Cara mengakses factor

    f[2]
    ## [1] SMA
    ## Levels: SD SMP SMA
    f[2:3]
    ## [1] SMA SMP
    ## Levels: SD SMP SMA

    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.

    Contoh membuat list dengan fungsi list().

    list1 <- list(2, "A", c(4, 5, 2), iris[1:5,])
    list1
    ## [[1]]
    ## [1] 2
    ## 
    ## [[2]]
    ## [1] "A"
    ## 
    ## [[3]]
    ## [1] 4 5 2
    ## 
    ## [[4]]
    ##   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
    list2 <- list(vect=vek,mat=m,array=ar4,fac=f)
    list2
    ## $vect
    ##  [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
    ## [16] 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7
    ## [31] 15.0 21.4
    ## 
    ## $mat
    ##      [,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 33.9 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
    ## 
    ## $array
    ##      [,1] [,2] [,3] [,4]
    ## [1,]    1    4    7   10
    ## [2,]    2    5    8   11
    ## [3,]    3    6    9   12
    ## 
    ## $fac
    ## [1] SD  SMA SMP SMP SD  SMA SD  SMP
    ## Levels: SD SMP SMA

    Cara mengakses list

    list2[[1]]
    ##  [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
    ## [16] 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7
    ## [31] 15.0 21.4
    list2$fac
    ## [1] SD  SMA SMP SMP SD  SMA SD  SMP
    ## Levels: SD SMP SMA
    list2[2]
    ## $mat
    ##      [,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 33.9 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
    list2[c(2,4)]
    ## $mat
    ##      [,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 33.9 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
    ## 
    ## $fac
    ## [1] SD  SMA SMP SMP SD  SMA SD  SMP
    ## Levels: SD SMP SMA
    dim(list2)
    ## NULL
    length(list2)
    ## [1] 4
    names(list2)
    ## [1] "vect"  "mat"   "array" "fac"

    Data Frame

    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.

    Contoh dataframe yang ada di dalam R salah satunya adalah mtcars.

    mtcars
    ##                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
    ## Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
    ## Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
    ## Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
    ## Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
    ## Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
    ## Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
    ## Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
    ## Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
    ## Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
    ## Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
    ## Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
    ## Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
    ## Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
    ## Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
    ## Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
    ## Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
    ## Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
    ## Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
    ## Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
    ## Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
    ## Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
    ## Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
    ## AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
    ## Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
    ## Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
    ## Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
    ## Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
    ## Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
    ## Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
    ## Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
    ## Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
    ## Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2

    Cara membuat data frame

    huruf <- factor(LETTERS[1:10])
    angka <- 1:10
    df1 <- data.frame(huruf,angka)
    df1
    ##    huruf angka
    ## 1      A     1
    ## 2      B     2
    ## 3      C     3
    ## 4      D     4
    ## 5      E     5
    ## 6      F     6
    ## 7      G     7
    ## 8      H     8
    ## 9      I     9
    ## 10     J    10

    Cara Akses Data Frame

    df1[1,2]
    ## [1] 1
    df1[3,]
    ##   huruf angka
    ## 3     C     3
    df1$huruf
    ##  [1] A B C D E F G H I J
    ## Levels: A B C D E F G H I J
    df1[,"angka"]
    ##  [1]  1  2  3  4  5  6  7  8  9 10
    colnames(df1)
    ## [1] "huruf" "angka"
    str(df1)
    ## 'data.frame':    10 obs. of  2 variables:
    ##  $ huruf: Factor w/ 10 levels "A","B","C","D",..: 1 2 3 4 5 6 7 8 9 10
    ##  $ angka: int  1 2 3 4 5 6 7 8 9 10
    summary(df1)
    ##      huruf       angka      
    ##  A      :1   Min.   : 1.00  
    ##  B      :1   1st Qu.: 3.25  
    ##  C      :1   Median : 5.50  
    ##  D      :1   Mean   : 5.50  
    ##  E      :1   3rd Qu.: 7.75  
    ##  F      :1   Max.   :10.00  
    ##  (Other):4

    Perl <- paste("P",rep(1:4,each=3),sep="")
    Kel <- factor(rep(1:3,4))
    Resp <- seq(1,23,by=2)
    df2 <- data.frame(Perl,Kel,Resp)
    df2
    ##    Perl Kel Resp
    ## 1    P1   1    1
    ## 2    P1   2    3
    ## 3    P1   3    5
    ## 4    P2   1    7
    ## 5    P2   2    9
    ## 6    P2   3   11
    ## 7    P3   1   13
    ## 8    P3   2   15
    ## 9    P3   3   17
    ## 10   P4   1   19
    ## 11   P4   2   21
    ## 12   P4   3   23

    Pengolahan Objek

    Operasi Aljabar

    Operasi aljabar sederhana vektor numerik dapat menggunakan "+,-, * , / , ^ , %*% ,%o%"

    x1 <- c(2,4,6,8,10)
    x2 <- 1:5
    cat ("x1 : ", x1, "dan x2 : ", x2)
    ## x1 :  2 4 6 8 10 dan x2 :  1 2 3 4 5
    x3 <- x1 + 1:2
    ## Warning in x1 + 1:2: longer object length is not a multiple of shorter object
    ## length
    x4 <- x1 + 1:3
    ## Warning in x1 + 1:3: longer object length is not a multiple of shorter object
    ## length
    x5 <- x1 * x2
    x3
    ## [1]  3  6  7 10 11
    x4
    ## [1]  3  6  9  9 12
    x5
    ## [1]  2  8 18 32 50
    x6 <- x1 %*% x1 #mencari x'x
    x7 <- x1 %o% x1 #mencari xx'
    x6
    ##      [,1]
    ## [1,]  220
    x7
    ##      [,1] [,2] [,3] [,4] [,5]
    ## [1,]    4    8   12   16   20
    ## [2,]    8   16   24   32   40
    ## [3,]   12   24   36   48   60
    ## [4,]   16   32   48   64   80
    ## [5,]   20   40   60   80  100

    Penggunaan substr() dan substring()

    substr mengambil elemen ke-k sampai elemen ke k+n

    s <- "Statistika dan Sains Data"
    substr(s,1,10)
    ## [1] "Statistika"

    Substring mengambil elemen ke-k sampai akhir atau dengan batas yang sudah ditentukan

    s <- "Statistika dan Sains Data"
    substring(s,16)
    ## [1] "Sains Data"
    substring(s,16,20)
    ## [1] "Sains"

    Operasi dasar matriks

    Invers Matriks

    z1 <- matrix(1:6,2,3) #matriks 2x3
    z2 <- matrix(1:6,3,2,byrow=T) #matriks 3x2
    z3 <- z1 %*% z2 # matriks X'X
    invZ <- solve(z3)
    invZ
    ##           [,1]      [,2]
    ## [1,]  2.333333 -1.833333
    ## [2,] -1.833333  1.458333

    Matriks Identitas

    ident <- invZ %*% z3
    ident
    ##      [,1]         [,2]
    ## [1,]    1 2.842171e-14
    ## [2,]    0 1.000000e+00

    Solusi SPL Zp=h

    h <- c(5,11)
    p <- solve(z3,h)
    p
    ## [1] -8.500  6.875

    Eigen Value dan Eigen Factor

    e <- eigen(z3)
    
    e$value # Eigen Value
    ## [1] 90.7354949  0.2645051
    e[[2]] # Eigen Factor
    ##           [,1]       [,2]
    ## [1,] 0.6196295 -0.7848945
    ## [2,] 0.7848945  0.6196295

    Struktur Kendali

    if() dan ifelse()

    if(kondisi) ekspresi else ekspresi ifelse (kondisi, ekspresi benar, ekspresi salah)

    if(1>2){
      #Jika kondisi benar
      print("Benar")
    } else {
      #Jika kondisi salah
      print("Salah")
    }
    ## [1] "Salah"

    switch()

    switch(“kondisi”=ekspresi,…)

    acak <- sample(1:5,1)
    switch(EXPR=acak,"1"="a", "2"="z","3"="m","4"="h","5"="t")
    ## [1] "a"

    for()

    for (object in sekuens) ekspresi

    for(i in 1:5) print(i^2)
    ## [1] 1
    ## [1] 4
    ## [1] 9
    ## [1] 16
    ## [1] 25

    while()

    while (kondisi) ekspresi

    i <-1
    while (i<=5){
      print (i^2)
      i=i+1
    }
    ## [1] 1
    ## [1] 4
    ## [1] 9
    ## [1] 16
    ## [1] 25

    repeat()

    repeat ekspresi (untuk menghentikan gunakan break)

    i=1
    repeat{
      print(i)
      if(i==5){break()}
      i = i+1
    }
    ## [1] 1
    ## [1] 2
    ## [1] 3
    ## [1] 4
    ## [1] 5

    Tanpa perulangan

    apply (array, margin, function, function args)

    z6 <- matrix(1:25,5,5)
    apply(z6,1,sum)
    ## [1] 55 60 65 70 75
    apply(z6,2,sd)
    ## [1] 1.581139 1.581139 1.581139 1.581139 1.581139

    a <- 0
    for (i in 1:5){
      b <- a+i
      print(b)
      a <- b
    }
    ## [1] 1
    ## [1] 3
    ## [1] 6
    ## [1] 10
    ## [1] 15
    i <- 1
    z <- -1
    while (z<15){
      y <- z+i
      z <- y
      print(z)
      i <- i+1
    }
    ## [1] 0
    ## [1] 2
    ## [1] 5
    ## [1] 9
    ## [1] 14
    ## [1] 20
    i <- -1
    m <- -2
    repeat {
      m <- m+i
      print (m)
      i <- -i + 1
      if (m>15)
        break
    }
    ## [1] -3
    ## [1] -1
    ## [1] -2
    ## [1] 0
    ## [1] -1
    ## [1] 1
    ## [1] 0
    ## [1] 2
    ## [1] 1
    ## [1] 3
    ## [1] 2
    ## [1] 4
    ## [1] 3
    ## [1] 5
    ## [1] 4
    ## [1] 6
    ## [1] 5
    ## [1] 7
    ## [1] 6
    ## [1] 8
    ## [1] 7
    ## [1] 9
    ## [1] 8
    ## [1] 10
    ## [1] 9
    ## [1] 11
    ## [1] 10
    ## [1] 12
    ## [1] 11
    ## [1] 13
    ## [1] 12
    ## [1] 14
    ## [1] 13
    ## [1] 15
    ## [1] 14
    ## [1] 16

    Pertemuan 3 : Wrangling / Munging

    Membuat peubah baru

    Seperti membuat vektor (dengan indeks atau operasi seleksi). namadataframe$variabelbaru <- ekspresi namadataframe[,nomorkolom] <- ekpresi

    Perlu diperhatikan jika menggunakan nomor kolom, harus memperhatikan kolom yang masih belum dipakai agar tidak menimpa kolom yang sudah ada


    Akan digunakan data frame (df2) yang telah dibuat sebelumnya dan ditambahkan 1 kolom yaitu angka berurutan menurun dari 12 ke 1 dengan nama kolom Resp2

    df2$Resp2 <- 12:1
    df2
    ##    Perl Kel Resp Resp2
    ## 1    P1   1    1    12
    ## 2    P1   2    3    11
    ## 3    P1   3    5    10
    ## 4    P2   1    7     9
    ## 5    P2   2    9     8
    ## 6    P2   3   11     7
    ## 7    P3   1   13     6
    ## 8    P3   2   15     5
    ## 9    P3   3   17     4
    ## 10   P4   1   19     3
    ## 11   P4   2   21     2
    ## 12   P4   3   23     1

    Subsetting Data

    Digunakan untuk akses sebagian data dengan logika yang sesuai untuk diterapkan pada hasil

    Dari data frame (df2) akan diambil hanya yang termasuk kelompok 1

    indeks1 <- df2$Kel == 1
    subset1 <- df2[indeks1,]
    subset1
    ##    Perl Kel Resp Resp2
    ## 1    P1   1    1    12
    ## 4    P2   1    7     9
    ## 7    P3   1   13     6
    ## 10   P4   1   19     3

    Dari data frame (df2) akan diambil hanya yang termasuk kelompok 1 dan perlakuan 2

    indeks2 <- df2$Kel == 1 | df2$Perl == "P2"
    subset2 <- df2[indeks2,]
    subset2
    ##    Perl Kel Resp Resp2
    ## 1    P1   1    1    12
    ## 4    P2   1    7     9
    ## 5    P2   2    9     8
    ## 6    P2   3   11     7
    ## 7    P3   1   13     6
    ## 10   P4   1   19     3

    Dari data frame (df2) akan diambil amatan yang responnya berupa bilangan prima

    indeks3 <- df2$Resp %in% c(2,3,5,7,11,13,17,19,23)
    subset3 <- df2[indeks3,]
    subset3
    ##    Perl Kel Resp Resp2
    ## 2    P1   2    3    11
    ## 3    P1   3    5    10
    ## 4    P2   1    7     9
    ## 6    P2   3   11     7
    ## 7    P3   1   13     6
    ## 9    P3   3   17     4
    ## 10   P4   1   19     3
    ## 12   P4   3   23     1

    Sorting Data

    Digunakan untuk mengurutkan data berdasarkan peubah tertentu

    Fungsi yang digunakan :
  • order()
  • sort()
  • rev()
  • unique()
  • Mengurutkan data frame (df2) berdasarkan kelompok secara ascending

    indeks4 <- order(df2$Kel)
    order1 <- df2[indeks4,]
    order1
    ##    Perl Kel Resp Resp2
    ## 1    P1   1    1    12
    ## 4    P2   1    7     9
    ## 7    P3   1   13     6
    ## 10   P4   1   19     3
    ## 2    P1   2    3    11
    ## 5    P2   2    9     8
    ## 8    P3   2   15     5
    ## 11   P4   2   21     2
    ## 3    P1   3    5    10
    ## 6    P2   3   11     7
    ## 9    P3   3   17     4
    ## 12   P4   3   23     1

    Mengurutkan data frame (df2) berdasarkan kelompok dan Respon secara descending

    indeks5 <- order(df2$Kel, df2$Resp, decreasing=TRUE)
    order2 <- df2[indeks5,]
    order2
    ##    Perl Kel Resp Resp2
    ## 12   P4   3   23     1
    ## 9    P3   3   17     4
    ## 6    P2   3   11     7
    ## 3    P1   3    5    10
    ## 11   P4   2   21     2
    ## 8    P3   2   15     5
    ## 5    P2   2    9     8
    ## 2    P1   2    3    11
    ## 10   P4   1   19     3
    ## 7    P3   1   13     6
    ## 4    P2   1    7     9
    ## 1    P1   1    1    12

    Mengurutkan data frame (df2) berdasarkan kelompok secara ascending dan Respon secara descending

    indeks6 <- order(df2$Resp, decreasing=TRUE)
    order3 <- df2[indeks6,]
    
    indeks7 <- order(order3$Kel)
    order4 <- order3[indeks7,]
    order4
    ##    Perl Kel Resp Resp2
    ## 10   P4   1   19     3
    ## 7    P3   1   13     6
    ## 4    P2   1    7     9
    ## 1    P1   1    1    12
    ## 11   P4   2   21     2
    ## 8    P3   2   15     5
    ## 5    P2   2    9     8
    ## 2    P1   2    3    11
    ## 12   P4   3   23     1
    ## 9    P3   3   17     4
    ## 6    P2   3   11     7
    ## 3    P1   3    5    10
    selanjutnya dari tabel hasil sorting diatas, digunakan fungsi-fungsi lain nya yaitu :
  • sort() untuk mengurutkan respon akan diurutkan terkecil ke terbesar
  • rev() untuk membalikan data dari respon
  • rank() untuk memberi peringkat data tersebut urutan ke berapa dari seluruh data
  • which untuk mengembalikan nilai nomor urut data yang bernilai TRUE sesuai kondisi tertentu

    print("Data")
    ## [1] "Data"
    order4$Resp
    ##  [1] 19 13  7  1 21 15  9  3 23 17 11  5
    print ("Fungsi sort()")
    ## [1] "Fungsi sort()"
    sort(order4$Resp)
    ##  [1]  1  3  5  7  9 11 13 15 17 19 21 23
    print ("Fungsi rev()")
    ## [1] "Fungsi rev()"
    rev(order4$Resp)
    ##  [1]  5 11 17 23  3  9 15 21  1  7 13 19
    print ("Fungsi rank()")
    ## [1] "Fungsi rank()"
    rank(order4$Resp)
    ##  [1] 10  7  4  1 11  8  5  2 12  9  6  3
    print ("Respon dengan kondisi tertentu")
    ## [1] "Respon dengan kondisi tertentu"
    order4$Resp >10
    ##  [1]  TRUE  TRUE FALSE FALSE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE FALSE
    print ("FUngsi which()")
    ## [1] "FUngsi which()"
    which(order4$Resp > 10)
    ## [1]  1  2  5  6  9 10 11
    print ("Mengembalikan nilai respon yang > 10")
    ## [1] "Mengembalikan nilai respon yang > 10"
    order4$Resp[order4$Resp>10]
    ## [1] 19 13 21 15 23 17 11
    print ("atau bisa juga dengan fungsi which")
    ## [1] "atau bisa juga dengan fungsi which"
    order4$Resp[which(order4$Resp>10)]
    ## [1] 19 13 21 15 23 17 11
  • Recoding

    Digunakan untuk membuat nilai baru dari peubah yang sudah ada

    Dilakukan dengan fungsi :
  • ifelse()
  • recode()

  • Dari data order4 akan direcoding dengan syarat jika respon < 15 maka code 1 dan sisanya kode 0. Bisa dilakukan dengan 3 cara yaitu :

    Dengan logical

    order4$code1 <- 0*(order4$Resp>=15) + 1*(order4$Resp<15)
    order4$code1
    ##  [1] 0 1 1 1 0 0 1 1 0 0 1 1

    Dengan fungsi ifelse()

    order4$code2 <- ifelse(order4$Resp<15,1,0)
    order4$code2
    ##  [1] 0 1 1 1 0 0 1 1 0 0 1 1

    Dengan fungsi recode()

    library(car)
    ## Loading required package: carData
    order4$code3 <-  recode(order4$Resp, '1:14=1;else=0')
    order4$code3
    ##  [1] 0 1 1 1 0 0 1 1 0 0 1 1

    Merging Data

    Bisa dilakukan dengan rbind() , cbind(), atau fungsi merge()

    Akan dilakukan penggabungan data frame (df2) dengan tabel1 berdasarkan peubah pertamanya

    tabel1 <- data.frame(Tr=c("P4", "P2", "P5"), k1=c(50,100,200))
    tabel1
    ##   Tr  k1
    ## 1 P4  50
    ## 2 P2 100
    ## 3 P5 200

    Menggabungkan baris dan kolom yang sama antara df2 dan tabel1 saja

    merge1 <- merge(df2,tabel1, by.x=1, by.y=1, all=FALSE)
    merge1
    ##   Perl Kel Resp Resp2  k1
    ## 1   P2   3   11     7 100
    ## 2   P2   1    7     9 100
    ## 3   P2   2    9     8 100
    ## 4   P4   1   19     3  50
    ## 5   P4   2   21     2  50
    ## 6   P4   3   23     1  50

    Menggabungkan keseluruhan df2 dengan tabel 1 baik kolom dan barisnya, dan data yang tidak ada diberi nilai nA

    merge2 <- merge(df2,tabel1, by.x="Perl", by.y="Tr", all=TRUE)
    merge2
    ##    Perl  Kel Resp Resp2  k1
    ## 1    P1    1    1    12  NA
    ## 2    P1    2    3    11  NA
    ## 3    P1    3    5    10  NA
    ## 4    P2    3   11     7 100
    ## 5    P2    1    7     9 100
    ## 6    P2    2    9     8 100
    ## 7    P3    2   15     5  NA
    ## 8    P3    3   17     4  NA
    ## 9    P3    1   13     6  NA
    ## 10   P4    1   19     3  50
    ## 11   P4    2   21     2  50
    ## 12   P4    3   23     1  50
    ## 13   P5 <NA>   NA    NA 200

    Reshaping Data

    Membentuk data baru dengan cara long to wide format atau wide to long format menggunakan fungsi reshape()

    Akan diubah data frame df2 menjadi data dengan setiap barisnya merupakan masing-masing perlakuan. *** Long to Wide

    reshape1 <- reshape(df2[,-4], idvar="Perl", timevar = "Kel", direction = "wide")
    reshape1
    ##    Perl Resp.1 Resp.2 Resp.3
    ## 1    P1      1      3      5
    ## 4    P2      7      9     11
    ## 7    P3     13     15     17
    ## 10   P4     19     21     23

    Wide to long

    reshape2 <- reshape(reshape1, idvar="Perl", timevar="Kel", direction="long")
    reshape2
    ##      Perl Kel Resp.1
    ## P1.1   P1   1      1
    ## P2.1   P2   1      7
    ## P3.1   P3   1     13
    ## P4.1   P4   1     19
    ## P1.2   P1   2      3
    ## P2.2   P2   2      9
    ## P3.2   P3   2     15
    ## P4.2   P4   2     21
    ## P1.3   P1   3      5
    ## P2.3   P2   3     11
    ## P3.3   P3   3     17
    ## P4.3   P4   3     23

    Referensi

    Slide Pertemuan 1-3 Mata Kuliah Pemrograman Statistika

    https://bookdown.org/aepstk/intror/ifloop.html#looping-while