问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Stata导出多个变量单样本 t 检验的结果

创作时间:
作者:
@小白创作中心

Stata导出多个变量单样本 t 检验的结果

引用
CSDN
1.
https://blog.csdn.net/m0_50800492/article/details/143917522

在Stata中,outreg2和esttab这两个常用的导出命令主要用于导出描述性统计和回归类结果,需要调用e类命令,而ttest结果均为r类结果,目前还没有发现比较好用的命令导出多个变量单样本t检验的结果。本文尝试了一条可行思路,通过编写自定义导出统计量和存储方式的Stata代码实现这一功能,在此做一个总结记录,方便日后查找和整理,同时也希望能对需要的读者有所帮助。

数据与问题描述

现在有一个样本数据集sample.xls,共21个变量,8个观测值,其中第一个变量是日期,需要对后20个变量分别进行t检验,之后保存每个变量的观测个数(N)、平均值(Average)、标准差(S.D.)、5%和95%分位数、t统计量(t-Test)和右单侧p值(P-value)。

问题分析

使用Stata的ttest命令可以直接得到以上部分统计量,它们保存在r类变量中,可以通过以下命令查看:

ttest var1 == 0  
return list  

得到5个需要的统计量:

  • r(N_1)
  • r(mu_1)
  • r(sd_1)
  • r(t)
  • r(p_u)

使用summarize命令可以得到5%和95%分位数,同上可获取这些结果。

对于多个变量的检验需要使用循环foreach,但由于Stata每一次检验都会覆盖之前检验的结果,因此必须在对一个变量检验之后立即保存结果。本文的思路如下:

  1. 首先根据需要的统计量个数创建多个“观测”(实际上并不是观测数据,只是用于存储每一次检验的结果,检验时需要排除),这些“观测”的第一行是名称,表示是什么统计量;

  2. 其次将每一次循环的结果分别保存在相应统计量(行名)和对应变量(列名)的单元格中;

  3. 最后导出最后的几行,也就是自定义的“观测”行,通过Excel将其转置得到更一般的格式。

Stata代码实现

首先准备存储结构

clear all
// 首先将数据第一列设成字符串类型,方便后面设置统计量名称
import excel "sample.xls", sheet("Sheet1") firstrow allstring
destring *, replace  // Date列仍然是字符串,其余列为double
// 定义全局变量,包括要进行检验的变量名
global vars = "var1 var2 var3 var4 var5..."
// 获取观测个数
local ori_n = _N  // 8
// 添加统计量后的观测个数
local tar_n = _N+7  // 15
// 创建新行(7行)来存储对应的统计量
set obs `tar_n'
// 要保存的统计量名称
global stats = "N Average S.D. 5% 95% t-Test P-value"
// 为新“观测”命名(按行,纵向)
local new_rows = `ori_n' + 1
foreach stat of  global stats{
    // 替换新添加的Date观测值为统计量名称
    replace Date = "`stat'" in `new_rows'
    // 行数+1,进入下一行替换
    local new_rows = `new_rows'+1
}

运行以上代码后会在原数据表格中新加入7行空白“观测”:

之后进行检验并保存结果

因为上文代码定义了局部变量,以下代码不能单独运行,需要与上文代码一起运行。

// 定义t检验原假设的均值
local h0_mu = 0
// 对每个变量执行 t 检验并存储 p 值
// `=_N',是一个宏变量,表示最后一行
foreach var in $vars {
    // 只对原数据进行描述性统计,不包括新增行
    summarize `var' if _n <= `ori_n', detail
    // 5% 和 95% 分位数
    replace `var' = r(p5) in `=_N - 3'
    replace `var' = r(p95) in `=_N - 2'
    
    // 只对原数据进行t检验,不包括新增行
    ttest `var' == `h0_mu' if _n <= `ori_n'
    // 存储t检验的结果
    // 观测个数
    replace `var' = `ori_n' in `=_N - 6'
    // 均值
    replace `var' = r(mu_1) in `=_N - 5'
    // 标准差
    replace `var' = r(sd_1) in `=_N - 4'
    // t统计量
    replace `var' = r(t) in `=_N - 1'
    // p值
    replace `var' = r(p_u) in `=_N'
}
// 指定导出自定义的最后几行
local export_start_rows = `ori_n'+1
export excel using "ttest_out.xlsx" in `export_start_rows'/`tar_n', sheetreplace firstrow(varlabels)

运行后的Stata中的数据如下:

ttest_out.xlsx的Excel文件内容调整格式后如下:

最后可以复制使用转置转化为常用格式

最后使用还需要将第一列的Date替换:

本文原文来自CSDN

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号