主要内容

从RNA-Seq数据识别差异表达基因

这个例子展示了如何测试RNA-Seq数据使用负二项模型的差异表达基因。

介绍

典型的微分表达式分析RNA-Seq正常化数据由原始计数和执行统计测试拒绝或接受零假设,两组样本显示在基因表达无显著差异。这个例子展示了如何检查原始统计数据的基本统计信息,如何确定大小因素数量标准化以及如何推断最负二项模型的差异表达基因。

这个例子中包含的数据集RNA-Seq在实验中获得的数据被布鲁克斯等。[1]。作者调查了影响pasilla siRNA可拆卸的,已知基因剪接的调控起着重要的作用黑腹果蝇。2生物复制的数据集是由控制(治疗)样品和2生物复制的混战(治疗)样本。

检查阅读基因组特性的计算表

RNA-Seq数据分析的起点是一个计算矩阵,行对应于感兴趣的基因功能,列对应于给定的样本和代表的值读取映射到每个特性的数量在一个给定的样本。

包括文件pasilla_count_noMM.mat包含两个表数矩阵在基因水平和外显子层面的考虑样本。您可以获得相似的矩阵使用函数featurecount

负载pasilla_count_noMM.mat
%预览基因的读表数头(geneCountTable)
ID引用untreated3 untreated4 treated2 treated3 _________________ _____ __________ __________说“FBgn0000003”“3 r”0 1 1 2“FBgn0000008”“2 r”142 117 138 132“FBgn0000014”“3 r”20 12 10 19“FBgn0000015”“3 r”2 4 0 1“FBgn0000017”“3 l”6591 5127 4809 6027“FBgn0000018”“2 l“469 530 492 574“FBgn0000024”“3 r”5 6 10 8“FBgn0000028”“X”0 0 2 1

注意,当执行计数没有总结,个人特征(外显子)报告与他们metafeature赋值(在这种情况下基因)其次是启动和停止的位置。

%预览外显子的读表数头(exonCountTable)
ID引用untreated3 untreated4 treated2 treated3 _______________________________ _____ __________ __________说“FBgn0000003_2648220_2648518”“3 r”0 0 0 1“FBgn0000008_18024938_18025756”“2 r”0 1 0 2“FBgn0000008_18050410_18051199”“2 r”13 9 14 12“FBgn0000008_18052282_18052494”“2 r”4 2 5 0“FBgn0000008_18056749_18058222”“2 r”32 26日27日23“FBgn0000008_18058283_18059490”“2 r”14日18日29日22“FBgn0000008_18059587_18059757”“2 r”1 4 3 0“FBgn0000008_18059821_18059938”“2 r”0 0 2 0

您可以通过创建一个注释和组样品逻辑向量如下:

样品= geneCountTable .Properties.VariableNames(:, 3:结束);未经处理的= strncmp(样本,“未经处理”长度(“未经处理”)治疗= strncmp(样本,“治疗”长度(“治疗”))
治疗= 1 x4逻辑数组1 1 0 0 = 1对待x4逻辑数组0 0 1 1

绘图功能分配

包括文件还包含一个表geneSummaryTable总结的分配和萨姆未赋值的条目。可以绘制的基本分布计算结果通过考虑读取的数量被分配到给定的基因组特性(外显子或基因对于这个示例),以及读取的数量未赋值的(即没有重叠特性)或模棱两可(即重叠的多个特性)。

圣= geneSummaryTable ({“分配”,“Unassigned_ambiguous”,“Unassigned_noFeature”}:)栏(table2array (st)”,“堆叠”);传奇(st.Properties.RowNames ',“翻译”,“没有”,“位置”,“东南”);包含(“样本”)ylabel (读取的数)
圣= 3 x4表untreated3 untreated4 treated2 treated3 __________ __________ __________ __________分配1.5457 1.6302 e + e + 07年07年1.5146 1.8856 e + e + 07年07 Unassigned_ambiguous 1.5708 e + 05年1.6882 e + 05年1.6194 1.9977 e + e + 05年05 Unassigned_noFeature 7.5455 e + 05年5.8309 e + 05年5.8756 e + e + 05年05年6.8356

注意,山姆的校准记录的一小部分文件不是报告汇总表。你可以注意到这个差异在山姆文件记录的总数和总记录数的计数过程中处理程序相同的山姆文件。这些报道记录对应记录映射到参考序列不是GTF文件中的注释,因此是不加工的计算过程。如果基因模型占所有在使用的参考序列读取映射步骤,然后所有记录报告汇总表的类别之一。

geneSummaryTable {“TotalEntries”:}- sum (geneSummaryTable {2:,:})
ans = 89516 95885 98207 104629

策划读覆盖在一个给定的染色体

当读计数使用函数不执行总结featurecount,默认id是由属性或metafeature(默认情况下,gene_id)其次是启动和停止位置的功能(默认情况下,外显子)。您可以使用外显子开始在任何位置画出阅读报道染色体在考虑,例如染色体臂2 l。

%认为染色体臂2 lchr2L = strcmp (exonCountTable.Reference,' 2 l ');exonCount = exonCountTable{: 3:结束};%检索外显子开始的位置exonStart = regexp (exonCountTable {chr2L 1},“_ (\ d +) _”,“令牌”);exonStart = [exonStart {}):;exonStart = cellfun (@str2num [exonStart {}):”);%进行外显子的位置开始[~,idx] = (exonStart)进行排序;%情节读沿着基因组覆盖率坐标图;情节(exonStart (idx) exonCount (idx、处理),“。r”,exonStart (idx) exonCount (idx,未经处理的),“。”);包含(“基因组的位置”);ylabel (“读计数(外显子级)”);标题(“读指望染色体臂2 l”);%情节读覆盖率分别为每个组图;次要情节(2,1,1);情节(exonStart (idx) exonCount (idx,未经处理的),“。r”);ylabel (“读计数(外显子级)”);标题(的染色体臂2 l(样品处理));次要情节(2,1,2);情节(exonStart (idx) exonCount (idx、处理),“。”);ylabel (“读计数(外显子级)”);包含(“基因组的位置”);标题(的染色体臂2 l(未经处理的样品));

或者,您可以绘制读报道考虑每个基因的起始位置在一个特定的染色体。该文件pasilla_geneLength.mat包含一个表中每个基因的启动和停止位置对应的基因注释文件。

%负载基因启动和停止的位置信息负载pasilla_geneLength头(geneLength)
ID名称引用开始停止_________________替_____ _____“FBgn0037213”“CG12581”3 r 380 10200“FBgn0000500”“Dsk”3 r 15388 16170“FBgn0053294”“CR33294”3 r 17136 21871“FBgn0037215”“CG12582”3 r 23029 30295“FBgn0037217”“CG14636”3 r 30207 41033“FBgn0037218”“辅助”3 r 37505 53244“FBgn0051516”“CG31516”3 r 44179 45852“FBgn0261436”“DhpD”3 r 53106 54971
%认为染色体3(“参考”是一个分类变量)chr3 = (geneLength。参考= =' 3 l ')| (geneLength。参考= =“3 r”);总和(chr3)%考虑基因在染色体3数量= geneCountTable{: 3:结束};(~ j k) =相交(geneCountTable {:,“ID”},geneLength {chr3,“ID”});gstart = geneLength {k,“开始”};gcounts =计数(j:);%根据提升起始位置[~,idx] = (gstart)进行排序;%情节读报道基因的位置图;情节(gstart (idx) gcounts (idx、处理),“。r”,gstart (idx) gcounts (idx,未经处理的),“。”);包含(“基因组的位置”)ylabel (“读计数”);标题(“读指望染色体3 ');
ans = 6360

正常化读计数

读计数RNA-Seq数据被发现是线性相关的大量记录[2]。然而,阅读数对于一个给定的基因的表达水平不仅取决于基因,但也读的总数测序和基因转录的长度。因此,为了推断基因的表达水平的阅读数量,我们需要考虑基因的测序深度和记录长度。规范化阅读数的一个常用的技术是使用RPKM(每千碱基读取映射)值,读计数的规范化的总数读了(百万)和每个记录的长度(碱基)。这个归一化技术,然而,并不总是有效的很少,非常高表达基因可以主导巷总数和斜表达分析。

更好的规范化技术包括计算有效库大小为每个样本通过考虑一个大小的因素。每个样品的数量除以相应的大小因素,我们把所有的计算值一个共同的规模,使其具有可比性。凭直觉,如果样本测序N倍比样品B, non-differentially表达基因的阅读数量预计将平均N倍样品比样本B,即使没有差异表达。

估计规模因素,采取观察计数比率的中值的pseudo-reference样本,其数量可以通过考虑每个基因在所有样本的几何平均数[3]。然后,将观察到的常见的规模数量,每个样本中观察到的数量除以相应大小的因素。

%与几何平均估计pseudo-reference行,行pseudoRefSample = geomean(数量2);新西兰= pseudoRefSample > 0;比率= bsxfun (@rdivide计数(新西兰:),pseudoRefSample(新西兰));sizeFactors =值(比率,1)
sizeFactors = 0.9374 0.9725 0.9388 1.1789
%转换常见的规模normCounts = bsxfun (@rdivide、计数、sizeFactors);normCounts (1:10,:)
ans = 1.0 e + 03 * 0 0.0010 0.0011 0.0017 0.1515 0.1203 0.1470 0.1120 0.0213 0.0123 0.0107 0.0161 0.0021 0.0041 0 0.0008 7.0315 5.2721 5.1225 5.1124 0.5003 0.5450 0.5241 0.4869 0.0053 0.0062 0.0107 0.0068 0 0 0.0021 0.0008 1.2375 1.1753 1.2122 1.2003 0.0008 0 0 0

你可以欣赏这个规范化使用函数的影响箱线图代表统计值等措施,四分位数、最小值和最大值。

图;次要情节(2,1,1)maboxplot (log2(计数)“标题”,“原始读计数”,“定位”,“水平”)ylabel (“样本”)包含(“log2(计数)”次要情节(2,1,2)maboxplot (log2 (normCounts),“标题”,“规范化阅读数”,“定位”,“水平”)ylabel (“样本”)包含(“log2(计数)”)

计算平均、色散和褶皱的变化

为了更好地描述数据,我们认为均值和规范化的色散。读计数的方差是由两项的总和:变异在样本(原始方差)和测量的不确定性表达式通过计算读取(散粒噪声或泊松)。原始方差项为高表达基因占主导地位,而低表达基因的散粒噪声占主导地位。你可以画出实证色散值归一化计算的均值在对数尺度如下所示。

%考虑均值meanTreated =意味着(normCounts(:治疗),2);meanUntreated =意味着(normCounts(:,未经处理的),2);%考虑色散dispTreated =性病(normCounts(:治疗),0,2)。/ meanTreated;dispUntreated =性病(normCounts(:,未经处理的),0,2)。/ meanUntreated;%情节规模对数图;重对数(meanTreated dispTreated,“r”。);持有;重对数(meanUntreated dispUntreated,“b”。);包含(“log2(的意思)”);ylabel (“log2(分散)”);传奇(“治疗”,“未经处理”,“位置”,“西南”);

由于小数量的复制,也就不足为奇了期望色散值分散方差的真正价值。其中一些方差反映了抽样方差和一些真正的差异反映了基因表达式的样品。

你可以看看两个条件之间的基因表达的差异,通过计算每个基因的褶皱变化(FC),即治疗组的数量之间的比例数未治疗组。通常这些比率被认为是log2规模,因此,任何改变对零是对称的(例如1/2和2/1的比例在对数尺度对应于- 1或+ 1)。

%计算均值和log2FCmeanBase = (meanTreated + meanUntreated) / 2;foldChange = meanTreated。/ meanUntreated;log2FC = log2 (foldChange);%情节意味着与褶皱变化(MA情节)mairplot (meanTreated meanUntreated,“类型”,“马”,“Plotonly”,真正的);集(get (gca),“包含”),“字符串”,归一化计算的意思甘氨胆酸)组(get (,“Ylabel”),“字符串”,“log2(褶皱变化)”)
警告:零值将被忽略

可以注释中的值图与相应的基因名称、交互式地选择基因,基因列表导出到工作空间通过调用mairplot功能如下图所示:

mairplot (meanTreated meanUntreated,“标签”geneCountTable.ID,“类型”,“马”);
警告:零值将被忽略

方便存储信息的平均值和褶皱变化表中每个基因。然后您可以访问给定基因或一组基因信息满足特定条件的由基因索引表的名字。

每一个基因%创建表的统计信息geneTable =表(meanBase meanTreated、meanUntreated foldChange, log2FC);geneTable.Properties。RowNames = geneCountTable.ID;
%总结总结(geneTable)
变量:meanBase: 11609 x1双重价值:0.21206分钟201.24最大2.6789 e + 05 meanTreated中位数:11609 x1双重价值:最小0值201.54最大2.5676 e + 05 meanUntreated: 11609 x1双重价值:最小0值199.44最大2.7903 e + 05 foldChange: 11609 x1双重价值:最小0值0.99903最大Inf log2FC: 11609 x1双重价值:最小负无穷值-0.001406最大正无穷
%预览头(geneTable)
meanBase meanTreated meanUntreated foldChange log2FC ________ ___________ _________________ __________ _____ FBgn0000003 FBgn0000008 0.9475 1.3808 0.51415 2.6857 1.4253 132.69 129.48 135.9 15.111 13.384 16.838 0.79488 -0.33119 0.95277 - -0.069799 FBgn0000014 FBgn0000015 FBgn0000017 1.7738 0.42413 3.1234 0.13579 -2.8806 5634.6 5117.4 6151.8 514.08 505.48 522.67 0.96711 -0.048243 0.83186 - -0.26559 FBgn0000018 FBgn0000024 FBgn0000028 7.2354 8.7189 5.752 1.5158 0.60009 0.74465 - 1.4893 0正正无穷
%访问一个特定的基因信息myGene =“FBgn0261570”;geneTable (myGene:) geneTable (myGene, {“meanBase”,“log2FC”})%访问给定基因信息列表myGeneSet = [“FBgn0261570”,“FBgn0261573”,“FBgn0261575”,“FBgn0261560”];geneTable (myGeneSet:)
ans = 1 x5表meanBase meanTreated meanUntreated foldChange log2FC ________ ___________ _________________ __________ _________ FBgn0261570 4435.5 4939.1 3931.8 1.2562 0.32907 ans = 1 x2表meanBase log2FC ________ _________ FBgn0261570 4435.5 - 0.32907 ans = 4 x5表meanBase meanTreated meanUntreated foldChange log2FC ________ ___________ _________________ __________ _________ FBgn0261570 FBgn0261573 2936.9 2954.8 2919.1 4435.5 4939.1 3931.8 1.2562 0.32907 4.3776 5.6318 3.1234 1.8031 0.85047 1.0122 - 0.01753 FBgn0261575 FBgn0261560 0.57738 - -0.7924 2041.1 - 1494.3 2588

负二项模型推断微分表达式

决定基因表达的两个条件是统计不同由拒绝零假设,这两个数据样本来自分布以同样的手段。这个分析假设读统计建模根据负二项分布(如[3]提出的)。这个函数rnaseqde执行这种类型的假设检验三种可能的选项来指定类型的方差和均值之间的链接。

通过指定方差和均值之间的联系作为一个身份,我们假设方差等于的意思是,和泊松分布的统计建模[4]。“IDColumns”指定从输入表列添加到输出表来帮助保持数据组织。

diffTableIdentity = rnaseqde (geneCountTable, (“untreated3”,“untreated4”]、[“treated2”,“treated3”),VarianceLink =“身份”IDColumns =“ID”);%预览结果。头(diffTableIdentity)
ID Mean1非常刻薄的Log2FoldChange PValue AdjustedPValue _________________ FBgn0000003“____ ____ ____ * * * * * * 0.51415 1.3808 1.4253 135.9 129.48 -0.069799 0.48628 0.64516 0.627 - 0.75892“FBgn0000008”“FBgn0000014”16.838 13.384 -0.33119 3.1234 0.42413 -2.8806 0.05835 0.12584 0.44445 - 0.61806“FBgn0000015”“FBgn0000017”6151.8 5117.4 -0.26559 2.864 6.0233 e-42 e-41 FBgn0000018“522.67 505.48 -0.048243 5.752 8.7189 0.60009 0.35511 0.52203 0.39015 - 0.5616“FBgn0000024”“FBgn0000028”0 1.4893正0.252 - 0.39867

另外,通过指定方差作为散粒噪声项之和(即意味着)和一个常数乘以平方的意思是,描述的数量根据分布建模[5]。常数项估计使用中的所有行数据。

diffTableConstant = rnaseqde (geneCountTable, (“untreated3”,“untreated4”]、[“treated2”,“treated3”),VarianceLink =“不变”IDColumns =“ID”);%预览结果。头(diffTableConstant)
ID Mean1非常刻薄的Log2FoldChange PValue AdjustedPValue _________________ ____“FBgn0000003”除了___ _____ * * * 0.51415 1.3808 1.4253 135.9 129.48 -0.069799 0.53367 0.72053 0.62769 - 0.7944“FBgn0000008”“FBgn0000014”16.838 13.384 -0.33119 3.1234 0.42413 -2.8806 0.058924 0.16938 0.45592 - 0.68454“FBgn0000015”“FBgn0000017”6151.8 5117.4 -0.26559 8.5529 0.00077269 e-05 FBgn0000018“522.67 505.48 -0.048243 5.752 8.7189 0.60009 0.36131 0.58937 0.54834 - 0.73346“FBgn0000024”“FBgn0000028”0 1.4893正0.2527 - 0.46047

最后,通过考虑方差为散粒噪声项之和(即意味着)和局部进行非参数回归平滑函数的意思是,根据分布统计建模提出了[3]。

diffTableLocal = rnaseqde (geneCountTable, (“untreated3”,“untreated4”]、[“treated2”,“treated3”),VarianceLink =“本地”IDColumns =“ID”);%预览结果。头(diffTableLocal)
ID Mean1非常刻薄的Log2FoldChange PValue AdjustedPValue _________________ FBgn0000003“____ ____ ____ * * * * * * 0.51415 1.3808 1.4253 1“FBgn0000008”“FBgn0000014”16.838 13.384 135.9 129.48 -0.069799 0.67298 0.89231 -0.33119 3.1234 0.42413 -2.8806 0.22776 0.57215 0.6421 - 0.87234“FBgn0000015”“FBgn0000017”“FBgn0000018”522.67 505.48 6151.8 5117.4 -0.26559 0.0014429 0.014207 -0.048243 5.752 8.7189 0.60009 0.55154 0.81984 0.65307 - 0.88136“FBgn0000024”“FBgn0000028”0 1.4893正0.42929 - 0.7765

的输出rnaseqde包括假定值的向量。假定值表示的概率表达式的一个观察到的变化(或更大)会发生在零假设下,即条件没有影响基因的表达。在假定值的直方图我们观察一个浓缩的低价值(由于差异表达基因),而其他值均匀分布(由于non-differentially表达基因)。值等于1的富集是由于基因数量非常低。

图;直方图(diffTableLocal.PValue 100)包含(“假定值”)ylabel (“频率”)标题(“假定值浓缩”)

过滤掉那些基因相对较低的计数观察更均匀扩散的非重要假定值范围(0,1)。请注意,这并不影响重大的假定值的分布。

lowCountThreshold = 10;lowCountGenes =所有(计数< lowCountThreshold, 2);直方图(diffTableLocal.PValue (~ lowCountGenes), 100)包含(“假定值”)ylabel (“频率”)标题(“假定值浓缩没有低计数基因”)

多个测试和调整假定值

阈值假定值来确定褶皱变化是更重要的比其他不适合这种类型的数据分析,由于多个测试问题。在执行大量的同步测试,得到一个重要的概率结果只是由于机会增加数量的测试。为了占多个测试,执行校正(或调整)的假定值的概率至少观察一个重要的结果由于机会仍低于预期的显著性水平。

Benjamini-Hochberg调整[6]是一种统计方法,提供了一个调整假定值回答以下问题:什么是假阳性的分数如果所有的基因调整假定值低于给定的阈值被认为是重要的?

的输出rnaseqde包括一个向量调整假定值的“AdjustedPValue”字段。默认情况下,假定值使用Benjamini-Hochberg调整调整。另外,“FDRMethod”名称参数rnaseqde可以设置为“层”表现层的过程[7]。

设定一个阈值调整假定值为0.1,相当于认为10%的假阳性是可以接受的,并确定显著的基因表达的考虑所有的基因调整假定值低于这个阈值。

%创建一个表与重要基因sig = diffTableLocal。AdjustedPValue < 0.1;:diffTableLocalSig = diffTableLocal(团体);diffTableLocalSig = sortrows (diffTableLocalSig,“AdjustedPValue”);numberSigGenes =大小(diffTableLocalSig, 1)
numberSigGenes = 1904

识别最上调和下调的基因

你现在可以确定最上调或下调基因通过考虑一个绝对的褶皱变化选择截止。例如,截止1 log2规模产量的基因上调2倍变化。

%找到上调基因= diffTableLocalSig。Log2FoldChange > 1;upGenes = sortrows (diffTableLocalSig (:,)“Log2FoldChange”,“下”);numberSigGenesUp = sum ()%显示前10名上调的基因:top10GenesUp = upGenes (1:10)%找到抑制基因= diffTableLocalSig。Log2FoldChange < 1;downGenes = sortrows (diffTableLocalSig(下来,:)“Log2FoldChange”,“提升”);numberSigGenesDown =总和(下降)%发现前十名抑制基因:top10GenesDown = downGenes (1:10)
numberSigGenesUp表ID = 129 top10GenesUp = 10 x6 Mean1非常刻薄的Log2FoldChange PValue AdjustedPValue _________________ FBgn0030173“__________交* * * * * * 0 6.7957正0.0063115 - 0.047764“FBgn0036822”0 6.2729正0.012203 - 0.079274“FBgn0052548”1.0476 15.269 3.8654 1.0283 12.635 3.6191 0.0018949 0.017972 0.00016945 - 0.0022662“FBgn0050495”“FBgn0063667”3.1042 38.042 3.6153 8.5037 2.3845 e-08 e-06 FBgn0033764“2.9174 16.324 167.61 3.3601 1.8345 e-25 e-23 FBgn0037290“4.6941 16.228 155.46 3.26 3.5583 e-23 e-21“FBgn0033733”“FBgn0037191”1.6003 12.753 1.5424 13.384 3.1172 0.0027276 0.024283 2.9945 1.581 12.319 2.962 0.0053635 0.041986 0.0047803 - 0.038193“FBgn0033943”numberSigGenesDown表ID = 181 top10GenesDown = 10 x6 Mean1非常刻薄的Log2FoldChange PValue AdjustedPValue _________________ ______“FBgn0053498”除了___ _____ * * * 30.938 0负9.8404 e-11 4.345 e-09“FBgn0259236”13.618 0负1.5526 e-05 0.00027393“FBgn0052500”8.7405 0负0.00066783 - 0.0075343“FBgn0039331”7.3908 0负0.0019558 - 0.018474“FBgn0040697”6.8381 0负0.0027378 - 0.024336“FBgn0034972”5.8291 0负5.2764 0负0.0096039 0.065972 0.0068564 - 0.05073“FBgn0040967”“FBgn0031923”4.7429 0负0.016164 - 0.098762“FBgn0085359”121.97 2.9786 -5.3557 5.5813 1.5068 e-33 e-30 FBgn0004854 e-05 8.1587 14.402 0.53259 -4.7571 0.0012034

良好的可视化基因的表达及其意义是由策划褶皱的变化与平均在对数尺度和着色的数据点根据假定值调整。

图散射(log2 (geneTable.meanBase) diffTableLocal.Log2FoldChange 3, diffTableLocal.PValue,“o”)colormap (flipud(酷(256)))colorbar;ylabel (“log2(褶皱变化)”)包含(“log2规范化方面的(平均)”)标题(罗斯福的褶皱变化”)

你可以在这里看到弱表达基因(即意味着较低的那些),罗斯福是一般高,因为低阅读数量由泊松噪声,因此任何生物差异是淹死在阅读数的不确定性。

引用

[1]布鲁克斯等。RNA保护监管果蝇和哺乳动物之间的映射。基因组研究2011。21:193 - 202。

[2]Mortazavi et al。哺乳动物RNA-Seq转录组的映射和量化。2008年自然方法。5:621 - 628。

[3]安德斯et al .微分表达式分析序列计数数据。基因组生物学2010。11:R106。

[4]Marioni et al . RNA-Seq:评估技术再现性和基因表达与数组。基因组研究2008。18:1509 - 1517。

[5]罗宾逊et al。主持统计测试来评估不同的标签。2007年生物信息学。23日(21):2881 - 2887。

[6]Benjamini et al。控制错误发现率:一种实用和强大的多个测试方法。1995年。皇家统计学会杂志》的系列B57 (1): 289 - 300。

[7]J.D.层。“一个直接的方法错误发现率”,英国皇家统计学会杂志》上的B (2002), 64 (3), pp.479 - 498。

另请参阅

|||

相关的话题