R で区分回帰を実行する方法 (ステップバイステップ)


区分回帰は、データセットに明確な「ブレークポイント」がある場合によく使用される回帰手法です。

次の段階的な例は、R で区分回帰を実行する方法を示しています。

ステップ 1: データを作成する

まず、次のデータ フレームを作成しましょう。

 #view DataFrame
df <- data. frame (x=c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16),
                 y=c(2, 4, 5, 6, 8, 10, 12, 13, 15, 19, 24, 28, 31, 34, 39, 44))

#view first six rows of data frame
head(df)

  xy
1 1 2
2 2 4
3 3 5
4 4 6
5 5 8
6 6 10

ステップ 2: データを視覚化する

次に、散布図を作成してデータを視覚化しましょう。

 #create scatterplot of x vs. y
plot(df$x, df$y, pch= 16 , col=' steelblue ')

x と y の関係がx = 9付近で急激に変化していることがわかります。

ステップ 3: 区分的回帰モデルを当てはめる

R のセグメント化パッケージのsegmented()関数を使用して、区分回帰モデルをデータセットに適合させることができます。

 library (segmented)

#fit simple linear regression model
fit <- lm(y ~ x, data=df)

#fit piecewise regression model to original model, estimating a breakpoint at x=9
segmented. fit <- segmented(fit, seg.Z = ~x, psi= 9 )

#view summary of segmented model
summary( segmented.fit )

Call: 
segmented.lm(obj = fit, seg.Z = ~x, psi = 9)

Estimated Break-Point(s):
         East. St.Err
psi1.x 8.762 0.26

Meaningful coefficients of the linear terms:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 0.32143 0.48343 0.665 0.519    
x 1.59524 0.09573 16.663 1.16e-09 ***
U1.x 2.40476 0.13539 17.762 NA    
---
Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.6204 on 12 degrees of freedom
Multiple R-Squared: 0.9983, Adjusted R-squared: 0.9978 

Convergence achieved in 2 iter. (rel. changes 0)

segmented()関数は、x = 8.762 でブレークポイントを検出します。

近似された区分的回帰モデルは次のとおりです。

x ≤ 8.762 の場合: y = 0.32143 + 1.59524*(x)

x > 8.762 の場合: y = 0.32143 + 1.59524*(8.762) + (1.59524+2.40476)*(x-8.762)

たとえば、値x = 5があるとします。推定値は次のようになります。

  • y = 0.32143 + 1.59524*(x)
  • y = 0.32143 + 1.59524*(5)
  • y = 8.297

または、値x = 12があるとします。推定値は次のようになります。

  • y = 0.32143 + 1.59524*(8.762) + (1.59524+2.40476)*(12-8.762)
  • y = 27.25

ステップ 4: 最終的な区分回帰モデルを視覚化する

次のコードを使用して、元のデータに基づいて最終的な区分回帰モデルを視覚化できます。

 #plot original data
plot(df$x, df$y, pch= 16 , col=' steelblue ')

#add segmented regression model
plot(segmented. fit , add= T )

区分的回帰モデルはデータに非常によく適合しているようです。

追加リソース

次のチュートリアルでは、R の回帰モデルに関する追加情報を提供します。

R で単純な線形回帰を実行する方法
R で重回帰を実行する方法
R でロジスティック回帰を実行する方法
R で分位回帰を実行する方法
R で重み付き回帰を実行する方法

コメントを追加する

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