백분율 데이터에 어떤 종류의 곡선 (또는 모형)을 적용해야합니까?


15

바이러스 사본과 게놈 범위 (GCC) 간의 관계를 보여주는 그림을 만들려고합니다. 이것은 내 데이터의 모습입니다 :

바이러스 성 부하 대 GCC

처음에는 선형 회귀를 플로팅했지만 관리자가 잘못되었다고 말하고 시그 모이 드 곡선을 시도한다고 말했습니다. 그래서 geom_smooth를 사용 하여이 작업을 수행했습니다.

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

바이러스 성 부하 vs GCC-geom_smooth

그러나 관리자는 곡선이 GCC가 100 %를 넘을 수없는 것처럼 보이기 때문에 이것이 잘못되었다고 말합니다.

내 질문은 바이러스 복제본과 GCC 간의 관계를 표시하는 가장 좋은 방법은 무엇입니까? A) 낮은 바이러스 복제본 = 낮은 GCC이며, B) 일정량의 바이러스 복제 후 GCC 정체기가 확실하다는 것을 분명히하고 싶습니다.

GAM, LOESS, 로지스틱, 조각 단위 등 다양한 방법을 연구했지만 내 데이터에 가장 적합한 방법을 알려주는 방법을 모르겠습니다.

편집 : 이것은 데이터입니다 :

>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
로지스틱 회귀가 가장 좋을 것 같습니다. 0과 100 % 사이에 있기 때문입니다.
mkt-복원 모니카

1
(2) 조각 단위 (선형) 모형을 사용해보십시오.
user158565

3
원래 ggplot 코드에 method.args=list(family=quasibinomial))인수를 추가 geom_smooth()하십시오.
벤 볼커

4
추신 : 나는 표준 오류를 억제 하지 않는 것이 좋습니다 se=FALSE. 사람들에게 불확실성이 얼마나 큰지 보여 주려면 항상 기쁘다.
Ben Bolker

2
전환 영역에 부드러운 곡선이 있다는 권위를 주장하기에 충분한 데이터 포인트가 없습니다. 나는 당신이 우리에게 보여준 지점에 헤비 사이드 기능을 쉽게 맞출 수있었습니다.
Carl Witthoft

답변:


6

이것에 대한 또 다른 방법은 베이지안 공식을 사용하는 것입니다. 처음에는 조금 무거울 수 있지만 문제의 세부 사항을 표현하는 것이 훨씬 쉬울뿐만 아니라 "불확실성"에 대한 더 나은 아이디어를 얻는 경향이 있습니다. 이다

Stan 은 비교적 사용하기 쉬운 프로그래밍 인터페이스를 갖춘 Monte Carlo 샘플러이며, R 및 기타 라이브러리를 사용할 수 있지만 여기서는 Python을 사용하고 있습니다.

우리는 다른 모든 사람들과 마찬가지로 시그 모이 드를 사용합니다. 생화학 적 동기가 있으며 수학적으로 매우 편리하게 작업 할 수 있습니다. 이 작업에 대한 좋은 매개 변수는 다음과 같습니다.

import numpy as np

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

여기서, alphaS 자형 곡선 (즉, 50 %가 교차하는 곳)의 중간 점을 정의하고, beta기울기를 정의 제로에 가까운 값이다 평평

이것이 어떻게 보이는지 보여주기 위해 데이터를 가져 와서 다음과 같이 그릴 수 있습니다.

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

raw_data.txt당신이 준 데이터 가 포함되어 있고 범위를보다 유용한 것으로 변환했습니다. 계수 5.5와 3은 멋지게 보이고 다른 답변과 매우 흡사합니다.

플롯 데이터 및 수동 맞춤

Stan을 사용하여이 함수를 "적합"하려면 R과 C ++가 혼합 된 자체 언어를 사용하여 모델을 정의해야합니다. 간단한 모델은 다음과 같습니다.

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

희망적으로 OK를 읽습니다. data모델을 샘플링 할 때 예상되는 데이터를 정의하고 parameters샘플링 된 것을 model정의하며 우도 함수 를 정의 하는 블록이 있습니다. Stan에게 모델을 "컴파일"하라고 지시하는 데 약간의 시간이 소요되며 일부 데이터를 사용하여 모델에서 샘플링 할 수 있습니다. 예를 들면 다음과 같습니다.

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 피팅을 인쇄하면 멋진 R 스타일 매개 변수 요약이 제공되는 동안 멋진 진단 플롯을 쉽게 만들 수 있습니다.

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

표준 편차가 크면 beta데이터가 실제로이 매개 변수에 대한 많은 정보를 제공하지 않는다고합니다. 또한 모델 적합치에 10 자리 이상의 유효 숫자를 제공하는 답변 중 일부는 다소 과장되어 있습니다.

일부 답변은 각각의 바이러스가 자신의 매개 변수를해야 할 수도 있다는 지적 때문에 나는 할 수 있도록 모델을 확장 alpha하고 beta"바이러스"에 따라 다를 수 있습니다. 그것은 모두 조금 어리석지 만 두 바이러스는 거의 다른 alpha값을 가지고 있습니다 (즉, 동일한 적용 범위에 대해 더 많은 사본 / μL의 RRAV가 필요합니다).

데이터 및 MC 샘플 플롯

데이터는 이전과 동일하지만 40 개의 후부 샘플에 대해 곡선을 그렸습니다. 동일한 경사를 따라 더 높은 복사 카운트가 필요하거나 더 가파른 경사와 유사한 복사 카운트를 가질 수 UMAV있지만 비교적 잘 결정된 것처럼 보입니다 RRAV. 대부분의 사후 질량은 더 많은 사본 수를 필요로하지만이 불확실성은 다른 것을 찾는 다른 답변의 차이점을 설명 할 수 있습니다.

나는 주로 Stan에 대한 지식을 향상시키기 위해 이것을 연습으로 사용했으며, 누군가 이것을 관심 이 있거나 복제하고 싶을 때 Jupyter 노트북을 여기 에 넣었습니다 .


14

(아래 의견을 고려하여 편집했습니다. 유용한 정보를 제공하는 @BenBolker & @WeiwenNg에게 감사드립니다.)

분수 로지스틱 회귀 분석을 데이터에 적합시킵니다. 0에서 100 % 사이의 범위에 속하는 백분율 데이터에 적합하며 많은 생물학 분야에서 이론적으로 잘 맞습니다.

프로그램은 데이터의 범위가 0과 1 사이 인 경우가 많기 때문에 모든 값을 100으로 나눠야 할 수도 있습니다. Ben Bolker가 권장하는 것처럼 이항 분포의 분산에 대한 엄격한 가정으로 인한 가능한 문제를 해결하려면 a를 사용하십시오. 대신 유사 분포 분포.

관심있는 바이러스가 2 개 있고 다른 패턴을 보일 수 있다는 등의 코드를 기반으로 몇 가지 가정을했습니다 (예 : 바이러스 유형과 사본 수 사이에 상호 작용이있을 수 있음).

먼저 모델이 적합합니다.

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- 값을 신뢰하면 두 바이러스가 의미가 다르다는 결과가 나오지 않습니다. 아래의 @NickCox의 결과와 달리, 우리는 다른 방법을 사용했습니다. 나는 30 개의 데이터 포인트로 어느 쪽이든 확신하지 못했습니다.

둘째, 음모 :

출력을 직접 시각화하는 방법을 코딩하는 것은 어렵지 않지만 대부분의 작업을 수행하는 ggPredict 패키지가있는 것으로 보입니다 (보증 할 수는 없지만 직접 시도하지는 않았습니다). 코드는 다음과 같습니다.

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

업데이트 : 더 이상 코드 또는 ggPredict 기능을 더 일반적으로 권장하지 않습니다. 그것을 시도한 후에 나는 플롯 된 포인트가 입력 데이터를 정확하게 반영하지 않지만 기괴한 이유로 변경됩니다 (플롯 된 포인트 중 일부는 1 이상 0 이하 임). 더 많은 작업이지만 직접 코딩하는 것이 좋습니다.


7
나는이 대답을 보증하지만, 명확히하기를 원한다 : 나는이 부분적인 로지스틱 회귀 분석이라고 부른다. 나는이 용어가 더 널리 인식 될 것이라고 생각한다. 대부분의 사람들이 "로지스틱 회귀"를들을 때, 나는 0/1 의존 변수를 생각합니다. 이 명명법을 다루는 좋은 Stackexchange 답변이 여기 있습니다 : stats.stackexchange.com/questions/216122/…
Weiwen Ng

2
@teaelleceecee 당신은 분명히 커버리지를 100으로 나누어야합니다.
닉 콕스

4
family=quasibinomial()경고 (및 너무 엄격한 분산 가정의 근본적인 문제)를 피하기 위해 사용 합니다. 다른 문제에 대해서는 @mkt의 조언을 받아보십시오.
벤 볼커

2
이것은 효과가있을 수 있지만 실제로 데이터가 실제로 해당 기능을 따라야하는 기능 을 피팅 하기 전에 전제를 가져야한다고 사람들에게 경고하고 싶습니다 . 그렇지 않으면 피팅 기능을 선택할 때 거의 무작위로 촬영하고 있으며 결과에 속지 않을 수 있습니다.
Carl Witthoft

6
@CarlWitthoft 우리는 설교를 듣지만 봉사 밖에서 죄인입니다. 다른 어떤 전제로 인해 다른 의견에서 헤비 사이드 기능을 제안하게 되었습니까? 여기서 생물학은 예리한 임계 값에서의 전이와 유사하지 않습니다. 내가 이해하는 연구의 사실은 공식 이론이 데이터보다 약하다는 것입니다. 나는 동의한다 : 사람들이 걸음 기능이 의미가 있다고 생각한다면, 그것들은 하나에 적합해야한다.
Nick Cox

11

이것은 @mkt와 다른 답변은 아니지만 특히 그래프는 주석에 맞지 않습니다. 먼저 Stata의 물류 곡선을 (예측자를 기록한 후) 모든 데이터에 맞추고이 그래프를 얻습니다.

여기에 이미지 설명을 입력하십시오

방정식은

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

이제 지표 변수를 정의하는 가장 간단한 바이러스 시나리오에서 각 바이러스에 대해 곡선을 개별적으로 맞 춥니 다. Stata 스크립트는 다음과 같습니다.

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) 

이것은 작은 데이터 세트에서 열심히 추진하고 있지만 바이러스의 P- 값은 두 곡선을 함께 맞추는 데 도움이됩니다.

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

여기에 이미지 설명을 입력하십시오


3

시그 모이 드 기능을 사용해보십시오 . 로지스틱 곡선을 포함하여이 형태의 많은 공식이 있습니다. 쌍곡 탄젠트가 또 다른 인기있는 선택입니다.

줄거리가 주어지면 간단한 단계 함수도 배제 할 수 없습니다. 스텝 기능과 여러 시그 모이 드 사양을 구분할 수 없을 것 같습니다. 백분율이 50 % 범위에있는 관측치가 없으므로 간단한 단계 공식화는 더 복잡한 모델보다 더 나쁘지 않은 가장 parsimoinous 선택이 될 수 있습니다.


쌍곡 탄젠트가 시그 모이 드 함수, 즉 zz와 밀접한 관련이 있다는 점은 주목할 가치가 있습니다. . σ(x)=12(1+tanhx2)
JG

2
@JG "sigmoid"는 내가 생각하는 한 S- 커브에 대한 일반적인 용어이지만, 당신은 S 자형의 두 사양 사이의 링크를 가리키는 것이
옳다

2

다음은 CA Holstein, M. Griffin, J. Hong, PD Sampson,“바이오 분석 의 검출 한계를 결정하고 비교하기위한 통계적 방법”에 따른 방정식을 사용하여 구속 및 구속되지 않은 4PL (4 모수 로지스틱) 적합입니다. . 화학 87 (2015) 9795-9801. 4PL 방정식은 두 그림 모두에 표시되며 매개 변수의 의미는 다음과 같습니다. a = 하단 점근선, b = 기울기 계수, c = 변곡점 및 d = 상단 점근선.

그림 1은 a를 0 %로 제한하고 d를 100 %로 제한합니다.

그림 1 제약 된 a & d

그림 2는 4PL 방정식에서 4 개의 매개 변수에 대한 제약이 없습니다.

그림 2 제약 없음

이것은 재미있었습니다. 나는 생물학적 인 것을 아는 척하지 않으며 그것이 어떻게 해결되는지 보는 것은 흥미로울 것입니다!


고맙습니다. 정말 도움이됩니다. 궁금한 점이 MATLAB에서 fit 함수를 사용하여이 작업을 수행 했습니까?
teaelleceecee

1
그림에 표시된 사용자 정의 사용자 기능으로 Igor Pro를 사용했습니다. 나는 1988 년부터 Igor Pro와 그 이전 모델 (Igor)을 사용해 왔지만 Origin Pro와 매우 저렴한 Kaleidagraph와 같은 다른 프로그램들도 곡선 맞춤을 할 수 있습니다. 그리고 Matlab에 대한 R 및 (아마도?) 액세스 권한이있는 것으로 보입니다. 매우 능숙하다는 것을 제외하고는 아무것도 알지 못합니다. 이것으로 성공을 거두었고 다음에 감독자와 이야기 할 때 좋은 소식을 얻길 바랍니다. 또한 데이터를 게시 해 주셔서 감사합니다!
Ed V

2

산점도에서 데이터를 추출했으며 방정식 검색에서 "y = a / (1.0 + b * exp (-1.0 * c * x))"와 같이 3 모수 로지스틱 유형 방정식이 나타났습니다. x "는 플롯 당 로그베이스 10입니다. 추출 된 데이터의 경우 적합치가 a = 9.0005947126706630E + 01, b = 1.2831794858584102E + 07, c = 6.6483431489473155E + 00이며, (log 10 x) 원본 데이터에 대한 피팅은 맞는 결과가 될 것입니다. 초기 값을 초기 모수 추정값으로 사용한 원래 데이터. 내 매개 변수 값은 추출 된 데이터에서 R- 제곱 = 0.983 및 RMSE = 5.625를 산출합니다.

음모

편집 : 이제 실제 데이터를 포함하도록 질문이 편집되었으므로 위의 3 모수 방정식과 초기 모수 추정치를 사용하는 플롯이 있습니다.

plot2


데이터 추출에 오류가있는 것 같습니다. 음수 백분율 값이 많습니다. 또한 최대 값은 원래 그림에서와 같이 100 % 대신 약 90 %입니다. 어떤 이유로 모든 것을 약 10 % 오프셋 할 수 있습니다.
mkt-복원 모니카

Meh-이것은 반 수동으로 추출 된 데이터이며 원본 데이터가 필요합니다. 이것은 일반적으로 방정식 검색에 충분하며 물론 최종 결과에는 적합하지 않습니다. 따라서 원래 데이터의 초기 모수 추정값으로 추출-오-피트 모수 값을 사용한다고 말했습니다.
제임스 필립스

실제 데이터가 이제 게시물에 추가되었으므로 업데이트 된 데이터를 사용하여이 답변을 업데이트했습니다.
제임스 필립스

다시 말하면 : 예를 들어 Heaviside 함수를 적용하면 비슷한 오류 값이 생성 될 수 있습니다.
Carl Witthoft

1
@JamesPhillips 나는 그렇게하려고 시도 할 것입니다 (Heaviside-> errorbars 또는 이와 동등한 것)
Carl Witthoft

2

헤비 사이드에 대해 큰 입을 열어야했기 때문에 결과는 다음과 같습니다. 전환 지점을 log10 (viruscopies) = 2.5로 설정했습니다. 그런 다음 데이터 세트의 두 반쪽의 표준 편차를 계산했습니다. 즉, Heaviside는 양쪽의 데이터가 모두 도함수 = 0이라고 가정합니다.

RH 측 표준 편차 = 4.76
LH 측 표준 편차 = 7.72

각 배치에 15 개의 샘플이 있음을 알 수 있으므로 전체 표준 편차는 평균 또는 6.24입니다.

다른 답변에서 인용 된 "RMSE"가 전체적으로 "RMS 오류"라고 가정하면, Heaviside 기능은 최소한 "Z- 곡선"(사진 응답 명명법에서 차용)에 적합 할뿐만 아니라 그보다 더 좋지는 않은 것처럼 보입니다. 여기.

편집하다

쓸모없는 그래프이지만 주석으로 요청되었습니다.

헤비 사이드 곡선 맞춤


다른 답변에서 수행 한 것과 유사하게 모델과 산점도를 게시하십시오. 이 결과를보고 비교하는 것이 가장 궁금합니다. 비교를 위해 RMSE 및 R- 제곱 값도 추가하십시오. 나는 개인적으로 헤비 사이드 기능을 사용한 적이 없으며 이것이 매우 흥미 롭습니다.
James Phillips

R2

내 의미는 그 답변과 직접 비교하기 위해 다른 답변에서 만든 것과 비슷한 줄거리를 만드는 것이 었습니다.
제임스 필립스

2
@JamesPhillips 당신은 두 가지 소원이 남아 있습니다. 현명하게 선택 :-)
Carl Witthoft

줄거리 감사합니다. 다른 답변의 모든 그림에서 플롯 된 방정식은 오른쪽 상단의 데이터 곡선 모양을 따릅니다. 이것은 Heaviside 함수가 다른 답변에 게시 된 방정식뿐만 아니라 Heaviside 함수가 수행 할 것이라는 귀하의 주장과 시각적으로 상충되는 것으로 보입니다. 이 지역의 데이터 중 일부에 해당하는 통계에 대해서는 더 나쁜 값을 얻을 수 있습니다.
제임스 필립스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.