私はこれに対する答えを読みました question そしてそれらは非常に役に立ちますが、特にRで助けが必要です。
Rには次のようなデータセットの例があります。
x <- c(32,64,96,118,126,144,152.5,158)
y <- c(99.5,104.8,108.5,100,86,64,35.3,15)
y = f(x)
になるように、これらのデータにモデルを適合させたいです。 3次多項式モデルにしたいです。
Rでそれを行うにはどうすればよいですか?
さらに、Rは最適なモデルを見つけるのに役立ちますか?
X(x ^ 3)の3次多項式を取得するには、次のようにします。
lm(y ~ x + I(x^2) + I(x^3))
または
lm(y ~ poly(x, 3, raw=TRUE))
10次多項式を近似し、ほぼ完全に近似することができますが、そうすべきですか?
編集:poly(x、3)がおそらくより良い選択です(以下の@hadleyを参照)。
どのモデルが「最適なモデル」であるかは、「最良」の意味によって異なります。 Rには役立つツールがありますが、それらを選択するための「最良」の定義を提供する必要があります。次のデータとコードの例を検討してください。
x <- 1:10
y <- x + c(-0.5,0.5)
plot(x,y, xlim=c(0,11), ylim=c(-1,12))
fit1 <- lm( y~offset(x) -1 )
fit2 <- lm( y~x )
fit3 <- lm( y~poly(x,3) )
fit4 <- lm( y~poly(x,9) )
library(splines)
fit5 <- lm( y~ns(x, 3) )
fit6 <- lm( y~ns(x, 9) )
fit7 <- lm( y ~ x + cos(x*pi) )
xx <- seq(0,11, length.out=250)
lines(xx, predict(fit1, data.frame(x=xx)), col='blue')
lines(xx, predict(fit2, data.frame(x=xx)), col='green')
lines(xx, predict(fit3, data.frame(x=xx)), col='red')
lines(xx, predict(fit4, data.frame(x=xx)), col='purple')
lines(xx, predict(fit5, data.frame(x=xx)), col='orange')
lines(xx, predict(fit6, data.frame(x=xx)), col='grey')
lines(xx, predict(fit7, data.frame(x=xx)), col='black')
これらのモデルのうち、どれが最適ですか?それらのいずれに対しても引数を作成できます(ただし、補間のために紫色の引数を使用したくない場合)。
「Rで最適なモデルを見つけるのに役立つか」という質問については、テストするモデルのセットを述べることができると仮定すると、おそらくこれを行う関数がありますが、これはn-1のセットの最初の良いアプローチです次数多項式:
polyfit <- function(i) x <- AIC(lm(y~poly(x,i)))
as.integer(optimize(polyfit,interval = c(1,length(x)-1))$minimum)
ノート
このアプローチの妥当性は、目的、optimize()
およびAIC()
の仮定、およびAICが使用する基準である場合に依存します。
polyfit()
には単一の最小値がない場合があります。次のようなものでこれを確認してください:
for (i in 2:length(x)-1) print(polyfit(i))
as.integer()
関数を使用したのは、非整数多項式をどのように解釈するかが明確ではないためです。
数式の任意のセットをテストするために、Andrew Gelmanがレビューした 'Eureqa' プログラムを検討してください here
更新
モデル選択を自動化するには、stepAIC
関数(MASSパッケージ内)も参照してください。
Rに最適なモデルを見つける最も簡単な方法は、モデルを次のようにコーディングすることです。
lm.1 <- lm(y ~ x + I(x^2) + I(x^3) + I(x^4) + ...)
ステップダウンAIC回帰を使用した後
lm.s <- step(lm.1)