luận văn giới thiệu về phương pháp hồi qui phi tham số và mô hình tuyến tính tổng quát. các trường hợp một chiều, hàm Spiline riêng phần trong hồi qui phi tham số.
Trang 1PHU LUCA ,
SO LIEU SU DUNG TRONG LUAN AN
Bộ số liệu 1
Nghiên cứu về công dụng của gió trong việc sản xuất điện, người ta thu được dữ
liệu dòng điện một chiều sinh ra (DC output) từ một cối xay gió tương ứng với vận tốc gió.(A.Peck trang 83)
Bộ số liệu 2
Lượng điện tiêu thụ theo tháng ghi nhận trong hóa đơn của hộ 258/6§- Trần Hưng
Đạo Q1 Tp Hồ chí Minh, nhiệt độ trung bình trong tháng được báo bởi đài quan
sát khí tượng và thủy văn
Lượng điện tiêu thụ (Kwg)_ Nhiệt độ (°C)_ Tháng
76
Trang 2Bộ số liệu 3
Số liệu thu được từ một mỏ ở Cobar, NSW, Australia (Silverman & Green,
trang 145)
-16 -15 17 40 4 13.5
-14 -4 18 40 -61 18
-13 4 17.5 44 -29 19.4
-7 5 19 48 -65 13
-6 -43 22 48 -7 14
-6 -36 24 49 -32 19.5
1 -50 17.4 55 -71 16
2 -39 23 56 -14 16
2 -8 23.5 59 -38 19
2 -51 15 62 7 19
9 -16 2335 62 -3 21:5
9 -42 25 64 -29 22
17 -37 16.5 69 -28 20.5
18 -12 19.5 70 -72 11
24 -57 12 T1 -19 26
25 -29 18.5 78 -53 22
26 -40 18 79 -37 26
32 7 14 84 -52 16
33 -35 19 84 -16 16
Bộ số liệu 4
Nghiên cứu về tỉ lệ chết theo độ tuổi (Green and Silverman, trang 101)
69 422 25840 86 171 1388
71 413 21412 88 86 578
Trang 3PHU LUCB
MOT SO DOAN CHUONG TRINH MINH HOA
SU DUNG NGON NGU MAPLE
I Trường hợp một chiều
Khai báo đầu chương trình
> restart: with(linalg):with(stats):
1.1 Đoạn chương trình con khởi tạo ma trận Q,R
> initH:=proc(t)
> local i:
> fori from | to n-1 do
> h[ï]:=t[i+1]-t[];
> od;
> end:
KHOI TAO Q
> initQ := proc(t,h)
> local Q,i,j,_Q:
> Q:=array(sparse, l n,2 n- 1):
> fori from I ton do
> for j from 2 to n-1 do
> if i-j>=2 or i-j<=-2 then Q[i,j]:=0;
> elif j-i=1 then Q[i,j]:= 1/h[1];
> elifi=j then QI7,j]:= -L/h[j-1]-L/h[];
> od; od;
> _Q:=array(sparse, l n,1 n-2):
> for i from | to n do
> forj from | to n-2 do _Q[i,j]:=Q[i,j+1] odsod;
>_Q:
> end:
78
Trang 4KHỞI TẠO R
> initR := proc(t,h)
> local j,i,Q,P,n;
> n:=nops(t):
> fori from 2 to n-1 do
> for j from 2 to n-1 do
> if i-j>=2 or i-j<=-2 then Q[i,j]:=0;
> else Q{j,j+1]:= h{j]/6;
> Q(j+Lj]:= hUM6;
> od; od;
> P:=array(sparse,1 n-2,1 n-2):
> fori from | to n-2 do
bộ for j from 1 to n-2 do P[i,j]:=Q[i+1,j+1]; od; od;
> P:
> end:
1.2 Đoạn chương trình tìm tham số trơn œ
t là dãy thời điểm quan sát phân biệt có thứ tự
Y là dãy quan sát tương ứng
> h:=initH(t)
> Q:=initQ(t,h):
> R:=initR(t,h):
> K:=evalm(Q &* R^(-1) &* transpose(Q)):
> A:=evalm((1+ alpha * K)^(-1)):
> g:=evalm(A &* Y):
> _gamma:=evalm(R^(-1) &* transpose(Q) &* g ): # véctơ y
> vetA:=sum(A[iJ],T=1 n):
> tuso:= sum((Y{i,1]-g[1,1])^2',7=1 n):
> mauso:=(I-vetA/n)^2:
> GCV := n^(-1)*tuso/mauso: #Hầm Cross-validation tổng quát
> GCVdh := diff(GCV,alpha):GCVdh:=simplify(GCVdh):
> fsolve(GCVdh=0,alpha,maxsols=7); # Tìm nhiều nhất 7 nghiệm
Trang 513
nút
Đoạn chương trình xây dựng và vẽ hàm STNB3 khi biết giá trị tại các nút
và các giá trị đạo hàm cấp hai tại các nút của nó
Thủ tục tạo hàm g
> ham_g:= proc(tl,tr,gl,gr,dl,dr)
> local h,kq:
> hrs tr-th:
> — kq:=((x-tl)*gr+(tr-x)*gl)/h- 1/6*(x-tl)* (tr-x)*
((1+(x-tl)/h) *dr+(1+(tr-x)/h)*dl);
> expand(");
> RETURN(");
> end:
> ga:=table(): ga[1]:=0: ga[n]:=0:
> fori from 2 to n-1 do gafi]:=_gammali-1,1] od
> a:=ag: b := bạ:
> hg:=tableQ:
> g1:=(g[2,!]-g[1,1D/(2]-1[1))-({2]-t[1])*ga[21/6:
> gn:=(g[n,1]-g[n-1, cake -t[n-1])+([n]-t[n-1])*ga[n-1]/6:
> hg[0]:=g[1,1]-([1]-x)*g1l:
> hg[n]:=g[n,!]+(x-t[n])*gn:
> for I from | to n-1 do
>_ hg[il:=ham g(tï],t(i+1],g[i,1].g[i+1,1],ga[il,gali+L:
>od:
> dt:=table():
> m:=nops(k):
> fori from 1 to n-1 do
> dt[i]:=plot(hg[i],x=t[i] t[i+1]): od:
> Ydat:=convert(Y,vector):
> Xdat:=convert(t,vector):
> Ydata:=convert(Ydat,list):
> Xdata:=convert(Xdat,list):
> diem:=statplots[scatter2d](Xdata, Ydata):
80
Trang 6> tap:=convert(dt,set):
> tap:=tap union {diem}:
> plots[display](tap, view=[a b, Ymin Ymax]);
1.4 Dự đoán giá trị mới tại t = tmới
t[0]=a; t[n+l]=b:
for ¡ from 0 to n do
if tmoi >=t[i] and tmoi<=t[i+1] then g_est:=subs(body=nhanho[i],x->body); i:=no-1:
fi: od:
1.5 Thuật toán Speckman cho mô hình bán tham số
X là ma trận có hàng là x¿
> S:=evalm((d+alpha * K)^(-L)):
> si:=evalm(S &* x):
> Yn:=evalm((1-S) &* Y):
> Xn:=evalm((1-S) &* x):
> nghich:=evalm((transpose(Xn) &* Xn)“(-1)):
> beta:= evalm(nghich &* transpose(Xn) &* Yn):
> XB:=evalm(x &* beta):
> TB:=sum(‘XB[i,1]',''=1 n)/n:
> YY := evalm(Y-XB):
> g:=evalm(S &* YY):
1.6 Ham Fisher
Sử dụng hàm liên kết logit cho GLM phi tham số
t là dãy các mốc quan sát
nx là dãy các số cá thể được quan sát
dx là dãy các số cá thể có dấu hiệu cần quan sát
> n:=nops(t):
> Y:=matrix(n,1,[]):
> fori from | ton do Y{i,1]:=dx[i]/nx[i] od:
>alpha:= alpha’:
Trang 7> g:=matrix(n,1,[]):
> for i from | to ndo
>_ g[il]:=log(Y[i11/-Y[11]):
> g[i]:=Y([i1] od:
Tinh véc to z -
> tiep:=1:
> solap:=3:
> while tiep<=solap do
> z:=matrix(n,1,[]):
> fori from 1 ton do
> Z[1,1]:= evalf(g[i,1]+(dx[i]-nx[i]*a[i)/(nx[ï]*q[i]*(1-g[i])):
> od:
> tlep:=tiep+1:
> foritondo
> _w[iI]:=evalf(nx[i]*q[]*#(1-q[i])) od:
> g_new:=evalm(non &* _w &* z);
> `g`:=evalm(g);
> g:=g_new:
> forifrom 1 tondo
> q[ï]:=evalf(exp(g[i,1])/(1+exp(g[i,!])),3): od:
>od:
1.7 Vẽ đường cong có nhánh
đatax[i] lưu các điểm nút của đường cong xử lý
datay[i] luu cdc quan sát của đường cong xử lý, (i=1, ,sốnhánh)
đatax[0] lưu các điểm nút của đường cong kiểm soát
đatay[0] lưu các quan sát của đường cong kiểm soát
> tap:={ }:gluu:=matrix(4, 1,[]):sonhanh:=4:
> alpha:=870:
> for nhanh from 0 to sonhanh do
> tr=datax[nhanh]:
> n:=nops(t):
> Y:=matrix(n,1,datay[nhanh]):
> if nhanh >0 then Y[1,1]:=gluu[nhanh, 1] fi:
82
Trang 8VVVVVV
>
Q:=initQ(t,h):
R:=initR(t,h):
K:=evalm(Q &* R^(-1) &* transpose(Q)):
A:=evalm((I+alpha * K)(-1)):
g:=evalm(A &* Y):
if nhanh >0 then g[1,1]:=gluu[nhanh, 1]; fi:
_gamma:=evalm(R‘(-1) &* transpose(Q) &* g ):
ga:=table():ga[1]:=0: ga[n]:=0:
for i from 2 ton -1 do ga[i]:=_gammaf[i-1,1]
od:
hg:stable():
for i from | to n-1 do
hg[i]:=ham_g(t[i],t{i+1],g[i,1],g[i+1,1],gali],gafit1]):
od:
if nhanh=0 then nhanho:=hg: no:=n:
for j from 1 to sonhanh do
tmoi:=datax[j][1];
fori from 1 to no-1 do
if tmoi >=t[i] and tmoi<=t[i+1] then
g_est:=subs(body=nhanhof[i],x->body); i:=no-1:
fi: od:
gluu[j,1]:=g_est(tmoi):od:
fi:
b:=table(): a:=20: c:=110:
for i from | to n-1 do
b[ï]:=plot(hg[i].x=t[] t[i+1]):
od:
Y dat:=convert(Y,vector):
Xdat:=convert(t,vector):
Y data:=convert(Y dat,list):
Xdata:=convert(Xdat,list):
diem:=statplots[scatter2d](Xdata, Y data):
tap |:=convert(b,set):
tapl:=tap! union {diem}:
tap:=tap union tap1:
> od:
> plots[display](tap,view=[a b,0 4]);
Trang 9II Trường hợp nhiều chiều
H1 Đoạn chương trình tìm tham số trơn
v] là n-véctơ gồm toàn số l
v2 là n-véctơ các tọa x của các quan sát
v3 là n-véctơ các tọa y của các quan sát
>T := matrix([v1,v2,v3]):
> T:= evalm(transpose(T)):t:=matrix([v2,v3]):t:=transpose(t):
> G := QRdecomp(T, Q='F’, rank="'r'):
> F2 := submatrix(F,I n,4 n):
> Fl := submatrix(F,1 n,1 3):
TT:
> mE:=matrix(n,n,[]):
> fori from | tondo
> for j from 1 ton do
> if i<>j then mE[i,j]:= evalf(1/(16*3.14)*norm(evalm(row(t,i)-
row(t,J)),2)^2* log(norm(evalm(row(t,1)-row(t,J)),2)^2)) else mE[i,j]:=0 fi
> fef:=evalm(transpose(F2) &* mE &* F2):
> V:= QRdecomp(L,Q='Ư',rank=r):
> D2:=evalm(transpose(U) &* fef &* U):
> gtrD2:=vector(n-3,[0]):
> for i from 1 to n-3 do gtrD2[i]:=D2[i,i]: od:
= D2:='D2»
> fef:='fef:
> Y l:=matrix([Y]): Y l:=transpose(Y 1):
> W2:=evalm(transpose(F2) &* Y1):
> Z:= evalm(transpose(U) &* W2):Z:=transpose(Z):
> Z:=convert(Z,vector):
> tuso:=sum(‘(gtrD2[j] +alpha)^(-2)*Z]^2',7=1 n-3):
> mauso:=sum('(gtrD2[j] +alpha)(-1)','j'=1 n-3):
> GCV := n*tuso/(mauso)^2:
> GCVdh:= diff(GCV,alpha):
> fsolve(GCVdh,alpha,maxsols=3);
84
Trang 101.2 Đoạn chương trình vẽ mặt MSTN g
tla dãy các điểm có toa dé (x,y)
= Taint lO:
> e:=initE(t):
> mdv:=matrix(n,n,(i,j)->0): for i from 1 to n do mdyv[i,iJ:=1 od:
> m0:=matrix(3,3,(i,j)->0):
> e:= evalm(e+alpha*mdv):
> khoiET:=blockmatrix(2,2,e,transpose(T),T,m0):
> khoiET_1:=evalm(khoiET^(-1)):
> my0:=matrix(3,1,(1,j)->0):
> gt:=blockmatrix(2,1,Y,my0):
> ng:=evalm(khoiET_1 &* gt):
> for i from | to n do del[i,1]:=ng[i,1] od:
> for i from | to 3 do a[i,1]:=ng[i+n,1] od:
> tt:=convert(t,matrix):
> tong := 0:
> for i from | to ndo
ty tong := tong + del[i,1]* 1/(16*Pi)*((x-row/(tt,i)[1])*2+(y-
row(tt,)[2])^2)* log((x- row(t,)[1])^2+(y-row(t,){2])^2)
>od:
> tong :=tong+ a[1,1]+a[2,1]*x+a[2,1]*y:
> g:=subs(body=tong,(x,y)->body):
> plot3d(g,Xmin Xmax,Ymin Y max);
> contourplot (g, Xmin Xmax,Ymin Ymax,contours=19) ;
Trang 11PHU LUCC
NGON NGU MAPLE
Phần này tóm tắt một số hàm, thủ tục của ngôn ngữ Maple sử dụng trong luận án
1 Các phép toán và thủ tục về ma trận
- matrix(m,n,[ ])
- submatrix(A,i p,j q)
- trace(A)
- transpose(A)
- evalm(A)
- evalm(A &* B)
- Id:= alias()
- A^n
- A*(-1)
- bloekmatrix(m,n, )
- QRdecomp(A, Q='Q', rank='r')
- convert(y,matrix)
2 Một số thủ tục về đồ thị
- plot(f, Xị Xz)
- plot3d(g, X1 X2) Yi Y2)
- contourplot(g, x; X2, Y1 Y2)
Tạo ma trận cỡ mxn
Tao ma tran con ti ma tran A tl dong i dén dong p, va từ cột j đến cột q
Vết của ma trận A
Chuyển vị của ma trận A
Hiển thị ma trận A
Nhân hai ma trận A và B
Tạo ma trận đơn vị Id
Ma trận A lũy thừa n
Ma trận nghịch đảo của ma trận A
Tạo ma trận khối gồm mxn ma trận
Phân tích QR ma trận A Trả lại Q là ma trận trong phân tích, r là hạng của A
Chuyển véctơ v thành dạng ma trận
Vẽ hàm f từ x¡ đến x;
Vẽ mặt g trong không gian với x từ x¡ đến
Xa, y từ y¡ đến y›
Vẽ mặt g dạng đường viền
- plots[display](tap,view=[a b,c d])Vẽ tập hợp các đồ thị lên cùng một hệ trục
- statplots[scatter2d](Xdata,Y data) Vẽ các điểm có tọa độ trong Xdata, Ydata
86
Trang 123 Một số thủ tục và cấu trúc lệnh khác
- sum('bt[i]',i'=a b)
- subs(body=bt,x->body)
- diff(f,bien), D(f)
- fsolve(f,bien,a b)
- if bt then <lenh1> else <lenh2> fi
- for ifrom a to b do < > od
- While bt do < > od
- simplify(bt)
- restart
- with(linalg):with(stats):
- Ten:=proc(thams6) end
- A union B
b
Tong > bt{i]
i=a
Chuyển biểu thức bt thành một hàm theo x Đạo hàm f theo bien
Tìm nghệm của f trong khoảng [a,b]
Nếu bt dúng thì làm lệnh 1, ngược lại, làm lệnh 2
Cấu trúc lặp với số vòng lặp xác định
Lặp cho đến khi bt sai
Rút gọn biểu thức bt
Khởi đầu lại tất cả các biến
Sử dụng thư viện đại số tuyến tính linalg và
thư viện thống kê stats
Tạo thủ tục có tên là Ten với các tham số
Hợp hai tập hợp A và B