=====================================================

Nama Mahasiswa : Yoza Setya Febriyanti

NIM : 220605110062

Kelas : C

Mata Kuliah : Kalkulus

Dosen Pengampuh : Prof.Dr.Suhartono,M.Kom

Jurusan : Teknik Informatika

Universitas : UIN Maulana Malik Ibrahim Malang

=====================================================

Proses pemilihan parameter untuk mencocokkan pengamatan disebutpemasangan model.

Sebagai ilustrasi, data dalam file “utilitas.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)")

Berbagai jenis fungsi dapat digunakan untuk mewakili data ini. Salah satu yang paling sederhana dan paling com- monly digunakan dalam pemodelan adalah fungsi garis lurus  (f (x) = A x + B ) . Dalam fungsi  (f (x) ), variabel  (x ) adalah singkatan dari input, sedangkan A dan B adalah parameter. Penting untuk diingat apa saja nama input dan output saat menyesuaikan model dengan data – Anda perlu mengatur agar namanya sesuai dengan data yang sesuai.

Dengan data utilitas, input adalah suhu, suhu. Output yang akan dimodelkan adalah ccf. Agar sesuai dengan fungsi model dengan data, Anda menuliskan rumus dengan nama input, parameter, dan output yang sesuai di tempat yang tepat:

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

Output adalah fungsi dari bentuk matematika bentuk yang sama seperti yang Anda tentukan dalam argumen pertama (di sini,) dengan nilai numerik spesifik yang diberikan pada parameter untuk membuat fungsi paling cocok dengan data. Bagaimana cara mengetahui kuantitas 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); hal-hal lain (di sini, dan) adalah parameter.fitModel()ccf ~ A * temp + BfitModel()tempAB

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 bahwa entah bagaimana ada di sana. Cobalah!sqrt(temp)

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

ebagai ilustrasi, lihat 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

Berikut adalah model yang sangat sederhana yang menggunakan kedua variabel:PriceAgeMileage

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

Anda dapat memplot fungsi yang dipasang:

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

Model yang agak lebih canggih mungkin mencakup apa yang disebutinteraksiantara usia dan jarak tempuh, mengakui bahwa efek usia mungkin berbeda tergantung 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 kontur sedikit berbeda dari pada; mereka sedikit menonjol ke atas. Menafsirkan kontur seperti itu membutuhkan sedikit latihan. Lihatlah wilayah kecil di salah satu kontur. Kemiringan kontur memberi tahu Andatrade-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 di sepanjang kontur, harga tetap konstan. (Begitulah cara kontur didefinisikan: titik-titik di mana harganya sama, dalam hal ini $17,000.) Menurunkan jarak tempuh hingga 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 dari peningkatan usia 0,8 tahun sama denganpenurunanjarak tempuh 10.000 mil.carPrice1()

Sekarang lihat kontur $17.000 yang sama pada usia nol (yaitu, di ekstrem kiri grafik). Penurunan jarak tempuh sebesar 10.000 meningkatsesuai dengan usia 1,6 tahun. Dengan kata lain, menurut model, untuk mobil yang lebih baru kepentingan relatif jarak tempuh vs. usiakurangdari untuk 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 inis apa yang menghasilkan efek berbeda pada harga jarak tempuh untuk mobil usia yang berbeda.priceFun2()

Theoperator membuatnya sangat mudah untuk menemukan parameter dalam model tertentu yang membuat model paling mendekati data. Pekerjaan dalam pemodelan adalah memilih bentuk model yang tepat (Istilah interaksi atau tidak? Apakah akan memasukkan variabel baru atau tidak?) dan menafsirkan hasilnya. Di bagian selanjutnya, kita akan melihat beberapa pilihan berbeda dalam bentuk model (linier vs. nonlinier) dan beberapa logika matematika di balik pemasangan.fitModel()

6.1 Kurva dan model linier

Sebagai ilustrasi, data dalam file 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.”utilities.csv”

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 sederhana dan paling umum digunakan dalam pemodelan adalah fungsi garis lurus. Dalam hal aljabar linier, ini adalah kombinasi linier dari fungsif1(T)=1 f1(T)=danf2(T)=T f2(T)=T. Secara konvensional, tentu saja, fungsi garis lurus ditulisf(T)=b+mT f(T)=b+mT. (Mungkin Anda lebih suka menulisnya seperti ini:f(x)=mx+b f(x)=mx+b. Hal yang sama.) Notasi konvensional ini hanya menamai skalar sebagaim m dan b b yang akan berpartisipasi dalam kombinasi linier. Untuk menemukan skalar numerik yang paling cocok dengan data — agar “sesuai dengan fungsi” dengan data — dapat dilakukan dengan aljabar linieroperator.project( )

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

Operator memberikan nilai skalar. Fungsi fitting terbaik itu sendiri dibangun dengan menggunakan nilai skalar ini untuk menggabungkan fungsi yang terlibat.project( )

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

Anda dapat menambahkan fungsi lain ke dalam campuran dengan mudah. Misalnya, Anda mungkin berpikir bahwa entah bagaimana ada di sana. Cobalah!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)")

Theis digunakan untuk memisahkan vektor “target” dari himpunan satu atau lebih vektor di mana proyeksi sedang dibuat. Dalam notasi matematika tradisional, operasi ini akan ditulis sebagai persamaan yang melibatkan matriksproject( )ccftempsqrt~AA terdiri dari satu set vektor( → v 1, →v 2,… , →v p)=Sebuah (→v1,v2,…,→vp)=A , vektor target →b→b , dan himpunan koefisien yang tidak diketahui →x→x . Persamaan yang menghubungkan kuantitas ini ditulisA⋅→ x ≈ →bA⋅→x≈→b . Dalam notasi ini, proses “penyelesaian” untuk →x→x tersirat. Notasi komputer mengatur ulang ini ke

→x = →b ∼→v 1+→v 2+… + → p.

Sebagai ilustrasi, lihat 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

Berikut adalah model yang sangat sederhana yang menggunakan kedua variabel:PriceAgeMileage

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

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

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.2 Fungsi dengan parameter nonlinier

Teknik aljabar linier dapat digunakan untuk menemukan kombinasi linier terbaik dari serangkaian fungsi. Tetapi, seringkali, ada parameter dalam fungsi yang muncul dengan cara nonlinier. Contohnya termasuk k k in f(t)=Aexp(kt)+C f(t)=Aexp(kt)+C and P P in Asin(2πPt)+C Asin(2πPt)+C

gagasan bahwa jarak antar fungsi dapat diukur bekerja dengan sangat baik ketika ada parameter nonlinier yang terlibat. Jadi kita akan terus menggunakan “jumlah residu kuadrat” saat mengevaluasi seberapa dekat perkiraan fungsi dengan sekumpulan data.

6.4 Fungsi eksponensial

Untuk mengilustrasikan, 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)

Pola data menunjukkan “pembusukan” eksponensial terhadap hampir 100% keluarga yang memiliki dua kendaraan. Bentuk matematika dari fungsi eksponensial ini adalahSebuahexp(kY)+C Aexp(kY)+C. A dan C adalah parameter linier yang tidak diketahui.k k adalah parameter nonlinier yang tidak diketahui – itu akan negatif untuk peluruhan eksponensial

Misalkan Anda menebak k k . Tebakannya tidak perlu sepenuhnya acak; Anda dapat melihat dari data itu sendiri bahwa “waktu paruh” adalah sekitar $ 25,000. Parameterk k sesuai dengan waktu paruh, ituLn(0.5)/Paruh ln(0.5)/half-life , jadi di sini tebakan yang bagus untukk k sedangLn(0.5)/25000 ln(0.5)/25000 Yaitu

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

Dimulai dengan tebakan itu, Anda dapat menemukan nilai terbaik dari linear Parameter AA danC C Melalui teknik aljabar linier:

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

Anda dapat 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 sangat dekat dengan titik data. Tetapi Anda juga dapat melihat nilai numerik dari fungsi untuk penghasilan apa pun:

f(Income = 10000)
## [1] 33.45433
f(Income = 50000)
## [1] 85.0375

Sangat informatif untuk melihat nilai-nilai fungsi untuk kekhususan dalam data yang digunakan untuk pemasangan, yaitu, bingkai data:IncomeFamilies

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

Residuadalah perbedaan antara nilai model ini dan nilai aktual dari kumpulan data.TwoVehicles

Kolom memberikan residu untuk setiap baris. Tetapi Anda juga dapat menganggap kolom sebagaivektor. Ingatlah bahwa panjang kuadrat vektor adalah jumlah residu kuadrat resids resids

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

Panjang kuadrat dari vektor ini adalah cara penting untuk mengukur seberapa baik model cocok dengan data.resids

6.5 Mengoptimalkan tebakan

Perlu diingat bahwa jumlah residu kuadrat adalah fungsi dari k k . Nilai di atas hanya untuk tebakan khusus kita $k = $. Daripada hanya menggunakan satu tebakan untukkguess k k, Anda dapat melihat banyak kemungkinan berbeda. Untuk melihat semuanya pada saat yang sama, mari kita plot jumlah residu kuadrat sebagaifungsi dari k k . Kita akan melakukan ini dengan membangun fungsi yang menghitung jumlah residu kuadrat untuk setiap nilai tertentu darik 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)))

Anda dapat melihat bahwa nilai “terbaik” dari k k , yaitu, nilai darik k yang membuat jumlah residu persegi sekecil mungkin, sudah dekatk=−2.8×10−5 k=−2.8×10−5 tidak terlalu jauh dari tebakan aslinya, seperti yang terjadi. (Itu karena waktu paruh sangat mudah diperkirakan.)

Daftar Pustaka

https://dtkaplan.github.io/RforCalculus/fitting-functions-to-data.html