Yüzde verilerime ne tür bir eğri (veya model) sığdırmalıyım?


15

Viral kopyalar ve genom kapsama alanı (GCC) arasındaki ilişkiyi gösteren bir figür oluşturmaya çalışıyorum. Verilerim şöyle görünüyor:

Viral yüke karşı GCC

İlk başta, doğrusal bir gerileme planladım, ancak amirlerim bunun yanlış olduğunu ve sigmoidal bir eğri denememi söylediler. Bu yüzden geom_smooth kullanarak bunu yaptım:

library(scales)
ggplot(scatter_plot_new, aes(x = Copies_per_uL, y = Genome_cov, colour = Virus)) +
    geom_point() +
    scale_x_continuous(trans = log10_trans(), breaks = trans_breaks("log10", function(x) 10^x), labels = trans_format("log10", math_format(10^.x))) +
        geom_smooth(method = "gam", formula = y ~ s(x), se = FALSE, size = 1) +
    theme_bw() +
    theme(legend.position = 'top', legend.text = element_text(size = 10), legend.title = element_text(size = 12), axis.text = element_text(size = 10), axis.title = element_text(size=12), axis.title.y = element_text(margin = margin (r = 10)), axis.title.x = element_text(margin = margin(t = 10))) +
    labs(x = "Virus copies/µL", y = "GCC (%)") +
    scale_y_continuous(breaks=c(25,50,75,100))

Viral yük vs GCC - geom_smooth

Ancak, amirlerim bunun yanlış olduğunu söylüyor çünkü eğriler GCC'nin% 100'ün üzerine çıkabileceğini gösteriyor ki bu yapamıyor.

Sorum şu: Virüs kopyaları ile GCC arasındaki ilişkiyi göstermenin en iyi yolu nedir? Açıkça belirtmek isterim ki A) düşük virüs kopyaları = düşük GCC ve bu B) belirli miktarda virüs GCC yaylalarını kopyalar.

Birçok farklı yöntemi araştırdım - GAM, LOESS, lojistik, parçalı - ama verilerim için en iyi yöntemin ne olduğunu nasıl anlayacağımı bilmiyorum.

EDIT: bu veri:

>print(scatter_plot_new)  
Subsample   Virus   Genome_cov  Copies_per_uL
1   S1.1_RRAV   RRAV    100 92500
2   S1.2_RRAV   RRAV    100 95900
3   S1.3_RRAV   RRAV    100 92900
4   S2.1_RRAV   RRAV    100 4049.54
5   S2.2_RRAV   RRAV    96.9935 3809
6   S2.3_RRAV   RRAV    94.5054 3695.06
7   S3.1_RRAV   RRAV    3.7235  86.37
8   S3.2_RRAV   RRAV    11.8186 84.2
9   S3.3_RRAV   RRAV    11.0929 95.2
10  S4.1_RRAV   RRAV    0   2.12
11  S4.2_RRAV   RRAV    5.0799  2.71
12  S4.3_RRAV   RRAV    0   2.39
13  S5.1_RRAV   RRAV    4.9503  0.16
14  S5.2_RRAV   RRAV    0   0.08
15  S5.3_RRAV   RRAV    4.4147  0.08
16  S1.1_UMAV   UMAV    5.7666  1.38
17  S1.2_UMAV   UMAV    26.0379 1.72
18  S1.3_UMAV   UMAV    7.4128  2.52
19  S2.1_UMAV   UMAV    21.172  31.06
20  S2.2_UMAV   UMAV    16.1663 29.87
21  S2.3_UMAV   UMAV    9.121   32.82
22  S3.1_UMAV   UMAV    92.903  627.24
23  S3.2_UMAV   UMAV    83.0314 615.36
24  S3.3_UMAV   UMAV    90.3458 632.67
25  S4.1_UMAV   UMAV    98.6696 11180
26  S4.2_UMAV   UMAV    98.8405 12720
27  S4.3_UMAV   UMAV    98.7939 8680
28  S5.1_UMAV   UMAV    98.6489 318200
29  S5.2_UMAV   UMAV    99.1303 346100
30  S5.3_UMAV   UMAV    98.8767 345100

6
Lojistik regresyon en iyi olurdu, çünkü bu% 0 ile% 100 arasında sınırlıdır.
mkt - Monica

1
(2) adet (doğrusal) modeli deneyin.
user158565

3
orijinal ggplot kodunuza method.args=list(family=quasibinomial))argüman eklemeyi deneyin geom_smooth().
Ben Bolker

4
PS seni teşvik edecek değil standart hataları bastırmak için se=FALSE. İnsanlara belirsizliğin gerçekte ne kadar büyük olduğunu göstermek her zaman güzel ...
Ben Bolker

2
Geçiş bölgesinde herhangi bir otorite ile düzgün bir eğri olduğunu iddia etmek için yeterli veri noktanız yok. Bize gösterdiğiniz noktalara bir Heaviside işlevini de kolayca sığdırabilirim.
Carl Witthoft

Yanıtlar:


6

bununla ilgili bir başka yol da Bayesli bir formülasyon kullanmak olacaktır. dır-dir

Stan , nispeten kolay bir programlı arayüze sahip bir Monte Carlo örnekleyicisidir, kütüphaneler R ve diğerleri için kullanılabilir, ancak burada Python kullanıyorum

herkes gibi bir sigmoid kullanıyoruz: biyokimyasal motivasyonları var, aynı zamanda çalışmak için matematiksel olarak çok uygun. bu görev için güzel bir parametrelendirme:

import numpy as np

def sigfn(x, alpha, beta):
    return 1 / (1 + np.exp(-(x - alpha) * beta))

burada alphasigmoid eğrisinin orta noktasını tanımlar (yani% 50'yi geçtiği yerde) ve betaeğimi tanımlar, sıfıra yakın değerler daha düzdür

bunun neye benzediğini göstermek için verilerinizi alabilir ve aşağıdakilerle birlikte çizebiliriz:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

df = pd.read_table('raw_data.txt', delim_whitespace=True)
df.columns = ['subsample', 'virus', 'coverage', 'copies']
df.coverage /= 100

x = np.logspace(-1, 6, 201)
plt.semilogx(x, sigfn(np.log(x), 5.5, 3), label='sigfn', color='C2')

sns.scatterplot(df.copies, df.coverage, hue=df.virus, edgecolor='none')

Burada raw_data.txtverdiğiniz verileri içerir ve kapsamı daha kullanışlı bir şeye dönüştürdüm. 5.5 ve 3 katsayıları güzel görünüyor ve diğer cevaplara çok benziyor:

veri ve manuel sığdırma

Stan'ı kullanarak bu işlevi "sığdırmak" için modelimizi R ve C ++ arasında bir karışım olan kendi dilini kullanarak tanımlamamız gerekir. basit bir model şöyle bir şey olurdu:

data {
    int<lower=1> N;  // number of rows
    vector[N] log_copies;
    vector<lower=0,upper=1>[N] coverage;
}
parameters {
    real alpha;
    real beta;
    real<lower=0> sigma;
}
model {
    vector[N] mu;
    mu = 1 ./ (1 + exp(-(log_copies - alpha) * beta));

    sigma ~ cauchy(0, 0.1);
    alpha ~ normal(0, 5);
    beta ~ normal(0, 5);

    coverage ~ normal(mu, sigma);
}

umarım iyi okur. bir var databiz, bir model örnek zaman beklenen veriler tanımlanır blok parametersörneklenir şeyler tanımlamak ve modelolabilirlik fonksiyonunu tanımlar. Stan'e biraz zaman alan modeli "derlemesini" söylersiniz ve daha sonra bazı verilerle örnekleme yapabilirsiniz. Örneğin:

import pystan

model = pystan.StanModel(model_code=code)
model.sampling(data=dict(
    N=len(df),
    log_copies=np.log(df.copies),
    coverage=df.coverage,
), iter=10000, chains=4, thin=10)

import arviz
arviz.plot_trace(fit)

arviz güzel tanılama çizimlerini kolaylaştırır, uyum yazdırırken size güzel bir R-tarzı parametre özeti verir:

4 chains, each with iter=10000; warmup=5000; thin=10; 
post-warmup draws per chain=500, total post-warmup draws=2000.

        mean se_mean     sd   2.5%    25%    50%    75%  97.5%  n_eff   Rhat
alpha   5.51  6.0e-3   0.26   4.96   5.36   5.49   5.64   6.12   1849    1.0
beta    2.89    0.04   1.71   1.55   1.98   2.32   2.95   8.08   1698    1.0
sigma   0.08  2.7e-4   0.01   0.06   0.07   0.08   0.09    0.1   1790    1.0
lp__   57.12    0.04   1.76   52.9   56.1  57.58  58.51  59.19   1647    1.0

büyük standart sapma beta , verilerin gerçekten bu parametre hakkında fazla bilgi sağlamadığını söylüyor. Ayrıca, model uyumlarında 10+ önemli basamak veren cevapların bazıları bir şeyleri biraz abartıyor

çünkü bazı cevaplar her virüsün kendi parametrelerine ihtiyacı olabileceğinden , "Virüs" e izin vermek alphave betadeğişiklik yapmak için modeli genişlettim . her şey biraz zorlaşıyor, ancak iki virüs neredeyse kesinlikle farklı alphadeğerlere sahip (yani aynı kapsama alanı için daha fazla kopyaya / μL RRAV'ye ihtiyacınız var) ve bunu gösteren bir çizim:

veri grafiği ve MC örnekleri

veriler öncekiyle aynı, ancak posteriorun 40 örneği için bir eğri çizdim. UMAVnispeten iyi belirlenmiş gibi görünüyor,RRAV aynı eğime takip etmek ve daha yüksek kopya sayısı kalmaz veya daha dik bir eğime ve benzer bir kopya sayısını olabilir. arka kitlenin çoğu daha yüksek bir kopya sayısına ihtiyaç duymaktadır, ancak bu belirsizlik, farklı cevaplar bulmak için diğer cevaplardaki bazı farklılıkları açıklayabilir.

Bunu çoğunlukla Stan bilgimi geliştirmek için bir alıştırma olarak kullandım ve birisinin bunu çoğaltmakla ilgilenmesi / istemesi durumunda buraya bir Jupyter defteri koydum .


14

(Aşağıdaki yorumlar dikkate alınarak düzenlendi. Yararlı girdi için @BenBolker & @WeiwenNg sayesinde.)

Verilere kesirli lojistik regresyon uygulayın. % 0 ile% 100 arasında sınırlanmış olan ve biyolojinin birçok alanında teorik olarak iyi gerekçelendirilmiş verilerin yüzdesine uygundur.

Programlar sık ​​sık verilerin 0 ile 1 arasında olmasını beklediğinden, tüm değerleri 100'e bölmeniz gerekebileceğini unutmayın. bunun yerine kuasibinom dağılımı.

İlgilendiğiniz 2 virüs olduğu ve farklı desenler gösterebileceği gibi kodunuza dayalı bazı varsayımlar yaptım (yani virüs türü ve kopya sayısı arasında bir etkileşim olabilir).

İlk olarak, model uygundur:

dat <- read.csv('Book1.csv')
dat$logcopies <- log10(dat$Copies_per_uL)
dat$Genome_cov_norm <- dat$Genome_cov/100

fit <- glm(Genome_cov_norm ~ logcopies * Virus, data = dat, family = quasibinomial())
summary(fit)


Call:
glm(formula = Genome_cov_norm ~ logcopies * Virus, family = quasibinomial(), 
    data = dat)

Deviance Residuals: 
     Min        1Q    Median        3Q       Max  
-0.55073  -0.13362   0.07825   0.20362   0.70086  

Coefficients:
                    Estimate Std. Error t value Pr(>|t|)  
(Intercept)          -5.9702     2.8857  -2.069   0.0486 *
logcopies             2.3262     1.0961   2.122   0.0435 *
VirusUMAV             2.6147     3.3049   0.791   0.4360  
logcopies:VirusUMAV  -0.6028     1.3173  -0.458   0.6510  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for quasibinomial family taken to be 0.6934319)

    Null deviance: 30.4473  on 29  degrees of freedom
Residual deviance:  2.7033  on 26  degrees of freedom

P-değerlerine güveniyorsanız, çıktı iki virüsün anlamlı şekilde farklı olduğunu göstermez. Bu, farklı yöntemler kullandığımız halde @ NickCox'un aşağıdaki sonuçlarının aksine. 30 veri noktası ile her iki şekilde de kendime güvenmem.

İkincisi, çizim:

Çıktıyı kendiniz görselleştirmek için bir yol kodlamak zor değil, ancak sizin için işin çoğunu yapacak bir ggPredict paketi var gibi görünüyor (bunun için kefil olamaz, kendim denemedim). Kod şöyle görünecektir:

library(ggiraphExtra)
ggPredict(fit) + theme_bw(base_size = 20) + geom_line(size = 2) 

Güncelleme: Kod veya ggPredict işlevini daha genel olarak önermiyorum. Denedikten sonra, çizilen noktaların giriş verilerini tam olarak yansıtmadığını, bunun yerine bazı tuhaf nedenlerle değiştirildiğini gördüm (çizilen noktaların bazıları 1'in altında ve 0'ın altındaydı). Bu yüzden kendiniz kodlamanızı tavsiye ederim, ancak bu daha fazla iş.


7
Bu cevabı onaylıyorum, ancak açıklığa kavuşturmak istiyorum: Bu kısmi lojistik regresyon olarak adlandırırım. Bu terimin daha yaygın olarak kabul edileceğini düşünüyorum. Çoğu insan "lojistik regresyon" duyduğunda, eminim 0/1 bağımlı bir değişken düşünürler. Bu adlandırma ile ilgili iyi bir Stackexchange yanıtı burada: stats.stackexchange.com/questions/216122/…
Weiwen Ng

2
@teaelleceecee Belli ki önce kapsamı 100'e bölmelisiniz.
Nick Cox

4
family=quasibinomial()uyarıyı (ve çok katı varyans varsayımlarıyla ilgili temel sorunları) önlemek için kullanın . @ Mkt'nin diğer sorunla ilgili tavsiyelerini alın.
Ben Bolker

2
Bu işe yarayabilir, ancak gerçekte verilerinizin bu işlevi izlemesi gereken bir işleve uymadan önce bir önceliğe sahip olmanız gerektiği konusunda insanları uyarmak istiyorum . Aksi takdirde, bir montaj işlevi seçtiğinizde hemen hemen rastgele çekim yaparsınız ve sonuçlara aldanabilirsiniz.
Carl Witthoft

6
@CarlWitthoft Biz vaaz duyuyoruz ama hizmet dışında günahkarlar. Hangi önermeler sizi diğer yorumlarda bir Heaviside işlevi önermeye itti? Buradaki biyoloji keskin bir eşikteki geçişe benzemiyor. Burada anladığım kadarıyla araştırma, biçimsel teorinin veriden daha zayıf olduğudur. Kabul ediyorum: eğer insanlar bir adım fonksiyonunun mantıklı olduğunu düşünürlerse, bir tanesine uymalıdırlar.
Nick Cox

11

Bu, mkt'tan farklı bir cevap değil, özellikle grafikler bir yoruma uymuyor. İlk olarak tüm verilere Stata'da (yordayıcıyı kaydettikten sonra) bir lojistik eğri yerleştiriyorum ve bu grafiği alıyorum

resim açıklamasını buraya girin

Bir denklem

100 invlogit(-4.192654 + 1.880951 log10( Copies))

Şimdi bir gösterge değişkeni tanımlayan en basit virüs senaryosunda her virüs için ayrı ayrı eğriler yerleştiriyorum. İşte kayıt için bir Stata betiği:

clear 
input id str9 Subsample   str4 Virus   Genome_cov  Copies_per_uL
1   S1.1_RRAV   RRAV    100 92500
2   S1.2_RRAV   RRAV    100 95900
3   S1.3_RRAV   RRAV    100 92900
4   S2.1_RRAV   RRAV    100 4049.54
5   S2.2_RRAV   RRAV    96.9935 3809
6   S2.3_RRAV   RRAV    94.5054 3695.06
7   S3.1_RRAV   RRAV    3.7235  86.37
8   S3.2_RRAV   RRAV    11.8186 84.2
9   S3.3_RRAV   RRAV    11.0929 95.2
10  S4.1_RRAV   RRAV    0   2.12
11  S4.2_RRAV   RRAV    5.0799  2.71
12  S4.3_RRAV   RRAV    0   2.39
13  S5.1_RRAV   RRAV    4.9503  0.16
14  S5.2_RRAV   RRAV    0   0.08
15  S5.3_RRAV   RRAV    4.4147  0.08
16  S1.1_UMAV   UMAV    5.7666  1.38
17  S1.2_UMAV   UMAV    26.0379 1.72
18  S1.3_UMAV   UMAV    7.4128  2.52
19  S2.1_UMAV   UMAV    21.172  31.06
20  S2.2_UMAV   UMAV    16.1663 29.87
21  S2.3_UMAV   UMAV    9.121   32.82
22  S3.1_UMAV   UMAV    92.903  627.24
23  S3.2_UMAV   UMAV    83.0314 615.36
24  S3.3_UMAV   UMAV    90.3458 632.67
25  S4.1_UMAV   UMAV    98.6696 11180
26  S4.2_UMAV   UMAV    98.8405 12720
27  S4.3_UMAV   UMAV    98.7939 8680
28  S5.1_UMAV   UMAV    98.6489 318200
29  S5.2_UMAV   UMAV    99.1303 346100
30  S5.3_UMAV   UMAV    98.8767 345100
end 

gen log10Copies = log10(Copies)
gen Genome_cov_pr = Genome_cov / 100
encode Virus, gen(virus)
set seed 2803 
fracreg logit Genome_cov_pr log10Copies i.virus, vce(bootstrap, reps(10000)) 

twoway function invlogit(-5.055519 + 1.961538 * x), lc(orange) ra(log10Copies)      ///
|| function invlogit(-5.055519 + 1.233273 + 1.961538 * x), ra(log10Copies) lc(blue) ///
|| scatter Genome_cov_pr log10Copies if Virus == "RRAV", mc(orange) ms(Oh)          ///
|| scatter Genome_cov_pr log10Copies if Virus == "UMAV", mc(blue) ms(+)             ///
legend(order(4 "UMAV" 3 "RRAV") pos(11) col(1) ring(0))                             ///
xla(-1 "0.1" 0 "1" 1 "10" 2 "100" 3 "10{sup:3}" 4 "10{sup:4}" 5 "10{sup:5}")        ///
yla(0 .25 "25" .5 "50" .75 "75" 1 "100", ang(h))                                    ///
ytitle(Genome coverage (%)) xtitle(Genome copies / {&mu}L) scheme(s1color) 

Bu, küçük bir veri kümesini zorlamaktadır, ancak virüsün P değeri, iki eğriyi birlikte takmayı destekleyici görünmektedir.

Fractional logistic regression                  Number of obs     =         30
                                                Replications      =     10,000
                                                Wald chi2(2)      =      48.14
                                                Prob > chi2       =     0.0000
Log pseudolikelihood = -6.9603063               Pseudo R2         =     0.6646

-------------------------------------------------------------------------------
              |   Observed   Bootstrap                         Normal-based
Genome_cov_pr |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
--------------+----------------------------------------------------------------
  log10Copies |   1.961538   .2893965     6.78   0.000     1.394331    2.528745
              |
        virus |
        UMAV  |   1.233273   .5557609     2.22   0.026     .1440018    2.322544
        _cons |  -5.055519   .8971009    -5.64   0.000    -6.813805   -3.297234
-------------------------------------------------------------------------------

resim açıklamasını buraya girin


3

Sigmoid'i deneyin işlevini . Bu şeklin lojistik bir eğrisi dahil birçok formülasyonu vardır. Hiperbolik tanjant bir başka popüler seçimdir.

Grafikler göz önüne alındığında, basit bir adım işlevini de ekleyemiyorum. Korkarım bir adım fonksiyonu ile herhangi bir sayıda sigmoid spesifikasyonu birbirinden ayıramayacaksınız. Yüzde oranınızın% 50 aralığında olduğu herhangi bir gözleminiz yok, bu nedenle basit adım formülasyonu daha karmaşık modellerden daha kötü performans göstermeyen en parsimoinous seçim olabilir.


σ(x)=12(1+tanhx2)

2
@JG "sigmoid", bir S-eğrisi için genel bir terim, endişelendiğim kadarıyla, ancak bir sigmoid'in iki spesifikasyonu arasında bir bağlantıya işaret etmekte haklısınız
Aksakal

2

İşte, CA Holstein, M. Griffin, J. Hong, PD Sampson, “Biyo-deneylerin Saptama Sınırlarını Belirleme ve Karşılaştırma için İstatistiksel Yöntem”, Anal . Chem. 87 (2015) 9795-9801. 4PL denklemi her iki şekilde de gösterilmiştir ve parametre anlamları aşağıdaki gibidir: a = düşük asimptot, b = eğim faktörü, c = bükülme noktası ve d = üst asimptot.

Şekil 1, a'yı% 0'a eşittir ve d,% 100'e eşittir:

Şekil 1 Kısıtlı a & d

Şekil 2'de 4PL denklemindeki 4 parametre üzerinde herhangi bir kısıtlama yoktur:

Şekil 2 Kısıtlama yok

Bu eğlenceliydi, biyolojik bir şey bildiğimi iddia etmiyorum ve her şeyin nasıl yerleştiğini görmek ilginç olacak!


Teşekkür ederim, bu gerçekten yararlı. Merak ediyorum, bunu MATLAB'da fit fonksiyonu ile yaptınız mı?
teaelleceecee

1
Igor Pro'yu şekillerde gösterilen kullanıcı tanımlı kullanıcı işleviyle kullandım. 1988'den beri Igor Pro ve selefi (Igor) kullanıyorum, ancak birçok başka program eğri uydurmalarını yapabilir, örneğin Origin Pro ve çok ucuz Kaleidagraph. Ve görünüşe göre Matlab'a R ve (muhtemelen?) Erişiminiz var, ikisi de son derece yetenekli olmaları dışında hiçbir şey bilmiyorum. Bu konuda başarıların en iyisi ve umarım bir dahaki sefere süpervizörlerle tartıştığınızda iyi haberler alırsınız! Ayrıca, verileri gönderdiğiniz için teşekkürler!
Ed V

2

Dağılım grafiğinizdeki verileri çıkardım ve denklem aramam, 3 parametreli bir lojistik türü denklemi iyi bir aday olarak gösterdi: "y = a / (1.0 + b * exp (-1.0 * c * x))" x ", çiziminiz için günlük tabanı 10'dur. Takılan parametreler = 9.0005947126706630E + 01, b = 1.2831794858584102E + 07 idi ve çıkarılan verilerim için uygun bir sonuç (günlük 10 x) orijinal verilerin uygun olması gerekir. orijinal veriler değerlerimi ilk parametre tahminleri olarak kullanarak. Parametre değerlerim ayıklanan verilerde R kare = 0.983 ve RMSE = 5.625 veriyor.

arsa

DÜZENLEME: Şimdi soru gerçek verileri içerecek şekilde düzenlendiğine göre, yukarıdaki 3 parametreli denklemi ve ilk parametre tahminlerini kullanan bir grafik.

plot2


Veri çıkarma işleminizde bir hata var gibi görünüyor: bir sürü negatif yüzde değeriniz var. Ayrıca, maksimum değerleriniz orijinal grafikte olduğu gibi% 100 yerine yaklaşık% 90'dır. Herhangi bir nedenden ötürü her şeyin yaklaşık% 10 oranında dengelenmesini sağlayabilirsiniz.
mkt - Monica

Meh - bu yarı manuel olarak çıkarılmış verilerdir, orijinal veriler gereklidir. Bu genellikle denklem aramaları için yeterlidir ve elbette nihai sonuçlar için değil - bu yüzden orijinal veride ilk parametre tahminleri olarak extract-o-fit parametre değerlerimi kullanmamı söyledim.
James Phillips

Gerçek veriler yayına eklendikçe, güncellenmiş verileri kullanarak bu yanıtı güncellediğimi lütfen unutmayın.
James Phillips

Sadece tekrarlamak gerekirse: örneğin bir Heaviside fonksiyonunun uygulanması benzer hata değerleri verebilir.
Carl Witthoft

1
@JamesPhillips Bunu yapmaya çalışacağım (Heaviside -> hata çubukları veya eşdeğeri)
Carl Witthoft

2

Heaviside hakkında koca ağzıma açmam gerektiğinden, işte sonuçlar. Geçiş noktasını log10 (virüs kopyaları) = 2.5 olarak ayarladım. Sonra veri setinin iki yarısının standart sapmalarını hesapladım - yani, Heaviside her iki taraftaki verilerin tüm türevlere = 0 sahip olduğunu varsayıyor.

RH tarafı std dev = 4,76
LH tarafı std dev = 7,72

Her partide 15 örnek olduğu için, toplam standart ortalama veya 6.24'tür.

Diğer cevaplarda belirtilen "RMSE" nin genel olarak "RMS hatası" olduğunu varsayarsak, Heaviside işlevinin en azından daha iyi değilse de, "Z-eğrisi" nin (fotoğrafik tepki adlandırmalarından ödünç alınmış) çoğu kadar iyi olmadığı görülüyor buraya.

Düzenle

Yararsız grafik, ancak yorumlarda talep edildi:

Heaviside eğri uyumu


Lütfen diğer cevaplarda yapılanlara benzer bir model ve dağılım grafiği gönderir misiniz? Bu sonuçları görmek ve karşılaştırmak en çok merak ediyorum. Karşılaştırma için lütfen RMSE ve R kare değerlerini de ekleyin. Şahsen Heaviside işlevini hiç kullanmadım ve bunu çok ilginç buluyorum.
James Phillips

R,2

Benim anlamım, bu cevaplarla doğrudan karşılaştırma amacıyla, diğer cevaplarda yapılanlara benzer bir plan yapmaktı.
James Phillips

2
@ JamesPhillips iki dileğiniz kaldı. Akıllıca seçin :-)
Carl Witthoft

Konu için teşekkürler. Diğer cevaplardaki tüm grafiklerde, çizilen denklemin sağ üstteki verinin kavisli şeklini izlediğini gözlemliyorum - Heaviside işlevinin doğası gibi değil. Bu görsel olarak Heaviside fonksiyonunun yanı sıra diğer cevaplarda yayınlanan denklemlerin yapacağına dair iddianızla çelişiyor gibi görünüyor - bu yüzden daha önce RMSE ve R-kare değerlerini talep etmiştim, Heaviside fonksiyonunun şekli takip etmeyeceğinden şüpheliyim ve bu uygun istatistikler için daha kötü değerler verebilir.
James Phillips
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.