2012-06-19 5 views
6

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

दो घटता है, एक खुलासा के लिए और एक अप्रत्याशित आबादी के लिए। मॉडलों में से एक एक घातीय वितरण है, और मैं डेटा और इतने की तरह ग्राफ उत्पादित किया है:

intercept <- 5.00 
effect<- -0.500 
data<- data.frame(time=seq(0:180)-1) 
data$s_unexposed <- apply(data,1,function(row) exp(-(exp(-intercept))*row[1])) 
data$s_exposed <- apply(data,1,function(row) exp(-(exp(-(intercept+effect))*row[1]))) 

plot(data$time,data$s_unexposed, type="l", ylim=c(0,1) ,xaxt='n', 
    xlab="Days since Infection", ylab="Percent Surviving", lwd=2) 
axis(1, at=c(0, 20, 40, 60, 80, 100, 120, 140, 160, 180)) 
lines(data$time,data$s_exposed, col="red",lwd=2) 
legend("topright", c("ICU Patients", "Non-ICU Patients"), lwd=2, col=c("red","black")) 

कौन मुझे इस देता है: कभी

enter image description here

नहीं सुंदर ग्राफ, लेकिन मैं वास्तव में ggplot2 के चारों ओर अपने रास्ते को नहीं समझने के लिए पर्याप्त रूप से पता नहीं है। लेकिन सबसे महत्वपूर्ण बात यह है कि मेरे पास डेटा का दूसरा सेट है जो एक घातीय के बजाय लॉग सामान्य वितरण से आता है, और इसके लिए डेटा जेनरेट करने के मेरे प्रयास पूरी तरह विफल हो गए हैं - सामान्य वितरण और जैसे रखरखाव के लिए सीडीएफ का निगमन यह मेरे आर कौशल से परे है।

कोई भी मुझे सही दिशा में इंगित करने में सक्षम है, उसी संख्या का उपयोग करके, और 1 के पैमाने पैरामीटर?

+0

जब आप ओडीएस एसएएस का उपयोग करते हैं तो आम तौर पर बहुत अच्छे वक्र प्रदान करते हैं। एसएएस ग्राफ का उपयोग किए बिना एसएएस में अस्तित्व वक्र प्लॉट करने का कोई विकल्प नहीं है? यह हो सकता है कि एक डिफ़ॉल्ट ग्राफ है जो अच्छा लगेगा। –

+1

मेरी राय में, यह प्रश्न एसओ-सीवी ओवरलैप के भीतर है, लेकिन एसओ से सीवी के करीब है।यह एक प्रोग्रामिंग प्रश्न है, लेकिन इसे उत्तर देने के लिए कुछ * सांख्यिकीय विशेषज्ञता * की आवश्यकता है, और इस प्रकार सीवी के [सीएचक] (http://stats.stackexchange.com/faq) के अनुसार सीवी पर निर्भर करता है। – jthetzel

+0

@ माइकल चेर्निक जहां तक ​​मैं कह सकता हूं, लाइफरेग एक * खतरे * साजिश और कुछ नैदानिक ​​भूखंडों का उत्पादन कर सकता है, लेकिन एक जीवित कार्य नहीं। निष्पक्ष होने के लिए, अधिकांश लोग सामान्य रूप से उत्तरजीविता कार्यों का उत्पादन करने के लिए लाइफस्टेस्ट की तलाश में हैं - लेकिन मैं इस विशेष मामले में नहीं हूं। – Fomite

उत्तर

7

लॉग-सामान्य मॉडल के लिए समय टी पर उत्तरजीविता समारोह आर में 1 - plnorm() के साथ प्रदर्शित किया जा सकता है, जहां plnorm() लॉग-सामान्य संचयी वितरण फ़ंक्शन है। इसे समझने के लिए, हम पहले सुविधा के लिए एक समारोह में अपने भूखंड डाल देता हूँ:

## Function to plot aft data 
plot.aft <- function(x, legend = c("ICU Patients", "Non-ICU Patients"), 
    xlab = "Days since Infection", ylab="Percent Surviving", lwd = 2, 
    col = c("red", "black"), at = c(0, 20, 40, 60, 80, 100, 120, 140, 160, 180), 
     ...) 
{ 
    plot(x[, 1], x[, 2], type = "l", ylim = c(0, 1), xaxt = "n", 
      xlab = xlab, ylab = ylab, col = col[2], lwd = 2, ...) 
    axis(1, at = at) 
    lines(x[, 1], x[, 3], col = col[1], lwd=2) 
    legend("topright", legend = legend, lwd = lwd, col = col) 
} 

इसके बाद, हम गुणांक, चर, और मॉडल भी निर्दिष्ट करते हैं, और फिर घातीय के लिए जीवित रहने की संभावनाओं पैदा करते हैं और लॉग-सामान्य मॉडल:

## Specify coefficients, variables, and linear models 
beta0 <- 5.00 
beta1 <- -0.500 
icu <- c(0, 1) 
t <- seq(0, 180) 
linmod <- beta0 + (beta1 * icu) 
names(linmod) <- c("unexposed", "exposed") 

## Generate s(t) from exponential AFT model 
s0.exp <- dexp(exp(-linmod["unexposed"]) * t) 
s1.exp <- dexp(exp(-linmod["exposed"]) * t) 

## Generate s(t) from lognormal AFT model 
s0.lnorm <- 1 - plnorm(t, meanlog = linmod["unexposed"]) 
s1.lnorm <- 1 - plnorm(t, meanlog = linmod["exposed"]) 

अंत में, हम प्लॉट कर सकते हैं जीवित रहने की संभावनाओं:

## Plot survival 
plot.aft(data.frame(t, s0.exp, s1.exp), main = "Exponential model") 
plot.aft(data.frame(t, s0.lnorm, s1.lnorm), main = "Log-normal model") 

और जिसके परिणामस्वरूप आंकड़े:

Exponential model

Log-normal model

ध्यान दें कि

plnorm(t, meanlog = linmod["exposed"]) 

pnorm((log(t) - linmod["exposed"])/1) 

जो लॉग-सामान्य अस्तित्व समारोह के लिए विहित समीकरण में Φ है के रूप में ही है: एस (टी) = 1 - Φ ((एलएन (टी) - μ)/σ)

जैसा कि मुझे यकीन है कि आप जानते हैं, ऐसे कई आर पैकेज हैं जो survival task view में सूचीबद्ध अनुसार, बाएं, दाएं, या अंतराल सेंसरिंग के साथ त्वरित विफलता समय मॉडल को संभाल सकते हैं, यदि आप आर के लिए प्राथमिकता विकसित करते हैं एसएएस पर

+2

@jhetzel मैंने एसएएस पर आर के लिए प्राथमिकता विकसित की है, लेकिन मैं कुछ और जटिल परियोजना का चरण 1 है, और मैं एसएएस को बेहतर जानता हूं। अज्ञात विधियों और अज्ञात कोड के साथ दुर्घटनाओं के लिए संभावित क्षमता को कम करने की कोशिश कर रहा है। सूची में यह सब आर को अनुवाद कर रहा है ... – Fomite

संबंधित मुद्दे