Keyword: 特異値分解, 部分最小二乗, PLS, 回帰
概要
本サンプルは特異値分解を用いた部分最小二乗(PLS)回帰の計算を行うFortranによるサンプルプログラムです。 本サンプルは以下に示されるデータについて部分最小二乗(PLS)回帰の計算を行います。
※本サンプルはnAG Fortranライブラリに含まれるルーチン g02laf() のExampleコードです。本サンプル及びルーチンの詳細情報は g02laf のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで
入力データ
(本ルーチンの詳細はg02laf のマニュアルページを参照)| このデータをダウンロード |
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 のマニュアルページを参照)| この出力例をダウンロード |
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ライブラリ」のルーチンを呼び出します。
サンプルのコンパイル及び実行方法
| このソースコードをダウンロード |
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
