这个“答案”实际上只是一个很长的评论。
这是longley[,-7]
.
> longley[,-7]
GNP.deflator GNP Unemployed Armed.Forces Population Year
1947 83.0 234.289 235.6 159.0 107.608 1947
1948 88.5 259.426 232.5 145.6 108.632 1948
1949 88.2 258.054 368.2 161.6 109.773 1949
1950 89.5 284.599 335.1 165.0 110.929 1950
1951 96.2 328.975 209.9 309.9 112.075 1951
1952 98.1 346.999 193.2 359.4 113.270 1952
1953 99.0 365.385 187.0 354.7 115.094 1953
1954 100.0 363.112 357.8 335.0 116.219 1954
1955 101.2 397.469 290.4 304.8 117.388 1955
1956 104.6 419.180 282.2 285.7 118.734 1956
1957 108.4 442.769 293.6 279.8 120.445 1957
1958 110.8 444.546 468.1 263.7 121.950 1958
1959 112.6 482.704 381.3 255.2 123.366 1959
1960 114.2 502.601 393.1 251.4 125.368 1960
1961 115.7 518.173 480.6 257.2 127.852 1961
1962 116.9 554.894 400.7 282.7 130.081 1962
这显示了七列,但最后一列仅复制第一列中的索引。我怀疑在 SPSS 中,您已经处理了所有 7 列,而在 R 中,您处理了 6 列。
这只是一个猜测——我没有 SPSS,所以我什至无法尝试重现你的结果。
您在 R 中所做的计算只是计算 x T * x 的特征值,并且这些值是正确的。这是使用 numpy 在 Python 中进行的相同计算:
In [5]: x
Out[5]:
array([[ 83. , 234.289, 235.6 , 159. , 107.608, 1947. ],
[ 88.5 , 259.426, 232.5 , 145.6 , 108.632, 1948. ],
[ 88.2 , 258.054, 368.2 , 161.6 , 109.773, 1949. ],
[ 89.5 , 284.599, 335.1 , 165. , 110.929, 1950. ],
[ 96.2 , 328.975, 209.9 , 309.9 , 112.075, 1951. ],
[ 98.1 , 346.999, 193.2 , 359.4 , 113.27 , 1952. ],
[ 99. , 365.385, 187. , 354.7 , 115.094, 1953. ],
[ 100. , 363.112, 357.8 , 335. , 116.219, 1954. ],
[ 101.2 , 397.469, 290.4 , 304.8 , 117.388, 1955. ],
[ 104.6 , 419.18 , 282.2 , 285.7 , 118.734, 1956. ],
[ 108.4 , 442.769, 293.6 , 279.8 , 120.445, 1957. ],
[ 110.8 , 444.546, 468.1 , 263.7 , 121.95 , 1958. ],
[ 112.6 , 482.704, 381.3 , 255.2 , 123.366, 1959. ],
[ 114.2 , 502.601, 393.1 , 251.4 , 125.368, 1960. ],
[ 115.7 , 518.173, 480.6 , 257.2 , 127.852, 1961. ],
[ 116.9 , 554.894, 400.7 , 282.7 , 130.081, 1962. ]])
In [6]: eigvals(x.T.dot(x))
Out[6]:
array([ 6.66529929e+07, 2.09072969e+05, 1.05355048e+05,
1.80397602e+04, 2.45572970e+01, 2.01511742e+00])