RPYを介してRのfactanal()からの相関行列を抽出する
-
21-12-2019 - |
質問
loadings
マトリックスを抽出するために次のコードを使用しています。
from rpy2.robjects import r, numpy2ri
numpy2ri.activate()
import numpy as np
A = np.random.rand(50,10)
fit = r.factanal(A, 5, rotation='promax')
load = r.loadings(fit)
.
どの機能!
しかし、correlation
from rpy2.robjects import r, numpy2ri
numpy2ri.activate()
import numpy as np
A = np.random.rand(50,10)
fit = r.factanal(A, 5, rotation='promax')
corr = r.correlation(fit)
.
GET:AttributeError: 'R' object has no attribute 'correlation'
if - 代わりに - 私は試してみてください:
from rpy2.robjects import r, numpy2ri
numpy2ri.activate()
import numpy as np
A = np.random.rand(50,10)
fit = r.factanal(A, 5, rotation='promax')
corr = fit.rx2('correlation')
.
GET:ValueError: All parameters must be of type Sexp_Type,or Python int/long, float, bool, or None
私は特に相関関係と負荷の両方を有効にする必要があると見なさい。
print fit.names
.
私に与えます:
['converged' 'loadings' 'uniquenesses' 'correlation' 'criteria' 'factors'
'dof' 'method' 'rotmat' 'STATISTIC' 'PVAL' 'n.obs' 'call']
. 解決
問題はNUMPY2RIです。
私が知ることができる限り、約2つの回避策があります。まず、ravjects.vectors.vectors.rx2の他のすべてのものが何をしているのかわからないので、pass rpyの.rx2
関数を使用して、私はこれの意味がわからない。:
In [1]: from rpy2.robjects import r, numpy2ri
In [2]: numpy2ri.activate()
In [3]: import numpy as np
In [4]: A = np.random.rand(50,10)
In [5]: fit = r.factanal(A, 5, rotation='promax')
In [6]: corr = fit.rx2('correlation')
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-6-cf8a3601ab8e> in <module>()
----> 1 corr = fit.rx2('correlation')
/ifs/apps/apps/python-2.7.1/lib/python2.7/site-packages/rpy2/robjects/vectors.pyc in __call__(self, *args, **kwargs)
69 fun = self._extractfunction
70 conv_args.insert(0, self._parent)
---> 71 res = fun(*conv_args, **kwargs)
72 res = conversion.py2ro(res)
73 return res
ValueError: All parameters must be of type Sexp_Type,or Python int/long, float, bool, or None
In [7]: r["[["](fit,'correlation')
Out[7]:
array([[ 1.00000000e+00, 1.13009428e-01, -1.68749351e-01,
1.85869656e-01, 2.62402778e-01, 5.11846775e-02,
1.96957316e-01, 9.83478574e-02, 2.10043867e-02,
1.34883265e-01],
...
.
2番目の代替案は、NUMPY2RIを無効にすることです。その後はいつでも再度再生することができます。
In [8]: numpy2ri.deactivate()
In [9]: corr = fit.rx2('correlation')
In [10]: print corr
[,1] [,2] [,3] [,4] [,5]
[1,] 1.00000000 0.1130094277 -0.168749351 0.18586966 0.26240278
[2,] 0.11300943 1.0000000000 -0.116878885 0.12378751 -0.05303278
[3,] -0.16874935 -0.1168788854 1.000000000 -0.26323867 -0.17794088
[4,] 0.18586966 0.1237875121 -0.263238668 1.00000000 0.03955314
[5,] 0.26240278 -0.0530327762 -0.177940878 0.03955314 1.00000000
[6,] 0.05118468 -0.0007762935 0.227475607 -0.11270587 -0.10768763
[7,] 0.19695732 -0.0423807326 0.036117785 -0.03174723 -0.11218540
[8,] 0.09834786 0.1055451947 0.221756056 0.01828542 -0.41956986
[9,] 0.02100439 -0.2173312335 -0.064198166 -0.06230902 -0.05976113
[10,] 0.13488326 0.0810527379 0.005651769 -0.10353872 -0.11954671
...
. 他のヒント
RPY2バージョン2.4.2でエラーを再現しました。rpy2
には、文字列の索引付けに関するいくつかのトラブルがあります。
r.correlation(fit)
は、デフォルトでMy Rにそのような関数correlation
がありません。しかし、loadings
がありますので、r.loadings(fit)
はうまく機能します。
このコードは私に相関行列を与えました:
fit = r.factanal(A, 5, rotation='promax')
corr = fit[3]
. 所属していません StackOverflow