Yüksek derecede doğrusal olmayan fonksiyonun takılması için strateji


12

Bir biyofizik deneyinin verilerini analiz etmek için, şu anda oldukça doğrusal olmayan bir modelle eğri uydurma yapmaya çalışıyorum. Model işlevi temelde şöyle görünür:

y=ax+bx1/2

Burada özellikle değeri büyük ilgi görüyor.b

Bu işlev için bir çizim:

İşlev grafiği

(Model işlevinin, sistemin ayrıntılı bir matematiksel açıklamasına dayandığını ve çok iyi çalıştığını görüyoruz - sadece otomatik uyumlar zor).

Tabii ki, model işlevi problemlidir: Ben şimdiye kadar denedim stratejileri uydurma, çünkü keskin asimptot başarısız , özellikle gürültülü verilerle.x=0

Buradaki sorunu anladığım kadarıyla, basit en küçük kareler uydurma (MATLAB'da hem doğrusal hem de doğrusal olmayan regresyonla oynadım; çoğunlukla Levenberg-Marquardt) dikey asimptota çok duyarlıdır, çünkü x'deki küçük hatalar büyük ölçüde güçlendirilmiştir. .

Biri beni bu sorunu çözebilecek uygun bir stratejiye yönlendirebilir mi?

Bazı temel istatistik bilgim var, ama bu hala oldukça sınırlı. Nereden bakmaya başlayacağımı bilseydim öğrenmeye hevesli olurdum :)

Tavsiyen için çok teşekkür ederim!

Düzenle Hatalardan bahsetmeyi unuttuğunuz için özür dileriz. Tek önemli gürültü cinsindendir ve katkı maddesidir.x

Düzenle 2 Bu sorunun arka planı hakkında bazı ek bilgiler. Yukarıdaki grafik bir polimerin gerilme davranışını modeller. @Whuber yorumlarda belirtildiği gibi, yukarıdaki gibi bir grafik elde etmek için gerekir.b200a

İnsanların bu eğriyi bu noktaya kadar nasıl oturttuğuna gelince: insanlar genellikle iyi bir uyum bulana kadar dikey asimptodu kestiler. Bununla birlikte, kesim seçimi hala keyfi olup, takma prosedürünü güvenilir ve tekrarlanamaz hale getirir.

3 ve 4'ü düzenle Sabit grafik.


3
Hatalar veya y veya her ikisinde mi geliyor? Hangi formda gürültünün (çarpımsal, katkı maddesi vb.) Girmesini beklersiniz? xy
olasılık

2
@onnodb: Endişem, modelinizin kendisinin ne kadar sağlam olduğunu temelden sorgulayamaz mı? Kullandığınız stratejiyi uydurma edilemez olduğunu olursa olsun son derece hassas kalır? B için böyle bir tahmine hiç güvenemez misiniz? bb
curious_cat

1
Ne yazık ki, bu hala işe yaramaz. Çizdiğiniz grafiği kalitatif olarak bile çoğaltabilecek olası ve b kombinasyonu yoktur . (Açıkçası b negatiftir. A , grafikteki en az eğimden daha az olmalı, ancak pozitif, bu da dar bir aralığa sokmalıdır. Ancak a bu aralıkta olduğunda , büyük negatif ani artışın üstesinden gelmek için yeterince büyük değildir. tarafından tanıtılan kökeni b x 1 / 2 dönem.) çizdiğiniz ne olacak? Veri? Başka bir işlev? abbaabx1/2
whuber

1
(x,ax+bx1/2)x>0(0,3b/(2x1/2))0b15.5y=ax+bx1/2y=ax+bx1/2+c

1
xx

Yanıtlar:


10

Bunu manuel olarak sığdırmak için kullanacağımız yöntemler (yani Açıklayıcı Veri Analizi) bu verilerle oldukça iyi çalışabilir.

Parametrelerini olumlu hale getirmek için modeli biraz yeniden parametrelendirmek istiyorum :

y=axb/x.

yxf(y;a,b)f(y)(a,b)

(xi,yi)xif(yi;a,b)100a=0.0001b=0.1σ2=4

Veri grafiği

x±2 56xabσ2

aa^b^abx^ixibxi(yi)xx yeterince büyük,

xi1a(yi+b^x^i).

a^aa

x

xib212a^b^x^3/2yi2.

bb^

xi1/yi2xixiyixi1/yi2yi kırmızı renkte, en küçük yarısı mavi renkte ve başlangıç ​​noktasında bir çizgi kırmızı noktalara sığar.

şekil

xyxb0.0964

Bu noktada, öngörülen değerler şu şekilde güncellenebilir:

x^i=f(yi;a^,b^).

Tahminler istikrara kavuşana kadar (bu garanti edilmez) veya küçük değer aralıkları (hala garanti edilemez) arasında dolaşana kadar yineleyin .

axba^=0.0001960.0001b^=0.10730.1). Bu grafik, verileri bir kez daha gösterir; bu veriler (a) gerçek eğri gri renkte (kesikli) ve (b) tahmini eğri kırmızı renkte (katı):

Uyumlar

3.734

Bu yaklaşımla ilgili bazı sorunlar var:

  • Tahminler önyargılıdır. Veri kümesi küçük olduğunda ve nispeten az sayıda değer x eksenine yakın olduğunda sapma belirginleşir. Uyum sistematik olarak biraz düşüktür.

  • yiyi

  • ab


kod

Mathematica'da aşağıdakiler yazılmıştır .

estimate[{a_, b_, xHat_}, {x_, y_}] := 
  Module[{n = Length[x], k0, k1, yLarge, xLarge, xHatLarge, ySmall, 
    xSmall, xHatSmall, a1, b1, xHat1, u, fr},
   fr[y_, {a_, b_}] := Root[-b^2 + y^2 #1 - 2 a y #1^2 + a^2 #1^3 &, 1];
   k0 = Floor[1 n/3]; k1 = Ceiling[2 n/3];(* The tuning constants *)
   yLarge = y[[k1 + 1 ;;]]; xLarge = x[[k1 + 1 ;;]]; xHatLarge = xHat[[k1 + 1 ;;]];
   ySmall = y[[;; k0]]; xSmall = x[[;; k0]]; xHatSmall = xHat[[;; k0]];
   a1 = 1/
     Last[LinearModelFit[{yLarge + b/Sqrt[xHatLarge], 
          xLarge}\[Transpose], u, u]["BestFitParameters"]];
   b1 = Sqrt[
     Last[LinearModelFit[{(1 - 2 a1 b  xHatSmall^(3/2)) / ySmall^2, 
          xSmall}\[Transpose], u, u]["BestFitParameters"]]];
   xHat1 = fr[#, {a1, b1}] & /@ y;
   {a1, b1, xHat1}
   ];

xydata = {x,y}a=b=0

{a, b, xHat} = NestWhile[estimate[##, data] &, {0, 0, data[[1]]}, 
                Norm[Most[#1] - Most[#2]] >= 0.001 &,  2, 100]

3
Bu inanılmaz bir cevap; Çok mecburum! Bununla oynuyorum ve sonuçlar çok umut verici görünüyor. Yine de mantığı tam olarak anlamak için biraz daha zamana ihtiyacım olacak :) Ayrıca: Teşekkürler hakkında ek bir (özel) soru için web siteniz aracılığıyla sizinle iletişime geçebilir miyim?
onnodb

3

Önemli sorulara bakın @probabilityislogic yayınlandı

y=yxyx=x3/21/x

b

x

-

Ek bilgileri dikkate almak için düzenleyin:

y=b+ax

Şimdi hataların x ve katkısı var. Halen bu ölçekte varyansın sabit olup olmadığını bilmiyoruz.

x=y/ab/a=my+c

xo=x+ηx

oxo

xo=c+my+ϵϵ=ζxy

Bunun geliştiğinden emin değilim! Bu tür şeyler için yöntemler olduğuna inanıyorum, ama gerçekten benim alanım değil.

Yorumlarda ters gerilime bakmak isteyebileceğinizden bahsettim, ancak işlevinizin belirli şekli bundan kaçınmayı engelleyebilir.

Hatta bu lineer formda x-hatalarında oldukça sağlam yöntemleri denemede sıkışmış olabilirsiniz.

-

y

x


x

2
" hatalar x olsa bile " - evet, bu biraz önemli. Ters regresyonu kontrol etmek isteyebilirsiniz.
Glen_b

3
... veya doğrudan modeline sığabilirsinizx=13(2ya+21/3y2(27a4b22a3y3+3327a8b44a7b2y3)1/3+(27a4b22a3y3+3327a8b44a7b2y3)1/321/3a2)

xoxox+ζx=(thatmonster)+ϵϵ=ζ

x(y)yb

0

Birkaç haftalık deneyden sonra, bu özel durumda farklı bir teknik en iyi sonucu verir: Total En Küçük Kareler uydurma . Her zamanki (doğrusal olmayan) En Küçük Kareler bağlantısının bir çeşididir, ancak eksenlerden sadece biri boyunca (bu gibi oldukça doğrusal olmayan durumlarda sorunlara neden olan) uyum hatalarını ölçmek yerine, her iki ekseni de dikkate alır .

Konu ile ilgili mevcut olan çok sayıda makale, öğretici ve kitap var, ancak doğrusal olmayan durum daha zor. Hatta bazı MATLAB kodları da mevcut.


yy

@whuber Endişelerinizi ifade ettiğiniz için teşekkür ederiz! Şu anda, TLS bağlantısının güvenilirliğini araştırmak için simülasyonlar üzerinde çalışıyorum. Şimdiye kadar gördüğüm şey, TLS'nin her iki değişkeni de dikkate alması, modelin yüksek doğrusal olmama durumunun üstesinden gelmede çok yardımcı oluyor. Simüle edilmiş verilerin uyumu güvenilirdir ve çok iyi yakınsar. Yine de daha fazla işin yapılması gerekiyor ve daha gerçek veriler elde edildikten sonra yönteminizi buna göre biriktirmem gerekecek ve endişelerinize ayrıntılı bir şekilde bakacağım.
onnodb

Tamam - Unutmayın, önerdiğim yöntem hakkında karşılaştırılabilir endişelerim var!
whuber
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.