我对Stata很陌生,我很难做一些我认为不会尝试去做的事情。我正在使用面板数据集(国家和时间)。每个观察包括一个国家,一年和一个变量,称之为x。数据按国家年份排序(即,对应于给定国家的所有观察结果都是连续的,并按年份排序)。
每个国家都有54年的数据,相当于1960年至2013年(含)。我想用以下方式进行t测试:
by country: ttest x = x[54] if year != 2013
但我得到一个错误(“权重不允许”),我不知道如何解释。我可以通过硬编码并使用通常的语法来实现它
by country: ttest x = # if year != 2013
但是我想避免硬编码,因为有大约100个国家/地区,我希望能够灵活地添加/删除国家/地区(这通常只是糟糕的形式)。
我的第一个想法是使用类似
的东西来定义宏levelsof country, local(levels)
foreach c of local levels {
local y x if year == 2013
ttest x = y if year != 2013
// some code to store the value that I haven't figured out yet
}
但是你不能使用“if”来声明一个本地宏。我很失落,非常感谢你们所能给予的任何帮助。谢谢!
答案 0 :(得分:3)
除非您有理由将数据视为等同于来自同一分布的独立抽奖,否则此处的学生t测试没有调整时间和空间依赖结构。您可以进行测试,但如果不是伪造的话,标准误差和P值是可疑的。也就是说,你对时间序列的个人测试面临一个问题;而且你的测试总是面临另一个问题。有关一个好帐户,请参阅Box,Hunter,Hunter版本,实验者统计。约翰威利
除了那么大的一点,Stata正在扼杀[]
,这被误读为指定权重的尝试。我猜是
by country: ttest x = `=x[54]' if year != 2013
对于Stata来说是可接受的语法,尽管仍然是可疑的统计数据。这里的细节是类似宏的语法
`= '
其效果是,在将行传递给ttest
之前,Stata将评估给定的表达式。因此,结果(数值)将是ttest
命令看到的结果。
这在精神上与你想象的相似,尽管你的代码是合法和正确的。
更新此计算也可能有所帮助:
egen mean = mean(x / (year != 2013)), by(country)
egen sd = sd(x / (year != 2013), by(country)
gen z = (x - mean) / sd if year == 2013
list country x z if year == 2013