# 时间序列分析程序 **Repository Path**: az13js/satool ## Basic Information - **Project Name**: 时间序列分析程序 - **Description**: 计算给定时间序列的平均值、方差、概率分布(大致的分布)、自协方差函数、自相关系数函数、偏自相关系数函数和使用混成检验方法(Ljung-Box test,LB检验)算出卡方统计量的程序 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 13 - **Forks**: 6 - **Created**: 2021-07-11 - **Last Updated**: 2025-06-15 ## Categories & Tags **Categories**: mathlibs **Tags**: 时间序列分析 ## README # 时间序列分析程序 ## 这是什么 计算给定时间序列的平均值、方差、范围分布、自协方差函数、自相关系数函数、偏自相关系数函数和使用混成检验方法算出卡方统计量的程序(源代码)。 ## 如何使用 ### 一,获取源代码 首先通过在命令提示符或者Linux终端克隆仓库的源代码,或者下载源代码的压缩包并解压。 #### 克隆源代码 这需要你的电脑上有安装好的git软件。克隆源代码方法是在命令提示符或者终端执行命令: $ git clone --depth=1 git@gitee.com:az13js/satool.git 执行成功的话,在当前目录下会生成新的目录satool,里面包含程序的源代码。 #### 下载压缩包 按照下面的两步点击仓库网页,可以直接下载到包含源代码的压缩文件: ![图片,下载压缩包的方法](README_IMAGES/download_zip.jpg) 下载后解压。 ### 二,编译源代码 这是使用Java 1.8编写和Maven 3.8.1管理的,首次使用需要先编译。假设你的电脑上已经安装好了Java和Maven,那么编译程序很简单,只需要用普通的方式激活Maven的编译过程即可(第一次使用Maven编译项目时,会从网络上下载项目依赖的包,下载过程可能需要一段时间): $ mvn compile -Dencoding=UTF8 编译成功后可以直接执行`.class`文件(注:如果用Windows系统注意把命令中的`/`替换为`\`): $ java -classpath target/classes cn.az13js.satool.App 命令行参数: -i 数据文件名(必填) -o 输出目录(必填) -h 打印此帮助信息 -m 自由度,默认为长度的自然对数值向上取整 -d 统计概率分布时横坐标的精度 示例:program -i input.csv -o output_dir 如果想要,也可以激活Maven的package过程打包成`.jar`文件: mvn package -Dencoding=utf8 然后通过指定生成的`.jar`文件执行(注:如果用Windows系统注意把命令中的`/`替换为`\`): $ java -jar target/satool-0.3.jar 命令行参数: -i 数据文件名(必填) -o 输出目录(必填) -h 打印此帮助信息 -m 自由度,默认为长度的自然对数值向上取整 -d 统计概率分布时横坐标的精度 示例:program -i input.csv -o output_dir 注:为了方便使用可以生成`.jar`后在环境变量包含的目录下新建一个脚本调用,例如: 可执行脚本`satool`(Linux): #!/bin/bash java -jar ~/satool/target/satool-0.3.jar $* 批处理脚本`satool.bat`(Windows): @ECHO OFF java -jar C:\Users\az13js\satool\target\satool-0.3.jar %* 然后直接输入`satool`并传入参数就行了: $ satool -h 命令行参数: -i 数据文件名(必填) -o 输出目录(必填) -h 打印此帮助信息 -m 自由度,默认为长度的自然对数值向上取整 -d 统计概率分布时横坐标的精度 示例:program -i input.csv -o output_dir ### 三,指定参数 不带参数执行程序可以查看帮助信息: $ java -jar target/satool-0.3.jar 命令行参数: -i 数据文件名(必填) -o 输出目录(必填) -h 打印此帮助信息 -m 自由度,默认为长度的自然对数值向上取整 -d 统计概率分布时横坐标的精度 示例:program -i input.csv -o output_dir 参数`-i`:用以指定分析的时间序列文件。时间序列文件是一个csv格式的文本,里面的第一列数据会被程序使用。数据必须全部都是数字,如果掺杂了中文或者英文的话程序执行会出现问题。也就是说需要注意第一行不要添加表头。 参数`-o`:指定一个目录用来给程序写入计算结果。目录必须存在,不存在会导致程序运行错误。 参数`-h`:只要有这个参数,程序就会输出帮助信息,效果和不带参数执行程序是一样的。 参数`-m`:可选的参数,指定混成检验时自由度的值。默认情况下它等于向上取整的ln(序列长度)。自由度需要大于0且小于时间序列长度,否则将提示错误消息并忽视输入的自由度。 参数`-d`:可选,统计概率分布时横坐标的精度。默认值为200,必须大于0。 ## 程序执行结果 文件夹`files`内包含一个`input.csv`文件可以用来查看执行效果(如果使用Windows系统注意把`/`替换为`\`): $ java -jar target/satool-0.3.jar -i files/input.csv -o files -m 20 "********** Basic info **********" LEN=100 MIN=-3.273609668903302 MAX=3.9946403140242444 AVG=-0.00605672992982714 VAR=1.7717366348110508 "********** Advanced **********" m=20 Q=56.98212904184351 “Basic info”里面的是基本信息,LEN是序列长度、MIN是序列最小值、MAX是序列最大值、AVG平均值、VAR是方差。“Advanced”里面的是混成检验结果,m是自由度,Q是卡方统计量,结合后面附带给出的卡方统计量表可以得知自由度等于20时出现Q=56.98左右的情况概率小于0.5%。 参数`-o`指定的文件夹`files`里生成程序分析结果文件若干个(输出内容保留小数点后9位): - `sequence.csv`是程序读取到的时间序列的值,生成这个可以用于调试需要; - `distribution.csv`是数据的概率分布大概的情况; - `af.csv`是自协方差函数计算结果; - `acf.csv`是自相关系数函数的计算结果; - `pacf.csv`是偏自相关系数函数的计算结果; - `q.csv`是计算出来的前20个自由度的卡方统计值和95%卡方统计值的对比结果。 文件`sequence.csv`第一列是序号,第二列是时间序列对应的值。 1.000000000,-0.439603640 2.000000000,0.225560653 3.000000000,2.778596490 4.000000000,-0.266824471 5.000000000,-1.072888992 ...... 文件`distribution.csv`含有两列,第一列是时间序列取值,第二列是取对应值附近时相对概率的大小。 -3.255439044,0.000181706 -3.219097794,0.000000000 -3.182756544,0.000000000 -3.146415294,0.000363412 -3.110074044,0.000000000 ...... 文件`af.csv`的内容是4列,第一列是自协方差的阶数,第二列是自协方差的值,第三列、第四列分别是负两倍标准差和正两倍标准差。 0.000000000,1.771736635,1.521175237,2.022298033 1.000000000,0.660994013,-0.178066232,0.178066232 2.000000000,0.065290021,-0.178972427,0.178972427 3.000000000,0.047757010,-0.179892600,0.179892600 4.000000000,0.331908970,-0.180827113,0.180827113 ...... 文件`acf.csv`有4列,第一列是自相关系数函数的阶数,第二列是自相关系数函数的值,第三列、第四列分别是负两倍标准差和正两倍标准差。 0.000000000,1.000000000,1.000000000,1.000000000 1.000000000,0.374902202,-0.209007438,0.189007438 2.000000000,0.036819169,-0.210000000,0.190000000 3.000000000,0.027291721,-0.211007563,0.191007563 4.000000000,0.187956449,-0.212030509,0.192030509 ...... 文件`pacf.csv`有5列,第一列是偏自相关系数函数的阶数,第二例是偏自相关系数函数值,第三列、第四列分别是负两倍标准差和正两倍标准差,最后一列是误差的方差。 1.000000000,0.373076901,-2.469927154,2.469927154,1.525135037 2.000000000,-0.118882310,-2.452411301,2.452411301,1.503580298 3.000000000,0.065898408,-2.447080587,2.447080587,1.497050850 4.000000000,0.185430598,-2.404641757,2.404641757,1.445575495 5.000000000,-0.039065830,-2.402806147,2.402806147,1.443369346 ...... 文件`q.csv`有3列,第一列是自由度,第二例是对应的自由度的卡方统计值,第三列是有95%把握的卡方统计值。 1.000000000,14.481080230,3.841000000 2.000000000,14.622178620,5.991000000 3.000000000,14.700501792,7.815000000 4.000000000,18.454062128,9.488000000 5.000000000,19.796654863,11.071000000 ...... 下面是使用第三方的表格处理软件根据生成结果绘制的图: `sequence.csv` ![sequence.csv](README_IMAGES/sequence.csv.jpg) `distribution.csv` ![sequence.csv](README_IMAGES/distribution.csv.jpg) `af.csv`(图片是AF函数前20阶,含20) ![af.csv](README_IMAGES/af.csv.jpg) `acf.csv`(图片是ACF函数前20阶,含20) ![acf.csv](README_IMAGES/acf.csv.jpg) `pacf.csv`(图片是ACF函数前21阶,含21,这里第5列没画出来) ![pacf.csv](README_IMAGES/pacf.csv.jpg) `q.csv` ![q.csv](README_IMAGES/q.csv.jpg) ## 附带卡方统计量表 ![卡方统计量表](README_IMAGES/x2_table.png)