SPSS 中的标准化残差与 R rstandard(lm()) 不匹配
Standarized residuals in SPSS not maching R rstandard(lm())
在寻找与 R 相关的解决方案时,我发现 R 和 SPSS(版本 24)在计算简单线性模型中的标准化残差时存在一些不一致。
似乎 SPSS 调用的 标准化残差 匹配 R 学生化残差
我不认为某处存在软件错误,但显然这两个程序之间存在差异。
看看这个例子
#generate data in R
set.seed(111)
y = rnorm(20, 0, 1)
x = rnorm(20, 1, 1)
#calculate and standarized residuals
zresid<- rstandard(lm(y ~ x))
sresid<- rstudent(lm( y ~ x))
#make data frame
sampleData <- data.frame(y, x, zresid, sresid)
#save data for SPSS
library(foreign)
write.foreign(sampleData, "~/sampleData.sav", package="SPSS")
然后,在 SPSS 中单击所有 windows 导入数据并设置线性回归 ZRE 和 SRE 残差保存。
#load data to spss via syntax
GET DATA /TYPE=TXT
/FILE="~\sampleData.sav"
/DELCASE=LINE
/DELIMITERS=","
/ARRANGEMENT=DELIMITED
/FIRSTCASE=1
/DATATYPEMIN PERCENTAGE=95.0
/VARIABLES=
y F8.0
x F8.0
zresid F8.0
sresid F8.0
/MAP.
RESTORE.
#run a simple regression with standarized residuals (ZRESID) and studentized residuals (SRESID)
REGRESSION
/MISSING LISTWISE
/CRITERIA=PIN(.05) POUT(.10)
/NOORIGIN
/DEPENDENT y
/METHOD=ENTER x
/SAVE ZRESID SRESID.
我是不是疯了(或傻了)还是哪里出了问题?
对SPSS不是很熟悉,但是我运行模型R和Stata,得到的残差是一样的。所以问题出在SPSS端。我的猜测是您似乎在 SPSS 中调用了逐步回归命令。你能简单地试试吗:
REGRESSION
/DEPENDENT y
/METHOD=ENTER x
/SAVE ZRESID SRESID.
看看是否可行?
根据 @JKP suggestion I went though SPSS Algorithm manual 和第 853 页(回归算法章节)我们可以发现,
通过简单回归分析保存的标准化残差计算如下:
我做了更多:
以下是结论:
r stats::rstandard = MASS::stdres = SPSS studentized residual
r z score of resid or residuals = SPSS z score of unstandardized residual
这是我的代码:
#generate data in R
set.seed(111)
y = rnorm(20, 0, 1)
x = rnorm(20, 1, 1)
#calculate and standarized residuals
stats_rstudent = stats::rstudent(lm( y ~ x))
stats_rstandard = stats::rstandard(lm(y ~ x))
MASS_stdres = MASS::stdres(lm( y ~ x))
scale_resid = as.vector(scale(resid(lm(y ~ x)),center=T,scale=T))
scale_residuals = as.vector(scale(residuals(lm(y ~ x)),center=T,scale=T))
#make data frame
sampleData <- data.frame(y, x, stats_rstudent, stats_rstandard, MASS_stdres, scale_resid, scale_residuals)
#save data for SPSS
library(foreign)
write.foreign(sampleData, "sampleData.sav", package="SPSS")
SPSS 语法:
REGRESSION
/MISSING LISTWISE
/CRITERIA=PIN(.05) POUT(.10)
/NOORIGIN
/DEPENDENT y
/METHOD=ENTER x
/SAVE RESID ZRESID SRESID.
* calc z score of resid.
descriptives RES_1_Unstandardized_Residual/save.
formats stats_rstudent(f11.6).
formats stats_rstandard(f11.6).
formats MASS_stdres(f11.6).
formats scale_resid(f11.6).
formats scale_residuals(f11.6).
formats ZRE_1_Standardized_Residual(f11.6).
formats SRE_1Studentized_Residual(f11.6).
formats RES_1_Unstandardized_Residual(f11.6).
formats Zscore_RES_1_Unstandardized_Residual(f11.6).
在寻找与 R 相关的解决方案时,我发现 R 和 SPSS(版本 24)在计算简单线性模型中的标准化残差时存在一些不一致。
似乎 SPSS 调用的 标准化残差 匹配 R 学生化残差
我不认为某处存在软件错误,但显然这两个程序之间存在差异。
看看这个例子
#generate data in R
set.seed(111)
y = rnorm(20, 0, 1)
x = rnorm(20, 1, 1)
#calculate and standarized residuals
zresid<- rstandard(lm(y ~ x))
sresid<- rstudent(lm( y ~ x))
#make data frame
sampleData <- data.frame(y, x, zresid, sresid)
#save data for SPSS
library(foreign)
write.foreign(sampleData, "~/sampleData.sav", package="SPSS")
然后,在 SPSS 中单击所有 windows 导入数据并设置线性回归 ZRE 和 SRE 残差保存。
#load data to spss via syntax
GET DATA /TYPE=TXT
/FILE="~\sampleData.sav"
/DELCASE=LINE
/DELIMITERS=","
/ARRANGEMENT=DELIMITED
/FIRSTCASE=1
/DATATYPEMIN PERCENTAGE=95.0
/VARIABLES=
y F8.0
x F8.0
zresid F8.0
sresid F8.0
/MAP.
RESTORE.
#run a simple regression with standarized residuals (ZRESID) and studentized residuals (SRESID)
REGRESSION
/MISSING LISTWISE
/CRITERIA=PIN(.05) POUT(.10)
/NOORIGIN
/DEPENDENT y
/METHOD=ENTER x
/SAVE ZRESID SRESID.
我是不是疯了(或傻了)还是哪里出了问题?
对SPSS不是很熟悉,但是我运行模型R和Stata,得到的残差是一样的。所以问题出在SPSS端。我的猜测是您似乎在 SPSS 中调用了逐步回归命令。你能简单地试试吗:
REGRESSION
/DEPENDENT y
/METHOD=ENTER x
/SAVE ZRESID SRESID.
看看是否可行?
根据 @JKP suggestion I went though SPSS Algorithm manual 和第 853 页(回归算法章节)我们可以发现, 通过简单回归分析保存的标准化残差计算如下:
我做了更多: 以下是结论:
r stats::rstandard = MASS::stdres = SPSS studentized residual
r z score of resid or residuals = SPSS z score of unstandardized residual
这是我的代码:
#generate data in R
set.seed(111)
y = rnorm(20, 0, 1)
x = rnorm(20, 1, 1)
#calculate and standarized residuals
stats_rstudent = stats::rstudent(lm( y ~ x))
stats_rstandard = stats::rstandard(lm(y ~ x))
MASS_stdres = MASS::stdres(lm( y ~ x))
scale_resid = as.vector(scale(resid(lm(y ~ x)),center=T,scale=T))
scale_residuals = as.vector(scale(residuals(lm(y ~ x)),center=T,scale=T))
#make data frame
sampleData <- data.frame(y, x, stats_rstudent, stats_rstandard, MASS_stdres, scale_resid, scale_residuals)
#save data for SPSS
library(foreign)
write.foreign(sampleData, "sampleData.sav", package="SPSS")
SPSS 语法:
REGRESSION
/MISSING LISTWISE
/CRITERIA=PIN(.05) POUT(.10)
/NOORIGIN
/DEPENDENT y
/METHOD=ENTER x
/SAVE RESID ZRESID SRESID.
* calc z score of resid.
descriptives RES_1_Unstandardized_Residual/save.
formats stats_rstudent(f11.6).
formats stats_rstandard(f11.6).
formats MASS_stdres(f11.6).
formats scale_resid(f11.6).
formats scale_residuals(f11.6).
formats ZRE_1_Standardized_Residual(f11.6).
formats SRE_1Studentized_Residual(f11.6).
formats RES_1_Unstandardized_Residual(f11.6).
formats Zscore_RES_1_Unstandardized_Residual(f11.6).