Keyword: 特異値分解, 部分最小二乗, PLS, 回帰
概要
本サンプルは特異値分解を用いた部分最小二乗(PLS)回帰の計算を行うFortranによるサンプルプログラムです。 本サンプルは以下に示されるデータについて部分最小二乗(PLS)回帰の計算を行います。
※本サンプルはnAG Fortranライブラリに含まれるルーチン g02laf() のExampleコードです。本サンプル及びルーチンの詳細情報は g02laf のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで
入力データ
(本ルーチンの詳細はg02laf のマニュアルページを参照)1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
このデータをダウンロード |
G02LAF Example Program Data 15 15 1 1 4 : N, MX, MY, SCALE, MAXFAC -2.6931 -2.5271 -1.2871 3.0777 0.3891 -0.0701 1.9607 -1.6324 0.5746 1.9607 -1.6324 0.5740 2.8369 1.4092 -3.1398 0.00 -2.6931 -2.5271 -1.2871 3.0777 0.3891 -0.0701 1.9607 -1.6324 0.5746 0.0744 -1.7333 0.0902 2.8369 1.4092 -3.1398 0.28 -2.6931 -2.5271 -1.2871 3.0777 0.3891 -0.0701 0.0744 -1.7333 0.0902 1.9607 -1.6324 0.5746 2.8369 1.4092 -3.1398 0.20 -2.6931 -2.5271 -1.2871 3.0777 0.3891 -0.0701 0.0744 -1.7333 0.0902 0.0744 -1.7333 0.0902 2.8369 1.4092 -3.1398 0.51 -2.6931 -2.5271 -1.2871 2.8369 1.4092 -3.1398 0.0744 -1.7333 0.0902 0.0744 -1.7333 0.0902 2.8369 1.4092 -3.1398 0.11 -2.6931 -2.5271 -1.2871 3.0777 0.3891 -0.0701 -4.7548 3.6521 0.8524 0.0744 -1.7333 0.0902 2.8369 1.4092 -3.1398 2.73 -2.6931 -2.5271 -1.2871 3.0777 0.3891 -0.0701 0.0744 -1.7333 0.0902 0.0744 -1.7333 0.0902 -1.2201 0.8829 2.2253 0.18 -2.6931 -2.5271 -1.2871 3.0777 0.3891 -0.0701 2.4064 1.7438 1.1057 0.0744 -1.7333 0.0902 2.8369 1.4092 -3.1398 1.53 -2.6931 -2.5271 -1.2871 0.0744 -1.7333 0.0902 0.0744 -1.7333 0.0902 0.0744 -1.7333 0.0902 2.8369 1.4092 -3.1398 -0.10 2.2261 -5.3648 0.3049 3.0777 0.3891 -0.0701 0.0744 -1.7333 0.0902 0.0744 -1.7333 0.0902 2.8369 1.4092 -3.1398 -0.52 -4.1921 -1.0285 -0.9801 3.0777 0.3891 -0.0701 0.0744 -1.7333 0.0902 0.0744 -1.7333 0.0902 2.8369 1.4092 -3.1398 0.40 -4.9217 1.2977 0.4473 3.0777 0.3891 -0.0701 0.0744 -1.7333 0.0902 0.0744 -1.7333 0.0902 2.8369 1.4092 -3.1398 0.30 -2.6931 -2.5271 -1.2871 3.0777 0.3891 -0.0701 2.2261 -5.3648 0.3049 2.2261 -5.3648 0.3049 2.8369 1.4092 -3.1398 -1.00 -2.6931 -2.5271 -1.2871 3.0777 0.3891 -0.0701 -4.9217 1.2977 0.4473 0.0744 -1.7333 0.0902 2.8369 1.4092 -3.1398 1.57 -2.6931 -2.5271 -1.2871 3.0777 0.3891 -0.0701 -4.1921 -1.0285 -0.9801 0.0744 -1.7333 0.0902 2.8369 1.4092 -3.1398 0.59 : End of X,Y 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 : ISX
- 1行目はタイトル行で読み飛ばされます。
- 2行目は観測値の数(n=15)、予測変数の数(mx=15)、応答変数の数(my=1)、予測変数のスケールの手法(scale=1:データが変数の標準分散によってスケールされる)、潜在変数の数(maxfac=4)を指定しています。
- 3~47行目は予測変数の観測値(x)と応答変数の観測値(y)を指定しています。
- 48行目はどの予測変数がモデルに含まれるか(isx)を指定しています。
出力結果
(本ルーチンの詳細はg02laf のマニュアルページを参照)1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
この出力例をダウンロード |
G02LAF Example Program Results x-loadings, P 1 2 3 4 1 -0.6708 -1.0047 0.6505 0.6169 2 0.4943 0.1355 -0.9010 -0.2388 3 -0.4167 -1.9983 -0.5538 0.8474 4 0.3930 1.2441 -0.6967 -0.4336 5 0.3267 0.5838 -1.4088 -0.6323 6 0.0145 0.9607 1.6594 0.5361 7 -2.4471 0.3532 -1.1321 -1.3554 8 3.5198 0.6005 0.2191 0.0380 9 1.0973 2.0635 -0.4074 -0.3522 10 -2.4466 2.5640 -0.4806 0.3819 11 2.2732 -1.3110 -0.7686 -1.8959 12 -1.7987 2.4088 -0.9475 -0.4727 13 0.3629 0.2241 -2.6332 2.3739 14 0.3629 0.2241 -2.6332 2.3739 15 -0.3629 -0.2241 2.6332 -2.3739 x-scores, T 1 2 3 4 1 -0.1896 0.3898 -0.2502 -0.2479 2 0.0201 -0.0013 -0.1726 -0.2042 3 -0.1889 0.3141 -0.1727 -0.1350 4 0.0210 -0.0773 -0.0950 -0.0912 5 -0.0090 -0.2649 -0.4195 -0.1327 6 0.5479 0.2843 0.1914 0.2727 7 -0.0937 -0.0579 0.6799 -0.6129 8 0.2500 0.2033 -0.1046 -0.1014 9 -0.1005 -0.2992 0.2131 0.1223 10 -0.1810 -0.4427 0.0559 0.2114 11 0.0497 -0.0762 -0.1526 -0.0771 12 0.0173 -0.2517 -0.2104 0.1044 13 -0.6002 0.3596 0.1876 0.4812 14 0.3796 0.1338 0.1410 0.1999 15 0.0773 -0.2139 0.1085 0.2106 y-loadings, C 1 2 3 4 1 3.5425 1.0475 0.2548 0.1866 y-scores, U 1 2 3 4 1 -1.7670 0.1812 -0.0600 -0.0320 2 -0.6724 -0.2735 -0.0662 -0.0402 3 -0.9852 0.4097 0.0158 0.0198 4 0.2267 -0.0107 0.0180 0.0177 5 -1.3370 -0.3619 -0.0173 0.0073 6 8.9056 0.6000 0.0701 0.0422 7 -1.0634 0.0332 0.0235 -0.0151 8 4.2143 0.3184 0.0232 0.0219 9 -2.1580 -0.2652 0.0153 0.0011 10 -3.7999 -0.4520 0.0082 0.0034 11 -0.2033 -0.2446 -0.0392 -0.0214 12 -0.5942 -0.2398 0.0089 0.0165 13 -5.6764 0.5487 0.0375 0.0185 14 4.3707 -0.1161 -0.0639 -0.0535 15 0.5395 -0.1274 0.0261 0.0139 Explained Variance Model effects Dependent variable(s) 16.902124 89.638060 29.674338 97.476270 44.332404 97.939839 56.172041 98.188474
- 3~19行目にx ローディング(負荷量)が出力されています。
- 21~37行目にx スコアが出力されています。
- 39~41行目に y ローディング(負荷量)が出力されています。
- 43~59行目にが yスコアが出力されています。
- 61~66行目に説明分散(因子寄与)のモデル効果と従属変数について出力されています。予測変数の累積寄与率と応答変数の累積寄与率がそれぞれ出力されています。
ソースコード
(本ルーチンの詳細はg02laf のマニュアルページを参照)
※本サンプルソースコードは科学技術・統計計算ライブラリである「nAG Fortranライブラリ」のルーチンを呼び出します。
サンプルのコンパイル及び実行方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
このソースコードをダウンロード |
PROGRAM g02lafe ! G02LAF Example Program Text ! Mark 23 Release. nAG Copyright 2011. ! .. Use Statements .. USE nag_library, ONLY : g02laf, nag_wp, x04caf ! .. Implicit None Statement .. IMPLICIT NONE ! .. Parameters .. INTEGER, PARAMETER :: nin = 5, nout = 6 ! .. Local Scalars .. INTEGER :: i, ifail, ip, iscale, j, ldc, ldp, & ldt, ldu, ldw, ldx, ldxres, ldy, & ldycv, ldyres, maxfac, mx, my, n CHARACTER (80) :: fmt ! .. Local Arrays .. REAL (KIND=nag_wp), ALLOCATABLE :: c(:,:), p(:,:), t(:,:), u(:,:), & w(:,:), x(:,:), xbar(:), xcv(:), & xres(:,:), xstd(:), y(:,:), ybar(:), & ycv(:,:), yres(:,:), ystd(:) INTEGER, ALLOCATABLE :: isx(:) ! .. Intrinsic Functions .. INTRINSIC count ! .. Executable Statements .. WRITE (nout,*) 'G02LAF Example Program Results' WRITE (nout,*) FLUSH (nout) ! Skip heading in data file READ (nin,*) ! Read in the problem size READ (nin,*) n, mx, my, iscale, maxfac ldx = n ldy = n ALLOCATE (x(ldx,mx),isx(mx),y(ldy,my)) ! Read in data READ (nin,*) (x(i,1:mx),y(i,1:my),i=1,n) ! Read in variable inclusion flags READ (nin,*) (isx(j),j=1,mx) ! Calculate IP ip = count(isx(1:mx)==1) ldxres = n ldyres = n ldw = ip ldp = ip ldt = n ldc = my ldu = n ldycv = maxfac ALLOCATE (xbar(ip),ybar(my),xstd(ip),ystd(my),xres(ldxres,ip), & yres(ldyres,my),w(ldw,maxfac),p(ldp,maxfac),t(ldt,maxfac), & c(ldc,maxfac),u(ldu,maxfac),xcv(maxfac),ycv(ldycv,my)) ! Fit a PLS model ifail = 0 CALL g02laf(n,mx,x,ldx,isx,ip,my,y,ldy,xbar,ybar,iscale,xstd,ystd, & maxfac,xres,ldxres,yres,ldyres,w,ldw,p,ldp,t,ldt,c,ldc,u,ldu,xcv, & ycv,ldycv,ifail) ! Display results ifail = 0 CALL x04caf('General',' ',ip,maxfac,p,ldp,'x-loadings, P',ifail) WRITE (nout,*) FLUSH (nout) ifail = 0 CALL x04caf('General',' ',n,maxfac,t,ldt,'x-scores, T',ifail) WRITE (nout,*) FLUSH (nout) ifail = 0 CALL x04caf('General',' ',my,maxfac,c,ldc,'y-loadings, C',ifail) WRITE (nout,*) FLUSH (nout) ifail = 0 CALL x04caf('General',' ',n,maxfac,u,ldu,'y-scores, U',ifail) WRITE (nout,*) WRITE (nout,*) 'Explained Variance' WRITE (nout,*) ' Model effects Dependent variable(s)' WRITE (fmt,99999) '(', my + 1, '(F12.6,3X))' WRITE (nout,fmt) (xcv(i),ycv(i,1:my),i=1,maxfac) 99999 FORMAT (A,I0,A) END PROGRAM g02lafe