2014-12-11 3 views
1

R에 현재 SAS 프로그램을 다시 쓰려고하는데 결과가 일치하는지 확인하고 있습니다. 저는 아주 기본적인 회귀에서 시작하고 있습니다. 그리고 심지어 일치시킬 수는 없습니다. 또한 Excel에서 결과를 다시 확인하고 R 출력과 일치시킵니다.SAS와 R의 회귀 분석이 일치하지 않습니다.

는 회귀에 대한

내 SAS의 코드는 매우 기본적인 : 여기

Proc Reg data=[data set]; 
model DepVar = Reg1 Reg2 Reg3 Reg4 Reg5 Reg6; 
run; 

은 출력의 요약이다 :

VAR   SAS   R   Excel 
DepVar  0.01748  0.01748  0.01748 
Reg1  (0.24815) (0.24809) (0.24809) 
Reg2   1.19502  1.19481  1.19481 
Reg3  (0.33029) (0.33012) (0.33012) 
Reg4   0.80502  0.80507  0.80507 
Reg5  (1.39338) (1.39345) (1.39345) 
Reg6  (0.13034) (0.13051) (0.13051) 

그리고 여기에 데이터 (60 데이터 포인트)입니다 :

OBS DepVar Reg1 Reg2 Reg3 Reg4 Reg5 Reg6 
1 -0.0444 -0.0298 -0.0165 0.0266 0.032 0.0019 -0.0035 
2 -0.0491 0.0165 -0.0072 0.0283 -0.0298 -0.0165 0.0266 
3 0.1208 -0.0215 -0.0138 0.0175 0.0165 -0.0072 0.0283 
4 -0.0784 -0.0278 -0.04 -0.0046 -0.0215 -0.0138 0.0175 
5 0.2154 0.0353 0.0299 -0.-0.0278 -0.04 -0.0046 
6 0.1249 0.0045 0.0256 0.0278 0.0353 0.0299 -0.
7 0.0062 0.0379 0.0277 -0.0045 0.0045 0.0256 0.0278 
8 0.0359 -0.0127 -0.0088 0.0141 0.0379 0.0277 -0.0045 
9 0.2078 0.004 -0.0068 0.0116 -0.0127 -0.0088 0.0141 
10 -0.123 -0.0214 -0.0103 -0.007 0.004 -0.0068 0.0116 
11 -0.0633 0.0353 0.01 -0.0185 -0.0214 -0.0103 -0.007 
12 0.0173 -0.0031 -0.0051 0.0048 0.0353 0.01 -0.0185 
13 -0.0204 0.03 0.0533 0.0117 -0.0031 -0.0051 0.0048 
14 -0.0143 -0.0033 -0.0031 -0.0085 0.03 0.0533 0.0117 
15 0.1663 0.0142 0.0356 -0.0011 -0.0033 -0.0031 -0.0085 
16 -0.099 0.0066 -0.0124 0.0308 0.0142 0.0356 -0.0011 
17 -0.0148 -0.0358 -0.0304 0.0277 0.0066 -0.0124 0.0308 
18 -0.0807 -0.0038 -0.0054 0.0151 -0.0358 -0.0304 0.0277 
19 0.1532 -0.008 -0.0399 0.0327 -0.0038 -0.0054 0.0151 
20 0.1195 0.0205 0.0083 -0.0176 -0.008 -0.0399 0.0327 
21 -0.0581 0.0186 -0.-0.0043 0.0205 0.0083 -0.0176 
22 0.0034 0.0325 0.0164 0.0048 0.0186 -0.-0.0043 
23 0.0476 0.0175 0.0077 0.0048 0.0325 0.0164 0.0048 
24 -0.0413 0.0086 -0.0089 0.0252 0.0175 0.0077 0.0048 
25 0.0192 0.0143 0.0009 -0.0002 0.0086 -0.0089 0.0252 
26 0.2577 -0.0197 0.0137 0.0024 0.0143 0.0009 -0.0002 
27 0.0157 0.0071 -0.0026 0.0039 -0.0197 0.0137 0.0024 
28 -0.0012 0.0353 -0.0209 -0.0097 0.0071 -0.0026 0.0039 
29 0.0393 0.0323 -0.0003 -0.0015 0.0353 -0.0209 -0.0097 
30 -0.0036 -0.0198 0.0076 -0.0107 0.0323 -0.0003 -0.0015 
31 -0.0607 -0.0374 -0.0267 -0.0299 -0.0198 0.0076 -0.0107 
32 0.0236 0.0094 -0.0014 -0.0236 -0.0374 -0.0267 -0.0299 
33 -0.0363 0.0314 -0.0246 -0.0213 0.0094 -0.0014 -0.0236 
34 -0.0442 0.0173 0.0021 -0.0197 0.0314 -0.0246 -0.0213 
35 0.0758 -0.0485 -0.0277 -0.0109 0.0173 0.0021 -0.0197 
36 -0.0076 -0.0097 0.0005 -0.0003 -0.0485 -0.0277 -0.0109 
37 -0.0096 -0.065 -0.0078 0.0305 -0.0097 0.0005 -0.0003 
38 0.0181 -0.0332 -0.0054 -0.0003 -0.065 -0.0078 0.0305 
39 -0.056 -0.0112 0.0083 0.0028 -0.0332 -0.0054 -0.0003 
40 -0.0404 0.0441 -0.0149 -0.0003 -0.0112 0.0083 0.0028 
41 0.2678 0.0165 0.0298 -0.0034 0.0441 -0.0149 -0.0003 
42 -0.0138 -0.0865 0.0107 -0.0102 0.0165 0.0298 -0.0034 
43 -0.0568 -0.01 0.0358 0.0369 -0.0865 0.0107 -0.0102 
44 -0.0234 0.0129 0.0375 0.0148 -0.01 0.0358 0.0369 
45 -0.141 -0.0945 -0.0034 0.044 0.0129 0.0375 0.0148 
46 -0.0227 -0.1754 -0.0228 -0.0299 -0.0945 -0.0034 0.044 
47 -0.1332 -0.0813 -0.0363 -0.0494 -0.1754 -0.0228 -0.0299 
48 0.1535 0.015 0.0397 -0.012 -0.0813 -0.0363 -0.0494 
49 0.0309 -0.0844 -0.0098 -0.0986 0.015 0.0397 -0.012 
50 0.0529 -0.1042 -0.0035 -0.069 -0.0844 -0.0098 -0.0986 
51 -0.0834 0.0868 0.0073 0.026 -0.1042 -0.0035 -0.069 
52 0.0413 0.0986 0.054 0.0542 0.0868 0.0073 0.026 
53 -0.0006 0.0486 -0.0266 0.0056 0.0986 0.054 0.0542 
54 0.0159 0.0009 0.0267 -0.0244 0.0486 -0.0266 0.0056 
55 -0.0506 0.0738 0.025 0.0473 0.0009 0.0267 -0.0244 
56 0.05 0.0299 -0.0051 0.0759 0.0738 0.025 0.0473 
57 0.009 0.0376 0.0247 0.014 0.0299 -0.0051 0.0759 
58 0.0344 -0.0293 -0.0422 -0.0437 0.0376 0.0247 0.014 
59 0.0038 0.0523 -0.0265 0.0017 -0.0293 -0.0422 -0.0437 
60 0.1589 0.0239 0.0579 0.0073 0.0523 -0.0265 0.0017 

무엇이 누락 되었습니까?

+0

SAS와 Excel에서 설명적인 통계를 인쇄 할 수 있습니까? 예 : Reg1 var? 또한 회귀 OUTPUT을 인쇄 할 수 있습니다. 이것은 모든 관측치 등을 읽는 것 같은 사소한 오류를 잡는 데 도움이됩니다. – Aksakal

+0

기록을 위해이 소프트웨어 플랫폼 중 어느 것도 완벽하게 정확하지 않습니다. 이 질문에 나열된 수 *를 정수 비율로 변환하고 * Mathematica *에서 정확한 해를 계산 한 다음 그 해를 부동 소수점으로 변환하면 계수 $ 0.0174833, -0.248087,1.19481, -0.330125,0.805075, -1.39345가됩니다. , -0.130512 $입니다. (여기에 제시된 데이터는 해당 프로그램이 수행하는 기능의 반올림 된 버전 일 수 있습니다.) – whuber

+0

가능한 중복 항목에는 http://stats.stackexchange.com/questions/38379 및 http://stats.stackexchange.com/questions/113314가 포함될 수 있으며, 둘 다 통계 출력에서 ​​부동 소수점 부정확성에 대해 논의합니다. – whuber

답변

1

출력을 올바르게 읽으면 그 차이가 네 번째 significant digit 이상으로 표시됩니다 (단, 데이터 포인트는 60 개). 모두 60 개 데이터 포인트만으로 2 자리 또는 3 자리의 유효 자릿수로 측정되었으므로 결과물의 세 번째 유효 숫자 이상은 보지 말아야합니다. "저기에있는 것"은 측정 소음에 의해 휩쓸 리게됩니다.

매트릭스 역전 (더 정확하게는 선형 방정식에 대한 솔루션 찾기)은 부동 소수점 연산에서 정확한 과학이 아닙니다. 선형 방정식을 풀기 위해 다른 알고리즘을 사용할 수있는 다른 수치 라이브러리를 사용하거나 다른 아키텍처의 동일한 라이브러리 (사용자가 생각하지 않는 것으로 가정 함)를 사용하면 관찰중인 순서에 따라 다른 결과가 발생할 수 있습니다. Check R FAQ 7.31 for more info. 특수 정확한 산술 라이브러리를 사용하면 원칙적으로 동일한 결과를 얻을 수 있지만 OLS 솔루션을 R/SAS/Excel에서 정확한 산술로 사용할 수 있는지 여부조차 모릅니다.

+3

행렬 반전 정밀도의 차이는 [EPS] (http://en.wikipedia.org/wiki/Machine_epsilon)에 가깝습니다. 비정상적인 매트릭스와 같은 극단적 인 경우에만 또는 부동 소수점 대 배정도를 실행하는 경우에만이 점을 알 수 있습니다. – Aksakal

+2

일반적으로 유효한 점인 반면이 게시물은이 문맥에서 오해의 소지가 있기 때문에 나는 downvoted. @Aksakal이 바로 이것입니다. 차이는 숫자로 인해 매우 큽니다. 우리는 전체 순위 디자인 매트릭스를 가지고 있습니다. QR은 아무런 문제없이 'eps'까지 진행됩니다. 나는 R과 MATLAB (ATLAS와 Intel의 MKL을 각각 사용)에서이 문제를 돌 렸으며 16 자리 숫자까지 동일한 결과를 얻었다. (예 : 절편은 두 경우 모두 0.0174833225805475) (제발 기분 나빠하지 마시오. 거의 항상 매우 도움이됩니다, 이건 조금 벗어났습니다!) –

+0

@ usεr11852 : downvote를 설명해 주셔서 감사합니다. 나는 배우기를 좋아하지. 사람들이 내가 잘못한 곳을 지적하면 도움이된다. –

1

이것은 정밀도 차이입니다. 내 생각 엔 R과 Excel은 행렬 인수 분해 경로를 사용하는 반면 PROC REG는 MLE를 사용합니다. 선형 대수학을 사용할 때 정밀도는 기계 정밀도에 가깝게 설정됩니다. MLE에서 정밀도를 설정하면 최적화 루틴이 정밀도를 일치 시키려고 시도합니다.

또 다른 추측은 문자에서 숫자로의 변환과 그 주위의 반올림입니다.

4

더블 SAS의 데이터를 확인하고 내가 데이터를 사용하고 SAS와 동일하여 R과 같은 결과를 엑셀 출력을 얻을 등, 같은 정밀도를 가지고 있는지 확인 :

enter image description here

그리고 이것은이다 STATA 출력은, 경우에 그 확인에 도움이 :

enter image description here

+2

귀하의 관찰은 http://stats.stackexchange.com/questions/113314에서 논의 된 현상과 관련이 있습니다 : 데이터가 프로그램에 입력 된 방법에 따라 약간 다른 버전에서 작업했을 수도 있습니다! 여기에서 표준 오류를 보는 것은 매우 유용합니다. 작은 불일치를 적절한 관점에서 봅니다. (+1) – whuber

+0

@whuber 감사합니다! 도움이된다면 Window Vista와 SAS 9.3을 사용했습니다. 내가 데이터를 입력하는 방법은 csv로 여기에 게시 된 데이터를 저장하고 (공백을 대체하는 ","를 추가 한) proc import를 사용하여 테이블을 읽는 것입니다. –

+0

SAS는 합리적인 산술을 사용하여 계산 된 * 정확한 * 결과를 얻는 중입니다. – whuber

1

감사합니다 모두 당신의 입력. 그것은 SAS 프로그램을 통해 작동하면서 데이터와 함께 진행되는 것으로 보입니다. 원래 몇 개의 데이터 소스를 가져 와서 하나의 SAS 데이터 세트로 결합한 다음 그 데이터 세트를 R 및 Excel로 내 보냈습니다. 차이점이 발생한 시점입니다. 이제 R에서 원본 데이터 세트를 결합한 다음 회귀 분석을 실행하면 원본 SAS 응답을 얻을 수 있습니다. 또한, 복사 된 데이터를 가져 와서 SAS를 통해 실행하면 원본 R 응답을 얻습니다.

따라서 SAS 프로그램의 라인을 따라 데이터가 변경되고 있습니다. 그러나 원본 데이터의 정밀도는 원래 게시물에 표시된 것만으로, 어떻게 계산할 수 있습니까?

그래도 도움이됩니다. 감사!

관련 문제