title: “Resume Fitting Function to Data”
author: “M.Nabil Hilmi/220605110056”
date: “2022-12-09”
output: html_document

fungsi untuk sebuah model dan perlu memilih parameter yang akan membuat fungsi model cocok untuk observasi. Proses pemilihan parameter untuk mencocokkan pengamatan disebut model fitting . Sebagai ilustrasi, data dalam file “utilities.csv” mencatat suhu rata-rata setiap bulan (dalam derajat F) serta penggunaan gas alam bulanan (dalam kaki kubik, ccf). Ada, seperti yang Anda duga, hubungan yang kuat antara keduanya.

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

Banyak jenis fungsi yang berbeda dapat digunakan untuk mewakili data ini. Salah satu yang paling sederhana dan paling sering digunakan dalam pemodelan adalah fungsi garis lurus \(f(x) = A x + B\) . Dalam fungsi \(f(x)\) , variabel \(x\) singkatan dari input, sedangkan A dan B adalah parameter. Penting untuk diingat apa nama input dan output saat menyesuaikan model dengan data

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

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

menambahkan fungsi lain ke dalam campuran dengan mudah

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

Contoh ini hanya melibatkan satu variabel input. Sepanjang ilmu alam dan sosial, teknik yang sangat penting dan banyak digunakan adalah menggunakan banyak variabel dalam sebuah proyeksi. Sebagai ilustrasi, lihat data “used-hondas.csv”harga mobil Honda bekas.

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

Kumpulan data menyertakan variabel Price, Age, dan Mileage. Tampaknya masuk akal untuk berpikir bahwa harga akan bergantung pada jarak tempuh dan usia mobil. Inilah model yang sangat sederhana yang menggunakan kedua variabel:

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

Pertimbangkan sekarang cara lain untuk membaca plot kontur. Sebagai contoh, okus pada kontur seharga $17.000. Setiap kombinasi usia dan mil yang jatuh pada kontur ini menghasilkan harga mobil yang sama: $17.000. Kemiringan kontur memberi tahu Anda 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, saat membandingkan dua mobil dengan harga yang sama, penurunan jarak tempuh sebesar 10.000 diimbangi dengan peningkatan usia 1,5 mil.

Model yang agak lebih canggih mungkin mencakup apa yang disebut interaksi antara usia dan jarak tempuh, dengan menyadari bahwa pengaruh usia mungkin berbeda bergantung pada jarak tempuh.

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

Latihan 2 Ekonom biasanya berpikir tentang harga dalam logaritma mereka. Keuntungan dari melakukan ini adalah bahwa tidak masalah dalam mata uang apa harganya; kenaikan 1 harga log adalah proporsi yang sama terlepas dari harga atau mata uangnya.

Pertimbangkan model dari catatan harga sebagai fungsi dari mil dan usia. Model ini didefinisikan untuk memasukkan interaksi antara usia dan jarak tempuh. Tentu saja, mungkin saja parameternya Dmendekati nol. Itu berarti bahwa data tidak memberikan bukti interaksi apa pun

logPrice2 <- fitModel(
  logPrice ~ A + B * Age + C * Mileage + D * Age * Mileage,
  data = Hondas %>% mutate(logPrice = log10(Price)))
contour_plot(
  logPrice2(Age=age, Mileage=miles) ~ age + miles,
  domain(age = range(0, 8), miles = range(0, 60000)))

Latihan 3 Menyesuaikan fungsi dengan data bukanlah sihir. Sejauh data membatasi bentuk model yang masuk akal, model tersebut akan cocok dengan data. Tetapi untuk input yang tidak ada datanya (misalnya mobil berusia 0 tahun dengan jarak tempuh 60.000 mil), sebuah model dapat melakukan hal-hal gila. Ini terutama terjadi jika modelnya rumit, katakanlah termasuk kekuatan variabel, seperti yang satu ini:

carPrice3 <- fitModel(
  Price ~ A + B * Age + C * Mileage + D * Age * Mileage +
    E * Age^2 + F * Mileage^2 + G * Age^2 * Mileage + 
    H * Age * Mileage^2,
  data = Hondas)
gf_point(Mileage ~ Age, data = Hondas, fill = NA) %>%
contour_plot(
  carPrice3(Age=Age, Mileage=Mileage) ~ Age + Mileage)
## Warning: Using the `size` aesthetic in this geom was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` in the `default_aes` field and elsewhere instead.

6.1 Kurva dan model linier ata linier dalam “model linier” mengacu pada “kombinasi linier”, bukan “garis lurus”. Seperti yang akan Anda lihat, Anda dapat membuat kurva rumit dengan mengambil kombinasi fungsi linier, dan menggunakan operasi proyeksi aljabar linier untuk mencocokkan kurva ini sedekat mungkin dengan data. Proses pencocokan itu disebut “pas”.

Utilities = read.csv("http://www.mosaic-web.org/go/datasets/utilities.csv")
gf_point(ccf ~ temp, data = Utilities)

Banyak jenis fungsi yang berbeda dapat digunakan untuk mewakili data ini. Salah satu yang paling sederhana dan paling umum digunakan dalam pemodelan adalah fungsi garis lurus. Dalam hal aljabar linier, ini adalah kombinasi linier dari fungsi f1(T)=1 dan f2(T)=T. Secara konvensional, fungsi garis lurusditulis f(T)=b+mT. Notasi konvensional ini hanyalah penamaan skalar sebagai m dan b yang akan berpartisipasi dalam kombinasi linier. Untuk menemukan skalar numerik yang paling cocok dengan data — untuk “menyesuaikan fungsi” dengan data — dapat dilakukan dengan project( )operator aljabar linier.

project(ccf ~ temp + 1, data = Utilities)
## (Intercept)        temp 
##  253.098208   -3.464251
model_fun = makeFun( 253.098 - 3.464*temp ~ temp)
gf_point(ccf ~ temp, data=Utils) %>%
  slice_plot(model_fun(temp) ~ temp)

mod2 <- makeFun(447.03 + 1.378*temp - 63.21*sqrt(temp) ~ temp)
gf_point(ccf ~ temp, data=Utils) %>% # the data
  slice_plot(mod2(temp) ~ temp) %>%
  gf_labs(x = "Temperature (F)", 
          y = "Natural gas used (ccf)")

project(ccf ~ 1 + temp + I(temp^2) + I(temp^3) + I(temp^4), 
        data = Utils)
##   (Intercept)          temp     I(temp^2)     I(temp^3)     I(temp^4) 
##  1.757579e+02  8.225746e+00 -4.815403e-01  7.102673e-03 -3.384490e-05
ccfQuad <- makeFun(1.7576e2 + 8.225*T -4.815e-1*T^2 + 
                     7.103e-3*T^3 - 3.384e-5*T^4 ~ T) 
gf_point(ccf ~ temp, data = Utils) %>%
  slice_plot(ccfQuad(temp) ~ temp) %>%
  gf_labs(y = "Natural gas use (ccf)", x = "Temperature (F)")

ccfQuad(32)
## [1] 143.1713

Pilihan vektor apa yang akan digunakan dalam proyeksi ada di tangan Anda: bagian dari seni pemodel.

Sepanjang ilmu alam dan sosial, teknik yang sangat penting dan banyak digunakan adalah menggunakan banyak variabel dalam sebuah proyeksi. Sebagai ilustrasi, lihat data “used-hondas.csv”harga mobil Honda bekas.

Cars = read.csv("http://www.mosaic-web.org/go/datasets/cardata.csv")
head(Cars)
##    mpg  pounds horsepower cylinders tons constant
## 1 16.9 3967.60        155         8  2.0        1
## 2 15.5 3689.14        142         8  1.8        1
## 3 19.2 3280.55        125         8  1.6        1
## 4 18.5 3585.40        150         8  1.8        1
## 5 30.0 1961.05         68         4  1.0        1
## 6 27.5 2329.60         95         4  1.2        1
project(mpg ~ pounds + 1, data = Cars)
##  (Intercept)       pounds 
## 43.188646127 -0.007200773
43.1886 - 0.00720*2000
## [1] 28.7886

kumpulan data menyertakan variabel Price, Age, dan Mileage. Tampaknya masuk akal untuk berpikir bahwa harga akan bergantung pada jarak tempuh dan usia mobil. Inilah model yang sangat sederhana yang menggunakan kedua variabel:

project(mpg ~ pounds + horsepower  + 1, data = Cars)
##  (Intercept)       pounds   horsepower 
## 46.932738241 -0.002902265 -0.144930546
mod_fun <- makeFun(46.933 - 0.00290*lbs - 0.1449*hp ~ lbs + hp)
mod_fun(lbs = 2000, hp = 50)
## [1] 33.888

Anda dapat memplotnya sebagai fungsi matematika:

car_price <- makeFun(21330-5.383e2*age-7.669e-2*miles ~ age & miles)
contour_plot(car_price(age, miles) ~ age + miles,
  domain(age=range(2, 8), miles=range(0, 60000))) %>%
  gf_labs(title = "Miles per gallon")