[英]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.