Bab 2 Fungsi grafik

Dalam pelajaran ini, Anda akan belajar bagaimana menggunakan R untuk membuat grafik fungsi matematika

2.1 Grafik fungsi matematika

Dalam merencanakan suatu fungsi, Anda perlu menentukan beberapa hal:

Ada tiga fungsi grafik {mosaicCalc}yang memungkinkan Anda membuat grafik fungsi, dan melapisi plot tersebut dengan grafik fungsi atau data lain. Ini adalah:

Ketiganya digunakan dengan cara yang hampir sama. Berikut adalah contoh memplot fungsi garis lurus:

library(mosaicCalc)
## Loading required package: mosaic
## Registered S3 method overwritten by 'mosaic':
##   method                           from   
##   fortify.SpatialPolygonsDataFrame ggplot2
## 
## The 'mosaic' package masks several functions from core packages in order to add 
## additional features.  The original behavior of these functions should not be affected by this.
## 
## Attaching package: 'mosaic'
## The following objects are masked from 'package:dplyr':
## 
##     count, do, tally
## The following object is masked from 'package:Matrix':
## 
##     mean
## The following object is masked from 'package:ggplot2':
## 
##     stat
## The following objects are masked from 'package:stats':
## 
##     binom.test, cor, cor.test, cov, fivenum, IQR, median, prop.test,
##     quantile, sd, t.test, var
## The following objects are masked from 'package:base':
## 
##     max, mean, min, prod, range, sample, sum
## Loading required package: mosaicCore
## 
## Attaching package: 'mosaicCore'
## The following objects are masked from 'package:dplyr':
## 
##     count, tally
## 
## Attaching package: 'mosaicCalc'
## The following object is masked from 'package:stats':
## 
##     D
slice_plot(3 * x - 2 ~ x, domain(x = range(0, 10)))

Seringkali, wajar untuk menulis hubungan seperti itu dengan parameter yang diwakili oleh simbol. (Ini dapat membantu Anda mengingat parameter mana, misalnya, yang merupakan kemiringan dan mana yang merupakan intersep. Ketika Anda melakukan ini, ingatlah untuk memberikan nilai numerik tertentu untuk parameter, seperti ini:

m = -3
b = -2
slice_plot(m * x + b ~ x, domain(x = range(0, 10)))

Coba contoh berikut:

A = 100
slice_plot( A * x ^ 2 ~ x, domain(x = range(-2, 3))) 

A = 5
slice_plot( A * x ^ 2 ~ x,  domain(x = range(0, 3)),  color="red" )

slice_plot( cos(t) ~ t, domain(t = range(0,4*pi) ))

Anda dapat menggunakan makeFun( )untuk memberi nama pada fungsi. Contohnya:

g  <- makeFun(2*x^2 - 5*x + 2 ~ x)
slice_plot(g(x) ~ x , domain(x = range(-2, 2)))

Setelah fungsi diberi nama, Anda dapat mengevaluasinya dengan memberikan input. Contohnya:

g(x = 2)
## [1] 0
## [1] 0
g(x = 5)
## [1] 27
## [1] 27

Tentu saja, Anda juga dapat membuat ekspresi baru dari fungsi yang telah Anda buat. Coba ekspresi yang agak rumit ini:

slice_plot(sqrt(abs(g(x))) ~ x, domain(x = range(-5,5)))

2.1.1 Latihan

2.1.1.1 Latihan 1

Coba perintah ini:

x <- 10
slice_plot(A * x ^  2 ~ A, domain(A = range(-2,  3)))

Jelaskan mengapa grafik tidak terlihat seperti parabola, meskipun itu grafikSEBUAHx2SEBUAHx2.

JAWABAN: Perhatikan bahwa input ke fungsi adalah A, bukan x. Nilai dari xtelah disetel ke 10 — grafik dibuat pada rentang Adari−2−2ke 3.

2.1.1.2 Latihan 2

Terjemahkan setiap ekspresi ini dalam notasi matematika tradisional ke dalam plot. Serahkan perintah yang Anda berikan untuk membuat plot (bukan plot itu sendiri).

  1. 4x−74x−7di jendelaxxdari 0 sampai 10.

    MENJAWAB:

    slice_plot( 4 * x - 7 ~ x, domain(x = range(0, 10) ))

karena5xkarena⁡5xdi jendelaxxdari−1−1ke11.

MENJAWAB:

slice_plot( cos(5 * x) ~ x, domain(x = range(-1, 1)))

karena2tkarena⁡2tdi jendelattdari 0 sampai 5.

slice_plot( cos(2 * t) ~ t, domain(t = range(0,5) ))

√tkarena5ttkarena⁡5tdi jendelattdari 0 sampai 5. (Petunjuk:√(t)(t)adalah sqrt(t).)

MENJAWAB:

slice_plot( sqrt(t) * cos(5 * t) ~ t, domain(t = range(0, 5) ))

2.1.1.3 Latihan 3

Tentukan nilai masing-masing fungsi di atas padax=10,543x=10,543atau dit=10,543t=10,543. (Petunjuk: Beri nama fungsi dan hitung nilainya menggunakan ekspresi like g(x = 10.543)atau f(t = 10.543).)

Pilih nilai numerik terdekat

  1. 32.721, 34.721, 35.172 , 37.421, 37.721

  2. -0.83, -0.77 , -0.72, -0.68, 0.32, 0.42, 0.62

  3. -0.83, -0.77, -0.72, -0.68, -0.62 , 0.42, 0.62

  4. -2.5 , -1.5, -0.5, 0.5, 1.5, 2.5

2.1.1.4 Latihan 4

Reproduksi masing-masing plot ini. Serahkan perintah yang Anda gunakan untuk membuat plot yang identik:

  1. MENJAWAB:

    slice_plot(2*x - 3 ~ x, domain(x = range(0, 5)))

    slice_plot(t^2 ~ t, domain(t = range(-2, 2)))

    2.1.1.5 Latihan 5

    Apa yang terjadi ketika Anda menggunakan parameter simbolik (misalnya, mdalam m*x + b ~ x, tetapi mencoba membuat plot tanpa memilih nilai numerik tertentu untuk parameter tersebut?

    JAWABAN: Anda mendapatkan pesan kesalahan yang mengatakan bahwa “objek tidak ditemukan”. Berikan deskripsi tentang apa yang terjadi dan berspekulasi mengapa.

    JAWABAN: Jika tidak ada domain yang ditentukan atau jika domain hanya memiliki satu nomor daripada rentang, slice_plot()pesan kesalahan akan dibuat.

    2.2 Membuat scatterplot

    Di sini, kita akan bekerja dengan "Income-Housing.csv", yang terletak di "http://www.mosaic-web.org/go/datasets/Income-Housing.csv". File ini memberikan informasi dari survei tentang kondisi perumahan untuk orang-orang dalam kelompok pendapatan yang berbeda di AS. (Sumber: Susan E. Mayer (1997) Apa yang tidak dapat dibeli dengan uang: Pendapatan keluarga dan peluang hidup anak-anak Harvard Univ. Press hal. 102.)

    Berikut cara membacanya menjadi R:

    Housing = read.csv("http://www.mosaic-web.org/go/datasets/Income-Housing.csv")

    Ada dua hal penting yang perlu diperhatikan dari pernyataan di atas. Pertama, read.csv()fungsi mengembalikan nilai yang disimpan dalam objek yang disebut housing. Pilihan Housingsebagai nama adalah sewenang-wenang; Anda bisa menyimpannya sebagai xatau Equadoratau apa pun. Lebih mudah untuk memilih nama yang membantu Anda mengingat apa yang disimpan di mana.

    Kedua, nama "http://www.mosaic-web.org/go/datasets/Income-Housing.csv"diapit oleh tanda kutip. Ini adalah tanda kutip ganda satu karakter, yaitu, "dan bukan tanda kutip tunggal berulang ' 'atau perumahan ` . Whenever you are reading data from a file, the name of the file should be in such single-character double quotes. That way, R knows to treat the characters literally and not as the name of an object such asbackquote`.

    Setelah data dibaca, Anda dapat melihat data hanya dengan mengetikkan nama objek (tanpa tanda kutip!) yang menyimpan data. Contohnya,

    Housing 
    ##   Income IncomePercentile CrimeProblem AbandonedBuildings IncompleteBathroom
    ## 1   3914                5         39.6               12.6                2.6
    ## 2  10817               15         32.4               10.0                3.3
    ## 3  21097               30         26.7                7.1                2.3
    ## 4  34548               50         23.9                4.1                2.1
    ## 5  51941               70         21.4                2.3                2.4
    ## 6  72079               90         19.9                1.2                2.0
    ##   NoCentralHeat ExposedWires AirConditioning TwoBathrooms MotorVehicle
    ## 1          32.3          5.5            52.3         13.9         57.3
    ## 2          34.7          5.0            55.4         16.9         82.1
    ## 3          28.1          2.4            61.7         24.8         91.7
    ## 4          21.4          2.1            69.8         39.6         97.0
    ## 5          14.9          1.4            73.9         51.2         98.0
    ## 6           9.6          1.0            76.7         73.2         99.0
    ##   TwoVehicles ClothesWasher ClothesDryer Dishwasher Telephone
    ## 1        17.3          57.8         37.5       16.5      68.7
    ## 2        34.3          61.4         38.0       16.0      79.7
    ## 3        56.4          78.6         62.0       25.8      90.8
    ## 4        75.3          84.4         75.2       41.6      96.5
    ## 5        86.6          92.8         88.9       58.2      98.3
    ## 6        92.9          97.1         95.6       79.7      99.5
    ##   DoctorVisitsUnder7 DoctorVisits7To18 NoDoctorVisitUnder7 NoDoctorVisit7To18
    ## 1                3.6               2.6                13.7               31.2
    ## 2                3.7               2.6                14.9               32.0
    ## 3                3.6               2.1                13.8               31.4
    ## 4                4.0               2.3                10.4               27.3
    ## 5                4.0               2.5                 7.7               23.9
    ## 6                4.7               3.1                 5.3               17.5
    ##   Income IncomePercentile CrimeProblem AbandonedBuildings
    ## 1   3914                5         39.6               12.6
    ## 2  10817               15         32.4               10.0
    ## 3  21097               30         26.7                7.1
    ## 4  34548               50         23.9                4.1
    ## 5  51941               70         21.4                2.3
    ## 6  72079               90         19.9                1.2

    Semua variabel dalam kumpulan data akan ditampilkan (walaupun hanya empat variabel yang dicetak di sini).

    Anda dapat melihat nama semua variabel dalam format yang ringkas dengan names( )perintah:

    names(Housing) 
    ##  [1] "Income"              "IncomePercentile"    "CrimeProblem"       
    ##  [4] "AbandonedBuildings"  "IncompleteBathroom"  "NoCentralHeat"      
    ##  [7] "ExposedWires"        "AirConditioning"     "TwoBathrooms"       
    ## [10] "MotorVehicle"        "TwoVehicles"         "ClothesWasher"      
    ## [13] "ClothesDryer"        "Dishwasher"          "Telephone"          
    ## [16] "DoctorVisitsUnder7"  "DoctorVisits7To18"   "NoDoctorVisitUnder7"
    ## [19] "NoDoctorVisit7To18"
    ##  [1] "Income"              "IncomePercentile"    "CrimeProblem"       
    ##  [4] "AbandonedBuildings"  "IncompleteBathroom"  "NoCentralHeat"      
    ##  [7] "ExposedWires"        "AirConditioning"     "TwoBathrooms"       
    ## [10] "MotorVehicle"        "TwoVehicles"         "ClothesWasher"      
    ## [13] "ClothesDryer"        "Dishwasher"          "Telephone"          
    ## [16] "DoctorVisitsUnder7"  "DoctorVisits7To18"   "NoDoctorVisitUnder7"
    ## [19] "NoDoctorVisit7To18"

    Saat Anda ingin mengakses salah satu variabel, Anda memberi nama seluruh kumpulan data diikuti dengan nama variabel, dengan dua nama dipisahkan oleh $tanda, seperti ini:

    Housing$Income
    ## [1]  3914 10817 21097 34548 51941 72079
    ## [1]  3914 10817 21097 34548 51941 72079
    Housing$CrimeProblem
    ## [1] 39.6 32.4 26.7 23.9 21.4 19.9
    ## [1] 39.6 32.4 26.7 23.9 21.4 19.9

    Meskipun output dari names( )menunjukkan nama variabel dalam tanda kutip, Anda tidak akan menggunakan kutipan di sekitar nama variabel.

    Ejaan dan penggunaan huruf kapital itu penting. Jika Anda membuat kesalahan, tidak peduli seberapa sepele bagi pembaca manusia, R tidak akan mengetahui apa yang Anda inginkan. Misalnya, berikut ini adalah kesalahan ejaan nama variabel, yang mengakibatkan tidak ada ( NULL) yang dikembalikan.

    Housing$crim
    ## NULL
    ## NULL

    Biasanya penyajian data yang paling informatif adalah grafis. Salah satu bentuk grafik yang paling dikenal adalah scatter-plot , format di mana setiap “kasus” atau “titik data” diplot sebagai titik di lokasi koordinat yang diberikan oleh dua variabel. Sebagai contoh, berikut adalah plot pencar dari fraksi rumah tangga yang menganggap lingkungan mereka memiliki masalah kejahatan, versus pendapatan rata-rata di braket mereka.

    gf_point(CrimeProblem ~ Income, data = Housing )

    Pernyataan R secara dekat mengikuti padanan bahasa Inggris: “plot sebagai poin CrimeProblemversus (atau, sebagai fungsi dari) Income, menggunakan data dari housingobjek.

    Grafik dibangun berlapis-lapis. Jika Anda ingin memplot fungsi matematika di atas data, Anda harus menggunakan fungsi plot untuk membuat layer lain. Kemudian, untuk menampilkan dua lapisan dalam plot yang sama, hubungkan dengan %>%simbol (disebut “pipa”). Perhatikan bahwa tidak pernah%>% bisa pergi di awal baris baru.

    gf_point( 
      CrimeProblem ~ Income, data=Housing ) %>%
      slice_plot(
        40 - Income/2000 ~ Income, color = "red")

    fungsi matematika yang digambar tidak cocok dengan data, tetapi bacaan ini adalah tentang cara menggambar grafik, bukan cara memilih keluarga fungsi atau menemukan parameter!

    Jika, saat memplot data Anda, Anda lebih suka menetapkan batas sumbu ke sesuatu yang Anda pilih sendiri, Anda bisa melakukan ini. Contohnya:

    gf_point(
      CrimeProblem ~ Income, data = Housing) %>% 
      slice_plot(
        40 - Income / 2000 ~ Income, color = "blue") %>%
      gf_lims(
        x = range(0,100000), 
        y=range(0,50))

    Grafik ilmiah yang dibuat dengan benar harus memiliki nama sumbu yang informatif. Anda dapat mengatur nama sumbu secara langsung menggunakan gf_labs:

    gf_point(
      CrimeProblem ~ Income, data=Housing) %>%
      gf_labs(x= "Income Bracket ($US per household)/year",
              y = "Fraction of Households",
              main = "Crime Problem") %>%
      gf_lims(x = range(0,100000), y = range(0,50))

    2.2.1 Latihan

    2.2.1.1 Latihan 1

    Buat masing-masing plot ini:

    1. Prof. Stan Wagon (lihat http://stanwagon.com ) menggambarkan pemasangan kurva menggunakan pengukuran suhu (dalam derajat C) secangkir kopi versus waktu (dalam menit)

      s = read.csv(
        "http://www.mosaic-web.org/go/datasets/stan-data.csv")
      gf_point(temp ~ time, data=s)

    Berikut catatan tingkat pasang surut di Hawaii selama sekitar 100 jam:

    h = read.csv(
      "http://www.mosaic-web.org/go/datasets/hawaii.csv")
    gf_point(water ~ time, data=h)