Nama : Renata Amalia Putri

NIM : 220605110074

Kelas : C (Reguler)

Mata Kuliah : Kalkulus

Dosen Pengampu : Prof. Dr. Suhartono, M.kom

Jurusan : Teknik Informatika

Universitas : UIN Maulana Malik Ibrahim Malang


Agar mempunyai ide bentuk fungsi untuk model maka perlu memilih parameter yang akan membuat fungsi model cocok untuk diamati. Proses pemilihan parameter untuk mencocokkan pengamatan dapat disebut sebagai Model Fitting

Sebagai ilustrasi, terdapat data dalam file “utilities.csv” yang mencatat suhu rata-rata setiap bulan (dalam derajat F) 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)")

Salah satu fungsi yang paling sederhana dan paling umum digunakan dalam pemodelan adalah fungsi garis lurus f(x) = Ax + B. Dalam fungsi f(x), variabel x singkatan dari input, sedangkan A dan B adalah parameter. Mengatur nama input dan output agar sesuai dengan data yang ada.

Dari data utilitas, inputnya adalah temperatur, suhu. Output yang akan dimodelkan adalah CCF. Untuk menyesuaikan fungsi model dengan data, maka tuliskan rumus dengan nama input, parameter, dan output yang sesuai di tempat yang benar:

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

Output dari fitModel() adalah fungsi dengan bentuk matematika yang sama seperti ditentukan dalam argumen pertama (ccf ~ A * temp + B) dengan nilai numerik spesifik yang diberikan terhadap paramater untuk membuat fungsi yang paling cocok dengan data. Cara fitModel() mengetahui besaran mana dalam bentuk matematika yang merupakan variabel dan mana yang disebut parameter yaitu dengan apa pun yang ada di dalam data yang digunakan untuk pemasangan adalah variabel (temp); hal-hal lain (A dan B) disebut parameter. fitModel() ccf ~ A * temp + B fitModel()temp A B

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

Untuk dapat menambahkan fungsi lain ke dalam campuran dengan mudah. Semisal, mungkin berpikir sqrt(temp) berhasil entah bagaimana. Cobalah!

library(mosaicCalc)
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. Keseluruhan ilmu alam dan sosial, teknik yang sangat penting dan banyak digunakan adalah dengan menggunakan banyak variabel di dalam proyeksi. Sebagai ilustrasi, coba lihatlah data harga mobil Honde bekas di used-hondas.csv

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

Dari data diatas kumpulan data mencakup variabel dan harga akan tergantung pada jarak tempuh dan usia mobil. Berikut adalah model yang sangat sederhana yang menggunakan kedua variabel: Price Age Mileage

library(mosaicCalc)
carPrice1 <- fitModel(
  Price ~ A + B * Age + C * Mileage, data = Hondas
)

Sehingga dapat memplot fungsi yang dipasang :

library(mosaicCalc)
contour_plot(
  carPrice1(Age = age, Mileage = miles) ~ age + miles,
  domain(age=2:8, miles=range(0, 60000)))

Lalu, ada model yang lebih canggih yang mencakup interaksi antara usia dan jarak tempuh, bahwa efek usia mungkin berbeda tergantung pada jarak tempuhnya.

library(mosaicCalc)
carPrice2 <- fitModel(
  Price ~ A + B * Age + C * Mileage + D * Age * Mileage,
  data = Hondas)

Sehingga bisa diplot lagi sama dengan cara yang diatas :

library(mosaicCalc)
contour_plot(
  carPrice2(Age=age, Mileage=miles) ~ age + miles,
  domain(age = range(0, 8), miles = range(0, 60000)))


LATIHAN

Latihan 1 : Membuat grafik model dengan Usia dan jarak Tempuh sebagai jumlah input dan harga (USD) sebagai output. Menggunakan carPrice() Age Mileage

contour_plot(
  carPrice1(Age = age, Mileage = miles) ~ age + miles,
  domain(age = range(0, 8), miles = range(0, 60000)))

Berdasarkan grafik di atas, konturrnya vertikal.

  1. Apa yang disebut dengan kontur vertikal mengenai harga sebagai fungsi?
  1. Harga sangat tergantung pada kedua Variabel.
  2. Harga tergantung pada Usia tetapi bukan Jarak Tempuh.
  3. Harga tergantung pada jarak tetapi tidak untuk Mileage Age
  4. Harga tidak terlalu bergantung pada salah satu variabel.

Jawaban : Di setiap kontur disesuaikan dengan harga yang berbeda. Ketika dilihat secara horizontal maka menyeberang dari satu kontur ke kontur lainnya. Tetapi saat dilihat secara vertikal maka tidak melewati kontur. Ini berarti bahwa harga tidak bergantung karena perubahan tidak menyebabkan perubahan harga. Tetapi harga berubah dengan Age Mileage Mileage Mileage Age

  1. Grafik dengan fungsi yang sama yang ditunjukkan pada badan teks memiliki kontur yang miring ke bawah dan kiri ke kanan. Apa yang disebut tentang harga sebagai fungsi?
  1. Harga snagat bergantung pada kedua variabel
  2. Harga tergantung pada tetapi tidak Age Mileage
  3. Harga tergantung pada tetapi tidak Mileage Age
  4. Harga tidak terlalu bergantung pada salah satu variabel.

Jawaban : Ketika dilihat secara horizontal maka berpindah dari kontur ke kontur: harga berubah. Hal ini juga berlaku ketika melihat dnegan vertikal. Jadi harga tergantung pada Age Age Mileage Mileage

Latihan 2 :

logPrice2 <- fitModel(
  logPrice ~ A + B * Age + C * Mileage + D * Age * Mileage,
  data = Hondas %>% mutate(logPrice = log10(Price)))

Model ini didefinisikan untuk mencakup interaksi antara usia dan jarak tempuh. Mungkin saja parameternya akan mendekati nol berarti bahwa data tidak memberikan bukti apapun untuk interaksi.

Apa yang disebut sebagai bentuk kontur tentang apakah data memberikan bukti untuk interaksi dalam harga log?

Jawaban :

contour_plot(
  logPrice2(Age=age, Mileage=miles) ~ age + miles,
  domain(age = range(0, 8), miles = range(0, 60000)))

Konturnya cukup lurus yang menunjukkan bahwa ada sedikit interaksi.

contour_plot(
  logPrice2(Age=age, Mileage=miles) ~ age + miles, domain(age = range(1, 5), 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 dan Model Linier

Kata linier dalam “model linier” mengacu pada “kombinasi linier”, bukan “garis lurus”. Membangun kurva yang rumit dengan mengambil kombinasi fungsi linier dan menggunakan operasi proyeksi aljabar linier untuk mencocokkan kurva ini sedekat mungkin dengan data. Proses tersebut dinamakan “fitting”.

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

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

Berbagai jenis fungsi dapat digunakan untuk mewakili data ini. Salah satu yang paling sederhan dan umum digunakan dalam pemodelan adalah fungsi garis lurus. Di dalam aljabar linier adalah kombinasi linier dari fungsi f1(T) = 1 dan f2(T) = T. Secara konvensional, fungsi garis lurus ditulis f(T) = b + mT. Untuk menemukan skalar numerik yang paling cocok dengan data agara sesuai dengan fungsi dengan data dapat dilakukan dengan operator aljabar linier. project( )

project(ccf ~ temp + 1, data = Utilities)
## (Intercept)        temp 
##  253.098208   -3.464251

Operator memberikan bilai skalar. Fungsi fotting itu sendiri dibangun dengan menggunakan nilai skalar ini untuk menggabungkan fungsi yang terlibat.

model_fun = makeFun( 253.098 - 3.464*temp ~ temp)
gf_point(ccf ~ temp, data=Utils) %>%
  slice_plot(model_fun(temp) ~ temp)

Bisa juga dengan menambahkan fungsi lain ke dalam campuran dengan mudah dengan menggunakan sqrt(T)

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

Operator mengambil serangkaian vektor. Saat menyesuaikan fungsi dengan data, vektor berasal dari kumpulan data sehingga perintah harus merujuk ke nama kuantitas.

Setelah membuat proyeksi dan menemukan koefisien maka dapat membangun fungsi matematika yang sesuai dengan menggunakan koefisien dalam ekspresi matematika untuk membuat fungsi.

Lihatlah data harga mobil Honda bekas. used-hondas.csv

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

Beikut adalah model yang sangat sederhana yang menggunakan kedua variabel: Price Age Mileage

project(Price ~ Age + Mileage + 1, data = Hondas)
##   (Intercept)           Age       Mileage 
##  2.133049e+04 -5.382931e+02 -7.668922e-02

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

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

Latihan

Latihan 1 : Menyesuaikan Polinomial Menyesuaikan polinomial dengan data adalah masalah aljabar linier : membangun vektor yang sesuai untuk mewakili berbagai kekuatan. Misalnya, berikut cara menyesuaikan model kuadrat dengan variabel versus dalam file data: ccf 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) 

Untuk menemukan nilai model ini pada suhu tertentu, cukup dengan mengevaluasi fungsinya. ccfQuad( ) T

ccfQuad(T=72)
## [1] 11.3134

A. Sesuaikan polinomial orde 3 versus dengan data utilitas. Berapa nilai model ini untuk suhu 32 derajat? {87.103.128.142.143.168.184}

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

B. Sesuaikan polinomial orde 4 versus dengan data utilitas. Berapa nilai model ini untuk suhu 32 derajat? {87.103.128.140.143.168.184}

Jawaban :

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

C. Buat plot perbedaan antara model urutan ke-3 dan ke-4 pada kisaran suhu dari 20 hingga 60 derajat. Apa perbedaan terbesar (dalam nilai absolut) antara output kedua model? a. Sekitar 1 ccf b. Sekitar 4 ccf c. Sekitar 8 ccf d. Sekitar 1 derajat F e. Sekitar 4 derajat F f. Sekitar 8 derajat F

Jawaban : Output dari model adalah dalam satuan ccf

slice_plot(ccfQuad(temp) - ccfCubic(temp) ~ temp, 
           domain(temp = range(20, 60)))

Perbedaan antara kedua model selalu dalam sekitar 4 ccf.

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 termasuk efisiensi bahan bakar dalam mil-per-galon, mengekang berat dalam pound, tenaga mesin dalam tenaga kuda, dan jumlah silinder. Variabel-variabel ini termasuk 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
  1. Gunakan data ini agar sesuai dengan model penghematan bahan bakar (variabel) berikut : mpg Berapa nilai model untuk input 2000 pound? {14.9,19.4,21.1,25.0,28.8,33.9,35.2}

Jawaban :

project(mpg ~ pounds + 1, data = Cars)
##  (Intercept)       pounds 
## 43.188646127 -0.007200773
43.1886 - 0.00720*2000
## [1] 28.7886
  1. Gunakan data agar sesuai dengan model penghematan bahan bakar (variabel) berikut: mpg
  1. 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}
  2. 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 Eksponensial

Untuk megilustrasikan, pertimbangkan data yang menunjukkan hubungan eksponensial antara fraksi keluarga dengan dua mobil dan pendapatan : Income-Housing.csv

Families <- read.csv("http://www.mosaic-web.org/go/datasets/Income-Housing.csv")
gf_point(TwoVehicles ~ Income, data = Families)

Bentuk matematika dari fungsi eksponensial ini adalah Sebuahexp(kY) + C. A dan C adalah parameter linier yang tidak diketahui. k adalah parameter non-linier yang tidak diketahui.

kguess <- log(0.5) / 25000
kguess
## [1] -2.772589e-05

Dapat menemukan nilai terbaik dari linier Parameter Sebuah dan C melalui teknik aljabar linier :

project( TwoVehicles ~ 1 + exp(Income*kguess), data = Families)
##          (Intercept) exp(Income * kguess) 
##             110.4263            -101.5666

Dapat juga membangun fungsi yang merupakan kombinasi linier terbaik dengan secara eksplisit menambahkan dua fungsi :

f <- makeFun( 110.43 - 101.57*exp(Income * k) ~ Income, k = kguess)
gf_point(TwoVehicles ~ Income, data = Families) %>%
  slice_plot(f(Income) ~ Income) 

Grafik berjalan dengan sangat dekat dengan titik data. Tetapi juga dapat melihat nilai numerik dari fungsi untuk penghasilan apa pun:

f(Income = 10000)
## [1] 33.45433
f(Income = 70000)
## [1] 95.84584
Results <- Families %>% 
  dplyr::select(Income, TwoVehicles) %>%
  mutate(model_val = f(Income = Income),
         resids = TwoVehicles - model_val)
Results
##   Income TwoVehicles model_val     resids
## 1   3914        17.3  19.30528 -2.0052822
## 2  10817        34.3  35.17839 -0.8783904
## 3  21097        56.4  53.84097  2.5590313
## 4  34548        75.3  71.45680  3.8432013
## 5  51941        86.6  86.36790  0.2320981
## 6  72079        92.9  96.66273 -3.7627306

Residu adalah perbedaan antara nilai model ini dan nilai aktual dalam kumpulan data.

Kolom memberikan sisa untuk setiap baris. Tetapi juga dapat menganggap kolom sebagai vektor. Panjang kuadrat vektor adalah jumlah residu kuadrat.

sum(Results$resids^2)
## [1] 40.32358

Mengoptimalkan Tebakan Membangun fungsi yang menghitung jumlah residu kuadrat untuk setiap niali tertentu dar k.

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

             DAFTAR PUSTAKA

Kaplan, Daniel. (2020). Computer-age Calculus with R