Goodness of fit untuk model nonlinear

8

Kami telah dilengkapi fungsi nonlinier untuk data yang diamati. Langkah selanjutnya adalah penilaian kebaikan kesesuaian fungsi ini (seperti untuk model linier).R2

Apa cara yang biasa untuk mengukur ini?

Edit 1:

Pemasangan dilakukan sebagai berikut:

  1. Lakukan regresi linier dengan variabel bebas A dan B .
  2. Hitung parameter distribusi dari parameter regresi. (Distribusi nonlinier dan memiliki variabel C sebagai input.)
  3. Menilai goodness of fit distribusi nonlinear dengan membandingkan estimasi data yang diamati.

Edit 2:

Contoh untuk langkah-langkah yang disebutkan di atas:

  1. Model regresi:log(y)=β0+β1log(a)+β2log(b)
  2. ρ=β0β1 dan untuk distribusi nonlinier berikut:θ=β2f(a)=ρaθ
  3. Nilai kebaikan fit of dengan serangkaian pengamatan .f(a)(a,f(a))
Marco
sumber
5
"Goodness of fit" tergantung pada bagaimana fit itu dilakukan. Misalnya, ukuran GoF yang sesuai untuk penduga kemungkinan maksimum harus berbeda dari ukuran GoF untuk estimator kuadrat terkecil ketika komponen acak bukan variabel Normal aditif. Jika Anda memiliki masalah spesifik dalam pikiran, maka karena itu Anda mungkin ingin menunjukkan bagaimana Anda melakukan pemasangan.
whuber
2
Anda mungkin tertarik pada: Magee, L. (1990). mengukur berdasarkan tes signifikansi Wald dan rasio kemungkinan bersama. The American Statistician , 44 (3): 250–253, dan Pesaran, MH dan Smith, RJ (1994). Sebuah umum kriteria untuk model regresi diperkirakan dengan metode variabel instrumental. Econometrica , 62 (3): 705-710. R2R2
Alexis
1
@whuber Saya telah menambahkan deskripsi langkah-langkah yang dilakukan dalam pertanyaan di atas.
Marco
@Alexis Terima kasih untuk referensi, saya akan melihatnya.
Marco
1
@whuber Apakah akan menjadi cara yang layak untuk menghitung korelasi antara dan pengamatan yang diberikan untuk menilai goodness of fit? f(a)
Marco

Jawaban:

2

Mungkin ada lebih banyak untuk itu, tetapi bagi saya tampaknya Anda hanya ingin menentukan goodness of fit (GoF) untuk fungsi f (a), dipasang ke set data tertentu (a, f (a)). Jadi, berikut ini hanya menjawab sub-pertanyaan ketiga Anda (saya tidak berpikir yang pertama dan kedua secara langsung relevan dengan yang ketiga).

Biasanya, GoF dapat ditentukan secara parametrik (jika Anda tahu parameter fungsi distribusi) atau non-parametrik (jika Anda tidak mengetahuinya). Meskipun Anda mungkin dapat mengetahui parameter untuk fungsi tersebut, karena tampaknya itu eksponensial atau gamma / Weibull (dengan asumsi data kontinu). Meskipun demikian, saya akan melanjutkan, seolah-olah Anda tidak tahu parameternya. Dalam hal ini, ini adalah proses dua langkah . Pertama, Anda perlu menentukan parameter distribusi untuk set data Anda. Kedua, Anda melakukan tes GoF untuk distribusi yang ditentukan. Untuk menghindari pengulangan, pada titik ini saya akan mengarahkan Anda ke jawaban saya sebelumnyauntuk pertanyaan terkait, yang berisi beberapa detail bermanfaat. Jelas, jawaban ini dapat dengan mudah diterapkan pada distribusi, selain dari yang disebutkan di dalam.

Selain tes GoF, disebutkan di sana, Anda dapat mempertimbangkan tes lain - tes GoF chi-square . Tidak seperti KS dan AD tes, yang berlaku hanya untuk distribusi kontinu, uji GOF chi-square berlaku untuk kedua diskrit dan kontinyu yang. Uji Chi-square GoF dapat dilakukan dalam R dengan menggunakan salah satu dari beberapa paket: statspaket bawaan (fungsi chisq.test()) dan vcdpaket (fungsi goodfit()- hanya untuk data diskrit). Rincian lebih lanjut tersedia dalam dokumen ini .

Aleksandr Blekh
sumber
1
Tautan ke "jawaban saya sebelumnya" tidak berfungsi lagi, karena pertanyaannya mungkin telah dihapus.
Amonet
1
@Amonet Terima kasih telah memberi tahu saya. Saya bisa mendapatkan akses ke Q&A yang dihapus dan memulihkannya sebagai Intisari publik. Silakan lihat gist.github.com/ablekh/… . Semoga ini membantu.
Aleksandr Blekh
0

Nah, di Machine Learning hal yang disebut Cross Validation dilakukan cukup sering untuk tujuan pengujian model (uji apakah tipe model dengan parameter-hiper ini - seperti jumlah derajat kebebasan atau apa pun - sesuai dengan masalah Anda) - Anda membagi data beberapa kali ke dalam rangkaian data kereta dan uji, kemudian jalankan optimisasi di atas rangkaian pelatihan dan hitung kualitas apa pun di atas data tes. Cara paling rahasia adalah menjalankan apa yang disebut "validasi lintas QxT-lipat". Pseudocode bisa seperti:

cv_values = []
for t in range(T):
    split = randomsplit(data, number_of_parst = Q)
    for test_id in range(Q):
        model.fit(split[:test_id] + split[test_id + 1:] # test on everything excepting test_id
        cv_values.append(model.test(split[test_id]))

cv_values.mean() # whatever
MInner
sumber
Terima kasih atas jawaban anda. Jadi, seperti apa fungsi model.test Anda (...) ?
Marco