小编res*_*111的帖子

手动选择R模型中的Heckman

我想在R中手动计算一个Heckman选择模型.我的问题是标准误差是有偏差的.有没有办法手动纠正这些?

在sampleSelection模型的我的(样本)代码下面(正确的SE)和手动代码(正确的估计,错误的SE)

 require(sampleSelection)

data( Mroz87 )
Mroz87$kids <- ( Mroz87$kids5 + Mroz87$kids618 > 0 )
Run Code Online (Sandbox Code Playgroud)

使用sampleSelection

heckman <- selection(selection = lfp ~ age + I(age^2) + faminc + kids + educ, outcome = wage ~ exper + I(exper^2) + educ + city, 
                                data = Mroz87, method = "2step")
summary(heckman)
Run Code Online (Sandbox Code Playgroud)

手动

seleqn1 <- glm(lfp ~ age + I(age^2) + faminc + kids + educ, family=binomial(link="probit"), data=Mroz87)
summary(seleqn1)

# Calculate inverse Mills ratio by hand ##
Mroz87$IMR <- dnorm(seleqn1$linear.predictors)/pnorm(seleqn1$linear.predictors)

# Outcome equation …
Run Code Online (Sandbox Code Playgroud)

r standard-error

6
推荐指数
1
解决办法
1384
查看次数

在 R 中使用 Systemfit 出现看似无关的回归错误

我想使用看似无关的回归在横截面上重复估计单个方程,但总是收到错误“LU.dgC(a) 中的错误:cs_lu(A) 失败:接近奇异 A(或内存不足)” ”。

原因是我的数据/设置,其中每个方程估计两个横截面之间的差异(请参见下面的示例)。

一个可重现的例子来说明这一点:标准 SUR 有效 (1),然后我模拟我的设置,归结为 diff-in-diff 方法 (2),估计方程单独起作用 (3),但联合使用SUR (4) 给了我错误。

关于如何解决它的任何想法?或者其他易于实施的方法来同时估计这一点?

1. SUR - 标准设置 ==> 没有错误

            library ("systemfit")
            library( "plm" )
            library("broom")
            library("data.table")

data( "GrunfeldGreene" )

GGPanel <- pdata.frame( GrunfeldGreene, c( "firm", "year" ) )
formulaGrunfeld <- invest ~ value + capital
greeneSur <- systemfit( formulaGrunfeld, "SUR",data = GGPanel,methodResidCov = "noDfCor" )
summary(greeneSur)
Run Code Online (Sandbox Code Playgroud)

2. 数据集适应我的设置

data( "GrunfeldGreene" )

setDT(GrunfeldGreene)
GrunfeldGreene[, dummy_time := ifelse(year>1945, 1, 0),]
GrunfeldGreene[, dummy_group := ifelse(firm=="General Motors"|firm=="Chrysler", 1, 0),]
GrunfeldGreene …
Run Code Online (Sandbox Code Playgroud)

r systemfit

5
推荐指数
0
解决办法
747
查看次数

合并在循环R中

我正在使用for循环将多个文件与另一个文件合并:

files < - list.files("path",pattern =".TXT",ignore.case = T)

for(i in 1:length(files))
{
  data <- fread(files[i], header=T)

  # Merge
  mydata <- merge(mydata, data, by="ID", all.x=TRUE)

  rm(data)
}
Run Code Online (Sandbox Code Playgroud)

"mydata"看起来如下(简化):

ID  x1  x2
1   2   8
2   5   5
3   4   4
4   6   5
5   5   8
Run Code Online (Sandbox Code Playgroud)

"data"看起来如下(大约600个文件,总共100GB).2(单独)文件的示例.将所有内容整合为1将是不可能的(太大):

ID  x3
1   8
2   4

ID  x3
3   4
4   5
5   1
Run Code Online (Sandbox Code Playgroud)

当我运行我的代码时,我得到以下数据集:

ID  x1  x2  x3.x    x3.y
1   2   8   8       NA
2   5   5   4       NA
3   4   4   NA …
Run Code Online (Sandbox Code Playgroud)

merge for-loop r

0
推荐指数
1
解决办法
4303
查看次数

标签 统计

r ×3

for-loop ×1

merge ×1

standard-error ×1

systemfit ×1