修正方法: lm.fit(x, y, offset = offset, …) のエラー: 'y' の na/nan/inf


R を使用するときに発生する可能性のあるエラーは次のとおりです。

 Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...): 
  NA/NaN/Inf in 'y'

このエラーは、 lm()関数を使用して R の線形回帰モデルを近似しようとしたが、予測変数または応答変数にNaNまたはInf値が含まれている場合に発生します。

次の例は、このエラーを実際に修正する方法を示しています。

エラーを再現する方法

R に、さまざまなバスケットボール選手のプレー時間と得点に関する情報を含む次のデータ フレームがあるとします。

 #create data frame with some NA, NaN, Inf values
df <- data. frame (minutes=c(4, NA, 28, 12, 30, 21, 14),
                 dots=c(12, NaN, 30, Inf, 43, 25, 17))

#view data frame
df

  minutes points
1 4 12
2 NA NaN
3 28 30
4 12 Lower
5 30 43
6 21 25
7 14 17

データ フレームにはNaN値とInf値が含まれていることに注意してください。

ここで、予測変数として「分」、応答変数として「ポイント」を使用して線形回帰モデルを近似しようとしているとします。

 #attempt to fit regression model
lm(points ~ minutes, data=df)

Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...): 
  NA/NaN/Inf in 'y'

NaN 値Inf値がデータ フレームに存在するため、エラーが発生します。

エラーを修正する方法

データフレーム内のNA値は問題ではないことに注意してください。実際、R は線形回帰モデルをフィッティングするときにNA値を単に無視します。

本当の問題は、 NaN 値Inf値によって引き起こされます。

これを修正する最も簡単な方法は、 NaN 値Inf値をNA値に置き換えることです。

 #Replace NaN & Inf with NA
df[is. na (df) | df==" Inf "] = NA

#view updated data frame
df

  minutes points
1 4 12
2 NA NA
3 28 30
4 12 NA
5 30 43
6 21 25
7 14 17

これで回帰モデルを適応させることができます。

 #fit regression model
lm(points ~ minutes, data=df)

Call:
lm(formula = points ~ minutes, data = df)

Coefficients:
(Intercept) minutes  
      5,062 1,048

結果は回帰モデルの係数を示します。

データ フレーム内のNaN値とInf値を置き換えたため、エラーが発生していないことに注意してください。

追加リソース

次のチュートリアルでは、R の他の一般的なエラーを修正する方法について説明します。

R での修正方法: 予期しない文字列定数
R での修正方法: ExtractVars の無効なテンプレート式
R で修正する方法: 引数が数値でも論理でもない: na を返す

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です