如何在SPSS中进行留一交叉验证

3

我不太明白如何在SPSS中执行LOOCV。 我需要评估一个简单的线性回归模型 $Y=aX+b$。 谢谢。


1
这个问题似乎不是主题,因为它只是关于如何在软件中执行统计程序。 - AdamO
2
这个问题似乎不适合讨论,因为它涉及如何在软件中执行统计程序。 - gung - Reinstate Monica
1个回答

1
对于线性回归,这很简单易懂,SPSS允许您在REGRESSION命令中直接保存统计数据。这里有另一个例子
REGRESSION
  /NOORIGIN 
  /DEPENDENT Y
  /METHOD=ENTER X
  /SAVE PRED (PredAll) DFIT (CVFit).

然后可以计算留一法预测值,如COMPUTE LeaveOneOut = PredAll - CVFit.但对于SPSS没有提供方便的SAVE值的非线性模型,可以使用缺失值构建重复数据集,然后使用SPLIT FILE,并获得所需统计过程的留一法统计量。如果您的id变量只是数据集的行号,则只需要两个循环的最大案例数,然后将所需信息匹配到新文件中。
以下是此过程的示例。
*Making some fake data to work with.
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 Y = 3 + 0.2*(X) + RV.NORMAL(0,0.2).
FORMATS Id (F2.0) X Y (F4.2).
EXECUTE.

*Original regression model with the leave one.
*out fits.
REGRESSION
  /NOORIGIN 
  /DEPENDENT Y
  /METHOD=ENTER X
  /SAVE PRED (PredAll) DFIT (CVFit).    

*Manual way to create stacked dataset
*can use with other non-linear models.
INPUT PROGRAM.
COMPUTE #Cases = 10.
LOOP #Id = 1 TO #Cases.
  LOOP #Iter = 1 TO #Cases.
    COMPUTE L1O = #Iter.
    COMPUTE Id = #Id.
    END CASE.
  END LOOP.
END LOOP.
END FILE.
END INPUT PROGRAM.
DATASET NAME LeaveOneOut.

*Merging in original data.
MATCH FILES FILE = *
  /TABLE = 'Sim'
  /BY Id.

*Set missing to 
IF L1O = Id Y = $SYSMIS.
SORT CASES BY L1O.
SPLIT FILE BY L1O.
*You can replace regression with whatever procedure you are.
*interested in.
REGRESSION
  /NOORIGIN 
  /DEPENDENT Y
  /METHOD=ENTER X
  /SAVE PRED (CVFit2).
SPLIT FILE OFF.

*This shows the original leave one out stats.
*And new stats are the same besides some floating.
*point differences.
COMPUTE Test = (CVFit2 - (PredAll-CVFit)).
TEMPORARY.
SELECT IF (L1O = Id).
FREQ VAR Test.
EXECUTE.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接