使用 SPSS 中的重复测量创建具有多个(> 10)变量的散点图

Creating a scatter plot with multiple (>10) variables from repeated measures in SPSS

一些解释事实开头: 我通过以下方式在 SPSS 中构建了我的数据。 我有 20 个变量(case_number、a_1、b_1、c_1、a_2、b_2、c_2、。 ...) 之所以这样命名变量,是因为我对不同的设备(分别命名为 a、b 和 c)进行了重复测量(在不同的时间点,这里命名为 1 和 2)。所有设备的测量值都应该相同。

我现在想做的是为所有设备和所有时间点创建散点图,例如我想在 x 轴上有设备 a,在 y 轴上有设备 b 和 c,然后绘制 (a_1, b_1) (a_1, c_1) (a_2, b_2) (a_2, c_2) 等等。

我希望所有在 y 轴上使用设备 b 的点都具有相同的颜色(例如 绿色),p 使用设备 c 的积分应该有另一种颜色(例如红色)。 我不想在不同的时间点使用不同的颜色,所以 (a_1, b_1) 和 (a_2, b_2) 都应该是绿色的。

如果您的数据是长格式而不是宽格式,则您的特定示例更容易构建。下面是一个例子。

*Make some fake data.
SET SEED 10.
INPUT PROGRAM.
LOOP ID = 1 TO 50.
END CASE.
END LOOP.
END FILE.
END INPUT PROGRAM.
DATASET NAME Sim.
VECTOR a_(3).
VECTOR b_(3).
VECTOR c_(3).
DO REPEAT v = a_1 TO c_3.
  COMPUTE v = RV.NORMAL(0,1).
END REPEAT.
EXECUTE.

*Reshape from wide to long.
VARSTOCASES 
  /MAKE a FROM a_1 TO a_3
  /MAKE b FROM b_1 TO b_3
  /MAKE c FROM c_1 TO c_3
  /INDEX Time.
FORMATS a b c Time (F2.0).

*Now make scatterplot.
GGRAPH
  /GRAPHDATASET NAME="graphdataset" VARIABLES=a b c
  /GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
  SOURCE: s=userSource(id("graphdataset"))
  DATA: a=col(source(s), name("a"))
  DATA: b=col(source(s), name("b"))
  DATA: c=col(source(s), name("c"))
  GUIDE: axis(dim(1), label("a"))
  GUIDE: axis(dim(2), label("b and c"))
  ELEMENT: point(position(a*b), color.interior(color.green))
  ELEMENT: point(position(a*c), color.interior(color.red))
END GPL.

这产生了我相信你要求的情节:

在长格式中,您还有其他几个简单的选项,例如为每个时间段构造小倍数或为每个时间段使用不同的符号。

*Small multiple graphs.
GGRAPH
  /GRAPHDATASET NAME="graphdataset" VARIABLES=a b c Time
  /GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
  SOURCE: s=userSource(id("graphdataset"))
  DATA: a=col(source(s), name("a"))
  DATA: b=col(source(s), name("b"))
  DATA: c=col(source(s), name("c"))
  DATA: Time=col(source(s), name("Time"), unit.category())
  COORD: rect(dim(1,2))
  GUIDE: axis(dim(1), label("a"))
  GUIDE: axis(dim(2), label("b and c"))
  GUIDE: axis(dim(3), opposite())
  ELEMENT: point(position(a*b*Time), color.interior(color.green))
  ELEMENT: point(position(a*c*Time), color.interior(color.red))
END GPL.

*Different shapes for different time periods.
GGRAPH
  /GRAPHDATASET NAME="graphdataset" VARIABLES=a b c Time ID
  /GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
  SOURCE: s=userSource(id("graphdataset"))
  DATA: a=col(source(s), name("a"))
  DATA: b=col(source(s), name("b"))
  DATA: c=col(source(s), name("c"))
  DATA: Time=col(source(s), name("Time"), unit.category())
  DATA: ID=col(source(s), name("ID"), unit.category())
  COORD: rect(dim(1,2))
  GUIDE: axis(dim(1), label("a"))
  GUIDE: axis(dim(2), label("b and c"))
  GUIDE: axis(dim(3), opposite())
  ELEMENT: point(position(a*b), color.interior(color.green), shape(Time))
  ELEMENT: point(position(a*c), color.interior(color.red), shape(Time))
END GPL.

另一种选择是画出每个人的痕迹。在这个示例中,因为数据非常混乱,所以它们并不合适,但大多数时间序列数据会显示更平滑的趋势。对于此示例数据,这是前 5 个观测值在它们自己的小倍数中的轨迹的一个小倍数示例。 (请参阅 here 了解关于这些图表的一些讨论和很好的示例。)

*Path traces.
TEMPORARY.
SELECT IF ID <= 5.
GGRAPH
  /GRAPHDATASET NAME="graphdataset" VARIABLES=a b c Time ID
  /GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
  SOURCE: s=userSource(id("graphdataset"))
  DATA: a=col(source(s), name("a"))
  DATA: b=col(source(s), name("b"))
  DATA: c=col(source(s), name("c"))
  DATA: Time=col(source(s), name("Time"), unit.category())
  DATA: ID=col(source(s), name("ID"), unit.category())
  COORD: rect(dim(1,2), wrap())
  GUIDE: axis(dim(1), label("a"))
  GUIDE: axis(dim(2), label("b and c"))
  GUIDE: axis(dim(3), opposite())
  ELEMENT: point(position(a*b*ID), color.interior(color.green), shape(Time))
  ELEMENT: point(position(a*c*ID), color.interior(color.red), shape(Time))
  ELEMENT: path(position(a*b*ID))
  ELEMENT: path(position(a*c*ID))
END GPL.
EXECUTE.

评论中用于生成图例的更新代码对我来说效果很好,但内联模板除外(它可能与我的个人图表模板冲突)。如果要向图中添加回归线,请参阅 GPL reference guide.

中的 smooth.linear 函数
GGRAPH
  /GRAPHDATASET NAME="graphdataset" VARIABLES=a b c
  /GRAPHSPEC SOURCE=INLINE INLINETEMPLATE=["<addFitline type='linear' target='pair'/>"]. 
BEGIN GPL 
  SOURCE: s=userSource(id("graphdataset")) 
  DATA: a=col(source(s), name("a")) 
  DATA: b=col(source(s), name("b")) 
  DATA: c=col(source(s), name("c")) 
  GUIDE: axis(dim(1), label("a")) 
  GUIDE: axis(dim(2), label("b and c")) 
  SCALE: cat(aesthetic(aesthetic.color.interior), map(("b", color.green), ("c", color.blue))) 
  ELEMENT: point(position(a*b), color.interior("b")) 
  ELEMENT: point(position(a*c), color.interior("c")) 
END GPL.