2016-04-04 22 views
2

私のデータセットには、robustHDのいくつかの異常値を取り除く予定です。このエラーが発生したのは初めてです。データセットには50以上の変数と100以上の観測値が含まれています。「winsorize」を使用すると「システムが計算上単数です」エラー

どうすればこの問題を解決できますか?そして、なぜ行列の特異性が計算のために重要なのですか?winsorize?ありがとう。

df_win<-winsorize(df,prob=0.95) 
Error in solve.default(R) : system is computationally singular: reciprocal condition number = 1.26103e-18 
+1

こんにちは、私は、StackOverflowへようこそ。例が再現可能であれば、本当に役に立ちます。このエラーを複製する最小限のデータセットを提供できますか?どのパッケージから 'winsorize'関数が得られたかをメモすることができますか?複数のパッケージが1つを提供します。 – Laterow

+0

@Laterowありがとう!私は 'robustHD'というパッケージを使いました。申し訳ありませんが仕事に関連しているので、データをアップロードすることはできません... –

答えて

2

この理由はrobustHDwinsorizesolveを使用していることです。コードをさらに詳しく調べると、データフレームのwinsorizewinsorize.data.frameメソッドを呼び出します。これはas.matrixを実行し、その後winsorize.matrixメソッドを使用するスクリプトです。これは順番に一連のことを行いますが、ここでの問題はsolve機能を使用していることです。

エラーはsolveです。エラーはおそらく、非常に相関の高い変数/列が含まれているか、お互いの線形結合であるために発生します。お互いの変換である変数または変数が重複しているかどうかを確認したい場合があります。

あなたが行うことができますいくつかのものがあります:

  1. は、相関の高い変数の1つを削除して再試行してください。
  2. winsorizeを使用するには、別のパッケージをご利用ください。
  3. 独自のwinsorize関数を記述します。

第2工程を行うための最も簡単な方法:

require(sos) 
findFn("winsorize") 

これは、その説明に単語「ウィンザライズ」を持っているすべての機能の概要を生成します。 winsorizationに使用するように記述されている関数を探します。

+0

ありがとう@Laterow。わかった。 findFnも非常に便利です。どうもありがとう! –

関連する問題