आर में स्टैटा के "मजबूत" विकल्प की नकल करना


39

मैं robustR में Stata विकल्प के परिणामों को दोहराने की कोशिश कर रहा हूं। मैंने rlmMASS पैकेज के कमांड फॉर्म का उपयोग किया है और lmrobपैकेज "कमांडबस" से भी। दोनों मामलों में परिणाम स्टाटा में "मजबूत" विकल्प से काफी अलग हैं। क्या कोई इस संदर्भ में कुछ सुझाव दे सकता है?

जब मैं स्टाटा में मजबूत विकल्प चुनता हूं, तो मुझे जो परिणाम प्राप्त होते हैं, वे यहां दिए गए हैं:

. reg yb7 buildsqb7 no_bed no_bath rain_harv swim_pl pr_terrace, robust

Linear regression                                      Number of obs =    4451
                                                       F(  6,  4444) =  101.12
                                                       Prob > F      =  0.0000
                                                       R-squared     =  0.3682
                                                       Root MSE      =   .5721

------------------------------------------------------------------------------
             |               Robust
         yb7 |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
   buildsqb7 |   .0046285   .0026486     1.75   0.081    -.0005639     .009821
      no_bed |   .3633841   .0684804     5.31   0.000     .2291284    .4976398
     no_bath |   .0832654   .0706737     1.18   0.239    -.0552904    .2218211
   rain_harv |   .3337906   .0395113     8.45   0.000     .2563289    .4112524
     swim_pl |   .1627587   .0601765     2.70   0.007     .0447829    .2807346
  pr_terrace |   .0032754   .0178881     0.18   0.855    -.0317941    .0383449
       _cons |   13.68136   .0827174   165.40   0.000     13.51919    13.84353

और यह वही है जो मैंने आर में लम्बरोब विकल्प के साथ प्राप्त किया है:

> modelb7<-lmrob(yb7~Buildsqb7+No_Bed+Rain_Harv+Swim_Pl+Gym+Pr_Terrace, data<-bang7)
> summary(modelb7)

Call:
lmrob(formula = yb7 ~ Buildsqb7 + No_Bed + Rain_Harv + Swim_Pl + Gym + Pr_Terrace, 
    data = data <- bang7)
 \--> method = "MM"
Residuals:
      Min        1Q    Median        3Q       Max 
-51.03802  -0.12240   0.02088   0.18199   8.96699 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 12.648261   0.055078 229.641   <2e-16 ***
Buildsqb7    0.060857   0.002050  29.693   <2e-16 ***
No_Bed       0.005629   0.019797   0.284   0.7762    
Rain_Harv    0.230816   0.018290  12.620   <2e-16 ***
Swim_Pl      0.065199   0.028121   2.319   0.0205 *  
Gym          0.023024   0.014655   1.571   0.1162    
Pr_Terrace   0.015045   0.013951   1.078   0.2809    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

Robust residual standard error: 0.1678 
Multiple R-squared:  0.8062,    Adjusted R-squared:  0.8059 

3
वेलिडेट पार करने के लिए आपका स्वागत है! मैंने आपके शीर्षक को थोड़ा अधिक वर्णनात्मक बना दिया और कुछ स्वरूपण जोड़ दिया। सामान्य तौर पर, प्रोग्रामिंग प्रश्न यहां विषय पर नहीं हैं, लेकिन मुझे लगता है कि आपका है क्योंकि इसमें कुछ सांख्यिकीय मुद्दे शामिल हैं। आशा है कि आप चारों ओर देख सकते हैं ....
मैट क्राऊस

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

ठीक है ... ये वे परिणाम हैं जो मैंने STATA में मजबूत विकल्प द्वारा प्राप्त किए हैं:
user56579

5
जैसा दिखता है वैसा lmrobनहीं है reg y x, robust। Google "heteroskedasticity- सुसंगत मानक त्रुटियाँ R"। आप आप दिखा कैसे उपयोग करने के लिए पृष्ठों मिल जाएगा lmtestऔर sandwichपुस्तकालयों।
जेनेरिक_सियर

3
Stata n / (nk) के छोटे नमूने सुधार कारक का उपयोग करता है। आर आमतौर पर कुछ और करता है, इसलिए सुनिश्चित करें कि आप उसके लिए समायोजित करें।
दिमित्री वी। मास्टरोव

जवाबों:


47

चार्ल्स अपने जवाब में लगभग वहाँ हैं, लेकिन robustस्टैटा में regressकमांड (और अन्य प्रतिगमन अनुमान कमांड) का विकल्प कई प्रकार की हेट्रोसेक्लासिटी और ऑटोकॉरेलेशन मजबूत विचरण-सहसंयोजक मैट्रिक्स अनुमानक का उपयोग करना संभव बनाता है, जैसा coeftestकि lmtestपैकेज में कार्य करता है , जो बारी संबंधित विचरण-सहप्रसरण द्वारा उत्पादित मैट्रिक्स पर निर्भर करता है vcovHCमें समारोह sandwichपैकेज।

हालांकि, दो द्वारा उपयोग किए जाने वाले डिफ़ॉल्ट विचरण-कोविरियन मैट्रिसेस अलग-अलग हैं:
1. द्वारा लौटाए गए डिफ़ॉल्ट विचरण-कोविरियन मैट्रिक्स , मैन पेज में वर्णित कारणों के लिए vcocHCतथाकथित HC3है vcovHC
2. sandwichचार्ल्स द्वारा coeftestउपयोग किए जाने वाले विकल्प में HC0मजबूत विचरण-सहसंयोजक मैट्रिक्स का उपयोग होता है।
3. मजबूत वेरिएंट-कोवरियन मैट्रिक्स का उपयोग करने के robustलिए regressआपको कॉल करने में विकल्प का उपयोग करने के स्टैटा डिफ़ॉल्ट व्यवहार को पुन: पेश vcovHCकरने के लिए HC1

इसके बारे में यहाँ और पढ़ें ।

निम्न उदाहरण जो ऊपर दिए गए सभी बिंदुओं को प्रदर्शित करता है, यहां के उदाहरण पर आधारित है

library(foreign)
library(sandwich)
library(lmtest)

dfAPI = read.dta("http://www.ats.ucla.edu/stat/stata/webbooks/reg/elemapi2.dta")
lmAPI = lm(api00 ~ acs_k3 + acs_46 + full + enroll, data= dfAPI)
summary(lmAPI)                                  # non-robust

# check that "sandwich" returns HC0
coeftest(lmAPI, vcov = sandwich)                # robust; sandwich
coeftest(lmAPI, vcov = vcovHC(lmAPI, "HC0"))    # robust; HC0 

# check that the default robust var-cov matrix is HC3
coeftest(lmAPI, vcov = vcovHC(lmAPI))           # robust; HC3 
coeftest(lmAPI, vcov = vcovHC(lmAPI, "HC3"))    # robust; HC3 (default)

# reproduce the Stata default
coeftest(lmAPI, vcov = vcovHC(lmAPI, "HC1"))    # robust; HC1 (Stata default)

उपरोक्त कोड की अंतिम पंक्ति Stata से परिणाम पुन: प्रस्तुत करती है:

use http://www.ats.ucla.edu/stat/stata/webbooks/reg/elemapi2
regress api00 acs_k3 acs_46 full enroll, robust

डेटा का लिंक मृत है। क्या आप लिंक को अपडेट कर सकते हैं? क्या यह वही फ़ाइल है: संकाय .smu.edu / tfomby / eco5350 / data / Examples / elemapi2.dta ?
vasili111

आत्मविश्वास अंतराल भी कैसे पुन: पेश करें?
vasili111

29

मुझे निम्नलिखित वेबसाइट पर एक विवरण मिला, जो आर में स्टैटा के '' मजबूत '' विकल्प की नकल करता है।

https://economictheoryblog.com/2016/08/08/robust-standard-errors-in-r

निर्देशों का पालन करते हुए, आपको केवल अपने आर सत्र में एक फ़ंक्शन लोड करना होगा और फिर TRUE में आप के सारांश फ़ंक्शन में पैरामीटर 'मजबूत' सेट करें।

summary(lm.object, robust=TRUE)

10

अप्रैल 2018 तक मेरा मानना ​​है कि आप estimatrपैकेज चाहते हैं , जो प्रतिस्थापन के लिए एक निकट ड्रॉप प्रदान करता है lm। कई उदाहरणों को प्रलेखन से लगभग खींचा गया है:

library(estimatr)
library(car)

# HC1 robust standard errors
model <- lm_robust(GPA_year2 ~ gpa0 + ssp, data = alo_star_men,
                   se_type = "stata")
summary(model)
#> 
#> Call:
#> lm_robust(formula = GPA_year2 ~ gpa0 + ssp, data = alo_star_men, 
#>     se_type = "stata")
#> 
#> Standard error type:  HC1 
#> 
#> Coefficients:
#>             Estimate Std. Error  Pr(>|t|) CI Lower CI Upper  DF
#> (Intercept) -3.60625    1.60084 0.0258665 -6.77180  -0.4407 137
#> gpa0         0.06814    0.02024 0.0009868  0.02812   0.1082 137
#> ssp          0.31917    0.18202 0.0817589 -0.04077   0.6791 137
#> 
#> Multiple R-squared:  0.09262 ,   Adjusted R-squared:  0.07937 
#> F-statistic: 6.992 on 2 and 137 DF,  p-value: 0.001284

# HC1 cluster robust standard errors
model2 <- lm_robust(GPA_year2 ~ gpa0 + ssp, cluster = ssp,
                   data = alo_star_men, se_type = "stata")
summary(model2)
#> 
#> Call:
#> lm_robust(formula = GPA_year2 ~ gpa0 + ssp, data = alo_star_men, 
#>     clusters = ssp, se_type = "stata")
#> 
#> Standard error type:  stata 
#> 
#> Coefficients:
#>             Estimate Std. Error Pr(>|t|) CI Lower CI Upper DF
#> (Intercept) -3.60625   1.433195 0.240821 -21.8167  14.6042  1
#> gpa0         0.06814   0.018122 0.165482  -0.1621   0.2984  1
#> ssp          0.31917   0.004768 0.009509   0.2586   0.3798  1
#> 
#> Multiple R-squared:  0.09262 ,   Adjusted R-squared:  0.07937 
#> F-statistic: 6.992 on 2 and 137 DF,  p-value: 0.001284

carपैकेज तो यह आसान इन मॉडलों के लिए सर्वग्राही परिकल्पना परीक्षण करने के लिए बनाता है:

linearHypothesis(model, c("gpa0 = ssp"))
#> Linear hypothesis test
#> 
#> Hypothesis:
#> gpa0 - ssp = 0
#> 
#> Model 1: restricted model
#> Model 2: GPA_year2 ~ gpa0 + ssp
#> 
#>   Res.Df Df  Chisq Pr(>Chisq)
#> 1    138                     
#> 2    137  1 1.8859     0.1697

4

मैं प्रश्न संपादित करता हूँ। आप स्टैटा के मजबूत कमांड के साथ मजबूत प्रतिगमन को भ्रमित कर रहे हैं। इस उलझन को शुरू करने से कोई फायदा होता नहीं दिख रहा है।

मुझे लगता है कि कुछ दृष्टिकोण हैं। मैंने उन सभी को नहीं देखा है और निश्चित नहीं है कि कौन सबसे अच्छा है:

सैंडविच पैकेज:

library(sandwich)    
coeftest(model, vcov=sandwich)

लेकिन यह मुझे वही जवाब नहीं देता है जो मुझे किसी कारण से स्टाटा से मिलता है। मैंने कभी भी बाहर काम करने की कोशिश नहीं की है - लेकिन टिप्पणियों में ऊपर एक सुझाया गया उत्तर है - मैं सिर्फ इस पैकेज का उपयोग नहीं करता हूं।

आरएमएस पैकेज:

मुझे यह काम करने के लिए थोड़ा दर्द होता है लेकिन आमतौर पर कुछ प्रयासों के साथ अच्छे उत्तर मिलते हैं। और यह मेरे लिए सबसे उपयोगी है।

model = ols(a~b, x=TRUE)    
robcov(model)

आप इसे स्क्रैच से कोड कर सकते हैं

इस ब्लॉग पोस्ट ( http://thetarzan.wordpress.com/2011/05/28/heteroskedasticity-robust-and-clustered-standard-errors-in-r/ ) को देखें। यह सबसे दर्दनाक विकल्प की तरह दिखता है, लेकिन उल्लेखनीय रूप से आसान है और यह विकल्प अक्सर सबसे अच्छा काम करता है।


4
चार्ल्स मुख्य बिंदु पर सही है, लेकिन यह स्पष्ट करने के लिए कि कहीं और निहित है ध्यान दें कि स्टैटा के पास कोई robustआदेश नहीं है ! (एक प्रोग्रामर की कमान है _robust, यहां सीधे प्रासंगिक नहीं है।) बल्कि मजबूत (ह्यूबर-इकर-व्हाइट-सैंडविच) मानक त्रुटियों को प्राप्त करने के लिए, स्टैटा में आधुनिक दृष्टिकोण vce(robust)एक विकल्प के रूप में निर्दिष्ट करना है। एक robustविकल्प निर्दिष्ट करने के लिए पुराना दृष्टिकोण अभी भी काम करता है। अधिक मोटे तौर पर, मजबूत प्रतिगमन (आदि) और "मजबूत" एसई के बीच अंतर के कारण भ्रम दुर्भाग्यपूर्ण है।
निक कॉक्स

अरे। बहुत बहुत धन्यवाद। कोड काम करते हैं और यह वास्तव में उन परिणामों के साथ प्रदान करता है जो स्टैटा करता है। सिर्फ एक प्रश्न। मैं समझता हूं कि मजबूत प्रतिमान मजबूत मानक त्रुटियों से अलग है, और उस मजबूत प्रतिगमन का उपयोग तब किया जाता है जब आपके डेटा में आउटलेयर होता है। लेकिन यह विषमलैंगिकता की समस्या को भी हल करता है। क्या कोई मुझे बता सकता है कि क्या "lmrob" कमांड द्वारा पैकेज "strongbase" द्वारा प्रदान किया गया एमएम तरह का अनुमान आउटलेर्स और विषमलैंगिकता की समस्या के समाधान के रूप में एक साथ उपयोग किया जा सकता है?
user56579

@ user56579 मेरा अनुमान है कि आप इस बारे में एक अलग सवाल पूछना चाहते हैं।
tchakravarty
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.