Rでプロットしたグラフの二次方程式の項を見つける必要があります。これをExcelで行うと、項がチャートのテキストボックスに表示されますが、後で使用するためにこれをセルに移動する方法がわかりません(キャリブレーションが必要な値に適用する) または実際に R でそれを要求する方法.R で呼び出し可能な場合、将来の計算を行うためにオブジェクトとして保存できますか?
これは R での簡単な要求のようですが、同様の質問は見つかりません。誰でもこれについて提供できる助けを前もって感謝します。
すべての答えは、あなたがやりたいと思われることの側面を提供しますが、これまでのところ、すべてをまとめているわけではありません。Tom Liptrot の回答の例を考えてみましょう。
fit <- lm(speed ~ dist + I(dist^2), cars)
これにより、変数 が 2 次である近似線形モデルが得られますdist
。coef()
抽出関数を使用してモデル係数を抽出します。
> coef(fit)
(Intercept) dist I(dist^2)
5.143960960 0.327454437 -0.001528367
したがって、適合した方程式(印刷のために丸められる可能性があります):
\hat{速度} = 5.143960960 + (0.327454437 * 距離) + (-0.001528367 * 距離^2)
(ここで、\hat{speed} は応答、速度の適合値です)。
この当てはめた方程式をいくつかのデータに適用したい場合は、それを行う独自の関数を書くことができます。
myfun <- function(newdist, model) {
coefs <- coef(model)
res <- coefs[1] + (coefs[2] * newdist) + (coefs[3] * newdist^2)
return(res)
}
この関数を次のように適用できます。
> myfun(c(21,3,4,5,78,34,23,54), fit)
[1] 11.346494 6.112569 6.429325 6.743024 21.386822 14.510619 11.866907
[8] 18.369782
距離 ( dist
) のいくつかの新しい値に対して、これは Q から実行したいように見えることです。しかし、R では通常、このようなことは行いません。 R に適合できるすべての異なるタイプのモデルからの予測値?
R では、標準的なメソッドと抽出関数を使用します。この場合、Excel が表示する「方程式」をすべてのデータに適用して、この回帰の適合値を取得する場合、R では次のfitted()
関数を使用します。
> fitted(fit)
1 2 3 4 5 6 7 8
5.792756 8.265669 6.429325 11.608229 9.991970 8.265669 10.542950 12.624600
9 10 11 12 13 14 15 16
14.510619 10.268988 13.114445 9.428763 11.081703 12.122528 13.114445 12.624600
17 18 19 20 21 22 23 24
14.510619 14.510619 16.972840 12.624600 14.951557 19.289106 21.558767 11.081703
25 26 27 28 29 30 31 32
12.624600 18.369782 14.057455 15.796751 14.057455 15.796751 17.695765 16.201008
33 34 35 36 37 38 39 40
18.688450 21.202650 21.865976 14.951557 16.972840 20.343693 14.057455 17.340416
41 42 43 44 45 46 47 48
18.038887 18.688450 19.840853 20.098387 18.369782 20.576773 22.333670 22.378377
49 50
22.430008 21.93513
モデルの適合に使用されていない新しいデータ値にモデル方程式を適用する場合は、モデルから予測を取得する必要があります。これはpredict()
関数を使用して行われます。上でプラグインした距離を使用してmyfun
、これはより R 中心の方法で行う方法です。
> newDists <- data.frame(dist = c(21,3,4,5,78,34,23,54))
> newDists
dist
1 21
2 3
3 4
4 5
5 78
6 34
7 23
8 54
> predict(fit, newdata = newDists)
1 2 3 4 5 6 7 8
11.346494 6.112569 6.429325 6.743024 21.386822 14.510619 11.866907 18.369782
"dist"
最初に、モデルから予測したい新しい距離を含むという名前のコンポーネントを持つ新しいデータ フレームを作成します。このデータ フレームには、適合モデルを作成したときに使用した変数と同じ名前の変数が含まれていることに注意してください。この新しいデータ フレームには、モデルを適合させるために使用されるすべての変数が含まれている必要がありますが、この場合、変数は 1 つだけですdist
。dist
また、 ^2については何も含める必要がないことに注意してください。R がそれを処理します。
次に、predict()
関数を使用して、適合したモデルを与え、作成したばかりの新しいデータ フレームを引数として提供し、'newdata'
以前に手動で行ったものと一致する新しい予測値を提供します。
私がざっと説明したのは、predict()
それfitted()
が実際には関数のグループ全体であるということです。lm()
モデル用、モデル用などのバージョンがありますglm()
。それらは、いくつかの異なるタイプのオブジェクト用のメソッド(必要に応じてバージョン) を持つジェネリック関数として知られています。通常、ユーザーは使用することを覚えておく必要があるだけですが、R は、提供した適合モデルのタイプに適した方法を使用します。ジェネリック関数のベース R で使用できるメソッドの一部を次に示します。fitted()
predict()
fitted()
> methods(fitted)
[1] fitted.default* fitted.isoreg* fitted.nls*
[4] fitted.smooth.spline*
Non-visible functions are asterisked
ロードした他のパッケージによっては、これよりも多くのものが得られる可能性があります。これらの*
関数を直接参照することはできません。使用する必要がfitted()
あり、R はそれらのどれを使用するかを判断します。lm()
オブジェクトのメソッドがないことに注意してください。このタイプのオブジェクトは特別なメソッドを必要としないため、default
メソッドは慣れており、適しています。
lmのforumlaに二次項を追加して、目的の適合を得ることができます。以下の例のように、二乗したい項の周りにI()を使用する必要があります。
plot(speed ~ dist, cars)
fit1 = lm(speed ~ dist, cars) #fits a linear model
abline(fit1) #puts line on plot
fit2 = lm(speed ~ I(dist^2) + dist, cars) #fits a model with a quadratic term
fit2line = predict(fit2, data.frame(dist = -10:130))
lines(-10:130 ,fit2line, col=2) #puts line on plot
この使用法から係数を取得するには、次のようにします。
coef(fit2)
Excel では、線形回帰 ( SLOPE
、INTERCEPT
、LINEST
) または指数回帰 ( GROWTH
、 ) の係数を取得する関数しか提供されていないため、可能だとは思いLOGEST
ませんが、Visual Basic を使用すると運が良くなる可能性があります。
coef
Rに関しては、次の関数を使用してモデル係数を抽出できます。
mdl <- lm(y ~ poly(x,2,raw=T))
coef(mdl) # all coefficients
coef(mdl)[3] # only the 2nd order coefficient