Eu tenho tentado replicar os resultados da opção Stata robust
em R. Eu usei o rlm
comando do pacote MASS e também o comando lmrob
do pacote "robustbase". Nos dois casos, os resultados são bem diferentes da opção "robusta" no Stata. Alguém pode sugerir algo neste contexto?
Aqui estão os resultados obtidos quando executei a opção robusta no Stata:
. 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
E foi isso que obtive em R com a opção lmrob:
> 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
r
stata
robust
robust-standard-error
user56579
fonte
fonte
lmrob
não é o mesmo quereg y x, robust
. Google "erros padrão consistentes em heterocedasticidade R". Você receberá páginas mostrando como usar as bibliotecaslmtest
esandwich
.Respostas:
Charles está quase lá em sua resposta, mas a
robust
opção doregress
comando (e outros comandos de estimativa de regressão) no Stata possibilita o uso de vários tipos de estimadores de matriz robusta de variância-covariância de heterocedasticidade e autocorrelação, assim como acoeftest
função nolmtest
pacote, que em turn depende das respectivas matrizes de variância-covariância produzidas pelavcovHC
função nosandwich
pacote.No entanto, as matrizes de variância-covariância padrão usadas pelas duas são diferentes:
1. A matriz de variância-covariância padrão retornada por
vcocHC
é o chamadoHC3
pelos motivos descritos na página de manualvcovHC
.2. A
sandwich
opção usada por Charlescoeftest
utiliza aHC0
matriz robusta de variância-covariância.3. Para reproduzir o comportamento padrão do Stata de usar a
robust
opção em uma chamada,regress
é necessário solicitar ovcovHC
uso daHC1
matriz robusta de variância-covariância.Leia mais sobre isso aqui .
O exemplo a seguir que demonstra todos os pontos mencionados acima é baseado no exemplo aqui .
A última linha de código acima reproduz resultados do Stata:
fonte
Encontrei uma descrição no site a seguir que replica a opção 'robusta' do Stata em R.
https://economictheoryblog.com/2016/08/08/robust-standard-errors-in-r
Seguindo as instruções, tudo o que você precisa fazer é carregar uma função na sua sessão R e, em seguida, definir o parâmetro '' robusto '' na função de resumo para TRUE.
fonte
A partir de abril de 2018, acredito que você deseja o
estimatr
pacote , que fornece uma queda quase em substituição aolm
. Vários exemplos foram retirados da documentação:O
car
pacote facilita a execução de testes de hipótese omnibus para esses modelos:fonte
Eu editaria a pergunta. Você está confundindo regressão robusta com o comando robusto do Stata. Parece não haver benefício em introduzir essa confusão.
Eu acho que existem algumas abordagens. Eu não olhei para todos eles e não tenho certeza qual é o melhor:
O pacote de sanduíche:
Mas isso não me dá as mesmas respostas que recebo da Stata por algum motivo. Eu nunca tentei descobrir o porquê - mas acima nos comentários há uma resposta sugerida - eu simplesmente não uso este pacote.
O pacote rms:
Acho isso um pouco trabalhoso, mas geralmente recebo boas respostas com algum esforço. E é o mais útil para mim.
Você pode codificá-lo do zero
Consulte esta postagem do blog ( http://thetarzan.wordpress.com/2011/05/28/heteroskedasticity-robust-and-clustered-standard-errors-in-r/ ). Parece a opção mais dolorosa, mas notavelmente fácil e essa opção geralmente funciona melhor.
fonte
robust
comando! (Existe um comando do programador_robust
, não diretamente relevante aqui.) Em vez disso, para obter erros padrão robustos (Huber-Eicker-White-sanduíche), a abordagem moderna no Stata é especificarvce(robust)
como uma opção. A abordagem mais antiga para especificar umarobust
opção ainda funciona. Mais amplamente, a confusão causada pela diferença entre regressão robusta (etc.) e SEs "robustas" é lamentável.