我有2个变量,一个用于原始p值,另一个用于调整后的p值。我需要根据这两个变量的值计算一个新变量。我需要做的不是太复杂,但我在SPSS中很难做到,因为我无法弄清楚如何在SPSS语法中为现有变量引用特定行。
第一列按升序列出原始p值。下一列列出了调整后的p值,但这些调整后的p值仍然不完整。我需要比较调整后的p值列中的两个相邻p值(例如,第1行和第2行,第2行和第3行,第3行和第4行,依此类推),并取每个中较小者的p值在这些比较中,将这些p值作为新变量的值输入下一列。
但是,这不是故事的结尾。还有一个条件必须得到满足。也就是说,新的p值必须与原始p值的顺序相同。但是,如果我从顶行开始比较,我无法确保这一点。您可以看到(i')大于(h')和(g'),并且(d')大于(c'),(b')和(a')在下面的示例中(图片) )。
为了解决这个问题,我需要从底部开始比较调整后的p值。另外,我需要将调整后的p值与下面一行的新p值进行比较。一个例外是我可以简单地使用(a)的值作为(a')的值,因为(a)的值通常应该是所有p值中的最大值。然后,对于(b'),我需要比较(b)和(a')并输入较小者为(b')。对于(c'),我需要比较(c)和(b')并输入较小的(c'),依此类推。通过这种方式,(d')将是0.911并且(i')将是0.017。
对于这篇长篇文章感到抱歉,但如果我能在SPSS中完成这项任务,我将非常感激。
提前感谢您的帮助。
Raw p-values | Adjusted p-values (Temporal)| New p-values (Final)
-------------|-----------------------------|---------------------
0.002 | 0.030 (i) | 0.025 (i')
0.003 | 0.025 (h) | 0.017 (h')
0.004 | 0.017 (g) | 0.017 (g')
0.005 | 0.028 (f) | 0.028 (f')
0.023 | 0.068 (e) | 0.068 (e')
0.450 | 1.061 (d) | 1.061 (d')
0.544 | 1.145 (c) | 0.911 (c')
0.850 | 0.911 (b) | 0.911 (b')
0.974 | 0.974 (a) | 0.974 (a')
答案 0 :(得分:0)
为了帮助您入门,以下是一些可以帮助您完成此任务的工具:
LAG功能
您可以比较此行和上一行中的值,例如,以下内容会将每行中的Pval
与上一行中的值进行比较,并将两者中的较小者放在NewPval
中:
compute NewPVal=min(Pval, lag(Pval)).
如果您只想从底部开始执行相同的过程,您可以按相反的顺序轻松地对数据进行排序并执行相同的操作。
CREATE + LEAD
如果你想比较下一行而不是前一行,你应该首先创建一个"引导"变量然后与之比较。
例如,以下语法将创建一个新变量,该变量对于每一行包含下一行中Pval
的值,然后为NewPval
选择两者中较小的一行:
create /LeadPval=LEAD(Pval 1).
compute NewPVal=min(Pval, LeadPval).
使用案例编号
您可以在计算和条件中使用案例编号(行号)。例如,以下语法将允许您在第一行和以下行中进行不同的计算:
if $casenum=1 NewPval=Pval.
if $casenum>1 NewPVal=min(Pval, lag(Pval)).
答案 1 :(得分:0)
另一种可能方便的工具是SHIFT VALUES命令。它可以向前或向后移动一列或多列数据。
我想知道这个目的是否与调整多个测试校正的p值有关,就像Benjamin-Hochberg FDR或其他类似的一样。如果是这种情况,您可能会发现STATS PADJUST(Analyze> Descriptives> Calculate adjusted p values)扩展命令很有用。它提供六种调整方法。您可以从Utilities(V24之前版本)或Extensions(V24 +)菜单安装它。