我在尝试使用Stata后学习R,我必须说我喜欢它.但现在我遇到了一些麻烦.我即将对Panel Data进行一些多次回归,因此我正在使用该plm软件包.
现在我想plm在R中获得与我使用lm函数和Stata时相同的结果,当我执行异方差性稳健和实体固定回归时.
比方说,我有一个变量面板数据集Y,ENTITY,TIME,V1.
我用这段代码在R中得到了相同的标准错误
lm.model<-lm(Y ~ V1 + factor(ENTITY), data=data)
coeftest(lm.model, vcov.=vcovHC(lm.model, type="HC1))
Run Code Online (Sandbox Code Playgroud)
就像我在Stata中执行此回归一样
xi: reg Y V1 i.ENTITY, robust
Run Code Online (Sandbox Code Playgroud)
但是,当我使用plm包执行此回归时,我得到其他标准错误
plm.model<-plm(Y ~ V1 , index=C("ENTITY","YEAR"), model="within", effect="individual", data=data)
coeftest(plm.model, vcov.=vcovHC(plm.model, type="HC1))
Run Code Online (Sandbox Code Playgroud)
plm模型是否使用其他类型的估计,如果是,如何?plm与Stata 相同的标准错误, robust 我是R的新手,所以如果这是一个简单的问题我会道歉,但是我今晚做了很多搜索,似乎无法弄明白.我有一个包含大量变量的数据框,我想要做的是创建一个表格,其中包含这些变量的子集,基本上相当于Stata中的"pwcorr",或者"相关性". SPSS.对此的一个关键是我不仅需要r,而且还需要与该值相关的重要性.
有任何想法吗?这似乎应该很简单,但我似乎无法找到一个好方法.
我试图复制从Stata到R的logit回归.在Stata中我使用选项"robust"来获得强大的标准误差(异方差性一致的标准误差).我能够从Stata中复制完全相同的系数,但是我无法使用"三明治"包具有相同的强大标准误差.
我尝试了一些OLS线性回归的例子; 看起来R和Stata的三明治估算器给了我同样强大的OLS标准误差.有没有人知道Stata如何计算非线性回归的三明治估计量,在我的例子中是logit回归?
谢谢!
附加代码:在R中:
library(sandwich)
library(lmtest)
mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv")
mydata$rank<-factor(mydata$rank)
myfit<-glm(admit~gre+gpa+rank,data=mydata,family=binomial(link="logit"))
summary(myfit)
coeftest(myfit, vcov = sandwich)
coeftest(myfit, vcov = vcovHC(myfit, "HC0"))
coeftest(myfit, vcov = vcovHC(myfit))
coeftest(myfit, vcov = vcovHC(myfit, "HC3"))
coeftest(myfit, vcov = vcovHC(myfit, "HC1"))
coeftest(myfit, vcov = vcovHC(myfit, "HC2"))
coeftest(myfit, vcov = vcovHC(myfit, "HC"))
coeftest(myfit, vcov = vcovHC(myfit, "const"))
coeftest(myfit, vcov = vcovHC(myfit, "HC4"))
coeftest(myfit, vcov = vcovHC(myfit, "HC4m"))
coeftest(myfit, vcov = vcovHC(myfit, "HC5"))
Run Code Online (Sandbox Code Playgroud)
塔塔:
use http://www.ats.ucla.edu/stat/stata/dae/binary.dta, clear
logit admit gre gpa i.rank, robust
Run Code Online (Sandbox Code Playgroud) 我想知道是否有人知道一个Python包,它允许你以.dta统计数据分析软件Stata 的格式保存numpy数组/重组.这真的会加快我所拥有的系统中的几个步骤.
在R中,一些包(例如haven)将label属性插入变量(例如haven),这解释了变量的实质名称.例如,gdppc可能有标签GDP per capita.
这非常有用,尤其是从Stata导入数据时.但是,我仍然很难知道如何在我的工作流程中使用它.
如何快速浏览变量和变量标签?现在我必须这样做attributes(df$var),但这一点不太方便(la names(df))
如何在地块中使用这些标签?同样,我可以attr(df$var, "label")用来访问字符串标签.但是,这似乎很麻烦.
有没有官方的方法在工作流程中使用这些标签?我当然可以编写一个包装的自定义函数attr,但是当包以label不同方式实现属性时,它可能会在将来中断.因此,理想情况下,我想要一种由haven(或其他主要包)支持的官方方式.
我已经尝试了几千次不同的时间来读取Stata14文件R,并且由于某种原因我不断发生奇怪的事情(比如变量丢失等).
原始文件保存在Stata 13或中14,因此该read.dta()命令不起作用.我也尝试过read.dta13(),它有时会读取它,但它会在某个位置切断数据库并且不会给我数据集中包含的所有变量(我可以在Stata上看到并完美地工作).可以在此处找到原始文件并向下滚动到Uruguay.
有人对如何解决这个问题有任何想法?我厌倦了正确地R阅读我的Stata文件,当它完美地工作时Stata.
Hadley Wickham的haven软件包应用于Stata文件,返回一个包含许多"已标记"类型列的元组.你可以用str()看到这些,例如:
$ MSACMSZ :Class 'labelled' atomic [1:8491861] NA NA NA NA NA NA NA NA NA NA ...
.. ..- attr(*, "label")= chr "metropolitan area size (cmsa/msa)"
.. ..- attr(*, "labels")= Named int [1:7] 0 1 2 3 4 5 6
.. .. ..- attr(*, "names")= chr [1:7] "not identified or nonmetropolitan" "100,000 - 249,999" "250,000 - 499,999" "500,000 - 999,999" ...
Run Code Online (Sandbox Code Playgroud)
如果我可以简单地将所有这些标记的向量提取到因子,那将是很好的,但我已经将标签属性的长度与每个向量中的唯一值的数量进行了比较,并且有时更长,有时更短.所以我认为我需要查看所有这些并决定如何单独处理每一个.
所以我想将labels属性的值提取到列表中.但是,这个功能:
labels93 <- lapply(cps_00093.df, function(x){attr(X, which="labels", exact=TRUE)})
Run Code Online (Sandbox Code Playgroud)
为所有变量返回NULL.
这是一个tibble vs数据帧问题吗?如何从tibble列中将这些属性提取到列表中?
请注意,标签向量已命名,我需要标签和名称.
根据@ Hack-R的请求,这里是我的数据的一小部分,由dput转换(我以前从未使用过).我申请了这段代码:
filter(cps_00093.df, …Run Code Online (Sandbox Code Playgroud) 我写的.do是检查一些.dta文件中是否存在某些变量,以及检查这些变量是否存在某些值.但是,我的代码在遇到无效的变量名时停止执行.
我知道我混合Java和Stata编码,这是完全不合适的,但有什么方法可以做我喜欢的事情:
try {
su var1
local var1_mean=(mean)var1
local var1_min=(min)var1
local var1_max=(max)var1
...
}
catch (NoSuchVariableException e) {
System.out.println("Var1 does not exist")
}
// So that the code does not stop executing...?
Run Code Online (Sandbox Code Playgroud) 我正在使用大约3.3千兆字节的Stata .dta文件,因此它很大但不会过大.我有兴趣使用IPython并尝试使用Pandas导入.dta文件,但是有些事情正在发生.我的盒子有32千兆字节的RAM,并试图加载.dta文件导致所有使用的RAM(约30分钟后)和我的计算机停止运行.这不是'感觉'正确,因为我能够使用外部包中的read.dta()打开R中的文件没有问题,并且使用Stata中的文件很好.我使用的代码是:
%time myfile = pd.read_stata(data_dir + 'my_dta_file.dta')
Run Code Online (Sandbox Code Playgroud)
我在Enthought的Canopy程序中使用IPython.'%time'的原因是因为我有兴趣对R的read.dta()进行基准测试.
我的问题是:
我对R很陌生,并且已经挣扎了几天来做一些Stata非常简单的事情.朋友给了我一个相对复杂的答案来回答这个问题,但我想知道是否有一个简单的方法可以做到以下几点.
假设我有一个两个变量数据帧,组织如下:
category var1
a 1
a 2
a 3
b 4
b 6
b 8
b 10
c 11
c 14
c 17
Run Code Online (Sandbox Code Playgroud)
我要生成另外五个变量,每个应插入此相同的数据帧:var2,var3,var4,var5,和var6
(1)var2是一个虚拟变量,它取每个类别中第一次观察的值1(即,由三个组定义的每一个category),否则为0.
(2)var3是一个虚拟变量,它取每个类别中最后一次观察的值1,否则为0.
(3)var4计算任何特定观察所属的每组中的观察数量(即,3为categorya,4为categoryb,3为categoryc)
(4)var5记录每次观察var1与其上方观察的差异
(5)var6记录每次观察var1与其上方观察之间的差异,但仅限于由其定义的组内category.
我对Stata非常熟悉,我发现使用bysortprefix命令并不难做到.例如,var1很容易生成bysort category: gen var1=1 if _n==1.但是我在最后一天试图弄清楚如何使用R来解决它们.我确信有几种解决方案(我的朋友参与了ddplyr包装,这似乎比我的工资高出一步).没有什么比这更容易了bysort吗?
最终数据集应如下所示: …
stata ×10
r ×7
python ×2
r-haven ×2
attributes ×1
java ×1
label ×1
numpy ×1
pandas ×1
plm ×1
regression ×1
robustness ×1
spss ×1
statistics ×1
try-catch ×1