私は関数Q(x | delta)を持っています:R^n→R非線形分位回帰を適合させる。関数Q(。)はいくつかの行列演算を使用します。それを使用しないと非常に複雑になります。問題は、式引数で使用される関数に行列演算がある場合、nlrq(非線形回帰)とnls(非線形回帰)が機能しないように見えるということです。回帰で自身の関数を使用している "...%*%...:不適合引数のエラー"
説明すると、行列演算を使用しないときにnlrq関数とnls関数の式引数で使用できる単純な関数F(x1、x2 | a、b、c)を考えてみましょう。数式の引数が行列演算で記述されているときに動作します。
library('quantreg')
## Generating the data
x1<- rnorm(200)
x2<- rnorm(200)
y<- 1+3*sin(x1)+2*cos(x2) +rnorm(200)
Dat<- data.frame(y,x1,x2)
## The function F1 without matrix operation
F1<- function(x_1, x_2, a, b,c){a+b*sin(x_1)+c*cos(x_2)}
## The function F2 with matrix operation
F2<- function(x_1, x_2, a, b,c){t(c(1,sin(x_1),cos(x_2)))%*%c(a,b,c)}
## Both functions work perfectly
F1(x_1=3, x_2=2, a=1, b=3,c=2)
F2(x_1=3, x_2=2, a=1, b=3,c=2)
## But only F1 can be estimated by nls and nlrq
nls_1<-nls(y ~ F1(x_1 = x1, x_2 = x2, a = 1, b, c),
data = Dat, start = list(b = 3, c = 2))
nlrq_1<-nlrq(y ~ F1(x_1 = x1, x_2 = x2, a = 1, b, c),
data = Dat, start = list(b = 3, c = 2), tau = 0.9)
## When F2 is used in the formula argument an error happens
nls_2<-nls(y ~ F2(x_1 = x1, x_2 = x2, a = 1, b, c),
data = Dat, start = list(b = 3, c = 2))
nlrq_2<-nlrq(y ~ F2(x_1 = x1, x_2 = x2, a = 1, b, c),
data = Dat, start = list(b = 3, c = 2), tau = 0.9)
エラーはError in t(c(1, sin(x_1), cos(x_2))) %*% c(a, b, c) : non-conformable arguments
です。私は、誰かがnlsとnlrqを使って行列演算を使ってF2を推定すると、他の関数で同じ解を使うことができると私は信じています。
Datのサイズは200x3です。
ありがとうございました。
申し訳ありませんが、nlrqを使うにはquantregパッケージが必要で、 'install.packages( 'quantreg')'と 'library( 'quantreg')'をコードに追加する必要があります。 – ThiagoSC