Bab 6 Menyesuaikan fungsi ke data

terdapat gagasan tentang bentuk fungsi untuk model dan kita perlu memilih parameter yang akan membuat fungsi model cocok untuk observasi. Proses pemilihan parameter untuk mencocokkan pengamatan disebut model fitting .

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

Data dalam file “utilities.csv” mencatat suhu rata-rata setiap bulan (dalam derajat F) serta penggunaan gas alam bulanan (dalam kaki kubik, ccf).

Utils <- read.csv("http://www.mosaic-web.org/go/datasets/utilities.csv")
gf_point(ccf ~ temp, data = Utils) %>%
  gf_labs(y = "Natural gas usage (ccf/month)", 
          x = "Average outdoor temperature (F)")

fungsi garis lurus f(x)=Ax+B singkatan dari input, sedangkan A dan B adalah parameter.

Dengan data utilitas, inputnya adalah suhu, suhu. Output yang akan dimodelkan adalah ccf. Untuk menyesuaikan fungsi model dengan data, perlu rumus dengan nama input, parameter, dan output yang sesuai di tempat yang tepat:

f <- fitModel(ccf ~ A * temp + B, data = Utils)

Apa pun yang terkandung dalam data yang digunakan untuk pemasangan adalah variabel (di sini temp); hal-hal lain (di sini, Adan B) adalah parameter.

gf_point(ccf ~ temp, data = Utils) %>%
  slice_plot(f(temp) ~ temp)

kita dapat menambahkan fungsi lain ke dalam campuran dengan mudah. hal ini melibatkan satu variabel input.

f2 <- fitModel(
  ccf ~ A * temp + B + C *sqrt(temp),
  data = Utils)
gf_point(
  ccf ~ temp, data = Utils) %>%
  slice_plot(f2(temp) ~ temp)

misalkan harga mobil bekas Honda

Hondas <- read.csv("http://www.mosaic-web.org/go/datasets/used-hondas.csv")
head(Hondas)
##   Price Year Mileage Location Color Age
## 1 20746 2006   18394  St.Paul  Grey   1
## 2 19787 2007       8  St.Paul Black   0
## 3 17987 2005   39998  St.Paul  Grey   2
## 4 17588 2004   35882  St.Paul Black   3
## 5 16987 2004   25306  St.Paul  Grey   3
## 6 16987 2005   33399  St.Paul Black   2
carPrice1 <- fitModel(
  Price ~ A + B * Age + C * Mileage, data = Hondas
)
contour_plot(
  carPrice1(Age = age, Mileage = miles) ~ age + miles,
  domain(age=2:8, miles=range(0, 60000)))

cara lain untuk membaca plot kontur. Setiap kombinasi usia dan mil yang jatuh pada kontur ini menghasilkan harga mobil yang sama: $ 17.000. Kemiringan kontur memberi tahu pertukaran antara jarak tempuh dan usia. Lihatlah dua titik pada kontur yang berbeda 10.000 mil. Perbedaan usia yang sesuai adalah sekitar 1,5 tahun. Jadi, ketika membandingkan dua mobil dengan harga yang sama, penurunan jarak tempuh sebesar 10.000 diimbangi dengan peningkatan usia 1,5 mil.

carPrice2 <- fitModel(
  Price ~ A + B * Age + C * Mileage + D * Age * Mileage,
  data = Hondas)
contour_plot(
  carPrice2(Age=age, Mileage=miles) ~ age + miles,
  domain(age = range(0, 8), miles = range(0, 60000)))

Bentuk konturnya sedikit berbeda dengan di carPrice1(); mereka sedikit menonjol ke atas. Lihatlah wilayah kecil di salah satu kontur. Kemiringan kontur memberi tahu Anda trade-offantara jarak tempuh dan usia. Untuk melihat ini, lihat kontur $ 17.000 di mana ia melewati usia = 6 tahun dan jarak tempuh = 10.000 mil. Sekarang lihat kontur $ 17.000 pada jarak tempuh nol. Dalam bergerak sepanjang kontur, harga tetap konstan. (Begitulah kontur didefinisikan: titik di mana harganya sama, dalam hal ini $ 17.000.) Menurunkan jarak tempuh sebesar 10.000 mil diimbangi dengan meningkatkan usia hanya di bawah satu tahun. (Kontur $ 17.000 memiliki titik pada jarak tempuh nol dan 6,8 tahun.)

Cara lain untuk mengatakan ini adalah bahwa efek peningkatan usia 0,8 tahun sama dengan penurunan jarak tempuh 10.000 mil.

Sekarang lihat kontur $ 17.000 yang sama pada usia nol (yaitu, di ekstrem kiri grafik). Penurunan jarak tempuh sebesar 10.000 peningkatan sesuai dengan usia 1,6 tahun. Dengan kata lain, menurut modelnya, untuk mobil yang lebih baru, kepentingan relatif dari jarak tempuh vs. usia lebih kecil daripada mobil yang lebih tua. Untuk mobil berusia nol, 10.000 mil bernilai 1,6 tahun, tetapi untuk mobil berusia enam tahun, 10.000 mil hanya bernilai 0,8 tahun.

Interaksi yang ditambahkan priceFun2()inilah yang menghasilkan pengaruh yang berbeda terhadap harga jarak tempuh untuk mobil yang berbeda umur.

Operator fitModel()membuatnya sangat mudah untuk menemukan parameter dalam model tertentu yang membuat model paling mendekati data.