Dalam pelajaran ini, Anda akan belajar bagaimana menggunakan R untuk membuat grafik fungsi matematika
Dalam merencanakan suatu fungsi, Anda perlu menentukan beberapa hal:
Apa fungsinya . Ini biasanya diberikan oleh
ekspresi, misalnya m * x + batau A * x ^ 2atau
sin(2 * t)Nanti, Anda juga akan memberi nama pada fungsi
dan menggunakan nama-nama itu dalam ekspresi, seperti
sinhalnya nama fungsi trigonometri.
Apa inputnya . Ingat, tidak ada alasan untuk
berasumsi bahwaxxselalu menjadi input, dan Anda akan menggunakan
variabel dengan nama seperti Gdan cAMP. Jadi,
Anda harus eksplisit dalam mengatakan apa yang masuk dan apa yang tidak.
Notasi R untuk ini melibatkan ~simbol (“tilde”). Misalnya,
untuk menentukan fungsi linier denganxxsebagai input, Anda dapat
menulism * x + b ~ x
Berapa kisaran input untuk membuat plot berakhir . Anggap ini sebagai batas sumbu horizontal di mana Anda ingin membuat plot.
Nilai parameter apa pun . Ingat, notasi
m * x + b ~ xtidak hanya melibatkan input variabel
xtetapi juga dua kuantitas lainnya, mdan
b. Untuk membuat plot fungsi, Anda perlu memilih nilai
spesifik untuk mdan bdan memberi tahu komputer
apa itu.
Ada tiga fungsi grafik {mosaicCalc}yang memungkinkan
Anda membuat grafik fungsi, dan melapisi plot tersebut dengan grafik
fungsi atau data lain. Ini adalah:
slice_plot()untuk fungsi satu variabel.
contour_plot()untuk fungsi dua variabel.
interactive_plot()yang menghasilkan widget HTML
untuk berinteraksi dengan fungsi dua variabel.
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)))
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.
Terjemahkan setiap ekspresi ini dalam notasi matematika tradisional ke dalam plot. Serahkan perintah yang Anda berikan untuk membuat plot (bukan plot itu sendiri).
4x−74x−7di jendelaxxdari 0 sampai 10.
MENJAWAB:
slice_plot( 4 * x - 7 ~ x, domain(x = range(0, 10) ))
karena5xkarena5xdi jendelaxxdari−1−1ke11.
MENJAWAB:
slice_plot( cos(5 * x) ~ x, domain(x = range(-1, 1)))
karena2tkarena2tdi jendelattdari 0 sampai 5.
slice_plot( cos(2 * t) ~ t, domain(t = range(0,5) ))
√tkarena5ttkarena5tdi jendelattdari 0 sampai 5.
(Petunjuk:√(t)(t)adalah sqrt(t).)
MENJAWAB:
slice_plot( sqrt(t) * cos(5 * t) ~ t, domain(t = range(0, 5) ))
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
32.721, 34.721, 35.172 , 37.421, 37.721
-0.83, -0.77 , -0.72, -0.68, 0.32, 0.42, 0.62
-0.83, -0.77, -0.72, -0.68, -0.62 , 0.42, 0.62
-2.5 , -1.5, -0.5, 0.5, 1.5, 2.5
Reproduksi masing-masing plot ini. Serahkan perintah yang Anda gunakan untuk membuat plot yang identik:
MENJAWAB:
slice_plot(2*x - 3 ~ x, domain(x = range(0, 5)))
slice_plot(t^2 ~ t, domain(t = range(-2, 2)))
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.
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))
Buat masing-masing plot ini:
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)