【问题标题】:How to reference a particular row for an existing variable in SPSS syntax?如何在 SPSS 语法中为现有变量引用特定行?
【发布时间】:2017-05-30 09:27:16
【问题描述】:

我有 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')

【问题讨论】:

    标签: spss


    【解决方案1】:

    另一个可能很方便的工具是 SHIFT VALUES 命令。它可以向前或向后移动一列或多列数据。

    我想知道这样做的目的是否与调整 Benjamin-Hochberg FDR 或其他类似的多个测试校正的 p 值有关。如果是这种情况,您可能会发现 STATS PADJUST(分析 > 描述 > 计算调整后的 p 值)扩展命令很有用。它提供了六种调整方法。您可以从实用程序(V24 之前)或扩展程序 (V24+) 菜单安装它。

    【讨论】:

    • 感谢您的帮助!是的你是对的。这是为了获得 FDR(BH) 调整后的 p 值。我不知道有这样的扩展命令可用。我安装了扩展并尝试运行它,但收到以下错误消息。我想知道您是否碰巧知道为什么会发生这种情况以及我该如何解决。 >错误 # 1. 命令名称:STATS >该行中的第一个单词未被识别为 SPSS Statistics 命令。 >此命令的执行停止。
    • 我在 SPSSX-L 列表上发布了对此的回复。我还应该注意到,在 Statistics V24 中,BH FDR 作为 CTABLES 过程的一个选项被添加。
    • 我收到了您的回复。看起来我只需要重新启动 SPSS,因为我的仍然是 V22。重新启动后,它工作正常。谢谢!
    【解决方案2】:

    为了帮助您入门,这里有一些工具可以帮助您完成这项任务:

    LAG 函数
    你可以比较这一行和上一行的值,例如下面将每一行的Pval和上一行的比较,把两者中较小的放在NewPval中:

    compute NewPVal=min(Pval, lag(Pval)).
    

    如果您只想从底部开始执行相同的过程,您可以轻松地以相反的顺序对数据进行排序并执行相同的操作。

    创造 + 领导
    如果您想与下一行而不是上一行进行比较,您应该首先创建一个“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)).
    

    【讨论】:

    • 非常感谢您提供易于理解的说明!我发现 LAG 是适合我目的的功能,并且在我尝试后它确实有效!我可以看到 CREATE+LEAD 和案例编号的使用也很有用。再次,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    相关资源
    最近更新 更多