tigramite教程(一)解释与假定或发现的因果模型相关的关联

文章目录

  • 0、生成一些具有同时依赖关系的示例过程
  • 1、估计(马尔可夫等价类的)因果图
  • 2、如果马尔可夫等价类有多个成员(存在未定向的边),选择类的一个成员,这可以自动完成
  • 3、对从图中提取的因果父节点进行线性结构因果模型拟合
  • 4、估计残差的噪声协方差矩阵
  • 5、利用这种噪声结构构建线性高斯结构因果模型
  • 6、展示原始数据的滞后相关性与生成数据的(集合均值和置信区间)滞后相关性。

在因果发现中的一个常见任务是证明和验证为什么一个假设或重建的因果网络是合理的。在这里,我们展示如何利用估计的图来构建一个模型,解释数据集的滞后相关结构。具体步骤如下:

1、估计(马尔可夫等价类的)因果图
2、如果马尔可夫等价类有多个成员(存在未定向的边),选择类的一个成员,这可以自动完成
3、对从图中提取的因果父节点进行线性结构因果模型拟合
4、估计残差的噪声协方差矩阵
5、利用这种噪声结构构建线性高斯结构因果模型,并使用与数据相同的样本大小生成许多实现
6、展示原始数据的滞后相关性与生成数据的(整体均值和置信区间)滞后相关性

# Imports
import numpy as np
import matplotlib
from matplotlib import pyplot as plt
%matplotlib inline     

import tigramite
from tigramite import data_processing as pp
from tigramite.toymodels import structural_causal_processes as toys

from tigramite.toymodels import surrogate_generator 

from tigramite import plotting as tp
from tigramite.pcmci import PCMCI
from tigramite.independence_tests.parcorr import ParCorr
from tigramite.models import Models, Prediction

import math
import sklearn
from sklearn.linear_model import LinearRegression

0、生成一些具有同时依赖关系的示例过程

#正常显示坐标轴负号
matplotlib.rcParams['axes.unicode_minus'] = False
np.random.seed(14)     # Fix random seed
lin_f = lambda x: x
links_coeffs = {0: [((0, -1), 0.7, lin_f)],
                1: [((1, -1), 0.8, lin_f), ((0, -1), 0.3, lin_f)],
                2: [((2, -1), 0.5, lin_f), ((0, -2), -0.5, lin_f)],
                3: [((3, -1), 0., lin_f)], #, ((4, -1), 0.4, lin_f)],
                4: [((4, -1), 0., lin_f), ((3, 0), 0.5, lin_f)], #, ((3, -1), 0.3, lin_f)],
                }
T = 200     # time series length
# Make some noise with different variance, alternatively just noises=None
noises = np.array([(1. + 0.2*float(j))*np.random.randn((T + int(math.floor(0.2*T)))) 
                   for j in range(len(links_coeffs))]).T

data, _ = toys.structural_causal_process(links_coeffs, T=T, noises=noises, seed=14)
T, N = data.shape

# For generality, we include some masking
# mask = np.zeros(data.shape, dtype='int')
# mask[:int(T/2)] = True
mask=None

# Initialize dataframe object, specify time axis and variable names
var_names = [r'$X^0$', r'$X^1$', r'$X^2$', r'$X^3$', r'$X^4$']
dataframe = pp.DataFrame(data, 
                         mask=mask,
                         datatime = {0:np.arange(len(data))}, 
                         var_names=var_names)
tp.plot_timeseries(dataframe=dataframe); plt.show()

在这里插入图片描述
现在让我们看一下滞后相关性矩阵。我们希望找到一个解释它的结构性因果模型。

tau_max = 10
parcorr = ParCorr(significance='analytic', 
#                   mask_type='y'
                 )
pcmci = PCMCI(
    dataframe=dataframe, 
    cond_ind_test=parcorr,
    verbosity=0)
original_correlations = pcmci.get_lagged_dependencies(tau_max=tau_max, val_only=True)['val_matrix']
lag_func_matrix = tp.plot_lagfuncs(val_matrix=original_correlations, setup_args={'var_names':var_names, 
                                    'x_base':5, 'y_base':.5}); plt.show()

在这里插入图片描述

1、估计(马尔可夫等价类的)因果图

在这里,我们使用一些合理的 tau_max 和 pc_alpha 运行 PCMCI+。当然,估计的模型会略微依赖于这些参数。

results = pcmci.run_pcmciplus(tau_max=tau_max, pc_alpha=0.01)
tp.plot_graph(results['graph']); plt.show()

在这里插入图片描述

2、如果马尔可夫等价类有多个成员(存在未定向的边),选择类的一个成员,这可以自动完成

PCMCI+ 的结果是一个 CPDAG(存在未定向的边)。我们使用一些内部函数选择此类别的一个 DAG 成员。

# First create order that is based on some feature of the variables
# to avoid order-dependence of DAG, i.e., it should not matter
# in which order the variables appear in dataframe
# Here we use the sum of absolute val_matrix values incident at j
val_matrix = results['val_matrix']
variable_order = np.argsort(
                    np.abs(val_matrix).sum(axis=(0,2)))[::-1]

# Transform conflicting links to unoriented links as a hack, might not work...
graph = results['graph']
graph[graph=='x-x'] = 'o-o'
dag = pcmci._get_dag_from_cpdag(
                cpdag_graph=graph,
                variable_order=variable_order)

tp.plot_graph(dag); plt.show()

在这里插入图片描述
以下步骤都包含在 toymodels.surrogate_generator 模块的 generate_linear_model_from_data 函数中。

3、对从图中提取的因果父节点进行线性结构因果模型拟合

使用调用 Models() 的 Prediction 类。

4、估计残差的噪声协方差矩阵

使用 Prediction 类。

5、利用这种噪声结构构建线性高斯结构因果模型

parents = toys.dag_to_links(dag)
print(parents)

{0: [(0, -1)], 1: [(0, -1), (1, -1)], 2: [(0, -2), (2, -1)], 3: [], 4: [(3, 0)]}

现在使用与数据相同的样本大小生成实际数据。

realizations = 100

generator = surrogate_generator.generate_linear_model_from_data(dataframe, parents, tau_max, realizations=realizations, 
                generate_noise_from='covariance')
datasets = {}
for r in range(realizations):
    datasets[r] = next(generator)

6、展示原始数据的滞后相关性与生成数据的(集合均值和置信区间)滞后相关性。

correlations = np.zeros((realizations, N, N, tau_max + 1))
for r in range(realizations):
    pcmci = PCMCI(
        dataframe=pp.DataFrame(datasets[r]), 
        cond_ind_test=ParCorr(),
        verbosity=0)
    correlations[r] = pcmci.get_lagged_dependencies(tau_max=tau_max, val_only=True)['val_matrix']
# Get mean and 5th and 95th quantile
correlation_mean = correlations.mean(axis=0)
correlation_interval = np.percentile(correlations, q=[5, 95], axis=0)
# Plot lag functions of mean and 5th and 95th quantile together with original correlation in one plot
lag_func_matrix = tp.setup_matrix(N=N, tau_max=tau_max, x_base=5, figsize=(10, 10), var_names=var_names)
lag_func_matrix.add_lagfuncs(val_matrix=correlation_mean, color='black')
lag_func_matrix.add_lagfuncs(val_matrix=correlation_interval[0], color='grey')
lag_func_matrix.add_lagfuncs(val_matrix=correlation_interval[1], color='grey')
lag_func_matrix.add_lagfuncs(val_matrix=original_correlations, color='red')
lag_func_matrix.savefig(name=None)

在这里插入图片描述
现在,原始数据中的滞后函数(红色)应该大致在生成数据的相关性范围(灰色)的90%之内。这意味着,具有与重建的因果图相同链接(以及估计系数和噪声结构)的线性高斯模型能够很好地解释原始数据的整体滞后相关性结构。因此,这是一个简洁的因果模型,可以解释数据。

最后,我们还可以展示(混合的)相关性图。

pcmci = PCMCI(
    dataframe=dataframe, 
    cond_ind_test=parcorr,
    verbosity=0)
original_correlations_pvals = pcmci.get_lagged_dependencies(tau_max=tau_max)['p_matrix'] 
tp.plot_graph(graph=original_correlations_pvals<=0.01); plt.show()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/410730.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

跨端轻量JavaScript引擎的实现与探索

一、JavaScript 1.JavaScript语言 JavaScript是ECMAScript的实现,由ECMA 39(欧洲计算机制造商协会39号技术委员会)负责制定ECMAScript标准。 ECMAScript发展史: 时间版本说明1997年7月ES1.0 发布当年7月&#xff0c;ECMA262 标准出台1998年6月ES2.0 发布该版本修改完全符合…

cgroup底层技术研究一、cgroup简介与cgroup命令行工具

本文参考以下文章&#xff1a; 58 | cgroup技术&#xff1a;内部创业公司应该独立核算成本 特此致谢&#xff01; 一、cgroup简介 1. cgroup是什么 cgroup&#xff08;Control Group&#xff09;是Linux内核提供的一种机制&#xff0c;用于对进程或进程组进行资源限制、优先…

IDA使用-2023CICSN华中赛区pwn题逆向为例

文章目录 相关字节标识导入函数和导出函数找程序入口函数选项设置重命名CISCN2023华中赛区分区赛AWDIDA源码main 构造结构体sub_141B() 打开局部变量类型的视图增加变量类型重新定义变量类型再次设置变量类型并重新定义再次设置变量类型并重新定义再次设置变量类型并重新定义 设…

项目实战:Qt监测操作系统cpu温度v1.1.0(支持windows、linux、国产麒麟系统)

若该文为原创文章&#xff0c;转载请注明出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/136277231 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结…

linux系统---nginx基础

目录 一、Nginx的概念 二、Nginx常用功能 1、HTTP(正向)代理&#xff0c;反向代理 1.1正向代理 1.2 反向代理 2、负载均衡 2.1 轮询法&#xff08;默认方法&#xff09; 2.2 weight权重模式&#xff08;加权轮询&#xff09; 2.3 ip_hash 3、web缓存 三、基础特性 四…

@ControllerAdvice 统一管理异常/错误

ControllerAdvice 统一管理异常/错误 文章目录 ControllerAdvice 统一管理异常/错误一、注意事项二、统一管理异常/错误的好处三、代码实现1. 普通方法2. 统一管理ControllerAdvice3. PostMan测试结果 一、注意事项 1. 如果校验注解不指定 message 属性 ,会返回默认消息, 这些…

C++之善用const修饰成员函数

C之善用const修饰成员函数 文章目录 C之善用const修饰成员函数前言1. 约束函数对成员变量的修改2. 允许 const 对象调用3. 在重载函数中提供重载决策总结 前言 ​ 在C编程中&#xff0c;使用const修饰成员函数是一种非常重要的技术手段&#xff0c;它能够提高代码的可维护性、…

Object中的hashCode()

让hashcode方法的返回值为地址 vm参数中输入-XX:UnlockExperimentalVMOptions -XX:hashCode4&#xff0c;如下图&#xff1a; 参考 搞懂JAVAObject中的hashCode()_java_脚本之家 JDK核心JAVA源码解析(9) - hashcode 方法 - 知乎

【k8s】-- 查询 pod 磁盘容量

命令&#xff1a;kubectl get pvc -n 你的namespace --context上下文命名 -o wide 举例&#xff1a;kubectl get pvc -n my-bigdata --contextprod-6 -o wide

10分钟快速开始SkyWalking结合Springboot项目

10分钟快速开始SkyWalking结合Springboot项目 实习期间&#xff0c;公司让我去学习一下链路追踪如何集成到Springboot项目中。 为此有两个方案&#xff1a; 1.opentelementryjaegerprometheus opentelementry 收集器收集线上的metrics和traces&#xff0c;然后发送给jaeger和p…

水资源费征收管理系统V1.1

水资源费征收管理系统 Water Resource Fee Collection And Management System 水资源费征收管理系统 Water Resource Fee Collection And Management System

MS2402隔离Σ-Δ调制器

产品简述 MS2402 是一款二阶 Σ-Δ 调制器&#xff0c;集成片上数字隔离器&#xff0c;能将模 拟输入信号转换为高速 1 位码流。调制器对输入信号连续采样&#xff0c;无 需外部采样保持电路。模拟信号输入满量程为 320mV &#xff0c;转换后的 数字码流的最高数据速率为 1…

js 常见报错 | js 获取数据类型 | js 判断是否是数组

文章目录 js 常见报错1.1 SyntaxError&#xff08;语法错误&#xff09;1.2 ReferenceError&#xff08;引用错误&#xff09;1.3 RangeError&#xff08;范围错误&#xff09;1.4 TypeError&#xff08;类型错误&#xff09;1.5 URLError&#xff08;URL错误&#xff09;1.6 手…

如何用二维码高效收集信息?表单功能轻松实现

表单作为草料二维码的高级功能之一&#xff0c;可用于收集格式统一的数据。你可以通过组合姓名、图片、检查项等组件搭建出电子表单&#xff0c;关联到二维码中&#xff0c;扫码填写表单即可更快速、规范的收集数据。 下面为大家介绍下表单的制作教程。 1、新建表单 新建表单…

跨区域复制建筑UI输入框脚本迷你世界

--复制区域文件 --设置坐标起点&#xff0c;终点 --创建区域 --获取坐标id,data --星空露珠工作室制作 local pos1{x-16,y7,z28} local pos2{x28,y44,z-9} local block{num0} local str{} local str0{} local num0 local count0 local ui6 --几个输入框 local romath.random(…

辽宁博学优晨教育视频剪辑培训探索学习新意义

在当今数字化快速发展的时代&#xff0c;视频已成为信息传达的重要载体。辽宁博学优晨教育视频剪辑培训应运而生&#xff0c;不仅为学员提供了专业的学习平台&#xff0c;更在探索学习的意义方面赋予了新的内涵。 视频剪辑作为现代媒体行业的重要技能&#xff0c;其学习意义不仅…

武汉建筑安全员ABC小题库不存在未雨绸缪“时间够”

武汉建筑安全员ABC小题库不存在未雨绸缪“时间够” 关于武汉三类人员&#xff08;安全员ABC&#xff09;考试小题库&#xff0c;一般都是考试时间出来&#xff0c;准考证下来了&#xff0c;匹配题库&#xff0c;好好看题&#xff08;认真练习即可&#xff09;&#xff0c;一般…

如何在Linux搭建MinIO服务并实现无公网ip远程访问内网管理界面

文章目录 前言1. Docker 部署MinIO2. 本地访问MinIO3. Linux安装Cpolar4. 配置MinIO公网地址5. 远程访问MinIO管理界面6. 固定MinIO公网地址 前言 MinIO是一个开源的对象存储服务器&#xff0c;可以在各种环境中运行&#xff0c;例如本地、Docker容器、Kubernetes集群等。它兼…

微信小程序(四十五)登入界面-简易版

注释很详细&#xff0c;直接上代码 上一篇 此文使用了vant组件库&#xff0c;没有安装配置的可以参考此篇vant组件的安装与配置 新增内容&#xff1a; 1.基础组件的组合 2.验证码倒计时的逻辑处理 源码&#xff1a; app.json {"usingComponents": {"van-field…