विषमलैंगिकता के साथ रैखिक प्रतिगमन का अनुकरण करें


9

मैं एक डेटासेट का अनुकरण करने की कोशिश कर रहा हूं जो मेरे पास मौजूद डेटा से मेल खाता है, लेकिन यह अनिश्चित है कि मूल डेटा में त्रुटियों का अनुमान कैसे लगाया जाए। अनुभवजन्य डेटा में विषमलैंगिकता शामिल है, लेकिन मुझे इसे बदलने में कोई दिलचस्पी नहीं है, बल्कि अनुभवजन्य डेटा के सिमुलेशन को दोहराने के लिए एक त्रुटि शब्द के साथ एक रैखिक मॉडल का उपयोग करना है।

उदाहरण के लिए, मान लें कि मेरे पास कुछ अनुभवजन्य डेटासेट और एक मॉडल है:

n=rep(1:100,2)
a=0
b = 1
sigma2 = n^1.3
eps = rnorm(n,mean=0,sd=sqrt(sigma2))
y=a+b*n + eps
mod <- lm(y ~ n)

का उपयोग करके plot(n,y)हम निम्नलिखित प्राप्त करते हैं। यहाँ छवि विवरण दर्ज करें

हालांकि, अगर मैं डेटा को अनुकरण करने की कोशिश करता हूं, तो simulate(mod), विषमता को हटा दिया जाता है और मॉडल द्वारा कब्जा नहीं किया जाता है।

मैं एक सामान्यीकृत कम से कम वर्ग मॉडल का उपयोग कर सकता हूं

VMat <- varFixed(~n)
mod2 = gls(y ~ n, weights = VMat)

यह एआईसी के आधार पर एक बेहतर मॉडल फिट प्रदान करता है, लेकिन मुझे नहीं पता कि आउटपुट का उपयोग करके डेटा का अनुकरण कैसे किया जाए।

मेरा सवाल है, मैं एक मॉडल कैसे बनाऊं जो मुझे मूल, अनुभवजन्य डेटा (एन और वाई) से मिलान करने के लिए डेटा का अनुकरण करने की अनुमति देगा। विशेष रूप से, मुझे किसी मॉडल का उपयोग करके sigma2, त्रुटि का अनुमान लगाने का एक तरीका चाहिए?


1
जब तक कि यह स्पष्ट रूप से ऐसा करने की कोशिश नहीं करता है, तो रैखिक मॉडल सशर्त विषमलैंगिकता पर कब्जा नहीं करेगा। मानक अर्थमितीय तकनीकें हेट्रोसेकेडसिटी के लिए मानकों पर मानक त्रुटियों को समायोजित करती हैं, लेकिन वे इसे स्पष्ट रूप से मॉडल नहीं करती हैं।
जेनेरिक_युसर

आप सही हे। मैं विषमता को पकड़ने के लिए एक रैखिक मॉडल का उपयोग करने की कोशिश कर रहा हूं। मुझे लगता है कि मुझे एक सामान्यीकृत न्यूनतम वर्ग मॉडल का उपयोग करना चाहिए। यदि कोई अन्य सिफारिशें हैं, तो मैं उनकी कोशिश करूंगा।
14:44 पर user44796

आपके कोड में कोई त्रुटि नहीं है, आप का उपयोग करना होगा `lm (y ~ n)`
kjetil b halvorsen

1
मुझे आपका प्रश्न समझ में नहीं आ रहा है, क्योंकि आपका कोड ठीक वही है जो आप उसके शीर्षक में पूछ रहे हैं: यह विषमलैंगिक त्रुटियों के साथ एक रैखिक प्रतिगमन का अनुकरण करता है। क्या आप विधर्मियों के लिए किसी प्रकार के मॉडल का अनुमान लगाने के तरीके पूछ रहे हैं? यदि ऐसा है, तो आपको एक मॉडल निर्दिष्ट करने की आवश्यकता है!
whuber

उम्मीद है कि मैंने अपने प्रश्न को संपादन के साथ स्पष्ट कर दिया है। उपरोक्त प्रश्न में, n और y अनुभवजन्य डेटा का प्रतिनिधित्व करते हैं। मैं डेटा के लिए एक मॉडल फिट करना चाहता हूं और फिर मॉडल का उपयोग नकली डेटा बनाने के लिए करता हूं जो मूल डेटा के माध्य और अवशिष्ट से मेल खाता है।
15:44 पर user44796

जवाबों:


9

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

set.seed(568)  # this makes the example exactly reproducible

n      = rep(1:100,2)
a      = 0
b      = 1
sigma2 = n^1.3
eps    = rnorm(n,mean=0,sd=sqrt(sigma2))
y      = a+b*n + eps
mod    = lm(y ~ n)
res    = residuals(mod)

windows()
  layout(matrix(1:2, nrow=2))
  plot(n,y)
  abline(coef(mod), col="red")
  plot(mod, which=3)

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

ध्यान दें कि Rकी ? Plot.lm आप एक साजिश (सीएफ, दे देंगे यहाँ बच के शुद्ध मान का वर्गमूल, काम आते हुए एक lowess फिट, जो सिर्फ तुम क्या जरूरत है साथ आच्छादित की)। (यदि आपके पास कई सहसंयोजक हैं, तो आप इसका आकलन प्रत्येक कोवरिएट के खिलाफ अलग-अलग करना चाह सकते हैं।) एक वक्र का थोड़ा सा संकेत है, लेकिन यह एक सीधी रेखा की तरह दिखता है जो डेटा को फिटिंग करने का एक अच्छा काम करता है। तो चलिए उस मॉडल को स्पष्ट रूप से फिट करते हैं:

res.mod = lm(sqrt(abs(res))~fitted(mod))
summary(res.mod)
# Call:
# lm(formula = sqrt(abs(res)) ~ fitted(mod))
# 
# Residuals:
#     Min      1Q  Median      3Q     Max 
# -3.3912 -0.7640  0.0794  0.8764  3.2726 
# 
# Coefficients:
#             Estimate Std. Error t value Pr(>|t|)    
# (Intercept) 1.669571   0.181361   9.206  < 2e-16 ***
# fitted(mod) 0.023558   0.003157   7.461 2.64e-12 ***
# ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# 
# Residual standard error: 1.285 on 198 degrees of freedom
# Multiple R-squared:  0.2195,  Adjusted R-squared:  0.2155 
# F-statistic: 55.67 on 1 and 198 DF,  p-value: 2.641e-12
windows()
  layout(matrix(1:4, nrow=2, ncol=2, byrow=TRUE))
  plot(res.mod, which=1)
  plot(res.mod, which=2)
  plot(res.mod, which=3)
  plot(res.mod, which=5)

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

हमें इस बात की चिंता नहीं है कि अवशिष्ट विचरण इस मॉडल के लिए स्केल-लोकेशन प्लॉट में और भी बढ़ रहा है - जो अनिवार्य रूप से होना ही है। फिर से एक वक्र का सबसे हल्का संकेत है, इसलिए हम एक चुकता शब्द को फिट करने की कोशिश कर सकते हैं और देख सकते हैं कि क्या मदद करता है (लेकिन ऐसा नहीं है:

res.mod2 = lm(sqrt(abs(res))~poly(fitted(mod), 2))
summary(res.mod2)
# output omitted
anova(res.mod, res.mod2)
# Analysis of Variance Table
# 
# Model 1: sqrt(abs(res)) ~ fitted(mod)
# Model 2: sqrt(abs(res)) ~ poly(fitted(mod), 2)
#   Res.Df    RSS Df Sum of Sq     F Pr(>F)
# 1    198 326.87                          
# 2    197 326.85  1  0.011564 0.007 0.9336

यदि हम इससे संतुष्ट हैं, तो हम इस प्रक्रिया का उपयोग डेटा जोड़ने के लिए ऐड-ऑन के रूप में कर सकते हैं।

set.seed(4396)  # this makes the example exactly reproducible
x = n
expected.y = coef(mod)[1] + coef(mod)[2]*x
sim.errors = rnorm(length(x), mean=0,
                   sd=(coef(res.mod)[1] + coef(res.mod)[2]*expected.y)^2)
observed.y = expected.y + sim.errors

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

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


यह वास्तव में एक निष्कर्ष था जो मैं आना शुरू कर रहा था, लेकिन कभी भी इतना सुंदर जवाब नहीं मिला।
user44796

5

आपको विषमलैंगिकता को मॉडल करने की आवश्यकता है। एक दृष्टिकोण आर पैकेज (CRAN) के माध्यम से है dglm, फैलाव सामान्यीकृत रैखिक मॉडल। यह glm का एक विस्तार है, जो सामान्य के अलावा glm, पहली glm से अवशिष्ट से फैलाव के लिए एक दूसरी glm फिट बैठता है। मुझे ऐसे मॉडलों के साथ कोई अनुभव नहीं है, लेकिन वे आशाजनक लगते हैं ... यहाँ कुछ कोड है:

n <- rep(1:100,2)
a <- 0
b <- 1
sigma2 <- n^1.3
eps <- rnorm(n,mean=0,sd=sqrt(sigma2))
y <- a+b*n + eps
mod <- lm(y ~ n)

library(dglm)  ### double glm's

mod2   <-  dglm(y ~ n, ~ n, gaussian,ykeep=TRUE,xkeep=TRUE,zkeep=TRUE)
### This uses log link for the dispersion part, should also try identity link ..

y2 <-  simulate(mod2)

plot(n, y2$sim_1)

mod3  <-  dglm(y ~ n, ~ n, gaussian, dlink="identity", ykeep=TRUE,xkeep=TRUE,zkeep=TRUE)  ### This do not work because it leads to negative weights!

नकली प्लॉट नीचे दिखाया गया है:

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

प्लॉट ऐसा लगता है जैसे सिमुलेशन ने अनुमानित विचरण का उपयोग किया है, लेकिन मैं अनिश्चित हूं, क्योंकि अनुकरण () फ़ंक्शन में डगलम के लिए विधियां नहीं हैं ...

(देखने की एक और संभावना है, Rपैकेज का उपयोग कर रहा है gamlss, जो कि कोवरिएबल्स के एक समारोह के रूप में विचरण मॉडलिंग के लिए एक और दृष्टिकोण का उपयोग करता है।)


1
डबल सामान्यीकृत रैखिक मॉडल मूल डेटा को पर्याप्त रूप से मॉडल करता प्रतीत होता है। मैं इस बारे में स्पष्ट नहीं हूं कि कैसे पूर्वानुमान () का उपयोग करके अवशिष्ट त्रुटि की रूपरेखा तैयार की जाती है। मुझे अब इस पर गौर करना होगा।
user44796
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.