Seringkali, Anda memiliki ide tentang bentuk fungsi untuk sebuah model dan Anda 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 umum digunakan dalam
pemodelan adalah fungsi garis lurus f(x)=SEBUAH 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 – Anda perlu mengatur agar namanya cocok dengan data yang sesuai.
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)
Keluaran dari fitModel()adalah fungsi dengan bentuk matematika yang sama seperti yang Anda tentukan di argumen pertama (di sini, ccf ~ A * temp + B) dengan nilai numerik spesifik yang diberikan ke parameter untuk membuat fungsi paling cocok dengan data. Bagaimana cara fitModel()mengetahui besaran mana dalam bentuk matematika yang merupakan variabel dan mana yang merupakan parameter? 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)
Anda dapat menambahkan fungsi lain ke dalam campuran dengan mudah.
Misalnya, Anda mungkin berpikir itu sqrt(temp)berhasil di sana.
Cobalah!
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 masukan. 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
Seperti yang Anda lihat, 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
)
Anda dapat memplot fungsi yang sesuai:
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, mari kita fokus 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)
Sekali lagi, setelah fungsi dipasang ke data, Anda dapat memplotnya dengan cara biasa:
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. menafsirkan kontur seperti itu membutuhkan sedikit
latihan. Lihatlah wilayah kecil di salah satu kontur. Kemiringan kontur
memberi tahu Anda trade-offantara jarak tempuh dan usia. Untuk
melihatnya, lihat kontur $17.000 yang melewati usia = 6 tahun dan jarak
tempuh = 10.000 mil. Sekarang lihat kontur $ 17.000 dengan 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 sejauh 10.000 mil diseimbangkan dengan
menambah usia kurang dari satu tahun. (Kontur $17.000 memiliki titik nol
jarak tempuh 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 ujung kiri grafik). Penurunan jarak tempuh sebesar 10.000 peningkatansesuai dengan usia 1,6 tahun. Dengan kata lain, menurut model, untuk mobil yang lebih baru kepentingan relatif antara jarak tempuh vs. usia lebih rendah 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 apa pun yang membuat model mendekati data paling dekat. Pekerjaan dalam pemodelan adalah memilih bentuk model yang tepat (Istilah interaksi atau tidak? Apakah akan memasukkan variabel baru atau tidak?) dan menginterpretasikan hasilnya. Di bagian selanjutnya, kita akan melihat beberapa pilihan berbeda dalam bentuk model (linier vs. nonlinier) dan beberapa logika matematis di balik pemasangan.