我希望这是一个简单的问题,但我在为其创建 SPSS 语法时遇到了问题。
我有一个包含单个变量和大约 200 个案例的数据集。我需要计算该变量的平均值,但我需要计算平均值 200 次,以便在删除每个案例后计算一次。所以平均值需要计算 200 次,删除每个案例一次(然后替换它)并计算缺失案例的平均值。换句话说,我第一次计算均值时应该排除第一个案例(因此分析案例 2 到 200)。我第二次计算平均值时,它应该排除第二种情况但包括第一种情况(因此分析了情况 1 和 3 到 200)。等等。
理想情况下,我想做的是创建一个新的 SPSS 数据集,这样这个新数据集中的唯一变量就包含这 200 个均值。我相信最好的方法是通过聚合函数。
我遇到的问题是如何删除每个案例、计算平均值、替换案例、在删除另一个案例的情况下再次计算平均值,等等。我可以用过滤器来做到这一点,但我想自动化它而不是每次都复制/粘贴或更改语法。我在考虑某种重复过滤器,但我不太熟悉重复和循环命令(但正在研究它......)。
任何关于创建这样的过滤器的最佳方法的见解或帮助将不胜感激
最佳答案
我的评论是正确的,您可以使用 REGRESSION
过程中可用的删除统计信息来获取您需要的信息,而无需自己循环遍历数据集。
您需要做的是计算您自己的常数值 1 并强制 REGRESSION
通过原点(因为 SPSS 不允许您指定空回归方程)以预测您感兴趣的变量。然后让回归过程保存删除残差。这些删除残差与您的原始变量之间的差异是删除该观察值的折叠均值。
简而言之,这段代码将提供该信息 - 只需将 X
替换为您感兴趣的变量即可。
COMPUTE Const = 1.
REGRESSION
/ORIGIN
/DEPENDENT X
/METHOD=ENTER Const
/SAVE DRESID (MeanResid).
COMPUTE JackknifeMeanX = X - MeanResid.
完整示例(使用假数据并通过聚合检查)如下:
INPUT PROGRAM.
LOOP Id = 1 TO 10.
END CASE.
END LOOP.
END FILE.
END INPUT PROGRAM.
DATASET NAME Sim.
COMPUTE X = RV.NORMAL(10,5).
COMPUTE Const = 1.
FORMATS Id Const (F2.0).
EXECUTE.
*Using deletion residuals in linear regression to calculate Jackknifed mean.
*Here I calculate my own intercept and force through origin.
REGRESSION
/ORIGIN
/DEPENDENT X
/METHOD=ENTER Const
/SAVE DRESID (MeanResid).
COMPUTE JackknifeMeanX = X - MeanResid.
*Checking to make sure this agrees with data.
VECTOR XMis(10).
LOOP #i = 1 TO 10.
IF $casenum <>#i XMis(#i) = X.
END LOOP.
AGGREGATE OUTFILE = * OVERWRITE=YES MODE=ADDVARIABLES
/BREAK
/XMis1 TO XMis10=MEAN(Xmis1 TO XMis10).
关于database - 在 SPSS 中删除案例的计算变量均值...多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22495834/