本文介绍了创建包含多个变量的均值比较表,按多组与总平均值进行比较的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在寻找一种从tabstat命令的输出创建均值比较(t-test)表的方法。基本上,我想知道每组的平均值是否与变量总体的平均值在统计学上有显著差异。
我有15个组的75个变量,总共有1125个t测试,所以一次只做一个是不可能的。
我总是可以为测试编写一个循环,但我想知道是否有一个类似于tabstat的命令可以为我生成表。到目前为止,谷歌一直帮不上忙,尽管从tabstat的输出来看,它似乎是一个相当合乎逻辑的地方。
谢谢!
推荐答案
可能有一些包可以更好地为您服务,但这里有一个我刚刚放在一起的示例。它假设你使用的是单样本t检验,因为我看不到用t检验的另一种方法。这段代码返回一个包含三项内容的矩阵:与总平均值的差值、t值和p值。
可以根据您认为合适的方式调整代码。实际上,只需再执行几个步骤即可将其转换为ado文件。
sysuse auto,clear
loca varlist mpg weight length price // put varlist here
loca grpvar foreign // put grouping variable here
loca n_var=wordcount("`varlist'")
qui tab `grpvar'
loca n_grp=`r(r)'
mat T=J(`n_var'*3,`n_grp',.) // (# of vars*3, # of groups,.)
**colnames
loca cnames=""
su `grpvar', meanonly
forval i=`r(min)'/`r(max)' { // assuming consecutive sequence
loca cnames="`cnames'"+" "+"`i'"
}
mat colnames T=`cnames' // values of grouping variable
**rownames
loca rnames=""
forval i=1/`n_var' {
loca var=word("`varlist'",`i')
loca rnames="`rnames'"+" "+"`var':diff `var':t `var':p"
}
mat rownames T=`rnames' // difference, t value, p value
loca i=1
foreach var in `varlist' {
loca j=1
su `grpvar', meanonly
forval f=`r(min)'/`r(max)' {
su `var', meanonly
loca ydbhat=`r(mean)' // y double hat
su `var' if `grpvar'==`f', meanonly
loca diff=`ydbhat'-`r(mean)' // difference
qui ttest `var'=`ydbhat' if `grpvar'==`f' // one-sample ttest
mat T[`i',`j']=`diff'
mat T[`i'+1,`j']=`r(t)'
mat T[`i'+2,`j']=`r(p)'
loca ++j
}
loca i=`i'+3
}
mat list T, f(%8.3f)
现在我不确定15列是否会太宽。如果是,请更改显示格式,甚至只需使用putexcel
将矩阵导出到电子表格。
编辑:将循环中的forval i=0/1
修复为更通用的形式。还有其他次要编辑。
这篇关于创建包含多个变量的均值比较表,按多组与总平均值进行比较的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!