2 * Introduction to lsquares::
3 * Functions and Variables for lsquares::
6 @c -----------------------------------------------------------------------------
7 @node Introduction to lsquares, Functions and Variables for lsquares, lsquares, lsquares
8 @section Introduction to lsquares
9 @c -----------------------------------------------------------------------------
13 最小二乗法を実装するための関数のコレクションです。
16 @category{Statistical estimation}
17 @category{Share packages}
18 @category{Package lsquares}
22 @c -----------------------------------------------------------------------------
23 @node Functions and Variables for lsquares, , Introduction to lsquares, lsquares
24 @section Functions and Variables for lsquares
25 @c -----------------------------------------------------------------------------
27 @deffn {関数} lsquares_estimates (@var{D}, @var{x}, @var{e}, @var{a})
28 @deffnx {関数} lsquares_estimates (@var{D}, @var{x}, @var{e}, @var{a}, initial = @var{L}, tol = @var{t})
31 変数@var{x}と@var{a}の方程式@var{e}を
34 @code{lsquares_estimates}は最初に厳密な解を探し、
38 形式 @code{[a = ..., b = ..., c = ...]}の等式のリストのリストです。
42 データ @var{D}は行列でなければいけません。
43 行それぞれは(文脈によって「レコード」とか「ケース」とか呼ばれる)1つのデータで、
45 すべてのデータに関するある変数の値を含みます。
46 変数のリスト @var{x}は @var{D}の列それぞれの名前を与えます。
51 方程式 @var{e}は変数 @var{x}と @var{a}に関する式か等式です;
53 @code{@var{e} = 0}と同様に扱われます。
55 @code{lsquares_estimates}の付加引数は
58 数値方法で見積もりを見つけるためにコールされる関数 @code{lbfgs}へそのまま渡されます。
60 もしある厳密解が(@code{solve}を介して)見つけることができるなら、
61 データ @var{D}は非数値を含むかもしれません。
63 @var{D}の要素それぞれは数値でなければいけません。
65 数リテラル(整数、有理数、通常の浮動小数点、多倍長浮動小数点)はもちろん、
66 @code{%pi}や@code{%e}のような数値定数を含みます。
67 数値計算は通常の浮動小数点算出で実行されます。
68 他の種類の数値は計算のため、すべて通常の浮動小数点に変換されます。
70 @code{load("lsquares")}はこの関数をロードします。
72 @code{lsquares_estimates_exact},
73 @code{lsquares_estimates_approximate},@*
75 @code{lsquares_residuals},
76 @code{lsquares_residual_mse}も参照してください。
85 @c [1,1,1], [3/2,1,2], [9/4,2,1], [3,2,2], [2,2,1]);
86 @c lsquares_estimates (
87 @c M, [z,x,y], (z+D)^2 = A*x+B*y+C, [A,B,C,D]);
90 (%i1) load ("lsquares")$
92 [1,1,1], [3/2,1,2], [9/4,2,1], [3,2,2], [2,2,1]);
108 (%i3) lsquares_estimates (
109 M, [z,x,y], (z+D)^2 = A*x+B*y+C, [A,B,C,D]);
111 (%o3) [[A = - --, B = - --, C = -----, D = - ---]]
116 だから @code{lsquares_estimates}は数値近似に頼ります。
119 @c load ("lsquares")$
120 @c M : matrix ([1, 1], [2, 7/4], [3, 11/4], [4, 13/4]);
121 @c lsquares_estimates (
122 @c M, [x,y], y=a*x^b+c, [a,b,c], initial=[3,3,3], iprint=[-1,0]);
125 (%i1) load ("lsquares")$
126 (%i2) M : matrix ([1, 1], [2, 7/4], [3, 11/4], [4, 13/4]);
140 (%i3) lsquares_estimates (
141 M, [x,y], y=a*x^b+c, [a,b,c], initial=[3,3,3], iprint=[-1,0]);
142 (%o3) [[a = 1.387365874920637, b = .7110956639593767,
143 c = - .4142705622439105]]
147 @category{Package lsquares}
148 @category{Numerical methods}
153 @deffn {関数} lsquares_estimates_exact (@var{MSE}, @var{a})
155 方程式系を構成し、@code{solve}を介して記号的にそれらを解くことを試みることで、
156 平均二乗誤差 @var{MSE}を最小化する
157 パラメータ @var{a}を見積もります。
159 @code{lsquares_mse}が返すような
163 形式 @code{[a = ..., b = ..., c = ...]}の等式のリストのリストです。
164 戻り値は、0個か1個、2以上の要素を含むかもしれません。
166 それぞれは個別の、平均二乗誤差の等価最小を表します。
168 @code{lsquares_estimates},
169 @code{lsquares_estimates_approximate},
170 @code{lsquares_mse},@*
171 @code{lsquares_residuals},
172 @code{lsquares_residual_mse}も参照してください。
177 @c load ("lsquares")$
179 @c [1,1,1], [3/2,1,2], [9/4,2,1], [3,2,2], [2,2,1]);
180 @c mse : lsquares_mse (M, [z, x, y], (z + D)^2 = A*x + B*y + C);
181 @c lsquares_estimates_exact (mse, [A, B, C, D]);
184 (%i1) load ("lsquares")$
186 [1,1,1], [3/2,1,2], [9/4,2,1], [3,2,2], [2,2,1]);
200 (%i3) mse : lsquares_mse (M, [z, x, y], (z + D)^2 = A*x + B*y + C);
204 > ((D + M ) - C - M B - M A)
208 (%o3) ---------------------------------------------
210 (%i4) lsquares_estimates_exact (mse, [A, B, C, D]);
212 (%o4) [[A = - --, B = - --, C = -----, D = - ---]]
217 @category{Package lsquares}
222 @deffn {関数} lsquares_estimates_approximate (@var{MSE}, @var{a}, initial = @var{L}, tol = @var{t})
224 平均二乗誤差 @var{MSE}を最小化する
226 数値最小化関数 @code{lbfgs}を介して
229 @code{lsquares_mse}が返すようなパラメータ @var{a}の式です。
232 @code{lsquares_estimates_approximate}が返す解は
233 平均二乗誤差の(たぶん大域ですが)局所最小値です。
234 @code{lsquares_estimates_exact}との一貫性のため、
236 要素1つ、すなわち、形式 @code{[a = ..., b = ..., c = ...]}の等式のリスト
239 @code{lsquares_estimates_approximate}の付加引数は
241 数値方法で見積もりを見つけるためにコールされる関数 @code{lbfgs}へそのまま渡されます。
244 @var{MSE}はは数に評価されなければいけません。
246 This requires that the data from which
248 @code{%pi}や@code{%e}、
249 数リテラル(整数、有理数、通常の浮動小数点、多倍長浮動小数点)
251 数値計算は通常の浮動小数点算出で実行されます。
252 他の種類の数値は計算のため、すべて通常の浮動小数点に変換されます。
254 @code{load("lsquares")}はこの関数をロードします。
256 @code{lsquares_estimates},
257 @code{lsquares_estimates_exact},
259 @code{lsquares_residuals},
260 @code{lsquares_residual_mse}も参照してください。
265 @c load ("lsquares")$
267 @c [1,1,1], [3/2,1,2], [9/4,2,1], [3,2,2], [2,2,1]);
268 @c mse : lsquares_mse (M, [z, x, y], (z + D)^2 = A*x + B*y + C);
269 @c lsquares_estimates_approximate (
270 @c mse, [A, B, C, D], iprint = [-1, 0]);
273 (%i1) load ("lsquares")$
275 [1,1,1], [3/2,1,2], [9/4,2,1], [3,2,2], [2,2,1]);
289 (%i3) mse : lsquares_mse (M, [z, x, y], (z + D)^2 = A*x + B*y + C);
293 > ((D + M ) - C - M B - M A)
297 (%o3) ---------------------------------------------
299 (%i4) lsquares_estimates_approximate (
300 mse, [A, B, C, D], iprint = [-1, 0]);
301 (%o4) [[A = - 3.67850494740174, B = - 1.683070351177813,
302 C = 10.63469950148635, D = - 3.340357993175206]]
306 @category{Package lsquares}
307 @category{Numerical methods}
312 @deffn {関数} lsquares_mse (@var{D}, @var{x}, @var{e})
315 変数 @var{x}の 方程式@var{e}に関する
316 データ @var{D}の和の式を返します。
321 $${1 \over n} \, \sum_{i=1}^n \left[{\rm lhs}\left(e_i\right) - {\rm rhs}\left(e_i\right)\right]^2,$$
328 - > (lhs(e ) - rhs(e ))
337 @code{i}番目のデータ @code{@var{D}[i]}から値を割り当てられた
338 @var{x}の中の変数に対して評価された方程式 @var{e}です。
340 @code{load("lsquares")}はこの関数をロードします。
345 @c load ("lsquares")$
347 @c [1,1,1], [3/2,1,2], [9/4,2,1], [3,2,2], [2,2,1]);
348 @c mse : lsquares_mse (M, [z, x, y], (z + D)^2 = A*x + B*y + C);
353 (%i1) load ("lsquares")$
355 [1,1,1], [3/2,1,2], [9/4,2,1], [3,2,2], [2,2,1]);
371 (%i3) mse : lsquares_mse (M, [z, x, y], (z + D)^2 = A*x + B*y + C);
375 > ((D + M ) - C - M B - M A)
379 (%o3) ---------------------------------------------
387 4 > (D + M ) ((D + M ) - C - M B - M A)
388 / i, 1 i, 1 i, 3 i, 2
391 (%o4) ----------------------------------------------------------
398 (%o5) (((D + 3) - C - 2 B - 2 A) + ((D + -) - C - B - 2 A)
401 + ((D + 2) - C - B - 2 A) + ((D + -) - C - 2 B - A)
404 + ((D + 1) - C - B - A) )/5
409 @category{Package lsquares}
414 @deffn {関数} lsquares_residuals (@var{D}, @var{x}, @var{e}, @var{a})
416 指定されたパラメータ @var{a}とデータ @var{D}での
417 方程式 @var{e}に関する残差を返します。
420 @var{D}は行列で、 @var{x}は変数のリスト、
423 @code{@var{e} = 0}であるかのように扱われます。
425 @var{x}を除いた@var{e}の任意の自由変数に値を指定する
431 $${\rm lhs}\left(e_i\right) - {\rm rhs}\left(e_i\right),$$
442 @var{a}から任意の残りの自由変数を割り当てて、
443 @code{i}番目のデータ @code{@var{D}[i]}から値を割り当てられた
444 @var{x}の中の変数に対して評価された方程式 @var{e}です。
446 @code{load("lsquares")}はこの関数をロードします。
451 @c load ("lsquares")$
453 @c [1,1,1], [3/2,1,2], [9/4,2,1], [3,2,2], [2,2,1]);
454 @c a : lsquares_estimates (
455 @c M, [z,x,y], (z+D)^2 = A*x+B*y+C, [A,B,C,D]);
456 @c lsquares_residuals (
457 @c M, [z,x,y], (z+D)^2 = A*x+B*y+C, first(a));
460 (%i1) load ("lsquares")$
462 [1,1,1], [3/2,1,2], [9/4,2,1], [3,2,2], [2,2,1]);
476 (%i3) a : lsquares_estimates (
477 M, [z,x,y], (z+D)^2 = A*x+B*y+C, [A,B,C,D]);
479 (%o3) [[A = - --, B = - --, C = -----, D = - ---]]
481 (%i4) lsquares_residuals (
482 M, [z,x,y], (z+D)^2 = A*x+B*y+C, first(a));
484 (%o4) [--, - --, - --, --, --]
489 @category{Package lsquares}
494 @deffn {関数} lsquares_residual_mse (@var{D}, @var{x}, @var{e}, @var{a})
496 指定されたパラメータ @var{a}とデータ @var{D}での
497 方程式 @var{e}に関する残差平均二乗誤差を返します。
502 $${1 \over n} \, \sum_{i=1}^n \left[{\rm lhs}\left(e_i\right) - {\rm rhs}\left(e_i\right)\right]^2,$$
509 - > (lhs(e ) - rhs(e ))
518 @var{a}から任意の残りの自由変数を割り当てて、
519 @code{i}番目のデータ @code{@var{D}[i]}から値を割り当てられた
520 @var{x}の中の変数に対して評価された方程式 @var{e}です。
522 @code{load("lsquares")}はこの関数をロードします。
527 @c load ("lsquares")$
529 @c [1,1,1], [3/2,1,2], [9/4,2,1], [3,2,2], [2,2,1]);
530 @c a : lsquares_estimates (
531 @c M, [z,x,y], (z+D)^2 = A*x+B*y+C, [A,B,C,D]);
532 @c lsquares_residual_mse (
533 @c M, [z,x,y], (z + D)^2 = A*x + B*y + C, first (a));
536 (%i1) load ("lsquares")$
538 [1,1,1], [3/2,1,2], [9/4,2,1], [3,2,2], [2,2,1]);
552 (%i3) a : lsquares_estimates (
553 M, [z,x,y], (z+D)^2 = A*x+B*y+C, [A,B,C,D]);
556 (%o3) [[A = - --, B = - --, C = -----, D = - ---]]
558 (%i4) lsquares_residual_mse (
559 M, [z,x,y], (z + D)^2 = A*x + B*y + C, first (a));
566 @category{Package lsquares}
571 @deffn {関数} plsquares (@var{Mat},@var{VarList},@var{depvars})
572 @deffnx {関数} plsquares (@var{Mat},@var{VarList},@var{depvars},@var{maxexpon})
573 @deffnx {関数} plsquares (@var{Mat},@var{VarList},@var{depvars},@var{maxexpon},@var{maxdegree})
574 「最小二乗」法によるデータ表の多変数多項式調整。
575 @var{Mat}はデータを含む行列であり、
576 @var{VarList}は変数名(Mat列それぞれの名前ですが、Mat列を無視する際には変数名の代わりに"-")のリストであり、
577 @var{depvars}は従属変数の名前か、
578 従属変数の1つ以上の名前(その名前@var{VarList}の中になければいけません)のリストであり、
579 @var{maxexpon}はオプションの、独立変数それぞれの最大指数(デフォルト1)であり、
580 @var{maxdegree}はオプションの最大多項式次数(デフォルトで@var{maxexpon})です;
581 それぞれの項の指数の和は@var{maxdegree}以下でなければいけないことに注意してください。
582 もし @code{maxdgree = 0}なら制限は適用されません。
584 もし @var{depvars}が(リストではなく)従属変数の名前なら、
585 @code{plsquares}は調整された多項式を返します。
586 もし @var{depvars}が1つ以上の従属変数のリストなら、
587 @code{plsquares}は調整された多項式のリストを返します。
590 それは0 (無相関)から1 (厳密相関)までの範囲です。
592 グローバル変数 @var{DETCOEF}(もし @var{depvars}がリストならリスト)にも保管されます。
597 (%i1) load("plsquares")$
599 (%i2) plsquares(matrix([1,2,0],[3,5,4],[4,7,9],[5,8,10]),
601 Determination Coefficient for z = .9897039897039897
603 (%o2) z = ---------------
609 (%i3) plsquares(matrix([1,2,0],[3,5,4],[4,7,9],[5,8,10]),
611 Determination Coefficient for z = 1.0
612 x y + 23 y - 29 x - 19
613 (%o3) z = ----------------------
620 (%i4) plsquares(matrix([3,0],[4,2],[5,5],[6,9],[7,14],[8,20]),
621 [N,diagonals],diagonals,5);
622 Determination Coefficient for diagonals = 1.0
625 (%o4) diagonals = --------
627 (%i5) ev(%, N=9); /* Testing for a 9 sides polygon */
631 何通りの方法でn掛けnのチェス盤に2つのクィーンを取られないように置けますか?
633 (%i6) plsquares(matrix([0,0],[1,0],[2,0],[3,8],[4,44]),
634 [n,positions],[positions],4);
635 Determination Coefficient for [positions] = [1.0]
638 3 n - 10 n + 9 n - 2 n
639 (%o6) [positions = -------------------------]
642 (%i7) ev(%[1], n=8); /* Testing for a (8 x 8) chessboard */
643 (%o7) positions = 1288
648 (%i8) mtrx:matrix([0,0,0,0,0,1,1,1],[0,1,0,1,1,1,0,0],
649 [1,0,0,1,1,1,0,0],[1,1,1,1,0,0,0,1])$
650 (%i8) plsquares(mtrx,[a,b,_And,_Or,_Xor,_Nand,_Nor,_Nxor],
651 [_And,_Or,_Xor,_Nand,_Nor,_Nxor],1,0);
652 Determination Coefficient for
653 [_And, _Or, _Xor, _Nand, _Nor, _Nxor] =
654 [1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
655 (%o2) [_And = a b, _Or = - a b + b + a,
656 _Xor = - 2 a b + b + a, _Nand = 1 - a b,
657 _Nor = a b - b - a + 1, _Nxor = 2 a b - b - a + 1]
661 最初に @code{load("lsquares")}を書いてください。
664 @category{Package lsquares}
665 @category{Numerical methods}