Bentuk fungsi untuk sebuah model perlu memilih parameter yang akan membuat fungsi model cocok untuk diobservasi. Proses pemilihan parameter untuk mencocokkan pengamatan disebut model fitting .
Sebagai ilustrasi, data dalam file “utilities.csv” mencatat suhu rata-rata setiap bulan (dalam derajat Fahrenheit) serta penggunaan gas alam bulanan (dalam kaki kubik, ccf).
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 ) = A x + B . In function 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:
library(mosaicCalc)
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. 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.
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. Di seluruh ilmu alam dan sosial, teknik yang sangat penting dan banyak digunakan adalah dengan menggunakan banyak variabel dalam suatu proyeksi. Sebagai ilustrasi, lihatlah data di “used-hondas.csv”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
Harga akan tergantung pada jarak tempuh dan usia mobil. Berikut adalah model yang sangat sederhana yang menggunakan kedua variabel:
library(mosaicCalc)
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, 70000)))
carPrice2 <- fitModel(
Price ~ A + B * Age + C * Mileage + D * Age * Mileage,
data = Hondas)
LATIHAN 1
library(mosaicCalc)
contour_plot(
carPrice2(Age=age, Mileage=miles) ~ age + miles,
domain(age = range(0, 8), miles = range(0, 60000)))
## =========== LATIHAN 2
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)))
contour_plot(
logPrice2(Age=age, Mileage=miles) ~ age + miles,
domain(age = range(2, 8), miles = range(0, 6000)))
## Warning: Computation failed in `stat_contour_fill()`:
## factor level [2] is duplicated
LATIHAN 3 :
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)
KURVA MODEL LINIER
Utilities = read.csv("http://www.mosaic-web.org/go/datasets/utilities.csv")
gf_point(ccf ~ temp, data = Utilities)
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)
project(ccf ~ temp + sqrt(temp) + 1, data = Utils)
## (Intercept) temp sqrt(temp)
## 447.029273 1.377666 -63.208025
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)")
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
project(Price ~ Age + Mileage + 1, data = Hondas)
## (Intercept) Age Mileage
## 2.133049e+04 -5.382931e+02 -7.668922e-02
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")
Model yang agak lebih canggih mungkin mencakup apa yang disebut
“interaksi” antara usia dan jarak tempuh, mengakui bahwa efek usia
mungkin berbeda tergantung pada jarak tempuh.
project(Price ~ Age + Mileage + Age*Mileage + 1, data = Hondas)
## (Intercept) Age Mileage Age:Mileage
## 2.213744e+04 -7.494928e+02 -9.413962e-02 3.450033e-03
car_price2 <- makeFun(22137 - 7.495e2*age - 9.414e-2*miles +
3.450e-3*age*miles ~ age & miles)
contour_plot(
car_price2(Age, Mileage) ~ Age + Mileage,
domain(Age = range(0, 10), Mileage = range(0, 100000))) %>%
gf_labs(title = "Price of car (USD)")
## 6.1.1.1 Latihan 1: Pemasangan Polinomial Sebagian besar mahasiswa
mengambil kursus aljabar yang mencakup banyak tentang polinomial, dan
polinomial sangat sering digunakan dalam pemodelan. (Mungkin, mereka
digunakan lebih sering daripada yang seharusnya. Dan guru aljabar
mungkin kecewa mendengar bahwa model polinomial yang paling penting
adalah model orde rendah, misalnya, f(x,y)=sebuah+bx+cy+dxy daripada
menjadi kubik atau kuartik, dll.) Menyesuaikan polinomial dengan data
adalah masalah aljabar linier: menyusun vektor yang sesuai untuk
mewakili berbagai kekuatan. Misalnya, inilah cara menyesuaikan model
kuadrat dengan variabel ccfversus dalam file data:temp"utilities.csv”
Utilities = read.csv("http://www.mosaic-web.org/go/datasets/utilities.csv")
project(ccf ~ 1 + temp + I(temp^2), data = Utilities)
## (Intercept) temp I(temp^2)
## 317.58743630 -6.85301947 0.03609138
ccfQuad <- makeFun(317.587 - 6.853*T + 0.0361*T^2 ~ T)
gf_point(ccf ~ temp, data = Utilities) %>%
slice_plot(ccfQuad(temp) ~ temp)
ccfQuad(T=72)
## [1] 11.3134
JAWABAN
project(ccf ~ 1 + temp + I(temp^2) + I(temp^3), data = Utils)
## (Intercept) temp I(temp^2) I(temp^3)
## 2.550709e+02 -1.427408e+00 -9.643482e-02 9.609511e-04
ccfCubic <-
makeFun(2.551e2 - 1.427*T -
9.643e-2*T^2 + 9.6095e-4*T^3 ~ T)
gf_point(ccf ~ temp, data = Utils) %>%
slice_plot(ccfCubic(temp) ~ temp)
ccfCubic(32)
## [1] 142.1801
SOAL : 1 Pasang polinomial orde ke-4 dari ccfversus tempke data utilitas. Berapa nilai model ini untuk suhu 32 derajat? {87.103.128.140, 143 ,168,184}
JAWAB
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)")
library(mosaicCalc)
ccfQuad(32)
## [1] 143.1713
SOAL : Buat plot perbedaan antara model orde ke-3 dan ke-4 pada rentang suhu dari 20 hingga 60 derajat. Apa perbedaan terbesar (dalam nilai absolut) antara output dari kedua model?
Sekitar 1 cc. Sekitar 4 ccf. Sekitar 8 ccf. Sekitar 1 derajat F Sekitar 4 derajat F Sekitar 8 derajat F. JAWABAN: Keluaran model dalam satuan ccf.
slice_plot(ccfQuad(temp) - ccfCubic(temp) ~ temp,
domain(temp = range(20, 60)))
## 6.1.1.2 Latihan 2: Regresi Berganda Pada tahun 1980, majalah Consumer
Reports mempelajari mobil model 1978-79 untuk mengeksplorasi bagaimana
berbagai faktor mempengaruhi penghematan bahan bakar. Pengukuran
tersebut mencakup efisiensi bahan bakar dalam mil per galon, bobot
trotoar dalam pound, tenaga mesin dalam tenaga kuda, dan jumlah
silinder. Variabel ini disertakan dalam file “cardata.csv”.
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
Gunakan data ini agar sesuai dengan model ekonomi bahan bakar (variabel mpg): =x0+x1. Berapa nilai model untuk input 2000 pound? {14.9,19.4,21.1,25.0, 28.8,33.9,35.2} MENJAWAB:
project(mpg ~ pounds + 1, data = Cars)
## (Intercept) pounds
## 43.188646127 -0.007200773
43.1886 - 0.00720*2000
## [1] 28.7886
Gunakan data agar sesuai dengan model ekonomi bahan bakar berikut (variabel mpg): =kamu0+kamu1+kamu2. a. Berapa nilai model untuk input 2000 pound dan 150 tenaga kuda? {14.9, 19.4 ,21.1,25.0,28.8,33.9,35.2} b. Berapa nilai model untuk input 2000 pound dan 50 tenaga kuda? {14.9,19.4,21.1,25.0,28.8, 33.9 ,35.2}
jawaban
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
Fungsi dengan parameter nonlinier a. Fungsi eksponensial
Families <- read.csv("http://www.mosaic-web.org/go/datasets/Income-Housing.csv")
gf_point(TwoVehicles ~ Income, data = Families)
kguess <- log(0.5) / 25000
kguess
## [1] -2.772589e-05
project( TwoVehicles ~ 1 + exp(Income*kguess), data = Families)
## (Intercept) exp(Income * kguess)
## 110.4263 -101.5666
f <- makeFun( 110.43 - 101.57*exp(Income * k) ~ Income, k = kguess)
gf_point(TwoVehicles ~ Income, data = Families) %>%
slice_plot(f(Income) ~ Income)
f(Income = 10000)
## [1] 33.45433
f(Income = 50000)
## [1] 85.0375
Mengoptimalkan tebakan:
sum_square_resids <- Vectorize(function(k) {
sum((Families$TwoVehicles - f(Income=Families$Income, k)) ^ 2)
})
slice_plot(
sum_square_resids(k) ~ k,
domain(k = range(log(0.5)/40000,log(0.5)/20000)))
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
DAFTAR PUSTAKA : Di akses melalui DAFTAR PUSTAKA