Annotation of OpenXM/src/asir-contrib/packages/doc/gtt_ekn/gtt_ekn-ja.texi, Revision 1.7
1.7 ! takayama 1: %% $OpenXM: OpenXM/src/asir-contrib/packages/doc/gtt_ekn/gtt_ekn-ja.texi,v 1.6 2017/03/30 06:16:36 takayama Exp $
! 2: %% xetex gtt_ekn.texi (.texi までつける. )
1.6 takayama 3: %% 以下コメントは @comment で始める. \input texinfo 以降は普通の tex 命令は使えない.
1.7 ! takayama 4: \input texinfo-ja
1.1 takayama 5: @iftex
6: @catcode`@#=6
7: @def@fref#1{@xrefX[#1,,@code{#1},,,]}
1.7 ! takayama 8: @def@b#1{{@bf #1}}
1.1 takayama 9: @catcode`@#=@other
10: @end iftex
11: @overfullrule=0pt
1.7 ! takayama 12: @documentlanguage ja
1.1 takayama 13: @c -*-texinfo-*-
14: @comment %**start of header
1.6 takayama 15: @comment --- おまじない終り ---
1.1 takayama 16:
1.6 takayama 17: @comment --- GNU info ファイルの名前 ---
1.1 takayama 18: @setfilename xyzman
19:
1.6 takayama 20: @comment --- タイトル ---
21: @settitle 2元分割表HGM
1.1 takayama 22:
23: @comment %**end of header
24: @comment %@setchapternewpage odd
25:
1.6 takayama 26: @comment --- おまじない ---
1.1 takayama 27: @ifinfo
28: @macro fref{name}
29: @ref{\name\,,@code{\name\}}
30: @end macro
31: @end ifinfo
32:
33: @iftex
34: @comment @finalout
35: @end iftex
36:
37: @titlepage
1.6 takayama 38: @comment --- おまじない終り ---
1.1 takayama 39:
1.6 takayama 40: @comment --- タイトル, バージョン, 著者名, 著作権表示 ---
41: @title 2元分割表HGM関数
42: @subtitle Risa/Asir 2元分割表HGM関数説明書
43: @subtitle 1.1 版
44: @subtitle 2017 年 3 月 3 日
1.1 takayama 45:
46: @author by Y.Goto, Y.Tachibana, N.Takayama
47: @page
48: @vskip 0pt plus 1filll
49: Copyright @copyright{} Risa/Asir committers
50: 2004--2010. All rights reserved.
51: @end titlepage
52:
1.6 takayama 53: @comment --- おまじない ---
1.1 takayama 54: @synindex vr fn
1.6 takayama 55: @comment --- おまじない終り ---
1.1 takayama 56:
1.6 takayama 57: @comment --- @node は GNU info, HTML 用 ---
58: @comment --- @node の引数は node-name, next, previous, up ---
1.1 takayama 59: @node Top,, (dir), (dir)
60:
1.6 takayama 61: @comment --- @menu は GNU info, HTML 用 ---
62: @comment --- chapter 名を正確に並べる ---
63: @comment --- この文書では chapter XYZ, Chapter Index がある.
64: @comment --- Chapter XYZ には section XYZについて, section XYZに関する関数がある.
1.1 takayama 65: @menu
1.6 takayama 66: * 2元分割表HGMの関数説明書について::
67: * 2元分割表HGMの関数::
68: * modular計算
1.1 takayama 69: * Index::
70: @end menu
71:
1.6 takayama 72: @comment --- chapter の開始 ---
73: @comment --- 親 chapter 名を正確に. 親がない場合は Top ---
74: @node 2元分割表HGMの関数説明書について,,, Top
75: @chapter 2元分割表HGMの関数説明書について
76:
77: この説明書では
78: HGM(holonomic gradient method) を用いた2元分割表の関数について説明する.
79: ChangeLog の項目は www.openxm.org の cvsweb で
80: ソースコードを読む時の助けになる情報が書かれている.
1.1 takayama 81:
1.6 takayama 82: 本文中で引用している文献を列挙する.
1.1 takayama 83: @itemize @bullet
84: @item [GM2016]
85: Y.Goto, K.Matsumoto, Pfaffian equations and contiguity relations of the hypergeometric function of type (k+1,k+n+2) and their applications, arxiv:1602.01637 (version 1)
86: @item [T2016]
1.6 takayama 87: Y.Tachibana, 差分ホロノミック勾配法のモジュラーメソッドによる計算の高速化,
88: 2016, 神戸大学修士論文.
1.1 takayama 89: @item [GTT2016]
1.6 takayama 90: Y.Goto, Y.Tachibana, N.Takayama, 2元分割表に対する差分ホロノミック勾配法の実装,
91: 数理研講究録(掲載予定).
1.1 takayama 92: @item [TKT2015]
93: N.Takayama, S.Kuriki, A.Takemura,
94: $A$-hypergeometric distributions and Newton polytopes.
95: arxiv:1510.02269
96: @end itemize
97:
1.6 takayama 98: このマニュアルで説明する関数を用いたプログラム例は
1.1 takayama 99: gtt_ekn/test-t1.rr
1.6 takayama 100: など.
1.1 takayama 101:
1.4 takayama 102:
1.6 takayama 103: @node 2元分割表HGMの関数,,, Top
104: @chapter 2元分割表HGMの関数
1.1 takayama 105:
1.6 takayama 106: @comment --- section ``実験的関数'' の subsection xyz_abc
107: @comment --- subsection xyz_pqr xyz_stu がある.
1.1 takayama 108: @menu
109: * gtt_ekn.gmvector::
110: * gtt_ekn.nc::
111: * gtt_ekn.lognc::
112: * gtt_ekn.expectation::
113: * gtt_ekn.setup::
114: * gtt_ekn.upAlpha::
1.5 takayama 115: * gtt_ekn.cmle::
1.1 takayama 116: @end menu
117:
1.6 takayama 118: @node 超幾何関数E(k,n),,, 2元分割表HGMの関数
119: @section 超幾何関数E(k,n)
1.1 takayama 120:
121: @comment **********************************************************
1.6 takayama 122: @comment --- ◯◯◯◯ の説明
123: @comment --- 個々の関数の説明の開始 ---
124: @comment --- section 名を正確に ---
125: @node gtt_ekn.gmvector,,, 超幾何関数E(k,n)
1.1 takayama 126: @subsection @code{gtt_ekn.gmvector}
1.6 takayama 127: @comment --- 索引用キーワード
1.1 takayama 128: @findex gtt_ekn.gmvector
129:
130: @table @t
131: @item gtt_ekn.gmvector(@var{beta},@var{p})
1.6 takayama 132: :: 周辺和 @var{beta}, セルの確率 @var{p} の二元分割表に付随する超幾何関数
133: E(k,n) の値およびその微分の値を戻す.
1.1 takayama 134: @item gtt_ekn.ekn_cBasis_2(@var{beta},@var{p})
1.6 takayama 135: の別名である.
1.1 takayama 136: @end table
137:
1.6 takayama 138: @comment --- 引数の簡単な説明 --- 以下まだ書いてない.
1.1 takayama 139: @table @var
140: @item return
1.6 takayama 141: ベクトル, 超幾何関数の値とその微分. 詳しくは下記.
1.1 takayama 142: @item beta
1.6 takayama 143: 行和, 列和のリスト. 成分はすべて正であること.
1.1 takayama 144: @item p
1.6 takayama 145: 二元分割表のセルの確率のリスト
1.1 takayama 146: @end table
147:
1.6 takayama 148: @comment --- ここで関数の詳しい説明 ---
149: @comment --- @itemize〜@end itemize は箇条書き ---
150: @comment --- @bullet は黒点付き ---
1.1 takayama 151: @itemize @bullet
152: @item
1.6 takayama 153: gmvector は Gauss-Manin vector の略である [GM2016].
1.1 takayama 154: @item
1.6 takayama 155: gmvector の戻り値は
156: [GM2016] の 6章 p.23 のベクトル Sである.
157: これは
158: [GM2016] の4章で定義されているベクトル F の定数倍であり,
159: その定数は
160: 第一成分が [GM2016] の6章で定義されている級数 S の値と等しく
161: なるように決められている.
1.1 takayama 162: @item
1.6 takayama 163: r1 x r2 分割表を考える.
164: m+1=r1, n+1=r2 とおく.
165: 正規化定数 Z は分割表 u を (m+1) × (n+1) 行列とするとき p^u/u! の和である.
166: ここで和は行和列和が @var{beta} であるような u 全体でとる
1.1 takayama 167: [TKT2015], [GM2016].
1.6 takayama 168: S はこの多項式 Z の p を
1.1 takayama 169: @verbatim
170: [[1,y11,...,y1n],
171: [1,y21,...,y2n],...,
172: [1,ym1, ...,ymn],
173: [1,1, ..., 1]]
174: @end verbatim
1.6 takayama 175: (1 が L 字型に並ぶ),
176: と正規化した級数である.
1.1 takayama 177: @item
1.6 takayama 178: 2x(n+1)分割表で, gmvector の戻り値を Lauricella F_D で書くことが
179: 以下のようにできる
180: (b[2][1]-b[1][1] >= 0 の場合).
181: ここで b[1][1], b[1][2] は, それぞれ 1 行目の行和, 2 行目の行和,
182: b[2][i] は i 列目の列和である.
1.1 takayama 183: @comment ekn/Talks/2015-12-3-goto.tex
184: @verbatim
185: S=F_D(-b[1,1], [-b[2,2],...,-b[2,n+1]], b[2,1]-b[1,1]+1 ; y)/C,
186: @end verbatim
187: C=b[1,1]! b[2,2]! ... b[2][n+1]! (b[2,1]-b[1,1])!
1.6 takayama 188: とおく.
189: 1/C は L 字型の分割表
1.1 takayama 190: @verbatim
191: [[b[1,1], 0, ..., 0 ],
192: [b[2,1]-b[1,1],b[2,2], ..., b[2,n+1]]]
193: @end verbatim
1.6 takayama 194: に対応.
195: gmvector は
1.1 takayama 196: @verbatim
197: [S,(y11/a2) d_11 S,(y12/a3) d_12 S, ..., (y1n/a_(n+1)) d_1n S]
198: @end verbatim
1.6 takayama 199: である.
200: ここで d_ij は yij についての微分,
1.1 takayama 201: @verbatim
202: [a0, a1, ... ,a_(n+2)]
203: = [-b[1,2],-b[1,1],b[2,2], ..., b[2,n+1],b[2,1]]
204: @end verbatim
1.6 takayama 205: である.
1.1 takayama 206: @item
1.6 takayama 207: 周辺和 @var{beta}の時の正規化定数のセル確率 @var{p} に対する値は 多項式に退化した E(k,n) の値で表現できる. 文献 [TKT2015], [GM2016] 参照.
1.1 takayama 208: @item
1.6 takayama 209: option crt=1 (crt = Chinese remainder theorem) を与えると, 分散計算をおこなう
1.1 takayama 210: [T2016].
1.6 takayama 211: 分散計算用の各種パラメータの設定は
212: gtt_ekn.setup で行なう.
1.1 takayama 213: @end itemize
214:
1.6 takayama 215: @comment --- @example〜@end example は実行例の表示 ---
216: 例: 次は2 x 2 分割表で行和が [5,1], 列和が [3,3], 各セルの確率が
217: [[1/2,1/3],[1/7,1/5]] の場合の gmvector の値である.
1.1 takayama 218: @example
219: [3000] load("gtt_ekn.rr");
220: [3001] ekn_gtt.gmvector([[5,1],[3,3]],[[1/2,1/3],[1/7,1/5]])
221: [775/27783]
222: [200/9261]
223: @end example
224:
1.6 takayama 225: 参考: 2 x m 分割表(Lauricella FD)についてはパッケージ tk_fd でも下記のように同等な
226: 計算ができる.
227: 守備範囲の異なるプログラム同士の比較, debug 用参考.
1.1 takayama 228: @example
229: [3080] import("tk_fd.rr");
230: [3081] A=tk_fd.marginal2abc([4,5],[2,4,3]);
1.6 takayama 231: [-4,[-4,-3],-1] // 2変数 FD のパラメータ. a,[b1,b2],c
1.1 takayama 232: [3082] tk_fd.fd_hessian2(A[0],A[1],A[2],[1/2,1/3]);
233: Computing Dmat(ca) for parameters B=[-4,-3],X=[ 1/2 1/3 ]
234: [4483/124416,[ 1961/15552 185/1728 ],
235: [ 79/288 259/864 ]
236: [ 259/864 47/288 ]]
1.6 takayama 237: // 戻値は [F=F_D, gradient(F), Hessian(F)]
1.1 takayama 238:
1.6 takayama 239: // ekn_gt での例と同じパラメータ.
1.1 takayama 240: [3543] A=tk_fd.marginal2abc([5,1],[3,3]);
241: [-5,[-3],-1]
242: [3544] tk_fd.fd_hessian2(A[0],A[1],A[2],[(1/3)*(1/7)/((1/2)*(1/5))]);
243: Computing Dmat(ca) for parameters B=[-3],X=[ 10/21 ]
244: [775/27783,[ 20/147 ],[ 17/42 ]]
245: @end example
246:
1.6 takayama 247: 参考: 一般の A 分布の正規化定数についての Hessian の計算は実験的 package ot_hessian_ahg.rr
248: で実装のテストがされている. (これはまだ未完成のテスト版なので出力形式等も将来的には変更される.)
1.1 takayama 249: @example
250: import("ot_hgm_ahg.rr");
251: import("ot_hessian_ahg.rr");
252: def htest4() @{
253: extern C11_A;
254: extern C11_Beta;
255: Hess=newmat(7,7);
256: A =C11_A;
257: Beta0= [b0,b1,b2,b3];
258: BaseIdx=[4,5,6];
259: X=[x0,x1,x2,x3,x4,x5,x6];
260: for (I=0; I<7; I++) for (J=0; J<7; J++) @{
261: Idx = [I,J];
262: H=hessian_simplify(A,Beta0,X,BaseIdx,Idx);
263: Hess[I][J]=H;
264: printf("[I,J]=%a, Hessian_ij=%a\n",Idx,H);
265: @}
266: return(Hess);
267: @}
268: [2917] C11_A;
269: [[0,0,0,1,1,1,1],[1,0,0,1,0,1,0],[0,1,1,0,1,0,1],[1,1,0,1,1,0,0]]
270: [2918] C11_Beta;
271: [166,36,290,214]
272: [2919] Ans=htest4$
273: [2920] Ans[0][0];
274: [[((b1-b0-1)*x4)/(x0^2),[4]],[((b1-b0-1)*x6)/(x0^2),[6]],
275: [(b1^2+(-2*b0-1)*b1+b0^2+b0)/(x0^2),[]],[(x6)/(x0),[6,0]],[(x4)/(x0),[4,0]]]
276: @end example
277:
1.6 takayama 278: @comment --- 参照(リンク)を書く ---
1.1 takayama 279: @table @t
1.6 takayama 280: @item 参照
1.1 takayama 281: @ref{gtt_ekn.setup}
282: @ref{gtt_ekn.pfaffian_basis}
283: @end table
284:
1.6 takayama 285: @comment --- ChangeLog を書く. ソースコードの位置. 変更日時 など CVSサーバを見るため
1.1 takayama 286: @noindent
287: ChangeLog
288: @itemize @bullet
289: @item
1.6 takayama 290: この関数は
291: [GM2016] のアルゴリズムおよび
292: [T2016] による modular method を用いた高速化を実装したものである.
1.1 takayama 293: @item
1.6 takayama 294: 変更を受けたファイルは
1.1 takayama 295: OpenXM/src/asir-contrib/packages/src/gtt_ekn.rr 1.1, gtt_ekn/ekn_pfaffian_8.rr
296: @end itemize
297:
298:
299: @comment **********************************************************
1.6 takayama 300: @node gtt_ekn.nc,,, 超幾何関数E(k,n)
1.1 takayama 301: @subsection @code{gtt_ekn.nc}
1.6 takayama 302: @comment --- 索引用キーワード
1.1 takayama 303: @findex gtt_ekn.nc
304:
305: @table @t
306: @item gtt_ekn.nc(@var{beta},@var{p})
1.6 takayama 307: :: 周辺和 @var{beta}, セルの確率 @var{p} の二元分割表の条件付き確率の正規化定数 Z
308: およびその微分の値を戻す.
1.1 takayama 309: @end table
310:
1.6 takayama 311: @comment --- 引数の簡単な説明 --- 以下まだ書いてない.
1.1 takayama 312: @table @var
313: @item return
1.6 takayama 314: ベクトル [Z,[[d_11 Z, d_12 Z, ...], ..., [d_m1 Z, d_m2 Z, ...., d_mn Z]]]
1.1 takayama 315: @item beta
1.6 takayama 316: 行和, 列和のリスト. 成分はすべて正であること.
1.1 takayama 317: @item p
1.6 takayama 318: 二元分割表のセルの確率のリスト
1.1 takayama 319: @end table
320:
1.6 takayama 321: @comment --- ここで関数の詳しい説明 ---
322: @comment --- @itemize〜@end itemize は箇条書き ---
323: @comment --- @bullet は黒点付き ---
1.1 takayama 324: @itemize @bullet
325: @item
1.6 takayama 326: r1 x r2 分割表を考える.
327: m=r1, n=r2 とおく.
328: 正規化定数 Z は分割表 u を m × n 行列とするとき p^u/u! の和である.
329: ここで和は行和列和が @var{beta} であるような u 全体でとる
1.1 takayama 330: [TKT2015], [GM2016].
1.6 takayama 331: p^u は p_ij^u_ij の積, u! は u_ij! の積である.
332: d_ij Z で Z の変数 p_ij についての偏微分を表す.
1.1 takayama 333: @item
1.6 takayama 334: nc は gmvector の値を元に, [GM2016] の Prop
335: 7.1 に基づいて Z の値を計算する.
1.1 takayama 336: @item
1.6 takayama 337: option crt=1 (crt = Chinese remainder theorem) を与えると, 分散計算をおこなう.
338: 分散計算用の各種パラメータの設定は
339: gtt_ekn.setup で行なう.
1.1 takayama 340: @end itemize
341:
1.6 takayama 342: @comment --- @example〜@end example は実行例の表示 ---
343: 例: 2x3 分割表での Z とその微分の計算.
1.1 takayama 344: @example
345: [2237] gtt_ekn.nc([[4,5],[2,4,3]],[[1,1/2,1/3],[1,1,1]]);
346: [4483/124416,[ 353/7776 1961/15552 185/1728 ]
347: [ 553/20736 1261/15552 1001/13824 ]]
348: @end example
349:
1.6 takayama 350: 参考: 2 x m 分割表(Lauricella FD)についてはパッケージ tk_fd でも下記のように同等な
351: 計算ができる.
1.1 takayama 352: @example
353: [3076] import("tk_fd.rr");
354: [3077] A=tk_fd.marginal2abc([4,5],[2,4,3]);
355: [-4,[-4,-3],-1]
356: [3078] tk_fd.ahmat_abc(A[0],A[1],A[2],[[1,1/2,1/3],[1,1,1]]);
357: RS=[ 4 5 ], CSnew=[ 2 4 3 ], Ynew=[ 1 1/2 1/3 ]
358: [ 1 1 1 ]
359: Computing Dmat(ca) for parameters B=[-4,-3],X=[ 1/2 1/3 ]
360: [4483/124416,[[353/7776,1961/15552,185/1728],
361: [553/20736,1261/15552,1001/13824]]]
1.6 takayama 362: // 戻値は [Z, [[d_11 Z, d_12 Z, d_13 Z],
363: // [d_21 Z, d_22 Z, d_23 Z]]] の値.
364: // ここで d_ij は i,j 成分についての微分を表す.
1.1 takayama 365: @end example
366:
1.6 takayama 367: @comment --- 参照(リンク)を書く ---
1.1 takayama 368: @table @t
1.6 takayama 369: @item 参照
1.1 takayama 370: @ref{gtt_ekn.setup}
371: @ref{gtt_ekn.lognc}
372: @end table
373:
1.6 takayama 374: @comment --- ChangeLog を書く. ソースコードの位置. 変更日時 など CVSサーバを見るため
1.1 takayama 375: @noindent
376: ChangeLog
377: @itemize @bullet
378: @item
1.6 takayama 379: 変更を受けたファイルは
1.1 takayama 380: OpenXM/src/asir-contrib/packages/src/gtt_ekn.rr 1.1, gtt_ekn/ekn_eval.rr
381: @end itemize
382:
383:
384: @comment **********************************************************
1.6 takayama 385: @node gtt_ekn.lognc,,, 超幾何関数E(k,n)
1.1 takayama 386: @subsection @code{gtt_ekn.lognc}
1.6 takayama 387: @comment --- 索引用キーワード
1.1 takayama 388: @findex gtt_ekn.lognc
389:
390: @table @t
391: @item gtt_ekn.lognc(@var{beta},@var{p})
1.6 takayama 392: :: 周辺和 @var{beta}, セルの確率 @var{p} の二元分割表の条件付き確率の正規化定数 Z
393: の log の近似値およびその微分の近似値を戻す.
1.1 takayama 394: @end table
395:
1.6 takayama 396: @comment --- 引数の簡単な説明 --- 以下まだ書いてない.
1.1 takayama 397: @table @var
398: @item return
1.6 takayama 399: ベクトル [log(Z), [[d_11 log(Z), d_12 log(Z), ...], [d_21 log(Z),...], ... ]
1.1 takayama 400: @item beta
1.6 takayama 401: 行和, 列和のリスト. 成分はすべて正であること.
1.1 takayama 402: @item p
1.6 takayama 403: 二元分割表のセルの確率のリスト
1.1 takayama 404: @end table
405:
1.6 takayama 406: @comment --- ここで関数の詳しい説明 ---
407: @comment --- @itemize〜@end itemize は箇条書き ---
408: @comment --- @bullet は黒点付き ---
1.1 takayama 409: @itemize @bullet
410: @item
1.6 takayama 411: 条件付き最尤推定に利用する [TKT2015].
412: @item option crt=1 (crt = Chinese remainder theorem) を与えると, 分散計算をおこなう.
413: 分散計算用の各種パラメータの設定は
414: gtt_ekn.setup で行なう.
1.1 takayama 415: @end itemize
416:
1.6 takayama 417: @comment --- @example〜@end example は実行例の表示 ---
418: 例: 2 × 3 分割表での例. 第一成分のみ近似値.
1.1 takayama 419: @example
420: [2238] gtt_ekn.lognc([[4,5],[2,4,3]],[[1,1/2,1/3],[1,1,1]]);
421: [-3.32333832422461674630,[ 5648/4483 15688/4483 13320/4483 ]
422: [ 3318/4483 10088/4483 9009/4483 ]]
423: @end example
424:
1.6 takayama 425: 参考: 2 x m 分割表(Lauricella FD)についてはパッケージ tk_fd でも下記のように同等な
426: 計算ができる.
1.1 takayama 427: @example
428: [3076] import("tk_fd.rr");
429: [3077] A=tk_fd.marginal2abc([4,5],[2,4,3]);
430: [-4,[-4,-3],-1]
431: [3078] tk_fd.log_ahmat_abc(A[0],A[1],A[2],[[1,1/2,1/3],[1,1,1]]);
432: RS=[ 4 5 ], CSnew=[ 2 4 3 ], Ynew=[ 1 1/2 1/3 ]
433: [ 1 1 1 ]
434: Computing Dmat(ca) for parameters B=[-4,-3],X=[ 1/2 1/3 ]
435: [-3.32333832422461674639485797719209322217260539267246045320,
436: [[1.2598706, 3.499442, 2.971224],
437: [0.7401293, 2.250278, 2.009591]]]
1.6 takayama 438: // 戻値は [log(Z),
1.1 takayama 439: // [[d_11 log(Z), d_12 log(Z), d_13 log(Z)],
440: // [d_21 log(Z), d_22 log(Z), d_23 log(Z)]]]
1.6 takayama 441: // の近似値.
1.1 takayama 442: @end example
443:
1.6 takayama 444: @comment --- 参照(リンク)を書く ---
1.1 takayama 445: @table @t
1.6 takayama 446: @item 参照
1.1 takayama 447: @ref{gtt_ekn.setup}
448: @ref{gtt_ekn.nc}
449: @end table
450:
1.6 takayama 451: @comment --- ChangeLog を書く. ソースコードの位置. 変更日時 など CVSサーバを見るため
1.1 takayama 452: @noindent
453: ChangeLog
454: @itemize @bullet
455: @item
1.6 takayama 456: 変更を受けたファイルは
1.1 takayama 457: OpenXM/src/asir-contrib/packages/src/gtt_ekn.rr 1.1.
458: @end itemize
459:
460: @comment **********************************************************
1.6 takayama 461: @node gtt_ekn.expectation,,, 超幾何関数E(k,n)
1.1 takayama 462: @subsection @code{gtt_ekn.expectation}
1.6 takayama 463: @comment --- 索引用キーワード
1.1 takayama 464: @findex gtt_ekn.expectation
465:
466: @table @t
467: @item gtt_ekn.expectation(@var{beta},@var{p})
1.6 takayama 468: :: 周辺和 @var{beta}, セルの確率 @var{p} の二元分割表の期待値を計算する.
1.1 takayama 469: @end table
470:
1.6 takayama 471: @comment --- 引数の簡単な説明 --- 以下まだ書いてない.
1.1 takayama 472: @table @var
473: @item return
1.6 takayama 474: 二元分割表の各セルの期待値のリスト.
1.1 takayama 475: @item beta
1.6 takayama 476: 行和, 列和のリスト. 成分はすべて正であること.
1.1 takayama 477: @item p
1.6 takayama 478: 二元分割表のセルの確率のリスト
1.1 takayama 479: @end table
480:
1.6 takayama 481: @comment --- ここで関数の詳しい説明 ---
482: @comment --- @itemize〜@end itemize は箇条書き ---
483: @comment --- @bullet は黒点付き ---
1.1 takayama 484: @itemize @bullet
485: @item
1.6 takayama 486: [GM2016] の Algorithm 7.8 の実装.
487: @item option crt=1 (crt = Chinese remainder theorem) を与えると, 分散計算をおこなう.
488: 分散計算用の各種パラメータの設定は
489: gtt_ekn.setup で行なう.
490: @item option index を与えると, 指定された成分の期待値のみ計算する.
491: たとえば 2 x 2 分割表で index=[[0,0],[1,1]] と指定すると, 1 のある成分の期待値のみ計算する.
1.1 takayama 492: @end itemize
493:
1.6 takayama 494: @comment --- @example〜@end example は実行例の表示 ---
1.1 takayama 495:
1.6 takayama 496: 2×2, 3×3 の分割表の期待値計算例.
1.1 takayama 497: @example
498: [2235] gtt_ekn.expectation([[1,4],[2,3]],[[1,1/3],[1,1]]);
499: [ 2/3 1/3 ]
500: [ 4/3 8/3 ]
501: [2236] gtt_ekn.expectation([[4,5],[2,4,3]],[[1,1/2,1/3],[1,1,1]]);
502: [ 5648/4483 7844/4483 4440/4483 ]
503: [ 3318/4483 10088/4483 9009/4483 ]
504:
505: [2442] gtt_ekn.expectation([[4,14,9],[11,6,10]],[[1,1/2,1/3],[1,1/5,1/7],[1,1,1]]);
506: [ 207017568232262040/147000422096729819 163140751505489940/147000422096729819
507: 217843368649167296/147000422096729819 ]
508: [ 1185482401011137878/147000422096729819 358095302885438604/147000422096729819
509: 514428205457640984/147000422096729819 ]
510: [ 224504673820628091/147000422096729819 360766478189450370/147000422096729819
511: 737732646860489910/147000422096729819 ]
512: @end example
513:
1.6 takayama 514: 参考: 2 x m 分割表(Lauricella FD)についてはパッケージ tk_fd でも下記のように同等な
515: 計算ができる.
1.1 takayama 516: @example
517: [3076] import("tk_fd.rr");
518: [3077] A=tk_fd.marginal2abc([4,5],[2,4,3]);
519: [-4,[-4,-3],-1]
520: [3078] tk_fd.expectation_abc(A[0],A[1],A[2],[[1,1/2,1/3],[1,1,1]]);
521: RS=[ 4 5 ], CSnew=[ 2 4 3 ], Ynew=[ 1 1/2 1/3 ]
522: [ 1 1 1 ]
523: Computing Dmat(ca) for parameters B=[-4,-3],X=[ 1/2 1/3 ]
524: [[5648/4483,7844/4483,4440/4483],
525: [3318/4483,10088/4483,9009/4483]]
1.6 takayama 526: // 各セルの期待値.
1.1 takayama 527: @end example
528:
1.6 takayama 529: 参考: 一般の A 分布の計算は ot_hgm_ahg.rr. まだ実験的なため, module 化されていない.
530: ot_hgm_ahg.rr についての参考文献:
1.1 takayama 531: K.Ohara, N.Takayama, Pfaffian Systems of A-Hypergeometric Systems II --- Holonomic Gradient Method, arxiv:1505.02947
532: @example
533: [3237] import("ot_hgm_ahg.rr");
1.6 takayama 534: // 2 x 2 分割表.
1.1 takayama 535: [3238] hgm_ahg_expected_values_contiguity([[0,0,1,1],[1,0,1,0],[0,1,0,1]],
536: [9,6,8],[1/2,1/3,1/5,1/7],[x1,x2,x3,x4]|geometric=1);
537: oohg_native=0, oohg_curl=1
538: [1376777025/625400597,1750225960/625400597,
539: 2375626557/625400597,3252978816/625400597]
1.6 takayama 540: // 2 x 2 分割表の期待値.
1.1 takayama 541:
1.6 takayama 542: // 2 x 3 分割表.
1.1 takayama 543: [3238] hgm_ahg_expected_values_contiguity(
544: [[0,0,0,1,1,1],[1,0,0,1,0,0],[0,1,0,0,1,0],[0,0,1,0,0,1]],
545: [5,2,4,3],[1,1/2,1/3,1,1,1],[x1,x2,x3,x4,x5,x6]|geometric=1);
546: [5648/4483,7844/4483,4440/4483,3318/4483,10088/4483,9009/4483]
1.6 takayama 547: // 2 x 3 分割表の期待値. 上と同じ問題.
1.1 takayama 548: @end example
549:
1.6 takayama 550: 3 x 3 分割表. 構造的0が一つ.
1.1 takayama 551: @example
552: /*
1.6 takayama 553: dojo, p.221 のデータ. 成績3以下の生徒は集めてひとつに.
1.1 takayama 554: 2 1 1
555: 8 3 3
556: 0 2 6
557:
558: row sum: 4,14,8
559: column sum: 10,6,10
1.6 takayama 560: 0 を一つ含むので, (3,6) 型の A から 7 列目を抜く.
1.1 takayama 561: */
562:
563: A=[[0,0,0,1,1,1, 0,0],
564: [0,0,0,0,0,0, 1,1],
565: [1,0,0,1,0,0, 0,0],
566: [0,1,0,0,1,0, 1,0],
567: [0,0,1,0,0,1, 0,1]];
568: B=[14,8,10,6,10];
569: hgm_ahg_expected_values_contiguity(A,B,[1,1/2,1/3,1,1/5,1/7,1,1],
1.6 takayama 570: [x1,x2,x3,x4,x5,x6,x7,x8]|geometric=1);
1.1 takayama 571:
1.6 takayama 572: // 答.
1.1 takayama 573: [14449864949304/9556267369631,
574: 10262588586540/9556267369631, 13512615942680/9556267369631,
575: 81112808747006/9556267369631,
576: 21816297744346/9556267369631, 30858636683482/9556267369631,
577:
578: 25258717886900/9556267369631,51191421070148/9556267369631]
579: @end example
580:
1.6 takayama 581: 3 x 3 分割表.
1.1 takayama 582: @example
583: /*
1.6 takayama 584: 上のデータで 0 を 1 に変更.
1.1 takayama 585: 2 1 1
586: 8 3 3
587: 1 2 6
588:
589: row sum: 4,14,9
590: column sum: 11,6,10
591: */
592: A=[[0,0,0,1,1,1,0,0,0],
593: [0,0,0,0,0,0,1,1,1],
594: [1,0,0,1,0,0,1,0,0],
595: [0,1,0,0,1,0,0,1,0],
596: [0,0,1,0,0,1,0,0,1]];
597: B=[14,9,11,6,10];
598: hgm_ahg_expected_values_contiguity(A,B,[1,1/2,1/3,1,1/5,1/7,1,1,1],
599: [x1,x2,x3,x4,x5,x6,x7,x8]|geometric=1);
600:
1.6 takayama 601: // 期待値, 答. x9 を指定していないので, 9番目の期待値は出力してない.
1.1 takayama 602: [207017568232262040/147000422096729819,
603: 163140751505489940/147000422096729819,217843368649167296/147000422096729819,
604: 1185482401011137878/147000422096729819,
605: 358095302885438604/147000422096729819,514428205457640984/147000422096729819,
606: 224504673820628091/147000422096729819,360766478189450370/147000422096729819]
607:
1.6 takayama 608: // Z やその微分の計算は hgm_ahg_contiguity 関数がおこなうが, これの簡易インターフェースは
609: // まだ書いてない.
1.1 takayama 610: @end example
611:
612:
613:
1.6 takayama 614: @comment --- 参照(リンク)を書く ---
1.1 takayama 615: @table @t
1.6 takayama 616: @item 参照
1.1 takayama 617: @ref{gtt_ekn.setup}
618: @ref{gtt_ekn.nc}
619: @end table
620:
1.6 takayama 621: @comment --- ChangeLog を書く. ソースコードの位置. 変更日時 など CVSサーバを見るため
1.1 takayama 622: @noindent
623: ChangeLog
624: @itemize @bullet
625: @item
1.6 takayama 626: 変更を受けたファイルは
1.1 takayama 627: OpenXM/src/asir-contrib/packages/src/gtt_ekn.rr 1.1.
628: @end itemize
629:
630:
631: @comment **********************************************************
1.6 takayama 632: @comment --- ◯◯◯◯ の説明
633: @comment --- 個々の関数の説明の開始 ---
634: @comment --- section 名を正確に ---
635: @node gtt_ekn.setup,,, 超幾何関数E(k,n)
1.1 takayama 636: @subsection @code{gtt_ekn.setup}
1.6 takayama 637: @comment --- 索引用キーワード
1.1 takayama 638: @findex gtt_ekn.setup
639:
640: @table @t
641: @item gtt_ekn.setup()
1.6 takayama 642: :: 分散計算用の環境設定をおこなう. 現在の環境を報告する.
1.1 takayama 643: @end table
644:
1.6 takayama 645: @comment --- 引数の簡単な説明 --- 以下まだ書いてない.
1.1 takayama 646: @table @var
647: @item return
648:
649: @end table
650:
1.6 takayama 651: @comment --- ここで関数の詳しい説明 ---
652: @comment --- @itemize〜@end itemize は箇条書き ---
653: @comment --- @bullet は黒点付き ---
1.3 takayama 654: @itemize @bullet
1.6 takayama 655: @item 使用するプロセスと素数の個数, 最小の素数を表示する. 準備されていない場合はその旨を表示.
656: @item このパッケージでの分散計算は複数のcpuを搭載した計算機で実行されることを想定している.
657: @item option nps (または number_of_processes)を与えると指定した数だけプロセスを用意する.
658: @item option nprm (または number_of_primes)を与えるとnprmが文字列の場合指定された素数リストのファイルを読み込む. nprmが自然数の場合さらにoption minp (minp =MINimum Prime)を与えるとminpより大きな素数をnprm個生成する. その際option fgp (または file_of_generated_primes)を与えると生成した素数リストをファイル名をfgpとして保存する.
659: @item 上記のoption を指定しなかった場合次のデフォルト値が用いられる. nps=1. nprm=10. fgp=0.
660: @item option report=1を与えると現在の環境の報告のみを行う. setup(|report=1)の別名としてreport関数を使用することもできる.
661: @item option subprogs=[file1,file2,...] により分散計算の子供プロセスにロードすべきファイル file1, file2, ... を指定する. default は subprogs=["gtt_ekn/childprocess.rr"] である.
662: @item gtt_ekn.set_debug_mode(Mode) で Ekn_debug の値を設定する.
1.1 takayama 663: @end itemize
664:
1.6 takayama 665: @comment --- @example〜@end example は実行例の表示 ---
666: 例: 素数のリストを生成してファイル p.txt へ書き出す.
1.1 takayama 667: @example
668: gtt_ekn.setup(|nps=2,nprm=20,minp=10^10,fgp="p.txt")$
669: @end example
670:
671:
1.6 takayama 672: @comment --- 参照(リンク)を書く ---
1.1 takayama 673: @table @t
1.6 takayama 674: @item 参照
1.1 takayama 675: @ref{gtt_ekn.nc}
676: @ref{gtt_ekn.gmvector}
677: @end table
678:
1.6 takayama 679: @comment --- ChangeLog を書く. ソースコードの位置. 変更日時 など CVSサーバを見るため
1.1 takayama 680: @noindent
681: ChangeLog
682: @itemize @bullet
683: @item
1.6 takayama 684: 変更を受けたファイルは
1.1 takayama 685: OpenXM/src/asir-contrib/packages/src/gtt_ekn.rr 1.1,
686: gtt_ekn/g_mat_fac.rr
687:
688: @end itemize
689:
690: @comment **********************************************************
1.6 takayama 691: @comment --- ◯◯◯◯ の説明
692: @comment --- 個々の関数の説明の開始 ---
693: @comment --- section 名を正確に ---
694: @node gtt_ekn.upAlpha,,, 超幾何関数E(k,n)
1.1 takayama 695: @subsection @code{gtt_ekn.upAlpha}
1.6 takayama 696: @comment --- 索引用キーワード
1.1 takayama 697: @findex gtt_ekn.upAlpha
698:
699: @table @t
700: @item gtt_ekn.upAlpha(@var{i},@var{k},@var{n})
701: ::
702: @end table
703:
1.6 takayama 704: @comment --- 引数の簡単な説明 --- 以下まだ書いてない.
1.1 takayama 705: @table @var
1.6 takayama 706: @item i a_i を a_i+1 と変化させる contiguity relation.
707: @item k E(k+1,n+k+2)型の超幾何関数の k. 分割表では (k+1)×(n+1).
708: @item n E(k+1,n+k+2)型の超幾何関数の n. 分割表では (k+1)×(n+1).
709: @item return contiguity relation の pfaffian_basis についての行列表現を戻す. [GM2016] の Cor 6.3.
1.1 takayama 710: @end table
711:
1.6 takayama 712: @comment --- ここで関数の詳しい説明 ---
713: @comment --- @itemize〜@end itemize は箇条書き ---
714: @comment --- @bullet は黒点付き ---
1.1 takayama 715: @itemize @bullet
716: @item
1.6 takayama 717: upAlpha は [GM2016] の Cor 6.3 の行列 U_i を戻す.
718: @item 関連する各関数の簡潔な説明と例も加える.
719: @item a_i を a_i-1 と変化させたい場合は関数 downAlpha を用いる.
720: @item a_i と分割表の周辺和を見るには, 関数 marginaltoAlpha([行和,列和]) を用いる.
1.1 takayama 721: @item
1.6 takayama 722: pfaffian_basis は [GM2016] の4章のベクトル F に対応する偏微分を戻す.
1.1 takayama 723: @end itemize
724:
1.6 takayama 725: @comment --- @example〜@end example は実行例の表示 ---
726: 例: 以下の例は 2×2分割表(E(2,4)), 2×3分割表(E(2,5))の場合である.
727: [2225] までは出力を略している.
1.1 takayama 728: @example
729: [2221] gtt_ekn.marginaltoAlpha([[1,4],[2,3]]);
730: [[a_0,-4],[a_1,-1],[a_2,3],[a_3,2]]
1.6 takayama 731: [2222] gtt_ekn.upAlpha(1,1,1); // E(2,4) の a_1 方向の
732: // contiguity を表現する行列
733: [2223] gtt_ekn.upAlpha(2,1,1); // E(2,4) の a_2 方向
734: [2224] gtt_ekn.upAlpha(3,1,1); // E(2,4) の a_3 方向
1.1 takayama 735: [2225] function f(x_1_1);
736: [2232] gtt_ekn.pfaffian_basis(f(x_1_1),1,1);
737: [ f(x_1_1) ]
738: [ (f{1}(x_1_1)*x_1_1)/(a_2) ]
739: [2233] function f(x_1_1,x_1_2);
740: f() redefined.
1.6 takayama 741: [2234] gtt_ekn.pfaffian_basis(f(x_1_1,x_1_2),1,2); // E(2,5), 2*3 分割表
1.1 takayama 742: [ f(x_1_1,x_1_2) ]
743: [ (f{1,0}(x_1_1,x_1_2)*x_1_1)/(a_2) ]
744: [ (f{0,1}(x_1_1,x_1_2)*x_1_2)/(a_3) ]
745: @end example
746:
747:
1.6 takayama 748: @comment --- 参照(リンク)を書く ---
1.1 takayama 749: @table @t
1.6 takayama 750: @item 参照
1.1 takayama 751: @ref{gtt_ekn.nc}
752: @ref{gtt_ekn.gmvector}
753: @end table
754:
1.6 takayama 755: @comment --- ChangeLog を書く. ソースコードの位置. 変更日時 など CVSサーバを見るため
1.1 takayama 756: @noindent
757: ChangeLog
758: @itemize @bullet
759: @item
1.6 takayama 760: この関数は [GM2016]
761: で与えられたアルゴリズムに従い contiguity relation を導出する.
1.1 takayama 762: @item
1.6 takayama 763: 変更を受けたファイルは
1.1 takayama 764: OpenXM/src/asir-contrib/packages/src/gtt_ekn/ekn_pfaffian_8.rr 1.1.
765: @end itemize
766:
767:
1.5 takayama 768: @comment **********************************************************
1.6 takayama 769: @comment --- ◯◯◯◯ の説明
770: @comment --- 個々の関数の説明の開始 ---
771: @comment --- section 名を正確に ---
772: @node gtt_ekn.cmle,,, 超幾何関数E(k,n)
1.5 takayama 773: @subsection @code{gtt_ekn.cmle}
1.6 takayama 774: @comment --- 索引用キーワード
1.5 takayama 775: @findex gtt_ekn.cmle
776:
777: @table @t
1.6 takayama 778: @item gtt_ekn.cmle(@var{u}) u を観測データとするとき, P(U=u | row sum, column sum = these of U) を最大化する, 各セルの確率の近似値を求める.
1.5 takayama 779: ::
780: @end table
781:
1.6 takayama 782: @comment --- 引数の簡単な説明 --- 以下まだ書いてない.
1.5 takayama 783: @table @var
1.6 takayama 784: @item u 観測データ(分割表)
785: @item return セルの確率(分割表形式)
1.5 takayama 786: @end table
787:
1.6 takayama 788: @comment --- ここで関数の詳しい説明 ---
789: @comment --- @itemize〜@end itemize は箇条書き ---
790: @comment --- @bullet は黒点付き ---
1.5 takayama 791: @itemize @bullet
1.6 takayama 792: @item u を観測データとするとき, P(U=u | row sum, column sum = these of U) を最大化する, 各セルの確率の近似値を求める.
793: @item optional parameter で algorithm の振る舞い(たとえば有理数を近似して, 分母分子が小さい有理数にする, gradient descent の step幅)を調整すべきだが, これは作業中. 2017.03.03
1.5 takayama 794: @end itemize
795:
1.6 takayama 796: @comment --- @example〜@end example は実行例の表示 ---
797: 例: 2 x 4 分割表.
1.5 takayama 798: @example
799: U=[[1,1,2,3],[1,3,1,1]];
800: gtt_ekn.cmle(U);
801: [[ 1 1 2 3 ]
802: [ 1 3 1 1 ],[[7,6],[2,4,3,4]], // Data, row sum, column sum
803: [ 1 67147/183792 120403/64148 48801/17869 ] // probability obtained.
804: [ 1 1 1 1 ]]
805: @end example
806:
1.6 takayama 807: 例: 上の例は次の関数に.
1.5 takayama 808: @example
809: gtt_ekn.cmle_test3();
810: @end example
811:
1.6 takayama 812: @comment --- 参照(リンク)を書く ---
1.5 takayama 813: @table @t
1.6 takayama 814: @item 参照
1.5 takayama 815: @ref{gtt_ekn.expectation}
816: @end table
817:
1.6 takayama 818: @comment --- ChangeLog を書く. ソースコードの位置. 変更日時 など CVSサーバを見るため
1.5 takayama 819: @noindent
820: ChangeLog
821: @itemize @bullet
1.6 takayama 822: @item gtt_ekn/mle.rr に本体がある.
823: @item gtt_ekn.rr の cmle 関数は wrapper.
1.5 takayama 824: @end itemize
825: @comment end cmle.
826:
827:
828:
1.6 takayama 829: @node modular計算,,, 2元分割表HGMの関数
830: @chapter modular計算
1.4 takayama 831:
832: @menu
833: * gtt_ekn.chinese_itor::
834: @end menu
835:
1.6 takayama 836: @node 中国剰余定理とitor,,, modular計算
837: @section 中国剰余定理とitor
1.4 takayama 838:
839: @comment **********************************************************
1.6 takayama 840: @comment --- ◯◯◯◯ の説明
841: @comment --- 個々の関数の説明の開始 ---
842: @comment --- section 名を正確に ---
1.4 takayama 843: @node gtt_ekn.chinese_itor,,,
844: @subsection @code{gtt_ekn.chinese_itor}
1.6 takayama 845: @comment --- 索引用キーワード
846: @findex gtt_ekn.chinese_itor 中国剰余定理とitor
1.4 takayama 847:
848: @table @t
849: @item gtt_ekn.chinese_itor(@var{data},@var{idlist})
1.6 takayama 850: :: mod p で計算した結果(ベクトル)から chinese remainder theorem, itor(integer to rational) で有理数ベクトルを得る.
1.4 takayama 851: @end table
852:
1.6 takayama 853: @comment --- 引数の簡単な説明 --- 以下まだ書いてない.
1.4 takayama 854: @table @var
1.6 takayama 855: @item return [val, n] ここで val は答え. また, n = n1*n2*...
856: @item data [[val1,n1],[val2,n2], ...], ここで val mod n1 = val1, val mod n2 = val2,...
857: @item idlist chinese, itor を実行するサーバIDのリスト.
1.4 takayama 858: @end table
859:
1.6 takayama 860: @comment --- ここで関数の詳しい説明 ---
861: @comment --- @itemize〜@end itemize は箇条書き ---
862: @comment --- @bullet は黒点付き ---
1.4 takayama 863: @itemize @bullet
1.6 takayama 864: @item 中国剰余定理を用いて val0 mod n1 = val1, val0 mod n2 = val2, ... となる val0 を求める. val に algorithm itor を適用する.
865: @item sqrt(n) より val0 が大きい時は itor が適用されて val0 が有理数 val=a/b に変換される. つまり b*x =1 mod n となる逆数 x を考えて, x*a % n = val0 となる数 val を戻す. 見つからないときは failure を戻す.
1.4 takayama 866: @end itemize
867:
1.6 takayama 868: @comment --- @example〜@end example は実行例の表示 ---
869: 例: [3!, 5^3*3!]=[6,750] が戻り値.
870: 6 mod 109 =6, 750 mod 109=96 が最初の引数の [[6,96],109]. 以下同様.
1.4 takayama 871: @example
872: gtt_ekn.setup(|nps=2,nprm=3,minp=101,fgp="p_small.txt");
873: SS=gtt_ekn.get_svalue();
874: SS[0];
875: [103,107,109] // list of primes
876: SS[1];
877: [0,2] // list of server ID's
878: gtt_ekn.chinese_itor([[[ 6,96 ],109],[[ 6,29 ],103],[[ 6,1 ],107]],SS[1]);
879: [[ 6 750 ],1201289]
880:
1.6 takayama 881: // 引数はスカラーでもよい.
1.4 takayama 882: gtt_ekn.chinese_itor([[96,109],[29,103]],SS[1]);
883: [[ 750 ],11227]
884: @end example
885:
886:
1.6 takayama 887: @comment --- @example〜@end example は実行例の表示 ---
888: 例: gtt_ekn/childprocess.rr (server で実行される) の関数 chinese (chinese remainder theorem) と euclid.
1.4 takayama 889: @example
890: load("gtt_ekn/childprocess.rr");
891: chinese([newvect(2,[6,29]),103],[newvect(2,[6,750]),107*109]);
1.6 takayama 892: // mod 103 で [6,29], mod (107*109) で [6,750] となる数を mod 103*(107*109)
893: // で求めると,
1.4 takayama 894: [[ 6 750 ],1201289]
1.6 takayama 895: euclid(3,103); // mod 103 での 3 の逆数. つまり 1/3
1.4 takayama 896: -34
1.6 takayama 897: 3*(-34) % 103; // 確かに逆数.
1.4 takayama 898: 1
899: @end example
900:
1.6 takayama 901: @comment --- @example〜@end example は実行例の表示 ---
902: 例: gtt_ekn/childprocess.rr (server で実行される) の関数 itor (integer to rational) の例.
903: itor(Y,Q,Q2,Idx) では Y < Q2 なら Y がそのまま戻る. Idx は 内部用の index で好きな数でよい. 戻り値の第2成分となる.
1.4 takayama 904: @example
905: load("gtt_ekn/childprocess.rr");
906: for (I=1;I<11; I++) print([I,itor(I,11,3,0)]);
907: [1,[1,0]]
908: [2,[2,0]]
1.6 takayama 909: [3,[-2/3,0]] //euclid(3,11); ->4, 4*(-2)%11 -> 3 なので確かに -2/3 は元の数の候補
1.4 takayama 910: [4,[failure,0]]
911: [5,[-1/2,0]]
912: [6,[1/2,0]]
913: [7,[-1/3,0]]
914: [8,[failure,0]]
915: [9,[-2,0]]
916: [10,[-1,0]]
917: @end example
918:
919:
1.6 takayama 920: @comment --- 参照(リンク)を書く ---
1.4 takayama 921: @table @t
1.6 takayama 922: @item 参照
1.4 takayama 923: @ref{gtt_ekn.setup}
924: @end table
925:
1.6 takayama 926: @comment --- ChangeLog を書く. ソースコードの位置. 変更日時 など CVSサーバを見るため
1.4 takayama 927: @noindent
928: ChangeLog
929: @itemize @bullet
930: @item
1.6 takayama 931: 関連ファイルは
1.4 takayama 932: gtt_ekn/g_mat_fac.rr
933: gtt_ekn/childprocess.rr
934: @end itemize
935:
936:
1.1 takayama 937:
1.6 takayama 938: @comment --- おまじない ---
1.1 takayama 939: @node Index,,, Top
940: @unnumbered Index
941: @printindex fn
942: @printindex cp
943: @iftex
944: @vfill @eject
945: @end iftex
946: @summarycontents
947: @contents
948: @bye
1.6 takayama 949: @comment --- おまじない終り ---
1.1 takayama 950:
951:
1.6 takayama 952: @comment テンプレート. start_of_template.
1.5 takayama 953: @comment **********************************************************
1.6 takayama 954: @comment --- ◯◯◯◯ の説明
955: @comment --- 個々の関数の説明の開始 ---
956: @comment --- section 名を正確に ---
957: @node gtt_ekn.hoge,,, 超幾何関数E(k,n)
1.5 takayama 958: @subsection @code{gtt_ekn.hoge}
1.6 takayama 959: @comment --- 索引用キーワード
1.5 takayama 960: @findex gtt_ekn.hoge
961:
962: @table @t
963: @item gtt_ekn.hoge(@var{i})
964: ::
965: @end table
966:
1.6 takayama 967: @comment --- 引数の簡単な説明 --- 以下まだ書いてない.
1.5 takayama 968: @table @var
969: @item i hage
970: @item return
971: @end table
972:
1.6 takayama 973: @comment --- ここで関数の詳しい説明 ---
974: @comment --- @itemize〜@end itemize は箇条書き ---
975: @comment --- @bullet は黒点付き ---
1.5 takayama 976: @itemize @bullet
1.6 takayama 977: @item 説明.
1.5 takayama 978: @end itemize
979:
1.6 takayama 980: @comment --- @example〜@end example は実行例の表示 ---
981: 例:
1.5 takayama 982: @example
983: [2221] gtt_ekn.hoge([[1,4],[2,3]]);
984: @end example
985:
986:
1.6 takayama 987: @comment --- 参照(リンク)を書く ---
1.5 takayama 988: @table @t
1.6 takayama 989: @item 参照
1.5 takayama 990: @ref{gtt_ekn.nc}
991: @ref{gtt_ekn.gmvector}
992: @end table
993:
1.6 takayama 994: @comment --- ChangeLog を書く. ソースコードの位置. 変更日時 など CVSサーバを見るため
1.5 takayama 995: @noindent
996: ChangeLog
997: @itemize @bullet
998: @item
999: @end itemize
1000: @comment end_of_template
1001:
1002:
1.6 takayama 1003: // 2 x m 分割表において似た機能を有する関数の利用例を参考までに記載する;
1004: // 正規化定数とその微分関連.
1005: // その1.
1.1 takayama 1006: [3077] A=tk_fd.marginal2abc([4,5],[2,4,3]);
1007: [-4,[-4,-3],-1]
1008: [3078] tk_fd.ahmat_abc(A[0],A[1],A[2],[[1,1/2,1/3],[1,1,1]]);
1009: RS=[ 4 5 ], CSnew=[ 2 4 3 ], Ynew=[ 1 1/2 1/3 ]
1010: [ 1 1 1 ]
1011: Computing Dmat(ca) for parameters B=[-4,-3],X=[ 1/2 1/3 ]
1012: [4483/124416,[[353/7776,1961/15552,185/1728],[553/20736,1261/15552,1001/13824]]]
1.6 takayama 1013: // 戻値は [Z, [[d_11 Z, d_12 Z, d_13 Z],[d_21 Z, d_22 Z, d_23 Z]]] の値.
1.1 takayama 1014:
1.6 takayama 1015: // その2.
1.1 takayama 1016: [3079] tk_fd.log_ahmat_abc(A[0],A[1],A[2],[[1,1/2,1/3],[1,1,1]]);
1017: RS=[ 4 5 ], CSnew=[ 2 4 3 ], Ynew=[ 1 1/2 1/3 ]
1018: [ 1 1 1 ]
1019: Computing Dmat(ca) for parameters B=[-4,-3],X=[ 1/2 1/3 ]
1020: [-3.32333832422461674639485797719209322217260539267246045320,
1021: [[1.25987062235110417131385233102832924380994869507026544724,3.49944233772027660049074280615659156814633058219942003122,2.97122462636627258532232879768012491635065804149007361142],
1022: [0.740129377648895828686147668971670756190051304929734552754,2.25027883113986169975462859692170421592683470890028998438,2.00959179121124247155922373410662502788311398616997546285]]]
1.6 takayama 1023: // 戻値は [log(Z),
1.1 takayama 1024: // [[d_11 log(Z), d_12 log(Z), d_13 log(Z)],
1025: // [d_21 log(Z), d_22 log(Z), d_23 log(Z)]]]
1.6 takayama 1026: // の近似値.
1.1 takayama 1027:
1.6 takayama 1028: // その3.
1.1 takayama 1029: [3082] fd_hessian2(A[0],A[1],A[2],[1/2,1/3]);
1030: Computing Dmat(ca) for parameters B=[-4,-3],X=[ 1/2 1/3 ]
1031: [4483/124416,[ 1961/15552 185/1728 ],
1032: [ 79/288 259/864 ]
1033: [ 259/864 47/288 ]]
1.6 takayama 1034: // 戻値は [F=F_D, gradient(F), Hessian(F)]
1.1 takayama 1035:
1.6 takayama 1036: // 参考.
1037: // ygahvec で巾関数分の調整. 独立した関数はないようだ.
1.1 takayama 1038:
1039: //-----------------------------------------------------------------------
1.6 takayama 1040: // 2 x m 分割表において似た機能を有する関数の利用例を参考までに記載する;
1041: // 期待値関連.
1.1 takayama 1042: [3079] A=tk_fd.marginal2abc([4,5],[2,4,3]);
1043: [-4,[-4,-3],-1]
1044: [3080] tk_fd.expectation_abc(A[0],A[1],A[2],[[1,1/2,1/3],[1,1,1]]);
1045: RS=[ 4 5 ], CSnew=[ 2 4 3 ], Ynew=[ 1 1/2 1/3 ]
1046: [ 1 1 1 ]
1047: Computing Dmat(ca) for parameters B=[-4,-3],X=[ 1/2 1/3 ]
1048: [[5648/4483,7844/4483,4440/4483],
1049: [3318/4483,10088/4483,9009/4483]]
1.6 takayama 1050: // 各セルの期待値.
1.1 takayama 1051:
1052: //-----------------------------------------------------------------------
1.6 takayama 1053: // ot_hgm_ahg.rr の例. 実験的なため module 化されていない.
1.1 takayama 1054: [3237] import("ot_hgm_ahg.rr");
1.6 takayama 1055: // 2 x 2 分割表.
1.1 takayama 1056: [3238] hgm_ahg_expected_values_contiguity([[0,0,1,1],[1,0,1,0],[0,1,0,1]],
1057: [9,6,8],[1/2,1/3,1/5,1/7],[x1,x2,x3,x4]|geometric=1);
1058: oohg_native=0, oohg_curl=1
1059: [1376777025/625400597,1750225960/625400597,2375626557/625400597,3252978816/625400597]
1.6 takayama 1060: // 2 x 2 分割表の期待値.
1.1 takayama 1061:
1.6 takayama 1062: // 2 x 3 分割表.
1.1 takayama 1063: [3238] hgm_ahg_expected_values_contiguity(
1064: [[0,0,0,1,1,1],[1,0,0,1,0,0],[0,1,0,0,1,0],[0,0,1,0,0,1]],
1065: [5,2,4,3],[1,1/2,1/3,1,1,1],[x1,x2,x3,x4,x5,x6]|geometric=1);
1066: [5648/4483,7844/4483,4440/4483,3318/4483,10088/4483,9009/4483]
1.6 takayama 1067: // 2 x 3 分割表の期待値. 上と同じ問題.
1.1 takayama 1068:
1069: /*
1.6 takayama 1070: dojo, p.221. 成績3以下の生徒は集めてひとつに.
1.1 takayama 1071: 2 1 1
1072: 8 3 3
1073: 0 2 6
1074:
1075: row sum: 4,14,8
1076: column sum: 10,6,10
1.6 takayama 1077: 0 を一つ含むので, (3,6) 型の A から 7 列目を抜く.
1.1 takayama 1078: */
1.6 takayama 1079: // 3 x 3 分割表. 構造的0が一つ.
1.1 takayama 1080:
1081: A=[[0,0,0,1,1,1, 0,0],
1082: [0,0,0,0,0,0, 1,1],
1083: [1,0,0,1,0,0, 0,0],
1084: [0,1,0,0,1,0, 1,0],
1085: [0,0,1,0,0,1, 0,1]];
1086: B=[14,8,10,6,10];
1087: hgm_ahg_expected_values_contiguity(A,B,[1,1/2,1/3,1,1/5,1/7,1,1],[x1,x2,x3,x4,x5,x6,x7,x8]|geometric=1);
1088:
1.6 takayama 1089: // 答.
1.1 takayama 1090: [14449864949304/9556267369631,10262588586540/9556267369631,13512615942680/9556267369631,
1091: 81112808747006/9556267369631,21816297744346/9556267369631,30858636683482/9556267369631,
1092: 25258717886900/9556267369631,51191421070148/9556267369631]
1093:
1094:
1095: /*
1.6 takayama 1096: 上のデータで 0 を 1 に変更.
1.1 takayama 1097: 2 1 1
1098: 8 3 3
1099: 1 2 6
1100:
1101: row sum: 4,14,9
1102: column sum: 11,6,10
1103: */
1.6 takayama 1104: // 3 x 3 分割表.
1.1 takayama 1105: A=[[0,0,0,1,1,1,0,0,0],
1106: [0,0,0,0,0,0,1,1,1],
1107: [1,0,0,1,0,0,1,0,0],
1108: [0,1,0,0,1,0,0,1,0],
1109: [0,0,1,0,0,1,0,0,1]];
1110: B=[14,9,11,6,10];
1111: hgm_ahg_expected_values_contiguity(A,B,[1,1/2,1/3,1,1/5,1/7,1,1,1],[x1,x2,x3,x4,x5,x6,x7,x8]|geometric=1);
1112:
1.6 takayama 1113: // 期待値, 答.
1.1 takayama 1114: [207017568232262040/147000422096729819,163140751505489940/147000422096729819,217843368649167296/147000422096729819,
1115: 1185482401011137878/147000422096729819,358095302885438604/147000422096729819,514428205457640984/147000422096729819,
1116: 224504673820628091/147000422096729819,360766478189450370/147000422096729819]
1117:
1.6 takayama 1118: // Z やその微分の計算は hgm_ahg_contiguity 関数がおこなうが, これの簡易インターフェースは
1119: // まだ書いてない.
1.1 takayama 1120:
1121:
1.6 takayama 1122: 4. x_ij は [GM2016] の1章で,
1123: たとえば 3x3 の時 [[1,1,1],[x_11,x_12,1],[x_21,x_22,1]]
1124: となっているが, [GM2016] の Prop 7.1 の対応では,
1125: p = [[1,x_11,x_12],[1,x_21,x_22],[1,1,1]] となっているので注意.
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>