関数で通常の最小二乗法 (OLS) を使用lm()
して問題の式 (2) を推定すると、係数
および
が推定され
ます。
一方、nls()
関数で非線形最小二乗法を使用して方程式を推定すると、目的のパラメーターであるパラメーター 'a'、'b'、および 'c' の値が推定されます。
Rのnls()
関数 (非線形最小二乗) には 2 つの重要なパラメーターがあります。最初にformula
パラメーター、次にstart
パラメーターです。?nls
R で実行すると、いくつかの詳細が得られます。ただし、要点は、formula
パラメーターが推定したい非線形モデルの式を取り込むことです (たとえばy ~ a / (b + c*x)
、「y」と「x」は変数で、「a」、「b」、および「c」はパラメーターです)。start
パラメータは、R が反復プロセスで使用する、関心のあるパラメータの開始値を受け取ります (非線形最小二乗法は基本的に、パラメータの最適な値が得られるまで計算を繰り返すため) 。
手順は次のとおりです。
(i) パラメータ「a」、「b」および「c」の開始値を取得します
ここでは、lm()
関数を使用して式 (2) の係数を推定しました。関数で使用するラグ変数を作成することから始めました。
注意: 「y」は「 」を指します。
y_1 = c(NA, head(y, head(y, -1) # variable 'y' lagged by one time period
y_2 = c(c(NA, NA), head(y, head(y, -2) # variable 'y' lagged by two time periods
x_1 = c(NA, head(x, head(x, -1) # variable 'x' lagged by one time period
したがって、方程式の係数を推定するために、次のコードが使用されました。
reg = lm(y ~ y_1 + y_2 + x_1, na.action = na.exclude) # it is important to tell R to exclude the missing values (NA) that we included as we constructed the lagged variables
、
およびの推定
値が得られたので、次の方法で「a」、「b」、および「c」の値を計算できます。
B = 1 / reg$coefficients["y_1"] # Calculates the inverse of the coefficient on the variable 'y_1'
A = B * reg$coefficients["y_2"] # Multiplies 'b' by the coefficient on the variable 'y_2'
C = B * reg$coefficients["x_1"] # Multiplies 'b' by the coefficient on the variable 'x_1'
A
、関数の開始値として使用されB
ますC
nls()
(ii)nls()
機能を使用する
nlreg = nls(y ~ (1/b)*y_1 - (a/b)*y_2 - (c/b)*x_1,
start = list(a = A, b = B, c = C))
結果は次のコードで確認できます。
summary(nlreg)
洞察を提供してくれたBen Bolkerに感謝します:)