【问题标题】:Keeping only the cases with non-zero observations in a fixed effects regression在固定效应回归中仅保留具有非零观测值的情况
【发布时间】:2021-09-01 11:46:58
【问题描述】:

我目前正在处理 SOEP 面板数据(从 2002 年到 2010 年),但遇到了一些麻烦。我正在尝试以儿童津贴作为因变量,以人年作为自变量进行固定效应回归。我只想在样本中包括给孩子至少一年津贴的个人。我假设在此时间跨度内的任何时候没有给他们的孩子津贴的个人会被自动删除,因为固定效应回归测量变化范围内并且不包括在给定变量中没有变化的个人(想想队列)。那将是我的问题:xtreg, dvar ivar1 ivar2 ivarx, fe vce(cluster id) 是否会自动删除在给定变量中没有变化的个体,还是我必须手动将它们从回归中删除?如果是这样,我将如何删除这些人?

编辑:

我只想放弃在观察期内不为孩子提供任何津贴的个人,同时包括那些至少提供一次的人。我最终使用了以下代码:

*Generate variable for cases with at least one non-zero value over the observation period 
bysort id (year): egen sumofallowance= sum(childallowance) 

*Run a fixed effects regression using this variable as a condition.
xtreg childallowance idyear if sumofallowance>0, fe vce(cluster id)

我不确定 Stata 是否会自动执行此操作,但事实证明 Stata 不会,因为我的观察次数减少了大约 9,000 个。

【问题讨论】:

    标签: stata panel-data


    【解决方案1】:

    如果您知道要对其运行回归的样本,那么明确地将回归限制在该样本上总是一个好主意。特别是如果您对所使用的命令如何处理没有变化、缺失值等问题没有非常准确的理解。如果您希望您的工作具有可重复性,那么即使您了解该命令的工作原理,这也是一个很好的做法它使您的代码对于可能不理解此命令的其他人更具可读性。

    我建议您创建一个名为 sample 之类的变量,将要包含在回归中的所有观察值设置为 1,然后将 xtreg 限制为该样本。在你的情况下,它会是这样的:

    *Create a variable that is 1 for the intended sample
    gen sample = (dvar > 0 & !missing(dvar)) // Sets sample = 1 if non-zero and non-missing, otherwise set to 0
    
    *Run regression restricted to sample
    xtreg dvar ivar1 ivar2 ivarx if sample == 1, fe vce(cluster id)
    

    您可能需要根据dvar 中的数据格式编辑生成sample 的行。

    最后,xtreg 可能会因其他原因而放弃观察,因此请确保回归中的 N 与您在tab sample, m 中获得的 1 的数量相匹配,并确保这也符合您对样本的期望介意。

    【讨论】:

    • 感谢您的反馈!我是一名学生,仍在学习 Stata,这很有帮助。我想出了一种方法来包含至少一个非零值的观察结果,因为我仍然希望将那些在观察期间可能没有给予任何津贴的人留在样本中(见编辑)。
    • 很好的改编!但是,由于您似乎渴望学习最佳实践,因此有一条评论。命名规范要简洁。现在变量 sample 中的值是一个总和,但任何阅读您的代码的人都会期望一个虚拟变量。 bysort id (year): egen sum_childallowance = total(childallowance) 怎么样(total() 给你你想要的,而不是sum()help egen)然后gen sample = (sum_childallowance > 0 & !missing(sum_childallowance))。这使您的代码更长但更具可读性,这是研究中的好习惯。另外,如果有帮助,请点赞并接受我的回答
    • 我实际上确实将变量命名为“childallowancesum”,但在这里保持通用,以防有人在寻找通用代码。此外,我没有足够的“声誉”来投票,但 Stack Overflow 表示我的反馈已被记录!
    • 好的,太好了。感谢您接受答案。您仍应将sum() 更改为total()sum() 是一个运行摘要,它仅汇总该行上方的行,而不是该 ID 的所有行。 total() 对该 ID 的所有行求和。请参阅help egen 底部的示例,该示例对此进行了解释。然后我仍然推荐sample!missing(sumofallowance) 的中间步骤,因为这样您可以更好地处理缺失值,因为sumofallowance>0 将在sumofallowance 中包含缺失值。此类 obs 将被排除,因为该行将缺少 childallowance,但最好是明确的。
    猜你喜欢
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 2021-09-30
    相关资源
    最近更新 更多