面板数据中的损耗 - Stata
Attrition in panel data - Stata
我正在根据2010-2013年(连续四年)的调查数据构建面板数据集。与家庭调查数据的通常情况一样,存在流失问题,即一些家庭年复一年地退出调查。我需要弄清楚这些家庭是否随机丢失。
我的想法是,如果 2010 年存在的家庭在 2011 年缺失(否则为 0),则在 2011 年提出一个等于 1 的虚拟变量,以此类推 2012 年、2013 年。然后我想 运行 这个虚拟人的 logit/probit 回归,我想在我的研究中控制一组协变量。家庭 ID 的变量是“hhid”,我当然有时间维度变量“年”。
有谁知道应该如何在 Stata 中正确编码?我知道这并不复杂,但我就是无法全神贯注地想出来....
您的问题是,您在 X 年未观察到的家庭与您在 X 年观察到的家庭相比是否存在差异。没有完美的方法来回答这个问题,因为根据定义,您没有观察那些家庭。
然而,您确实在第 0 年(在您的案例中为 2010 年)观察了研究中的所有家庭。正如您自己暗示的那样,您可以使用第 0 年的观察结果作为代理来回答这些家庭在第 X 年是否不同。我可以帮助您展示如何编写代码,但 Whosebug 不是讨论这个统计的合适论坛鉴于您的数据、数据的收集方式以及您打算使用的分析,有效。
编写此代码的一种方法是在 SSC 提供的名为 ietoolkit
的包中使用 iebaltab
(披露,我写了该命令)。
您可以创建一个表示损耗的虚拟变量并使用 iebaltab
,如下所示:iebaltab balancevars, grpvar(attrition)
其中 balancevars
是您要确保的家庭特征的变量列表它们在第 0 年相似。您可以使用选项 ftest
将测试包括在您建议的所有平衡变量中。
并不是说这个命令会产生统计数据,但是这是否有效由你来决定,平衡测试的有效性是有争议的。但这些争论并不是关于 Whosebug 所关注的编码。
这是一个示例,说明如何在面板数据中创建虚拟对象,然后将这些虚拟对象折叠到父对象 unit-of-observation 如果父对象 unit-of-observation 在任何时间段内为 1,则使虚拟对象为 1 .然后将父unit-of-observation级数据合并回面板数据。
* Example generated by -dataex-. For more info, type help dataex
clear
input byte hhid int year
1 2010
1 2011
1 2012
1 2013
2 2010
2 2011
2 2013
3 2010
3 2011
end
*Create a dummy for each year-hh level observation for each year
local year_dummies ""
forvalues year = 2010/2013 {
gen dummy`year' = (year==`year')
local year_dummies "`year_dummies' dummy`year'"
}
*Collapse the data set to hh level where the dummies is 1 if any year-hh level was 1
preserve
collapse (max) `year_dummies' , by(hhid)
tempfile year_dummy_hhlevel
save `year_dummy_hhlevel'
restore
*Rename to not having to overwrite the first step
rename dummy???? org_dummy????
*Merge the hh level data back to the year-hh level
*data merging the hh dummy to each year-hh observation
merge m:1 hhid using `year_dummy_hhlevel', nogen
我正在根据2010-2013年(连续四年)的调查数据构建面板数据集。与家庭调查数据的通常情况一样,存在流失问题,即一些家庭年复一年地退出调查。我需要弄清楚这些家庭是否随机丢失。
我的想法是,如果 2010 年存在的家庭在 2011 年缺失(否则为 0),则在 2011 年提出一个等于 1 的虚拟变量,以此类推 2012 年、2013 年。然后我想 运行 这个虚拟人的 logit/probit 回归,我想在我的研究中控制一组协变量。家庭 ID 的变量是“hhid”,我当然有时间维度变量“年”。
有谁知道应该如何在 Stata 中正确编码?我知道这并不复杂,但我就是无法全神贯注地想出来....
您的问题是,您在 X 年未观察到的家庭与您在 X 年观察到的家庭相比是否存在差异。没有完美的方法来回答这个问题,因为根据定义,您没有观察那些家庭。
然而,您确实在第 0 年(在您的案例中为 2010 年)观察了研究中的所有家庭。正如您自己暗示的那样,您可以使用第 0 年的观察结果作为代理来回答这些家庭在第 X 年是否不同。我可以帮助您展示如何编写代码,但 Whosebug 不是讨论这个统计的合适论坛鉴于您的数据、数据的收集方式以及您打算使用的分析,有效。
编写此代码的一种方法是在 SSC 提供的名为 ietoolkit
的包中使用 iebaltab
(披露,我写了该命令)。
您可以创建一个表示损耗的虚拟变量并使用 iebaltab
,如下所示:iebaltab balancevars, grpvar(attrition)
其中 balancevars
是您要确保的家庭特征的变量列表它们在第 0 年相似。您可以使用选项 ftest
将测试包括在您建议的所有平衡变量中。
并不是说这个命令会产生统计数据,但是这是否有效由你来决定,平衡测试的有效性是有争议的。但这些争论并不是关于 Whosebug 所关注的编码。
这是一个示例,说明如何在面板数据中创建虚拟对象,然后将这些虚拟对象折叠到父对象 unit-of-observation 如果父对象 unit-of-observation 在任何时间段内为 1,则使虚拟对象为 1 .然后将父unit-of-observation级数据合并回面板数据。
* Example generated by -dataex-. For more info, type help dataex
clear
input byte hhid int year
1 2010
1 2011
1 2012
1 2013
2 2010
2 2011
2 2013
3 2010
3 2011
end
*Create a dummy for each year-hh level observation for each year
local year_dummies ""
forvalues year = 2010/2013 {
gen dummy`year' = (year==`year')
local year_dummies "`year_dummies' dummy`year'"
}
*Collapse the data set to hh level where the dummies is 1 if any year-hh level was 1
preserve
collapse (max) `year_dummies' , by(hhid)
tempfile year_dummy_hhlevel
save `year_dummy_hhlevel'
restore
*Rename to not having to overwrite the first step
rename dummy???? org_dummy????
*Merge the hh level data back to the year-hh level
*data merging the hh dummy to each year-hh observation
merge m:1 hhid using `year_dummy_hhlevel', nogen