Neurosynth教程 (操作记录)

本次教程目的如下:
导入进行基本分析所需的模块;
从提供的文本文件中创建一个新的 Neurosynth 数据集对象;
运行简单的基于术语的荟萃分析。

—————————————————————————————————————————————————————

创建不同版本的新数据集(可跳过该步骤)

创建一个新的数据集(这里示例的version 7),本质上只是一个巨大的激活坐标和相关研究 ID 的列表。

基于特征的简单荟萃分析
对文献进行自动化的大规模荟萃分析。
构建两个文件:
database文件
包含Neurosynth 数据库中所有研究的激活数据和关键元数据。每一行代表一项研究的单个激活。列包括 id、x/y/z 坐标和立体定向空间(MNI,TAL等)。

%首先将需要用到的tsv文件转为xlsx格式
% 使用readtable函数读取TSV文件
coordinates = xlsread('data-neurosynth_version-7_coordinates.xlsx');
[~, ~, metadata]=xlsread('data-neurosynth_version-7_metadata.xlsx');
metadata(1,:)=[];
%列分别为id,x,x,y,space
data=num2cell(coordinates(:,[1,5,6,7]));
jishu=1;
for i=1:size(metadata,1)
    for j=jishu:size(coordinates,1)
     if isequal(data{j, 1},metadata{i, 1})
         data{jishu, 5}=metadata{i, 3};
         jishu=jishu+1;
     end
    end
    disp(i)
end
headers = {'id', 'x', 'y', 'z', 'space'};
database=[headers;data];
filename = 'database.xlsx';
 
xlswrite(filename, database);

在这里插入图片描述

feature文件
为上一个教程中代码所获得的文件。行表示研究,列表示术语。
在这里插入图片描述
将这两个文件分别保存到txt文件中,database.txtfeatures.txt(version 7)。

简单实例

不过,数据集存档 (current_data.tar.gz) 已经提供2 个实例文件:database.txtfeatures.txt (version 4)。下述代码基于提供的这两个文件(version 4)进行。

数据中包含了许多心理学术语(如 “语言”、“情感”、“记忆 ”等),这些术语在数据集中出现的频率较高。假设我们想对情感研究进行荟萃分析。我们可以将情感研究定义为作者高频使用以 “emo ”开头的词的研究,我们实际上是在讨论数据集中的每项研究在相应文章的全文中使用 “情感 ”一词的频率。

我们整理好了激活数据和特征数据,我们先做一下简单的基于术语的荟萃分析。

导入模块

from neurosynth.base.dataset import Dataset #管理和访问数据的核心功能
from neurosynth.analysis import meta, decode, network#用于元分析、图像解码和共激活分析的分析工具

建立数据集

dataset = Dataset('database.txt')
dataset.add_features('features.txt')
print(dataset.get_feature_names())#查看数据特征,返回了术语列表,我们可以单独或组合使用这些术语来选择纳入荟萃分析的文章。
在这里插入图片描述
ids = dataset.get_studies(features='emo*', frequency_threshold=0.001) #查询以emo开头的单词(如 “emotional”、“emotional”、“emotally ”等),频率超过千分之一的研究id列表,即一篇文章有5000个单词,至少emo开头的单词有五次,才被纳入列表。
len(ids)#包含的研究数目

根据选择的术语进行meta分析

from neurosynth.analysis import meta
ma = meta.MetaAnalysis(dataset, ids)
ma.save_results('emotion')#对筛选的研究进行meta分析,结果保存在emotion文件中
在这里插入图片描述
可以看出,这是一组nii格式的输出结果。

我们对一些重要函数进行详细解释:

dataset.get_studies
这个函数是为了获取符合特定条件的研究ID

def get_studies(self, features=None, expression=None, mask=None,
                    peaks=None, frequency_threshold=0.001,
                    activation_threshold=0.0, func=np.sum, return_type='ids',
                    r=6
                    ):

其中features(列表或字符串)是 特征名称或特征名称的列表,
expression(str)要传递给 PEG 的字符串表达式,用于检索研究报告。
mask: the mask image (see Masker documentation for valid data types)。
paeks(ndarray 或 list): 一个 n x 3 的 numpy 数组,或一个由列表或元组组成的列表(例如,[(-10, 22, 14)])。
frequency_threshold(float):对于基于特征或基于表达式的选择,用于选择研究的阈值–即纳入研究的临界值。必须是范围为 [0, 1] 的浮点数。
activation_threshold(int 或 float): 对于基于mask的选择,根据显示的激活数目来确定是否纳入研究的阈值。如果是整数,则表示必须有多少体素在掩码内处于激活状态,研究才会被选中。如果是浮点数,则表示必须激活的体素比例。

如果传递了多个标准,则返回交叉集。例如,如果传递 expression='emotionmask='my_mask.nii.gz',将只返回那些与情绪相关且报告了所传图像中的体素内激活情况的研究。

得到的结果是字符串形式,可以选择:
ids:返回筛选出的研究的 ID 列表。
images:返回一个矩阵(voxel*选择的study)
weights:返回一个dict,其中键为研究 ID,值为计算的权重。仅在执行基于特征的选择时有效。
r (int): 对于基于峰值的选择,纳入研究的距离截断值(单位:毫米)(即只有研究的一个或多个激活 在 r 毫米范围内的研究才会被返回)。
返回值:
return_typeids(默认)时,将返回所选研究的 ID 列表。当 return_typeimages时,返回一个二维 numpy 数组,行为体素,列为研究。当 return_typeweights(仅对基于表达式 (expression-based)的选择有效),返回一个 dict,其中键为研究 ID,值为 计算的权重。

那么,我们可以用该函数实现哪些功能呢?

  1. 就是我们在简单实例中做的那样,选择出标记有 “情感 ”特征的研究:
    ids = dataset.get_studies(features='emotion')
  2. 选择在杏仁核mask中激活了至少 20% 体素的研究,并且检索激活数据而不是 ID:
    dataset.get_studies(mask='amygdala_mask.nii.gz', threshold=0.2, return_type='images')
  3. 选择报告在三个特定病灶中至少一个病灶的 12 毫米范围内至少有一个激活的研究:
    ids = dataset.get_studies(peaks=[[12, -20, 30], [-26, 22, 22], [0, 36, -20]], r=12)
  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值