R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

Including Plots

You can also embed plots, for example:

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.

Bab 3 Fungsi dan Paramenter

3.1 Parameter vs variabel

Mengapa sebenarnya tidak ada perbedaan.

Perbedaan Newton antara a, b, c, dan x, y, z.

3.2 Parameter fungsi pemodelan

Berikan parameterisasi eksponensial, sinus, hukum pangkat …

Idenya adalah untuk membuat argumen ke fungsi matematika berdimensi.

Parameter dan logaritma – Anda dapat mengambil log apa pun yang Anda suka. Satuan muncul sebagai konstanta

3.3 Polinomial dan parameter

Setiap parameter memiliki dimensinya sendiri

3.4 Parameter dan makeFun()

3.5 Fungsi tanpa parameter: splines dan smooths

Penjelasan hiper-parameter. Ini adalah angka yang mengatur bentuk fungsi, tetapi dapat diatur secara sewenang-wenang dan masih cocok dengan data. Parameter hiper tidak disetel langsung oleh data.

Model matematika berusaha menangkap pola di dunia nyata. Ini berguna karena model dapat lebih mudah dipelajari dan dimanipulasi daripada dunia itu sendiri. Salah satu kegunaan paling penting dari fungsi adalah untuk mereproduksi atau menangkap atau memodelkan pola yang muncul dalam data.

Kadang-kadang, pilihan bentuk fungsi tertentu — eksponensial atau hukum pangkat, katakanlah — dimotivasi oleh pemahaman tentang proses yang terlibat dalam pola yang digunakan fungsi untuk dimodelkan. Namun di lain waktu, yang dibutuhkan hanyalah fungsi yang mengikuti data dan memiliki properti lain yang diinginkan, misalnya mulus atau terus meningkat.

“Smoothers” dan “splines” adalah dua jenis fungsi tujuan umum yang dapat menangkap pola dalam data, tetapi tidak ada bentuk aljabar sederhana. Membuat fungsi seperti itu sangat mudah, selama Anda dapat membebaskan diri dari gagasan bahwa fungsi harus selalu memiliki rumus.

Smoother dan splines tidak ditentukan oleh bentuk dan parameter aljabar, tetapi oleh data dan algoritma. Sebagai ilustrasi, pertimbangkan beberapa data sederhana. Kumpulan data Loblolly berisi 84 pengukuran usia dan tinggi pinus loblolly.

library(mosaicCalc)
## Loading required package: mosaicCore
## Loading required package: Deriv
## Loading required package: Ryacas
## 
## Attaching package: 'Ryacas'
## The following object is masked from 'package:stats':
## 
##     integrate
## The following objects are masked from 'package:base':
## 
##     %*%, diag, diag<-, lower.tri, upper.tri
## Registered S3 method overwritten by 'mosaic':
##   method                           from   
##   fortify.SpatialPolygonsDataFrame ggplot2
## 
## Attaching package: 'mosaicCalc'
## The following object is masked from 'package:stats':
## 
##     D
library(mosaic)
## 
## 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
gf_point(height ~ age, data=datasets::Loblolly)

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

Beberapa pinus berusia tiga tahun dengan tinggi yang sangat mirip diukur dan dilacak dari waktu ke waktu: usia lima tahun, usia sepuluh tahun, dan seterusnya. Pohon-pohon berbeda satu sama lain, tetapi semuanya sangat mirip dan menunjukkan pola sederhana: pertumbuhan linier pada awalnya yang tampaknya menurun seiring waktu.

Mungkin menarik untuk berspekulasi tentang fungsi aljabar macam apa yang diikuti oleh pertumbuhan pinus loblolly, tetapi fungsi semacam itu hanyalah sebuah model. Untuk banyak tujuan, mengukur bagaimana laju pertumbuhan berubah seiring bertambahnya usia pohon, yang dibutuhkan hanyalah fungsi mulus yang terlihat seperti data. Mari kita pertimbangkan dua:

Cherry <- datasets::trees
gf_point(Volume ~ Girth, data = Cherry)

head(Loblolly)
##    height age Seed
## 1    4.51   3  301
## 15  10.89   5  301
## 29  28.72  10  301
## 43  41.74  15  301
## 57  52.70  20  301
## 71  60.92  25  301
dataup1 = datasets::Loblolly
dataup1
##    height age Seed
## 1    4.51   3  301
## 15  10.89   5  301
## 29  28.72  10  301
## 43  41.74  15  301
## 57  52.70  20  301
## 71  60.92  25  301
## 2    4.55   3  303
## 16  10.92   5  303
## 30  29.07  10  303
## 44  42.83  15  303
## 58  53.88  20  303
## 72  63.39  25  303
## 3    4.79   3  305
## 17  11.37   5  305
## 31  30.21  10  305
## 45  44.40  15  305
## 59  55.82  20  305
## 73  64.10  25  305
## 4    3.91   3  307
## 18   9.48   5  307
## 32  25.66  10  307
## 46  39.07  15  307
## 60  50.78  20  307
## 74  59.07  25  307
## 5    4.81   3  309
## 19  11.20   5  309
## 33  28.66  10  309
## 47  41.66  15  309
## 61  53.31  20  309
## 75  63.05  25  309
## 6    3.88   3  311
## 20   9.40   5  311
## 34  25.99  10  311
## 48  39.55  15  311
## 62  51.46  20  311
## 76  59.64  25  311
## 7    4.32   3  315
## 21  10.43   5  315
## 35  27.16  10  315
## 49  40.85  15  315
## 63  51.33  20  315
## 77  60.07  25  315
## 8    4.57   3  319
## 22  10.57   5  319
## 36  27.90  10  319
## 50  41.13  15  319
## 64  52.43  20  319
## 78  60.69  25  319
## 9    3.77   3  321
## 23   9.03   5  321
## 37  25.45  10  321
## 51  38.98  15  321
## 65  49.76  20  321
## 79  60.28  25  321
## 10   4.33   3  323
## 24  10.79   5  323
## 38  28.97  10  323
## 52  42.44  15  323
## 66  53.17  20  323
## 80  61.62  25  323
## 11   4.38   3  325
## 25  10.48   5  325
## 39  27.93  10  325
## 53  40.20  15  325
## 67  50.06  20  325
## 81  58.49  25  325
## 12   4.12   3  327
## 26   9.92   5  327
## 40  26.54  10  327
## 54  37.82  15  327
## 68  48.43  20  327
## 82  56.81  25  327
## 13   3.93   3  329
## 27   9.34   5  329
## 41  26.08  10  329
## 55  37.79  15  329
## 69  48.31  20  329
## 83  56.43  25  329
## 14   3.46   3  331
## 28   9.05   5  331
## 42  25.85  10  331
## 56  39.15  15  331
## 70  49.12  20  331
## 84  59.49  25  331
library(mosaicCalc)
gf_point(Seed ~ age, data=datasets::Loblolly)

library("xlsx")
write.xlsx(dataup1,"... lobolly.xls")
library("readxl")
baca_xls = read_excel("... lobolly.xls")
## New names:
## • `` -> `...1`
baca_xls
## # A tibble: 84 × 4
##    ...1  height   age Seed 
##    <chr>  <dbl> <dbl> <chr>
##  1 1       4.51     3 301  
##  2 15     10.9      5 301  
##  3 29     28.7     10 301  
##  4 43     41.7     15 301  
##  5 57     52.7     20 301  
##  6 71     60.9     25 301  
##  7 2       4.55     3 303  
##  8 16     10.9      5 303  
##  9 30     29.1     10 303  
## 10 44     42.8     15 303  
## # … with 74 more rows
  1. Sebuah “spline kubik”, yang mengikuti kelompok titik data dan kurva dengan mulus dan anggun.
f1 <- spliner(height ~ age, data = datasets::Loblolly)
## Warning in regularize.values(x, y, ties, missing(ties)): collapsing to unique
## 'x' values
  1. Sebuah “interpolant linier”, yang menghubungkan kelompok titik data dengan garis lurus.
f2 <- connector(height ~ age, data = datasets::Loblolly)
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values

Definisi fungsi-fungsi ini mungkin tampak aneh pada awalnya — mereka sepenuhnya ditentukan oleh data: tidak ada parameter! Meskipun demikian, mereka adalah fungsi asli dan dapat bekerja dengan seperti fungsi lainnya. Misalnya, Anda dapat memasukkan input dan mendapatkan output:

f1(age = 8)
## [1] 20.68193
f2(age = 8)
## [1] 20.54729

Anda dapat membuat grafiknya:

gf_point(height ~ age, data = datasets::Loblolly) %>%
  slice_plot(f1(age) ~ age) %>%
  slice_plot(f2(age) ~ age, color="red", ) 

Anda bahkan dapat “menyelesaikan” mereka, misalnya menemukan usia di mana tingginya akan menjadi 35 kaki

findZeros(f1(age) - 35 ~ age, xlim=range(0,30))
##       age
## 1 12.6905
findZeros(f2(age) - 35 ~ age, xlim=range(0,30))
##    age
## 1 12.9

Dalam semua hal, ini adalah fungsi yang sangat biasa. Semua hal kecuali satu: tidak ada formula sederhana untuk mereka. Anda akan melihat ini jika Anda pernah mencoba melihat definisi fungsi dalam bahasa komputer:

f2
## function (age) 
## {
##     x <- get(fnames[2])
##     if (connect) 
##         SF(x)
##     else SF(x, deriv = deriv)
## }
## <environment: 0x000001dff114f740>

Hampir tidak ada apa pun di sini untuk memberi tahu pembaca apa yang dilakukan oleh fungsi tersebut. Definisi tersebut mengacu pada data itu sendiri yang telah disimpan dalam suatu “lingkungan”. Ini adalah fungsi zaman komputer, bukan fungsi dari zaman aljabar.

Seperti yang Anda lihat, fungsi konektor spline dan linier sangat mirip, kecuali untuk rentang input di luar rentang data. Namun, dalam rentang data tersebut, kedua jenis fungsi tersebut tepat berada di tengah setiap kelompok usia.

Spline dan konektor tidak selalu sesuai dengan yang Anda inginkan, terutama bila data tidak dibagi menjadi kelompok-kelompok terpisah, seperti data pinus loblolly. Misalnya, kumpulan data trees.csv adalah pengukuran volume, ketebalan, dan tinggi pohon ceri hitam. Pohon-pohon ditebang untuk diambil kayunya, dan minat dalam melakukan pengukuran adalah untuk membantu memperkirakan berapa banyak volume kayu yang dapat digunakan yang dapat diperoleh dari sebuah pohon, berdasarkan lingkar (yaitu, keliling) dan tinggi. Ini akan berguna, misalnya, dalam memperkirakan berapa nilai uang sebuah pohon. Namun, tidak seperti data pinus loblolly, data ceri hitam tidak melibatkan pohon yang jatuh dengan baik ke dalam kelompok yang ditentukan.

Cherry <- datasets::trees
gf_point(Volume ~ Girth, data = Cherry)

Cukup mudah untuk membuat spline atau konektor linier:

g1 = spliner(Volume ~ Girth, data = Cherry)
## Warning in regularize.values(x, y, ties, missing(ties)): collapsing to unique
## 'x' values
g2 = connector(Volume ~ Girth, data = Cherry)
## Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
## collapsing to unique 'x' values
slice_plot(g1(x) ~ x, domain(x = 8:18)) %>%
  slice_plot(g2(x) ~ x, color ="red") %>%
  gf_point(Volume ~ Girth, data = Cherry) %>%
  gf_labs(x = "Girth (inches)")

Kedua fungsi sama-sama mengikuti data … tapi agak terlalu setia! Masing-masing fungsi bersikeras melewati setiap titik data. (Satu-satunya pengecualian adalah dua titik dengan keliling 13 inci. Tidak ada fungsi yang dapat melewati kedua titik dengan keliling 13, jadi fungsi membagi selisih dan melewati rata-rata dari dua titik.)

Gerakan naik turun adalah fungsi yang sulit dipercaya. Untuk situasi seperti itu, di mana Anda memiliki alasan untuk percaya bahwa fungsi mulus lebih tepat daripada fungsi dengan banyak pasang surut, jenis fungsi yang berbeda sesuai: lebih halus.

g3 <- smoother(Volume ~ Girth, data = Cherry, span=1.5)
gf_point(Volume~Girth, data=Cherry) %>%
  slice_plot(g3(Girth) ~ Girth) %>%
  gf_labs(x = "Girth (inches)")

Smoother diberi nama yang baik: mereka membangun fungsi smooth yang mendekati data. Anda memiliki kendali atas seberapa mulus fungsi tersebut. Rentang hyper-parameter mengatur ini:

g4 <- smoother(Volume ~ Girth, data=Cherry, span=1.0)
gf_point(Volume~Girth, data = Cherry) %>%
  slice_plot(g4(Girth) ~ Girth) %>%
  gf_labs(x = "Girth (inches)", y = "Wood volume")

Tentu saja, seringkali Anda ingin menangkap hubungan di mana ada lebih dari satu variabel sebagai input. Smoother melakukan ini dengan sangat baik; cukup tentukan variabel mana yang akan menjadi input.

g5 <- smoother(Volume ~ Girth+Height, 
               data = Cherry, span = 1.0)
gf_point(Height ~ Girth, data = Cherry) %>%
  contour_plot(g5(Girth, Height) ~ Girth + Height) %>%
  gf_labs(x = "Girth (inches)", 
          y = "Height (ft)", 
          title = "Volume (ft^3)")

Saat Anda membuat konektor yang lebih halus atau spline atau linier, ingat aturan ini:

Anda memerlukan bingkai data yang berisi data. Anda menggunakan rumus dengan variabel yang Anda inginkan sebagai output dari fungsi di sisi kiri tilde, dan variabel input di sisi kanan. Fungsi yang dibuat akan memiliki nama input yang cocok dengan variabel yang Anda tentukan sebagai input. (Untuk saat ini, hanya smooth yang akan menerima lebih dari satu variabel input.) Kelancaran fungsi yang lebih halus dapat diatur oleh argumen rentang. Rentang 1,0 biasanya cukup mulus. Kesalahannya adalah 0,5. Saat membuat spline, Anda memiliki opsi untuk mendeklarasikan monotonic=TRUE. Ini akan mengatur hal-hal untuk menghindari benjolan asing dalam data yang menunjukkan pola naik yang stabil atau pola turun yang stabil. Saat Anda ingin memplot suatu fungsi, tentu saja Anda perlu memilih rentang untuk nilai input. Seringkali masuk akal untuk memilih rentang yang sesuai dengan data yang menjadi dasar fungsi. Anda dapat menemukannya dengan perintah range() , mis.

range(Cherry$Height)
## [1] 63 87