2014-03-19 108 views
2

我希望這是一個簡單的問題,但我在創建SPSS語法時遇到問題。在SPSS中刪除大小寫的計算變量均值...很多次

我有一個單個變量和約200個案例的數據集。我需要計算該變量的平均值,但是我需要計算平均值200次,以便在刪除每個個案後計算一次。所以平均值需要計算200次,每次刪除一個案例(然後替換它),並計算缺失該案例的平均值。換句話說,我第一次計算平均值時,它應該排除第一種情況(因此分析案例2到200)。第二次計算平均值時,應排除第二種情況,但包括第一種情況(因此分析案例1和3至200)。等等。

理想情況下,我想要做的是創建一個新的SPSS數據集,使得這個新數據集中唯一的變量包含這200個平均值。我相信最好的辦法是通過聚合函數。

我遇到的問題是如何刪除每個案例,計算均值,替換案例,再次計算均值並刪除另一個案例,等等。我可以用一個過濾器來做到這一點,但我想自動化它,而不是每次都要複製/過去或更改語法。我正在考慮某種重複過濾器,但我不太熟悉重複和循環命令(但是在它上面工作......)。

任何有識之士或者幫助有關創建過濾器的最佳方式這樣將非常感激

+0

這有時被稱爲jackknifing。搜索谷歌它似乎使用矩陣瑪塔加西亞格拉內羅[有一個這樣的例子](http://gjyp.nl/marta/JackknifeNORM.sps) - 這也是我將如何做,以及我認爲。我也很想知道,如果讓一個統計數據迴歸(DFBeta)可以被強制以某種方式給出這個信息。 –

回答

0

我在我的意見正確,你能徵在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). 
+1

我看到Rich Ulrich和Bruce Weaver在[SPSS google group forum](https://groups.google.com/forum/?fromgroups#!topic/comp.soft-sys.stat。)上給出了比這更好的建議。 SPSS/MqjgRbHX04w)。 –

+0

完美,謝謝你的信息。明確的答案,很好的語法 – jnk7711

0

SPSS Google Group經過一些討論過這個同樣的問題,你提出我寫了一個宏來計算基於此建議的折刀手段和差異。

*This functiona calculates the jackknifed mean and variance. 
*It also returns the total mean (GrandMean) and total variance (GrandVar). 
*All variance calculations use population type (N-1) calculations. 

*The parameters it takes are:. 
*Var - Original variable you want calculated. 
*JMean - name of the resulting jackknifed mean (DEFAULT JackMean). 
*VarCalc - flag for if you want the second data pass to calculate Jackknifed variance 
      can take either Yes or Y (case does not matter) default is No. 
*JVar - name of the resulting jackknifed variance (DEFAULT JackVar). 

DEFINE !JackMeanVar (Var = !TOKENS(1) 
        /JMean = !DEFAULT (JackMean) !TOKENS(1) 
        /VarCalc = !DEFAULT (No) !TOKENS(1) 
        /JVar = !DEFAULT (JackVar) !TOKENS(1)) 
*Calculate grand mean and N. 
AGGREGATE OUTFILE=* MODE=ADDVARIABLES 
    /BREAK 
    /GrandSum=SUM(!Var) 
    /GrandMean=MEAN(!Var) 
    /TotalN=N. 
*Compute Jackknife mean. 
COMPUTE !JMean=(GrandSum-!Var)/(TotalN - 1). 
*Compute grand contribution to variance. 
!IF (!UPCASE(!VarCalc)="YES" !OR !UPCASE(!VarCalc)="Y") !THEN 
COMPUTE Vi = !Var**2. 
AGGREGATE OUTFILE=* MODE=ADDVARIABLES 
    /BREAK 
    /GrandVar=SD(!Var) 
    /GrandV=SUM(Vi). 
*Computing full set variance (population). 
COMPUTE GrandVar = GrandVar**2. 
*COMPUTE GVar = (GrandV-(GrandSum**2/TotalN))/(TotalN - 1). 
*Subtract out local contribution. 
COMPUTE !JVar= ((GrandV - Vi) - (GrandSum-!Var)**2/(TotalN -1))/(TotalN - 2). 
*Clean Up. 
MATCH FILES FILE = * /DROP Vi GrandV. 
!IFEND 
*Clean Up. 
MATCH FILES FILE = * /DROP GrandSum TotalN. 
VARIABLE LABELS 
    GrandMean 'Mean for Total Population' 
    !JMean 'Mean with this observation left out' 
    GrandVar 'Variance (Population) for Total Population' 
    !JVar 'Variance (Population) with this observation left out' 
    . 
!ENDDEFINE. 

下面是使用此函數的一個示例 - 以及更復雜的方式來檢查使用SPSS的聚合函數的計算。

*Test it out. 
DATA LIST FREE/X. 
BEGIN DATA 
1 1 1 2 2 2 3 3 3 4 4 4 
END DATA. 

!JackMeanVar Var=X JMean = MeanJ VarCalc=Yes JVar = VarJ. 
EXECUTE. 

*Checking calculations. 
VECTOR CheckM(12). 
LOOP #i = 1 TO 12. 
    IF $casenum<>#i CheckM(#i)=X. 
END LOOP. 
AGGREGATE 
    /OUTFILE=* MODE=ADDVARIABLES OVERWRITE=YES 
    /BREAK= 
    /CheckM1 TO CheckM12=MEAN(CheckM1 TO CheckM12) 
    /CheckV1 TO CheckV12=SD(CheckM1 TO CheckM12). 
VECTOR CheckM = CheckM1 TO CheckV12. 
VECTOR CheckV = CheckV1 TO CheckV12. 
LOOP #i = 1 TO 12. 
    DO IF $casenum = #i. 
    COMPUTE MeanCheck = CheckM(#i). 
    COMPUTE VarCheck = CheckV(#i)**2. 
    END IF. 
END LOOP. 
MATCH FILES FILE = * /DROP CheckM1 TO CheckV12. 
EXECUTE. 
0

我提出一個簡單的解決方法:首先所有200個案件的手段添加到該文件,然後重新計算平均值爲每一種情況下,同時消除這種情況下的值:

DATA LIST FREE/OrigVar. 
BEGIN DATA 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 
END DATA. 

AGGREGATE /OUTFILE=* MODE=ADDVARIABLES /BREAK= /meanAll=MEAN(OrigVar)/Ncases=n. 
compute MeanWithoutThisVal= (Ncases * meanAll - OrigVar)/(Ncases - 1). 
exe. 

這示例只有30個案例,但該語法將適用於任意數量的案例。