|
> No.4899[元記事へ]
大熊 正さんへのお返事です。
> どなたか、重回帰の解説と10進でのソフトがあれば,御教授いただきたく
> お願いいたします。 敬具
#1113
#1121
下記のプログラムは任意の(変数にX1,X2を持つ)回帰式が定義できますが
その回帰式を用いてテストデータを生成しているので
実際のデータで運用する場合は注意(初期値設定や収束誤差等)が必要です。
DIM U(3,3),V(3),W(3)
PUBLIC NUMERIC X1(20),X2(20),Y(20),N
RANDOMIZE
LET N=15
LET A0=RND !'テスト係数
LET B0=RND
LET C0=RND
FOR I=1 TO N
LET X1(I)=I/5
LET X2(I)=I^2/10
LET Y(I)=FF(A0,B0,C0,X1(I),X2(I)) !'テストデータ作成
NEXT I
LET A=1 !'初期値
LET B=1
LET C=1
LET EPS=1E-8 !'収束誤差
DO
LET U(1,1)=DIFF(A,2,B,0,C,0)
LET U(1,2)=DIFF(A,1,B,1,C,0)
LET U(1,3)=DIFF(A,1,B,0,C,1)
LET U(2,1)=DIFF(A,1,B,1,C,0)
LET U(2,2)=DIFF(A,0,B,2,C,0)
LET U(2,3)=DIFF(A,0,B,1,C,1)
LET U(3,1)=DIFF(A,1,B,0,C,1)
LET U(3,2)=DIFF(A,0,B,1,C,1)
LET U(3,3)=DIFF(A,0,B,0,C,2)
LET V(1)=-DIFF(A,1,B,0,C,0)
LET V(2)=-DIFF(A,0,B,1,C,0)
LET V(3)=-DIFF(A,0,B,0,C,1)
MAT U=INV(U)
MAT W=U*V
LET A=A+W(1)
LET B=B+W(2)
LET C=C+W(3)
LET L=L+1
IF W(1)^2+W(2)^2+W(3)^2<EPS THEN EXIT DO
IF L>100 THEN
PRINT "収束しません"
STOP
END IF
LOOP
PRINT L
PRINT "A0=";A0,"B0=";B0,"C0=";C0
PRINT " A=";A," B=";B," C=";C !'求めた係数
LET P$="####.########"
FOR I=1 TO N
PRINT "X1=";
PRINT USING P$:X1(I);
PRINT " X2=";
PRINT USING P$:X2(I);
PRINT " Y=";
PRINT USING P$:Y(I);
PRINT " ^Y=";
PRINT USING P$:FF(A,B,C,X1(I),X2(I))
NEXT I
END
EXTERNAL FUNCTION FF(A,B,C,X1,X2) !'パラメータA,B,Cを持ち変数X1,X2の任意の回帰式(重回帰式)
LET FF=A+B*X1+C*X2
!'LET FF=A*EXP(B*X1)*EXP(C*X2)
!'LET FF=A+B*LOG(X1)+C*LOG(X2)
!'LET FF=A*B^X1*C^X2
!'LET FF=A*X1^B*X2^C
END FUNCTION
EXTERNAL FUNCTION FUNC(A,B,C)
FOR I=1 TO N
LET S=S+(Y(I)-FF(A,B,C,X1(I),X2(I)))^2 !'差の2乗和(A=A0,B=B0,C=C0なら最小値S=0)
NEXT I
LET FUNC=S
END FUNCTION
EXTERNAL FUNCTION DIFF(X,M,Y,N,Z,O) !'数値偏微分
LET H=1/1024
IF M>0 THEN
LET DIFF=(-DIFF(X+2*H,M-1,Y,N,Z,O)+8*DIFF(X+H,M-1,Y,N,Z,O)-8*DIFF(X-H,M-1,Y,N,Z,O)+DIFF(X-2*H,M-1,Y,N,Z,O))/(12*H)
EXIT FUNCTION
END IF
IF N>0 THEN
LET DIFF=(-DIFF(X,M,Y+2*H,N-1,Z,O)+8*DIFF(X,M,Y+H,N-1,Z,O)-8*DIFF(X,M,Y-H,N-1,Z,O)+DIFF(X,M,Y-2*H,N-1,Z,O))/(12*H)
EXIT FUNCTION
END IF
IF O>0 THEN
LET DIFF=(-DIFF(X,M,Y,N,Z+2*H,O-1)+8*DIFF(X,M,Y,N,Z+H,O-1)-8*DIFF(X,M,Y,N,Z-H,O-1)+DIFF(X,M,Y,N,Z-2*H,O-1))/(12*H)
EXIT FUNCTION
END IF
IF M=0 OR N=0 OR O=0 THEN LET DIFF=FUNC(X,Y,Z)
END FUNCTION
|
|