मुझे अपने प्रतिशत डेटा में किस तरह का वक्र (या मॉडल) फिट करना चाहिए?


15

मैं एक आंकड़ा बनाने की कोशिश कर रहा हूं जो वायरल प्रतियां और जीनोम कवरेज (जीसीसी) के बीच के संबंध को दर्शाता है। यह मेरा डेटा जैसा दिखता है:

वायरल लोड बनाम जीसीसी

सबसे पहले, मैंने सिर्फ एक रेखीय प्रतिगमन की साजिश रची, लेकिन मेरे पर्यवेक्षकों ने मुझे बताया कि वह गलत था, और एक सिग्मोइडल वक्र की कोशिश करने के लिए। इसलिए मैंने 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))

वायरल लोड बनाम GCC - geom_smooth

हालांकि, मेरे पर्यवेक्षकों का कहना है कि यह गलत भी है क्योंकि घटता यह दिखता है कि जीसीसी 100% से अधिक हो सकता है, जो यह नहीं कर सकता।

मेरा सवाल है: वायरस कॉपी और जीसीसी के बीच संबंध दिखाने का सबसे अच्छा तरीका क्या है? मैं यह स्पष्ट करना चाहता हूं कि ए) कम वायरस प्रतियां = कम जीसीसी, और वह बी) वायरस की एक निश्चित मात्रा के बाद जीसीसी पठारों की नकल करता है।

मैंने बहुत सारे अलग-अलग तरीकों पर शोध किया है - 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) टुकड़ा-वार (रैखिक) मॉडल।
14:15 बजे उपयोगकर्ता 158565

3
अपने मूल ggplot कोड में method.args=list(family=quasibinomial))तर्कों को जोड़ने का प्रयास geom_smooth()करें।
बेन बोलकर

4
PS मैं आपको प्रोत्साहित करूंगा कि आप मानक त्रुटियों को दबाएं se=FALSE। हमेशा लोगों को यह दिखाने के लिए अच्छा है कि वास्तव में अनिश्चितता कितनी बड़ी है ...
बेन बोल्कर

2
आपके पास किसी भी प्राधिकरण के साथ दावा करने के लिए संक्रमण क्षेत्र में पर्याप्त डेटा बिंदु नहीं हैं कि एक चिकनी वक्र है। आप जितनी आसानी से हमें दिखा रहे हैं, मैं एक हीविसाइड फंक्शन को आसानी से फिट कर सकता हूं।
कार्ल विटथॉफ्ट

जवाबों:


6

इसके बारे में जाने का एक और तरीका एक बायेसियन फॉर्मूलेशन का उपयोग करना होगा, यह थोड़ा भारी हो सकता है, लेकिन इसे शुरू करना बहुत मुश्किल होता है, क्योंकि यह आपकी समस्या की बारीकियों को व्यक्त करने के साथ-साथ "अनिश्चितता" के बेहतर विचारों को व्यक्त करने में आसान बनाता है। है

स्टेन एक मोंटे कार्लो नमूना है, जो प्रोग्रामेटिक इंटरफ़ेस का उपयोग करने के लिए अपेक्षाकृत आसान है, पुस्तकालय आर और अन्य के लिए उपलब्ध हैं, लेकिन मैं यहां पायथन का उपयोग कर रहा हूं

हम हर किसी की तरह एक सिग्मॉइड का उपयोग करते हैं: इसमें जैव रासायनिक प्रेरणाएं हैं और साथ ही साथ काम करने के लिए गणितीय रूप से बहुत सुविधाजनक है। इस कार्य के लिए एक अच्छा पैरामीटर है:

import numpy as np

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

जहां alphaसिग्मॉइड वक्र के मध्य बिंदु को परिभाषित करता है (यानी जहां यह 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 अच्छे लगते हैं और अन्य उत्तरों की तरह एक प्लॉट देते हैं:

प्लॉट डेटा और मैनुअल फिट

स्टेन का उपयोग करके इस फ़ंक्शन को "फिट" करने के लिए हमें अपने मॉडल को अपनी भाषा का उपयोग करके परिभाषित करना होगा जो कि आर और सी ++ के बीच मिश्रण है। एक साधारण मॉडल कुछ इस तरह होगा:

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

जो उम्मीद है कि ठीक है पढ़ता है। हमारे पास एक dataब्लॉक है जो उस डेटा को परिभाषित करता है जिसकी हम अपेक्षा करते हैं जब हम मॉडल का नमूना लेते हैं, तो parametersउन चीजों को परिभाषित करते हैं जो नमूना हैं, और modelसंभावना फ़ंक्शन को परिभाषित करता है। आप स्टैन को मॉडल को "संकलित" करने के लिए कहते हैं, जिसमें कुछ समय लगता है, और फिर आप कुछ डेटा के साथ इसका नमूना ले सकते हैं। उदाहरण के लिए:

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 अच्छा डायग्नोस्टिक प्लॉट बनाना आसान है, जबकि फिट को प्रिंट करना आपको एक अच्छा आर-स्टाइल पैरामीटर सारांश देता है:

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मान रखते हैं (यानी आपको एक ही कवरेज के लिए RRAV की अधिक प्रतियां / μL की आवश्यकता होती है) और यह दिखाने वाला एक प्लॉट है:

डेटा और एमसी नमूनों की साजिश

डेटा पहले जैसा है, लेकिन मैंने पीछे के 40 नमूनों के लिए एक वक्र तैयार किया है। UMAVअपेक्षाकृत अच्छी तरह से निर्धारित लगता है, जबकिRRAV एक ही ढलान का पालन कर सकता है और एक उच्च प्रतिलिपि गणना की आवश्यकता होती है, या एक स्टेटर ढलान और एक समान प्रतिलिपि गणना होती है। अधिकांश पीछे का द्रव्यमान उच्च प्रतिलिपि गणना की आवश्यकता पर है, लेकिन यह अनिश्चितता अन्य बातों के कुछ अंतरों की व्याख्या कर सकती है जो अलग-अलग चीजों को ढूंढ रही हैं

मैं ज्यादातर स्टेन की मेरी जानकारी में सुधार करने के लिए एक अभ्यास के रूप में इस का जवाब दे इस्तेमाल किया, और मैं इस का एक Jupyter नोटबुक रख दिया है यहाँ मामले में किसी को भी रुचि रखता है / इस को दोहराने के लिए चाहता है।


14

(नीचे टिप्पणी में संपादित किया गया। सहायक इनपुट के लिए @BenBolker और @WeiwenNg का धन्यवाद।)

डेटा के लिए एक आंशिक लॉजिस्टिक प्रतिगमन को फिट करें। यह प्रतिशत डेटा के अनुकूल है जो कि 0 और 100% के बीच है और जीव विज्ञान के कई क्षेत्रों में सैद्धांतिक रूप से उचित है।

ध्यान दें कि आपको इसे फिट करने के लिए सभी मानों को 100 से विभाजित करना पड़ सकता है, क्योंकि प्रोग्राम अक्सर 0 और 1. के बीच डेटा की सीमा की अपेक्षा करते हैं और जैसा कि बेन बोल्कर ने सलाह दी है, कि द्विपद वितरण की सख्त मान्यताओं के कारण विचरण के बारे में संभावित समस्याओं का समाधान करें, उपयोग करें इसके बजाय quasibinomial वितरण।

मैंने आपके कोड के आधार पर कुछ धारणाएं बनाई हैं, जैसे कि आपके द्वारा रुचि रखने वाले 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

यदि आप पी-मानों पर भरोसा करते हैं, तो आउटपुट सुझाव नहीं देता है कि दो वायरस अलग-अलग हैं। यह नीचे @ NickCox के परिणामों के विपरीत है, हालांकि हमने विभिन्न तरीकों का इस्तेमाल किया है। मैं 30 डेटा बिंदुओं के साथ किसी भी तरह से आश्वस्त नहीं हूं।

दूसरा, प्लॉटिंग:

अपने आप को आउटपुट की कल्पना करने का एक तरीका कोड करना मुश्किल नहीं है, लेकिन एक ggPredict पैकेज प्रतीत होता है जो आपके लिए अधिकांश काम करेगा (इसके लिए वाउच नहीं कर सकता है, मैंने इसे खुद करने की कोशिश नहीं की है)। कोड कुछ इस तरह दिखाई देगा:

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

अद्यतन: मैं अब कोड या ggPredict फ़ंक्शन को अधिक सामान्य रूप से अनुशंसित नहीं करता हूं। इसे आज़माने के बाद मैंने पाया कि प्लॉट किए गए बिंदु बिल्कुल इनपुट डेटा को प्रतिबिंबित नहीं करते हैं, लेकिन इसके बदले कुछ विचित्र कारण (कुछ प्लॉट किए गए बिंदु 1 से ऊपर और 0 से नीचे) थे। इसलिए मैं इसे खुद को कोड करने की सलाह देता हूं, हालांकि यह अधिक काम है।


7
मैं इस उत्तर का समर्थन करता हूं, लेकिन मैं स्पष्टीकरण का एक बिंदु बनाना चाहता हूं: मैं इस भिन्नात्मक तर्कवादी प्रतिगमन को कहूंगा। मुझे लगता है कि यह शब्द अधिक व्यापक रूप से मान्यता प्राप्त होगा। जब अधिकांश लोग "लॉजिस्टिक रिग्रेशन" सुनते हैं, तो मुझे यकीन है कि वे एक 0/1 निर्भर चर के बारे में सोचते हैं। इस नामकरण से निपटने का एक अच्छा स्टैकएक्सचेंज उत्तर यहां दिया गया है: आंकड़े
एनजी

2
@teaelleceecee आपको स्पष्ट रूप से कवरेज को पहले 100 से विभाजित करना होगा।
निक कॉक्स

4
family=quasibinomial()चेतावनी से बचने के लिए उपयोग करें (और बहुत सख्त विचरण मान्यताओं के साथ अंतर्निहित समस्याएं)। अन्य समस्या पर @ mkt की सलाह लें।
बेन बोलकर

2
यह काम कर सकता है, लेकिन मैं लोगों को चेतावनी देना चाहूंगा कि आपके पास एक फ़ंक्शन को फिट करने से पहले एक आधार होना चाहिए कि वास्तव में आपके डेटा को इस फ़ंक्शन का पालन करना चाहिए । अन्यथा जब आप एक फिटिंग फंक्शन चुनते हैं, तो आप यादृच्छिक रूप से बहुत अधिक शूटिंग करते हैं, और आपको परिणामों से मूर्ख बनाया जा सकता है।
कार्ल विटथॉफ्ट जुएल

6
@CarlWitthoft हम उपदेश सुनते हैं लेकिन सेवा के बाहर पापी हैं। अन्य टिप्पणियों में हेडविड फंक्शन का सुझाव देने के लिए आपको किस पूर्व आधार पर ले जाना चाहिए? यहां जीव विज्ञान एक तेज दहलीज पर संक्रमण जैसा नहीं है। जैसा कि मैं समझता हूं कि अनुसंधान का तथ्य यह है कि औपचारिक सिद्धांत आंकड़ों की तुलना में कमजोर है। मैं सहमत हूं: अगर लोगों को लगता है कि एक कदम समारोह समझ में आता है, तो उन्हें एक फिट होना चाहिए।
निक कॉक्स

11

यह @mkt से अलग उत्तर नहीं है, लेकिन विशेष रूप से रेखांकन एक टिप्पणी में फिट नहीं होगा। मैं पहली बार सभी डेटा में Stata (भविष्यवक्ता को लॉग करने के बाद) में एक तार्किक वक्र फिट करता हूं और यह ग्राफ प्राप्त करता हूं

यहाँ छवि विवरण दर्ज करें

एक समीकरण है

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

अब मैं एक संकेतक चर को परिभाषित करने वाले वायरस के सबसे सरल परिदृश्य में प्रत्येक वायरस के लिए अलग से घटता फिट करता हूं। यहाँ रिकॉर्ड के लिए एक स्टैटा स्क्रिप्ट है:

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) 

यह एक छोटे डेटासेट पर कड़ी मेहनत कर रहा है, लेकिन वायरस के लिए पी-वैल्यू संयुक्त रूप से दो घटता फिटिंग का समर्थन करता है।

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% सीमा में है, इसलिए सरल कदम तैयार करना सबसे अधिक पसंद किया जा सकता है जो अधिक जटिल मॉडल से बदतर नहीं है


σ(एक्स)=12(1+tanhएक्स2)

2
@ जेजी "सिग्मॉइड" एक एस-वक्र के लिए एक सामान्य शब्द है, जहां तक ​​मेरा संबंध है, लेकिन आप सिग्मोइड के दो विनिर्देशों के बीच एक लिंक की ओर संकेत करने के लिए सही हैं
अक्षल

2

यहाँ 4PL (4 पैरामीटर लॉजिस्टिक) फिट बैठता है, दोनों विवश और असंबंधित, CA होल्सटीन, एम। ग्रिफिन, जे। होंग, पीडी सैम्पसन के अनुसार समीकरण के साथ, "बायोएसेस के पता लगाने की सीमा निर्धारित करने और तुलना करने के लिए सांख्यिकीय विधि", गुदा । रसायन। 87 (2015) 9795-9801 4PL समीकरण दोनों आंकड़ों में दिखाया गया है और पैरामीटर अर्थ इस प्रकार हैं: a = लोअर एसिम्प्टोट, बी = स्लोप फैक्टर, सी = इन्फ्लेक्शन पॉइंट, और डी = अपर एसिम्पोट।

चित्रा 1 बराबर 0% और 100% बराबर d को रोकता है:

अंजीर। 1 विवश और घ

चित्रा 2 में 4PL समीकरण में 4 मापदंडों पर कोई बाधा नहीं है:

अंजीर। 2 कोई बाधा नहीं

यह मजेदार था, मैं कुछ भी जैविक जानने का ढोंग नहीं करता और यह देखना दिलचस्प होगा कि यह सब कैसे निपटता है!


धन्यवाद, यह वास्तव में मददगार है। बस सोच रहा था, क्या आपने MATLAB में फिट फ़ंक्शन के साथ ऐसा किया था?
टेलेसेसीस

1
मैंने आंकड़ों में दिखाए गए उपयोगकर्ता-परिभाषित उपयोगकर्ता फ़ंक्शन के साथ इगोर प्रो का उपयोग किया। मैंने 1988 से इगोर प्रो और उसके पूर्ववर्ती (इगोर) का उपयोग किया है, लेकिन बहुत सारे अन्य कार्यक्रम वक्र फिटिंग, जैसे, ओरिजिनल प्रो और बहुत सस्ती बहुरूपदर्शक कर सकते हैं। और ऐसा प्रतीत होता है कि आपके पास आर और (संभवतः?) मैटलैब तक पहुंच है, जिनमें से न तो मुझे इस बारे में कुछ भी पता है कि वे बेहद सक्षम हैं। इसके साथ सबसे अच्छी सफलता और मुझे आशा है कि अगली बार जब आप पर्यवेक्षकों के साथ चीजों पर चर्चा करेंगे तो आपको अच्छी खबर मिलेगी! इसके अलावा, डेटा पोस्ट करने के लिए धन्यवाद!
एड वी।

2

मैंने आपके स्कैटरप्लॉट से डेटा निकाला, और मेरी समीकरण खोज ने एक अच्छे उम्मीदवार के रूप में 3-पैरामीटर लॉजिस्टिक प्रकार के समीकरण को बदल दिया: "y = a / (1.0 + b * exp (-1.0 * c * x))", जहां " x "आपके प्लॉट के अनुसार लॉग बेस 10 है। फिट किए गए पैरामीटर एक = 9.0005947126706630E + 01, b = 1.2831794858584102E + 07, और c = 6.6483431489473155E + 00 मेरे निकाले गए डेटा के लिए, (लॉग 10 x) मूल डेटा का एक समान परिणाम होना चाहिए यदि आप फिर से फिट होते हैं तो इसी तरह के परिणाम मिलेंगे। प्रारंभिक पैरामीटर अनुमानों के रूप में मेरे मूल्यों का उपयोग करते हुए मूल डेटा। मेरे पैरामीटर मान निकाले गए डेटा पर R-squared = 0.983 और RMSE = 5.625 उपज हैं।

भूखंड

संपादित करें: अब जब प्रश्न वास्तविक डेटा को शामिल करने के लिए संपादित किया गया है, तो यहां उपरोक्त 3-पैरामीटर समीकरण और प्रारंभिक पैरामीटर अनुमानों का उपयोग करके एक भूखंड है।

plot2


ऐसा लगता है कि आपके डेटा निष्कर्षण में कोई त्रुटि हुई है: आपके पास नकारात्मक प्रतिशत मानों का एक समूह है। इसके अलावा, मूल भूखंड की तरह आपके अधिकतम मूल्य 100% के बजाय लगभग 90% हैं। किसी कारण से आपको लगभग 10% की कमी हो सकती है।
mkt - मोनिका

मेह - यह अर्ध-मैन्युअल रूप से निकाला गया डेटा है, मूल डेटा की आवश्यकता है। यह आमतौर पर समीकरण खोजों के लिए पर्याप्त है, और निश्चित रूप से अंतिम परिणामों के लिए नहीं - यही कारण है कि मैंने मूल डेटा पर प्रारंभिक पैरामीटर अनुमानों के रूप में अपने एक्सट्रैक्ट-ओ-फिट पैरामीटर मानों का उपयोग करने के लिए कहा।
जेम्स फिलिप्स

कृपया ध्यान दें कि चूंकि अब पोस्ट में वास्तविक डेटा जोड़ा गया है, मैंने अपडेट किए गए डेटा का उपयोग करके इस उत्तर को अपडेट किया है।
जेम्स फिलिप्स

बस फिर से दोहराने के लिए: जैसे, एक हीविसाइड फ़ंक्शन का अनुप्रयोग, समान त्रुटि मान प्राप्त कर सकता है।
कार्ल विटथॉफ्ट

1
@JamesPhillips मैं ऐसा करने का प्रयास करूंगा (हीविसाइड ->
एररबार्स

2

चूंकि मुझे अपने बड़े मुंह को हीविसाइड के बारे में खोलना था, यहाँ परिणाम हैं। मैं log10 (viruscopies) = 2.5 में संक्रमण बिंदु सेट करता हूं। फिर मैंने डेटा सेट के दो हिस्सों के मानक विचलन की गणना की - अर्थात, हीविसाइड मान रहा है कि दोनों तरफ के डेटा में सभी डेरिवेटिव = 0 हैं।

आरएच साइड स्टैड देव = 4.76
एलएच साइड स्टैड देव = 7.72

चूंकि यह पता चलता है कि प्रत्येक बैच में 15 नमूने हैं, कुल मिलाकर std देव माध्य या 6.24 है।

अन्य उत्तरों में उद्धृत "RMSE" को "RMS त्रुटि" माना जाता है, कुल मिलाकर, हीविसाइड फ़ंक्शन कम से कम और साथ ही बेहतर प्रतीत होता है, यदि "Z- वक्र" से अधिकांश के लिए बेहतर है (फोटोग्राफिक प्रतिक्रिया नामकरण से उधार लिया गया) फिट बैठता है यहाँ।

संपादित करें

बेकार ग्राफ, लेकिन टिप्पणियों में अनुरोध:

हीविसाइड कर्व फिट


Woukd आप कृपया एक मॉडल पोस्ट करें और अन्य उत्तरों में क्या किया गया था? मैं इन परिणामों को देखने और तुलना करने के लिए सबसे अधिक उत्सुक हूं। तुलना के लिए कृपया RMSE और R-squared मान भी जोड़ें। मैंने व्यक्तिगत रूप से कभी भी हीविसाइड फ़ंक्शन का उपयोग नहीं किया है और यह बहुत दिलचस्प है।
जेम्स फिलिप्स

आर2

मेरा अर्थ उन उत्तरों के सीधे तुलना के उद्देश्य से, अन्य उत्तरों में बने लोगों के समान एक कथानक बनाना था।
जेम्स फिलिप्स

2
@JamesPhillips आपकी दो इच्छाएं बाकी हैं। बुद्धिमानी से चुनें :-)
कार्ल विटथॉफ्ट

साजिश के लिए धन्यवाद। मैं देखता हूं कि अन्य उत्तरों में सभी भूखंडों में, प्लॉट किए गए समीकरण शीर्ष दाईं ओर डेटा के घुमावदार आकार का अनुसरण करते हैं - आपका नहीं है, जैसा कि हीविसाइड फ़ंक्शन की प्रकृति है। यह नेत्रहीन आपके दावे का खंडन करता प्रतीत होता है कि हीविसाइड फ़ंक्शन अन्य उत्तरों में पोस्ट किए गए समीकरणों को भी करेगा - यही कारण है कि मैंने पहले आरएमएसई और आर-स्क्वेर्ड मूल्यों का अनुरोध किया था, मुझे संदेह था कि हेडसाइड फ़ंक्शन आकार का पालन नहीं करेगा। इस क्षेत्र में डेटा और उन फिट आँकड़ों के लिए बदतर मूल्यों का उत्पादन हो सकता है।
जेम्स फिलिप्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.