R 和 SPSS 线性模型结果之间的差异

Difference between R and SPSS linear model results

我是统计学的初学者。目前正在参加同时使用 . I've been trying to learn 的介绍性课程,到目前为止,我一直得到相同的结果,用于使用这两种工具进行计算,正如预期的那样。

但是,我们目前正在进行相关性分析 (Pearson's Rho) 和拟合线性模型,我一直在 RSPSS 之间得到不同的结果。

数据集是 GSS2012.zip in this zip-file.

d = GSS2012$tolerance
e = GSS2012$age
f = GSS2012$polviews
g = GSS2012$educ

SPSS    R   std. error (SPSS)  
intercept   6,694   7,29707726  0,623  
e   -0,031  -0,03130627 0,006  
f   -0,123  -0,20586503 0,072  
g   0,411   0,40029541  0,033  

获得上述结果的完整、最小的工作示例如下。

我为 cor 尝试了不同的 use="stuff";没有区别。

cor(d, e, use = "pairwise.complete.obs")

lm 的完整最小工作示例:

> library(haven)
> GSS2012 <- read_sav("full version/GSS2012.sav")
> lm(GSS2012$tolerance ~ GSS2012$age + GSS2012$polviews + GSS2012$educ, na.action="na.exclude", singular.ok = F)

Call:
lm(formula = GSS2012$tolerance ~ GSS2012$age + GSS2012$polviews + 
    GSS2012$educ, na.action = "na.exclude", singular.ok = F)

Coefficients:
     (Intercept)       GSS2012$age  GSS2012$polviews      GSS2012$educ  
         7.29708          -0.03131          -0.20587           0.40030  

到目前为止,没有任何东西给我与 SPSS 相同的值。 ---并不是说我知道后者一定是正确的,我只是想复制结果。

SPSS 脚本:

DATASET ACTIVATE DataSet1. 
REGRESSION 
  /MISSING LISTWISE 
  /STATISTICS COEFF OUTS R ANOVA 
  /CRITERIA=PIN(.05) POUT(.10) 
  /NOORIGIN 
  /DEPENDENT tolerance 
  /METHOD=ENTER age polviews educ.

像这样的文章可能是相关的:link1; link2; link3,但我无法使用其中的信息来复制 SPSS 数据。 (同样,R 可能会有更准确的结果;我不知道。但我在 "an SPSS environment",因此如果我现在能够获得相同的结果就好了:)

这只是部分答案,因为我可以看出问题所在,但我不确定是什么原因造成的。问题与缺失值以及它们在 SPSS 文件中的处理方式有关。让我们以 educ 变量为例...

在 SPSS 文件中,您可以看到值 979899 被定义为缺失值:

如果按 educ 列对 SPSS 文件进行排序,您可以看到有 2 个数据行具有这些缺失值。它们是 ID 8371214:

在 R 中,您可以确认这些行确实包含缺失值 (NA):

> which(is.na(GSS2012$educ))
[1]  837 1214

问题出在 SPSS 中,当您实际告诉它计算丢失的行数时,它说只有 1 个丢失的数据行:

FREQUENCIES VARIABLES=educ 
  /FORMAT=NOTABLE
  /ORDER= ANALYSIS .

问题出在 ID 1214SPSS 并未考虑 99 1214 的值缺失 。例如,尝试将 837 的 educ 更改为任何其他(非缺失)数字,您会看到 SPSS 表示 educ 缺失 0 行,而实际上 1214 仍应缺失(99)

我没有检查过,但我猜 polviews 变量的许多行也发生了类似的事情。

这样做的结果是,当您 运行 分析时,SPSS 不会将这些行视为缺失数据,但在 R 中,这些值被正确设置为缺失和省略。换句话说,SPSS 为模型使用的数据多于它应该使用的数据。您可以通过查看 SPSS 和 R 的输出来确认这一点——两个程序的自由度不同,这会导致结果出现(轻微的)差异

我不确定为什么 SPSS 不将这些行视为缺失。它可能是一个错误(不会是 SPSS 的第一个错误......)或者与文件设置方式有关。我没有检查后者,因为它是一个大文件,而且我对数据集不够熟悉,不知道去哪里看