2017-04-08 3 views
1

私は、よく硝酸塩濃度(井戸= STNM、Y =硝酸塩濃度)を予測するためにNolan and Hitt(2006)の方法論に従おうとしています。以下は私が使用している予測変数の一部です。 Xは窒素負荷量(例えば肥料負荷、浄化槽)を示し、Zは輸送変数(例えば土壌Ksat)を示し、zは減量(例えば土壌炭素、湿地%)を示す。複数の非線形回帰があるnlsを使用して、誤差の束を得る

これが非線形乗法用語と線形サブモデルである:

B、およびDはパラメータである
Y = sum(xi*bi) * sum(exp(Zi*ai)) * sum(exp(xi*di)) 

。私は8つのX変数とパラメータ、5つのZ変数とパラメータ、5つのz変数とパラメータを持っています。以下は私のデータの頭部のサンプルです(Z3-5またはZ1-5は含まれていません)。私の質問のために今

STNM Y  X1  X2  X3 X4 X5 X6 X7 X8 Z1 Z2 
A-0071 0.49 216.45 0.00 233.03 17.15 0.00 33.87 6.97 37 0.00 113 
A-0420 0.00 23.88 0.00 39.15 23.85 0.00 0.00 6.91 0 0.00 190 
A-0421 0.01 167.00 114.72 295.03 27.18 4.87 3.62 7.00 2 0.00 132 
A-0436 0.38 216.45 0.00 233.03 17.15 0.00 33.87 6.97 37 0.00 52 
A-0725 0.04 13.94 0.00 22.86 22.86 0.00 0.00 7.07 0 57.41 40 
M-0013 0.00 494.77 549.91 1045.28 1.21 10.31 1.34 6.93 18 0.00 225 

、私は次のコードを使用NLS実行しようとすると:

m <- nls(y ~ ((X1*b1)+(X2*b2)+(X3*b3)+(X4*b4)+(X5*b5)+(X6*b6)+(X7*b7)+(X8*b8))*(exp(Z1*a1)+exp(Z2*a2)+exp(Z3*a3)+exp(Z4*a4)+exp(Z5*a5))*(exp(z1*d1)+exp(z2*d2)+exp(z3*d3)+exp(z4*d4)+exp(z5*d5)), data=data, start = list(b1=.0001,b2=.0001,b3=0,b4=0,b5=0,b6=.00072,b7=0,b8=.00095,a1=-0.0547,a2=0.01,a3=-.149,a4=-.19,a5=-.19,d1=-20,d2=-20,d3=-50,d4=-3,d5=-1)) 

をし、私は次のエラーを取得:(qr.qtyで

エラーQR、resid): 'qr'と 'y'は同じ行数を持つ必要があります

さらに、警告メッセージ:

1:LHSで - RHS: 長い物体長が短い物体長

2の倍数ではない:.swtsで*(RHS、 "勾配")ATTR: 長い物体長倍数でありません短いオブジェクトの長さ

私は多くの回答を探していますが、私には当てはまりそうな状況はありませんが、私はあまりうまくやっていません。どんな助けもありがとう!

答えて

1

6行のみで、正確に適合することができます。 nlsはゼロ残差問題をサポートしていませんが、X1以外のすべてを排除すると、X2,Z1およびZ2が有効になります。また、線形パラメータの開始値、すなわちbパラメータを提供する必要がないように、alg = "plinear"も使用しました。もっと多くの行があると仮定すると、それをあまり落とさずに動作させることができます。

Lines <- "STNM Y  X1  X2  X3 X4 X5 X6 X7 X8 Z1 Z2 
A-0071 0.49 216.45 0.00 233.03 17.15 0.00 33.87 6.97 37 0.00 113 
A-0420 0.00 23.88 0.00 39.15 23.85 0.00 0.00 6.91 0 0.00 190 
A-0421 0.01 167.00 114.72 295.03 27.18 4.87 3.62 7.00 2 0.00 132 
A-0436 0.38 216.45 0.00 233.03 17.15 0.00 33.87 6.97 37 0.00 52 
A-0725 0.04 13.94 0.00 22.86 22.86 0.00 0.00 7.07 0 57.41 40 
M-0013 0.00 494.77 549.91 1045.28 1.21 10.31 1.34 6.93 18 0.00 225" 
data <- read.table(text = Lines, header = TRUE) 

# X <- as.matrix(data[3:10]) 
X <- as.matrix(data[3:4]) 
fo <- Y ~ X * (exp(Z1*a1)+exp(Z2*a2)) 
st <- list(a1 = -0.0547, a2 = 0.01) 
fm <- nls(fo, data = data, start = st, alg = "plinear") 

与える:

> fm 
Nonlinear regression model 
    model: Y ~ X * (exp(Z1 * a1) + exp(Z2 * a2)) 
    data: data 
     a1   a2 .lin.X1 .lin.X2 
0.0134006 0.0018094 0.0008874 -0.0008142 
residual sum-of-squares: 0.02057 

Number of iterations to convergence: 10 
Achieved convergence tolerance: 6.441e-06 
関連する問題