Data.frame a
があるとします
私が使う
m.fit <- lm(col2 ~ col3 * col4, na.action = na.exclude)
col2
にはいくつかのNA
値があり、col3
およびcol4
の値は1未満です。
私は取得し続けます
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) :
NA/NaN/Inf in foreign function call (arg 1)
メーリングリストを確認しましたが、それはcol2
のNA
sが原因であるようですが、na.action=na.exclude/omit/pass
を使用しようとしましたが、どれも機能していないようです。最初の10エントリでlm
を再度テストしましたが、NA
sが原因ではありません。この警告の問題は、Googleのすべての結果がNA
を指しているように見えることです。
エラーを誤って解釈したか、lm
を誤って使用していますか?
データは kaggle にあります。私は線形回帰を使用してMonthlyIncomeデータをモデリングしています(特定のglm
ファミリーを取得できなかったため)。使用する独自の変数を作成しましたが、既に存在する変数を使用してMonthlyIncomeをモデル化しようとすると失敗します。
私はこのスレッドが本当に古いことを知っていますが、答えは完全ではないようで、同じ問題にぶつかりました。
私が抱えていた問題は、NAカラムにもNaNとInfがあったためです。それらを削除して、もう一度試してください。具体的には:
col2[which(is.nan(col2))] = NA
col2[which(col2==Inf)] = NA
18か月前の質問に役立つことを願っています。
この完全な説明については、本を読む必要があります Rの初心者向けガイド 具体的には、次のエラーに言及しています。
Lm.fit(x、y、offset = offset、singular.ok = singular.ok、...)のエラー:外部関数呼び出しのNA/NaN/Inf(arg 4)
解決策は、強度データに小さな定数値、たとえば1を追加することです。小さな値の追加に関して、統計コミュニティで継続的な議論があることに注意してください。 Rで計算を行うときに、ゼロのログを使用することはできません。
すべての可能な_na.omit
_および_na.exclude
_チェックの後、私は別の可能性に苦しみました。
私は次のようなものを取っていました:
lm(log(x) ~ log(y), data = ...)
それに気づかずに、私のデータセットの一部の値では、xまたはyがゼロになる可能性があります:log(0) = -Inf
気を付けるべきもう一つのこと!
オプションをリセットすることで、このタイプの問題を解決しました。 options(na.action="na.exclude")
またはoptions(na.action="na.omit")
私は自分の設定をチェックし、以前にオプションを「na.pass」に変更しました。これにより、NAのyの観測値(y~x
)が削除されませんでした。
Col2(および他のすべての変数)のタイプを変更してみてください
col2 <- as.integer(col2)
Col2に相当するものが整数ではなくinteger64であり、自然および多項式のスプライン、splines :: bsおよびsplines:nsを使用している場合、このエラーが発生しました。
m.fit <- lm(col1 ~ ns(col2))
m.fit <- lm(col1 ~ bs(col2, degree = 3))
標準整数への変換は私のために働いた:
m.fit <- lm(col1 ~ ns(as.integer(col2)))
m.fit <- lm(col1 ~ bs(as.integer(col2), degree = 3))
reformulate
を呼び出すときに引数を反転し、チェックせずにlm
呼び出しで式を使用すると、このエラーが発生したため、予測変数と応答変数が間違っていました。
私はちょうど同じ問題に遭遇しました。を使用して有限要素を取得する
finiteElements = which(is.finite(col3*col4))
finiteData = data[finiteElements,]
lm(col2~col3*col4,na.action=na.exclude,data=finiteData)
従属変数に0がないことを確認してください。
もう1つ注意すべきことは、log()やsin()などの関数を使用してxとyをinfにすることです。例えば。 log 0 = 0またはsin(pi)= 0.