Stata中的单样本t检验,没有硬编码的零假设

时间:2014-02-20 22:46:06

标签: stata

我对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”来声明一个本地宏。我很失落,非常感谢你们所能给予的任何帮助。谢谢!

1 个答案:

答案 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