[R]周期変位を含むデータの回帰モデルを作成する
線形回帰であれば関数lmを使用すれば簡単にできる。以下の式で表される周期変動を含む回帰モデルを作成してみた例を示す。
y = a + b×x + c sin(2πx) + d cos(2πx)
a,b,c,d:定数
この例では周期変動の周期は1としている。以下に、回帰モデルの作成例を示す。
> # 独立変数(横軸方向)のデータを作成(特に意味はないが不等間隔)
> x <- c(0.0, 0.1, 0.5, 0.7, 1.0, 1.2, 1.4, 1.9, 2.0)
> # 従属変数(縦軸方向)のデータを適当に作成
> y <- c(0.1, 1.2, -0.4, -0.5, 0.0, 1.4, 0.4, 0.2, 1.5)
> # 関数lmを使用して回帰モデルを作成する
> r <- lm(y ~ x + sin(2 * pi * x) + cos(2 * pi * x))
> # 作成した回帰モデルを描画するために、描画のための横軸方向のデータを作成
> xest <- seq(0, 2, 0.05)
> # 描画のために作成した独立変数に基づく従属変数の値を作成
> yest <- predict(r, data.frame(x = xest))
> # 独立変数と従属変数のプロット
> plot(x,y)
> # 回帰モデルの描画
> lines(xest, yest)
> # 最後に作成した回帰モデルのモデルパラメーターを描画
> coef(r)
(Intercept) x sin(2 * pi * x) cos(2 * pi * x)
-0.1074583 0.3660297 0.8998182 0.3977064
> # 切片
> coef(r)[1]
(Intercept)
-0.1074583
> # 三角関数の合成により、求めた式の振幅を計算する
> sqrt(coef(r)[3] ^ 2 + coef(r)[4] ^ 2)
sin(2 * pi * x)
0.9837902
関数coefにより表示された値が、左から順にそれぞれa、b、c、dの値である。
sinとcosにそれぞれ「2 * pi * x」としたところがポイント。これは関数sinも関数cosも引数はラジアン単位で与えなければならないことから、xの値に2πをかけることで周期を1とした値に変換している。
« [R]「下にエラー file(file, "rt") : 'description' 引数が不正です」 | トップページ | [R]「以下にエラー findPerl(verbose = verbose) : 」 »
「R(数値計算)」カテゴリの記事
- [R]複数のパラメーターと定数を持つ関数の値が最大・最小となるパラメーターを求める(2026.03.30)
- [R]重み付き線形最小二乗法を行う(2026.03.20)
- [R]重み付き非線形最小二乗法を行う(2026.03.06)
- [R]計算機イプシロンを求める(2025.10.29)
- [R]複数の引数を持つ関数の値の最小値(最大値)を求める(2024.12.07)
« [R]「下にエラー file(file, "rt") : 'description' 引数が不正です」 | トップページ | [R]「以下にエラー findPerl(verbose = verbose) : 」 »

コメント