R 和 SPSS 线性模型结果之间的差异
Difference between R and SPSS linear model results
我是统计学的初学者。目前正在参加同时使用 spss. I've been trying to learn r 的介绍性课程,到目前为止,我一直得到相同的结果,用于使用这两种工具进行计算,正如预期的那样。
但是,我们目前正在进行相关性分析 (Pearson's Rho
) 和拟合线性模型,我一直在 R
和 SPSS
之间得到不同的结果。
数据集是 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 文件中,您可以看到值 97
、98
和 99
被定义为缺失值:
如果按 educ
列对 SPSS 文件进行排序,您可以看到有 2 个数据行具有这些缺失值。它们是 ID 837
和 1214
:
在 R 中,您可以确认这些行确实包含缺失值 (NA
):
> which(is.na(GSS2012$educ))
[1] 837 1214
问题出在 SPSS 中,当您实际告诉它计算丢失的行数时,它说只有 1 个丢失的数据行:
FREQUENCIES VARIABLES=educ
/FORMAT=NOTABLE
/ORDER= ANALYSIS .
问题出在 ID 1214
。 SPSS 并未考虑 99
1214 的值缺失 。例如,尝试将 837 的 educ
更改为任何其他(非缺失)数字,您会看到 SPSS 表示 educ
缺失 0 行,而实际上 1214 仍应缺失(99)
我没有检查过,但我猜 polviews
变量的许多行也发生了类似的事情。
这样做的结果是,当您 运行 分析时,SPSS 不会将这些行视为缺失数据,但在 R 中,这些值被正确设置为缺失和省略。换句话说,SPSS 为模型使用的数据多于它应该使用的数据。您可以通过查看 SPSS 和 R 的输出来确认这一点——两个程序的自由度不同,这会导致结果出现(轻微的)差异
我不确定为什么 SPSS 不将这些行视为缺失。它可能是一个错误(不会是 SPSS 的第一个错误......)或者与文件设置方式有关。我没有检查后者,因为它是一个大文件,而且我对数据集不够熟悉,不知道去哪里看
我是统计学的初学者。目前正在参加同时使用 spss. I've been trying to learn r 的介绍性课程,到目前为止,我一直得到相同的结果,用于使用这两种工具进行计算,正如预期的那样。
但是,我们目前正在进行相关性分析 (Pearson's Rho
) 和拟合线性模型,我一直在 R
和 SPSS
之间得到不同的结果。
数据集是 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 文件中,您可以看到值 97
、98
和 99
被定义为缺失值:
如果按 educ
列对 SPSS 文件进行排序,您可以看到有 2 个数据行具有这些缺失值。它们是 ID 837
和 1214
:
在 R 中,您可以确认这些行确实包含缺失值 (NA
):
> which(is.na(GSS2012$educ))
[1] 837 1214
问题出在 SPSS 中,当您实际告诉它计算丢失的行数时,它说只有 1 个丢失的数据行:
FREQUENCIES VARIABLES=educ
/FORMAT=NOTABLE
/ORDER= ANALYSIS .
问题出在 ID 1214
。 SPSS 并未考虑 99
1214 的值缺失 。例如,尝试将 837 的 educ
更改为任何其他(非缺失)数字,您会看到 SPSS 表示 educ
缺失 0 行,而实际上 1214 仍应缺失(99)
我没有检查过,但我猜 polviews
变量的许多行也发生了类似的事情。
这样做的结果是,当您 运行 分析时,SPSS 不会将这些行视为缺失数据,但在 R 中,这些值被正确设置为缺失和省略。换句话说,SPSS 为模型使用的数据多于它应该使用的数据。您可以通过查看 SPSS 和 R 的输出来确认这一点——两个程序的自由度不同,这会导致结果出现(轻微的)差异
我不确定为什么 SPSS 不将这些行视为缺失。它可能是一个错误(不会是 SPSS 的第一个错误......)或者与文件设置方式有关。我没有检查后者,因为它是一个大文件,而且我对数据集不够熟悉,不知道去哪里看