【问题标题】:Boxplot for all my variables in SPSSSPSS中我所有变量的箱线图
【发布时间】:2016-04-26 19:09:14
【问题描述】:

我想为我的所有变量(总共 90 个)生成箱线图。

这是我将用于一个变量的语法:

GGRAPH /GRAPHDATASET NAME="graphdataset" VARIABLES=AnScol MISSING=LISTWISEREPORTMISSING=NO /GRAPHSPEC SOURCE=INLINE. BEGIN GPL SOURCE: s=userSource(id("graphdataset")) DATA: AnScol =col(source(s), name("AnScol")) DATA: id=col(source(s), name("$CASENUM"), unit.category()) COORD: rect(dim(1), transpose()) GUIDE: axis(dim(1), label("AnScol")) ELEMENT: schema(position(bin.quantile.letter(AnScol)), label(id)) END GPL

如何在不逐个更改每个变量的情况下对所有变量执行此操作?

提前谢谢你!

马克西姆 M.

【问题讨论】:

标签: spss


【解决方案1】:

在这里,我将说明几种不同的方式。首先,让我们制作一些假数据 - 十个数值变量和一个代表数据集 Id 变量的字符串。

*Make fake data.
MATRIX.
SAVE {UNIFORM(100,10)} /VARS = V1 TO V10 /OUTFILE = *.
END MATRIX.
DATASET NAME Sim.
COMPUTE MyId = $casenum.
FORMATS MyId (F3.0).
ALTER TYPE MyId (A3).

一个简单的解决方案是使用EXAMINE 明智地绘制箱线图变量。这可通过旧版对话类型图表获得。

*If the variables all have the same scale.
EXAMINE VARIABLES=V1 TO V10
  /COMPARE VARIABLE
  /PLOT=BOXPLOT
  /STATISTICS=NONE
  /NOTOTAL
  /ID=MyId
  /MISSING=LISTWISE.

这很好用,因为所有变量都是按相同的比例构造的。它没有异常值 - 但如果存在异常值,它们将在上图中标有 MyId 变量。

您也可以使用GGRAPH 来完成非常相似的事情。不过,我在这里放了异常值,而在 GGRAPH 代码中,您不能轻易地创建异常值变量。

*Make one variable not on the same scale and have outliers.
COMPUTE V1 = V1*100.
IF MyId = "  5" V1 = 250.
EXECUTE.
*Synonymous with GGRAPH - cant label outliers though.
GGRAPH 
  /GRAPHDATASET NAME="graphdataset" VARIABLES=V1 TO V10
   TRANSFORM=VARSTOCASES(SUMMARY="V" INDEX="Vars")
  /GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
  SOURCE: s=userSource(id("graphdataset"))
  DATA: Vars=col(source(s), name("Vars"), unit.category())
  DATA: V=col(source(s), name("V"))
  ELEMENT: schema(position(bin.quantile.letter(Vars*V)))
END GPL.

您可以在此处看到,因为 V1 现在处于不同的比例,您无法有效地在一个图上可视化其他变量。在现实的数据集中,这就是将会发生的事情。要进行单独的绘图,您可以听取 eli-k 的建议并使用 Python 为每个变量提交不同的绘图。这是一个例子。

*If they don't - and you want different scales, Python programmability can do that.
BEGIN PROGRAM Python.
import spss, string

#get the variable list and the variable type
varList = [(spss.GetVariableName(i),spss.GetVariableType(i)) for i in range(spss.GetVariableCount())]

#make a template to submit boxplot, see https://andrewpwheeler.wordpress.com/2015/02/22/string-substitution-in-python-continued/ 
c = string.Template("""*Boxplots.
GGRAPH
  /GRAPHDATASET NAME="graphdataset" VARIABLES=$var MyId MISSING=LISTWISE REPORTMISSING=NO
  /GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
  SOURCE: s=userSource(id("graphdataset"))
  DATA: V=col(source(s), name("$var"))
  DATA: MyId=col(source(s), name("MyId"), unit.category())
  COORD: rect(dim(1), transpose())
  GUIDE: axis(dim(1), label("$var"))
  ELEMENT: schema(position(bin.quantile.letter(V)), label(MyId))
END GPL.
""")

#loop over the varlist and plot if numeric
for i in varList:
  if i[1] == 0:
    spss.Submit(c.substitute(var=i[0]))
END PROGRAM.

现在您可以看到每个变量都有自己的箱线图以快速检查(并标有 ID)。

等等。最后,完成类似操作的一种方法是将所有数值变量重新整形为一列,然后使用SPLIT FILE

*Varstocases and split file - need to know which variables are numeric to begin with.
VARSTOCASES /MAKE V FROM V1 TO V10 /INDEX VOrig.
SORT CASES BY VOrig.
SPLIT FILE BY VOrig.
GGRAPH
  /GRAPHDATASET NAME="graphdataset" VARIABLES=V MyId MISSING=LISTWISE REPORTMISSING=NO
  /GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
  SOURCE: s=userSource(id("graphdataset"))
  DATA: V=col(source(s), name("V"))
  DATA: MyId=col(source(s), name("MyId"), unit.category())
  COORD: rect(dim(1), transpose())
  GUIDE: axis(dim(1), label("V"))
  ELEMENT: schema(position(bin.quantile.letter(V)), label(MyId))
END GPL.
SPLIT FILE OFF.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 2021-12-19
    • 2021-01-01
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    相关资源
    最近更新 更多