1. ホーム
  2. r

[解決済み] R式で、y ~ I(x^3) のように冪乗項に I() 関数を使用しなければならないのはなぜですか?

2022-03-10 16:43:49

疑問点

チルダ演算子や関連する関数の使い方を理解しようとしています。 最初の疑問は、なぜ I() は、算術演算子を指定する必要があるのでしょうか?例えば、この2つのプロットは異なる結果を生成します(前者は直線、後者は期待通りの曲線)。

x <- c(1:100)
y <- seq(0.1,10,0.1)

plot(y~x^3)
plot(y~I(x^3))

さらに、次の両方のプロットも期待通りの結果を生成します。

plot(x^3, y)
plot(I(x^3), y)

2つ目の質問は、今までの例が単純すぎたのかもしれませんが、どこに ~ を実際に使用する必要があります。

どのように解決するのですか?

チルダ演算子は、実際には評価されない式を返す関数であり、言語オブジェクトの一種である。この式は、数値オブジェクトを操作する演算子の解釈とは異なる方法で、モデリング関数によって解釈される。

ここで問題となるのは どのように の式、特に "+, ":", "^" の演算子は解釈されます。(余談ですが、正しい統計処理の手順としては、関数 poly 回帰式で高次の項を作ろうとするとき) R の計算式の中では、"+", "*", ":" と "^" という infix 演算子は、数値ベクトルを使った計算とは全く異なる意味を持ちます。数式では、チルダ( ~ は、左辺と右辺を区切ります。そのため ^: 演算子は、相互作用を構築するために使用されます。 x = x^2 = x^3 というより、おそらく期待される数学的な力になっている。(それ自身と相互作用する変数は、同じ変数に過ぎません。) もし、あなたが (x+y)^2 Rインタプリタは、数学的なものではなく、(自分にとって都合の良い内部使用のために)生成しただろう。 x^2 +2xy +y^2 ではなく、記号的なものです。 x + y +x:y ここで x:y はその主効果を除いた交互作用項である。(その ^ では主効果と交互作用の両方が得られます)。

?formula

I() 関数は、引数を "as.is" に、つまり期待通りのものに変換する働きをします。つまり、I(x^2)は2乗の値のベクトルを返します。

~ は、回帰関数において、quot;is distributed as"またはquot;is dependent on"と言っていると考えるべきでしょう。また ~ はそれ自体がinfix関数である。以下のようになります。 LHS ~ RHS の略記に近いものです。 formula(LHS, RHS) をコンソールで入力することで、このようになります。

`~`(LHS,RHS)
#LHS ~ RHS

class( `~`(LHS,RHS) )
#[1] "formula"

identical( `~`(LHS,RHS), as.formula("LHS~RHS") )
#[1] TRUE   # cannot use `formula` since it interprets its first argument

回帰関数では、モデルの記述における誤差項は、その回帰関数が想定している形式、あるいは family . ベースレベルの平均値は、通常、以下のように表示されます。 (Intercept) . 関数コンテキストと引数から、さらに log() や logit() などのリンク関数を決定することもできます。 family の値で、正規でないファミリーとリンクの組み合わせも可能である。

数式中の "+" 記号は、実際には 2 つの変数を追加するのではなく、通常は数式の右辺にある残りの変数との関連で、その変数の回帰係数を計算するための暗黙の要求です。回帰関数は `model.matrix を使用し、この関数は数式中の因子または文字ベクトルの存在を認識し、数式の離散成分のレベルを展開する行列を構築します。

plot()-ting 関数では、基本的に通常とは逆になります。 ( x, y ) の順序で、plot 関数が通常取る引数を指定します。plot.formula メソッドは、R と通信するための、より数学的なモードとして数式を使用できるように書かれています。 graphics::plot.formula , curve また、'lattice' や 'ggplot' 関数では、複数の因子や数値ベクトルをどのように表示し、quot; facetted" するかを制御します。

演算子のオーバーロードは、以下のコメントで説明されていますし、ggplot2 や gridExtra などの作図パッケージでも行われています。そこでは、パススルーとレイヤー演算子として機能しています。いくつかの集約関数は、"+" を "配置" およびグループ化演算子として使用する数式メソッドを備えています。