簡體   English   中英

SAS和R中的回歸不匹配

[英]Regression in SAS and R not matching

我試圖用R重新編寫當前的SAS程序,並檢查輸出以確保其匹配。 我從一個非常基本的回歸開始,我什至無法做到這一點。 我還仔細檢查了Excel中的結果,它與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.0123 -0.0278 -0.04   -0.0046
6   0.1249  0.0045  0.0256  0.0278  0.0353  0.0299  -0.0123
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.0123 -0.0043 0.0205  0.0083  -0.0176
22  0.0034  0.0325  0.0164  0.0048  0.0186  -0.0123 -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

我想念什么?

在SAS中仔細檢查您的數據,並確保它們具有相同的精度,等等。我使用了您的數據和SAS,並獲得了與R和Excel輸出相同的結果:

在此處輸入圖片說明

這是Stata輸出,如果可以幫助驗證:

在此處輸入圖片說明

如果我正確讀取了輸出,則差異會顯示在第四個有效數字甚至更高的位置-僅60個數據點。 僅使用60個數據點,所有數據點的位數都不超過2或3個有效數字,您甚至不應查看輸出中第三個有效數字以外的任何東西。 任何“外面”的東西都會被測量噪聲淹沒。

在浮點算術中,矩陣求逆(更精確地說,是找到線性方程的解)不是一門精確的科學。 使用不同的數值庫(可能使用不同的算法來求解線性方程式),甚至使用不同體系結構上的相同庫(我認為對您而言並非如此),肯定會導致您觀察的順序出現差異。 有關更多信息,請參見R FAQ 7.31。 原則上,使用特殊的精確算術庫應該會產生相同的結果,但我什至不知道在R / SAS / Excel中是否可以使用精確算術獲得OLS解決方案。

這就是精度差異。 我的猜測是PROC REG使用MLE,而R和Excel使用矩陣分解路由。 使用線性代數時,精度幾乎設置為接近機器精度。 在MLE中,您可以設置精度,然后優化例程會嘗試將其匹配。

另一個猜測是從字符到數字的轉換並四舍五入。

謝謝各位的意見。 隨着數據在SAS程序中的運行,數據似乎正在發生變化。 我最初使用了幾個數據源,並將它們組合成一個SAS數據集,然后將數據集導出到R和Excel,這就是發生差異的時間。 現在,我發現,如果我在R中對原始數據集進行合並,然后運行回歸,則會得到原始的SAS答案。 此外,我發現(如上文所述),如果我獲取復制的數據並通過SAS運行該數據,則會得到原始的R答案。

因此,數據正在沿SAS程序行的某個位置更改。 但是,由於原始數據的精確度僅是我的原始文章中顯示的內容,因此我無法完全確定。

但是,這是有幫助的。 謝謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM