hrk0531 / sappy

BSD 3-Clause "New" or "Revised" License
1 stars 0 forks source link

discussion about factor rotation #12

Open hrk0531 opened 1 month ago

hrk0531 commented 1 month ago

@yanagikad @y1wtt

feature/designブランチにて

しかし、only integer scalar arrays can be converted to a scalar indexと新たにエラーがfor var in range(p):の部分で出る。p入力データxの行数だから整数のはずなのになぜこのエラーが出るのかわからない(質問2)

同じファイル内で直行回転の収束基準を戻り値とする関数orthogonal_convergeを定めている。収束基準は

CV(\Lambda) = \sum_{j=1}^{m}\left[ \sum_{p=1}^{n}\lambda^{4}_{pj(i)} - \dfrac{1}{p}\left( \sum_{p=1}^{n}\lambda^{2}_{pj(i)} \right)^{2} \right]

である。この収束基準を、同じファイル内で定義しているvarimax関数内で使用したいと思うのだが、この関数って必要なくて、varimax関数の特異値分解している部分を

 cv = 0
        delta_cv = float('inf')
        while delta_cv > 1e-5:
            previous_cv = cv
            for j in range(n_cols):
                cv += np.sum(np.sum(x_nld[:, j]**4) - 1/n_cols) * (np.sum(x_nld[:, j]**2))**2

            delta_cv = abs(cv - previous_cv)
            if delta_cv < 1e-5:
                break

とかに改変すれば良いのかな。

yanagikad commented 1 month ago

@hrk0531 ファイルのリンクを貼ろう。ラインも指定できるし。

hrk0531 commented 1 month ago

@yanagikad すみません。貼りました。 rotator.py

yanagikad commented 1 month ago

@hrk0531 https://github.com/hrk0531/sappy/blob/3aea5f332767537a596a55ef21ec7b566b074471/sappy/dimension/rotator.py#L81 こういうラインを指定したリンクが貼れるから、こんな感じで貼ろう! こっちのほうが問題箇所がわかりやすいので!

質問1、自分の考えでは担保されると思う

そう思った理由がほしいかな

それはさておき、これは合ってる気がするな、sに対応するのは$u_p(i)$の行であり、 $f$とは何ら関係のない変数なので、この形で合ってる気がする。 数式とコードの対応関係が取りにくいので変数名をもう少しわかりやすくしてもらうと助かるかも s -> u_p_row_index的な。

質問2 pはnumpyのmethod shape の戻り値だからnp.int64の可能性があるかもね。 function range(hoge)の引数の型がintのみにしか適応してない場合(というか確かそう)エラーが出るはず。 ここはnpを使ってる作業なので関数もnumpyで統一してfunction np.arrange()を使うといいかも

ちなみにrange(i)が通ってるのは https://github.com/hrk0531/sappy/blob/3aea5f332767537a596a55ef21ec7b566b074471/sappy/dimension/rotator.py#L74i: intになってるからだと思う。

3個目の質問 https://github.com/hrk0531/sappy/blob/b5a57d71599a05c40a9ab4fa3117190520a08ba0/sappy/dimension/rotator.py#L52-L59 ここかな?

~とかに改変すれば良いのかな。

この部分については何を目指して収束させているかによるので、判断できないのと、 何を目指して、と、何を根拠に

この関数って必要なくて、

となっているかが知りたい。

そこの理由の部分が聞きたいなら、

参考にしたものや、ドキュメントがあるなら参考資料として添付して、 該当箇所について、どういう意図でどうコードに落とし込んだか説明してほしい。

yanagikad commented 1 month ago

質問1について、2次元行列に対して3個目の引数は無理なのは自明として、なぜそこに変数sを入れたかったのか知りたい。

hrk0531 commented 1 month ago

@yanagikad

yanagikad commented 1 month ago

@hrk0531

https://github.com/hrk0531/sappy/blob/3aea5f332767537a596a55ef21ec7b566b074471/sappy/dimension/rotator.py#L80-L82

ここ、jが引き算されてるんだけど、ここが負になってる可能性ない?

indexの確認をprintデバッグしてみるといいかも

yanagikad commented 1 month ago

前後の特異値の比を評価してbreakしてiterationを止めているが、別の収束基準があればそれを使えばよくて、特異値で判断する必要がないのでは?と思った。

まぁそれはそうかな。別の収束基準に妥当性があるなら買えていいと思う

hrk0531 commented 1 month ago

@yanagikad jのでばっく、今日は元気ないから後日やってみる