[解決済み] R式で、y ~ I(x^3) のように冪乗項に I() 関数を使用しなければならないのはなぜですか?
疑問点
チルダ演算子や関連する関数の使い方を理解しようとしています。 最初の疑問は、なぜ
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 などの作図パッケージでも行われています。そこでは、パススルーとレイヤー演算子として機能しています。いくつかの集約関数は、"+" を "配置" およびグループ化演算子として使用する数式メソッドを備えています。
関連
-
[解決済み】R: 複数行の ggplot2 コマンドで「単項演算子エラー」が発生する。
-
[解決済み】エラー:私のコードで予期しないシンボル/入力/文字列定数/数値定数/SPECIALが発生した
-
[解決済み】model.frame.defaultでのエラー:変数の長さが異なる
-
[解決済み] テスト
-
[解決済み】 boxplotに色を追加する - "離散的なスケールに連続的な値が供給される "エラー
-
[解決済み】bstTreeの予測値の混乱行列、エラー:'The data must contain some levels that overlap reference'.
-
[解決済み】ロジスティック回帰 - eval(family$initialize) : y 値は 0 <= y <= 1 である必要があります。
-
[解決済み】長いオブジェクトの長さは、短いオブジェクトの長さの倍数ではない?[重複]。
-
[解決済み】.External.graphics Rでエラーが発生しました。
-
[解決済み] 関数のソースコードを見るにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】R:関数に有限な'ylim'値が必要
-
[解決済み】knitrのドキュメントでinstall.packagesが失敗する。"ミラーを設定せずにCRANを使おうとしている"
-
[解決済み】ggplotの線幅を変更するには?
-
[解決済み】プロット時に 'x' と 'y' の長さが異なる ERROR が発生する。
-
[解決済み】データのマージ - fix.by(by.x, x)のエラー)
-
[解決済み】r Error dim(X) must have a positive length?
-
[解決済み】二項演算子への非数値引数【非公開
-
[解決済み】 .subset2(x, i, exact = exact)のエラー:Rの添え字が範囲外である。
-
[解決済み] R線形回帰式の大文字の「I」は何を意味しているのですか?
-
[解決済み】プログラミング言語Rの~(チルダ)の使用について