restart: with(stats): with(statplots): with(plots): with(plottools): with(Maplets): with(Maplets[Elements]): PlotOptions:= proc() local rodzaj; if Maplets:-Tools:-Get(Roz1_1) = 'true' then rodzaj:=1; elif Maplets:-Tools:-Get(Roz1_2) = 'true' then rodzaj:=2; end if; BayesII(Maplets:-Tools:-Get(N::integer),Maplets:-Tools:-Get(K::integer), Maplets:-Tools:-Get(alpha::positive), Maplets:-Tools:-Get(mu0::positive),Maplets:-Tools:-Get(lambda0::positive), Maplets:-Tools:-Get(a::positive),Maplets:-Tools:-Get(b::positive),rodzaj): end proc: BayesowskieII := Maplet( Window[W1](title="Wnioskowanie bayesowskie II ® by P.Koscielniak, J.Ombach and J.Szczepanski", height=600, width=600, menubar=MB1, 'layout' = BL1), MenuBar[MB1]( Menu("Zamknij", MenuItem("Zamknij", Shutdown() ) ), Menu("Parametry", MenuItem("Przywroc", 'onclick'='A3' ), MenuItem("Wyczysc", 'onclick'='A2' ) ) ), BoxLayout[BL1]( background=COLOR(RGB,1,1,4/5), BoxColumn(inset=10, spacing=10, background=COLOR(RGB,1,1,4/5), BoxRow(Label("Licznosc probki N=",'font' = Font("default", bold, 12)), TextField[N]("20",4), Label("Liczba sukcesow K=",'font' = Font("default", bold, 12)), TextField[K]("5",4), Label("alfa=",'font' = Font("default", bold, 12)), TextField[alpha]("0.1",4),Button("Wykonaj", 'onclick'='A1', background=COLOR(RGB,209/255,209/255,83/85), 'font' = Font("default", bold, 12) ) ), BoxRow(RadioButton['Roz1_1']("Beta", 'value'='true','group'='BG1'), Label(" mi0=", 'font' =Font("default", bold, 12)),TextField[mu0]("0.35",4), Label(" lambda0=", 'font' = Font("default", bold, 12)), TextField[lambda0]("20",4),Label(" .")), BoxRow(RadioButton['Roz1_2']("Jednostajny na [a,b]", 'group'='BG1'), Label(" a=", 'font' =Font("default", bold, 12)),TextField[a]("0.2",4),Label(" b=", 'font' =Font("default", bold, 12)),TextField[b]("0.4",4),Label(" .")), BoxRow(Plotter[P1]()) ) ), ButtonGroup['BG1'](), Action['A1'](Evaluate('P1'='PlotOptions')), Action['A2'](SetOption('N'=""),SetOption('K'=""),SetOption('mu0'=""),SetOption('lambda0'=""),SetOption('a'=""),SetOption('b'=""),SetOption('alpha'="")), Action['A3'](SetOption('N'="20"),SetOption('K'="5"),SetOption('mu0'="0.35"),SetOption('lambda0'="20"),SetOption('a'="0.2"),SetOption('b'="0.4"),SetOption('alpha'="0.1")) ): ########################### END OF MAPLET DEFINITION ############################## polow := proc(f,a0,b0,eps) local a, b, s, n; a := a0: b := b0: n := 0: while (abs(b-a) > eps) and (f(a)*f(b) < 0) do s:= (a+b)/2.: if f(a)*f(s) < 0 then b:= s else a := s fi: n := n+1 od; s: end proc: bb := (a,b,p) -> 1/Beta(a,b)*p^(a-1)*(1-p)^(b-1): bbb := (lambda,mu,p) -> bb(lambda*mu,lambda*(1-mu),p): bbeta := proc(mu0,lambda0,n,S,alpha) local mu1, lambda1,B1,puf,d: mu1 := (S + lambda0*mu0)/(n+lambda0): lambda1 := n + lambda0: B1 := x -> int(bbb(lambda1,mu1,p), p = 0..x): d := 0.1*evalf(bbb(lambda0,mu0,mu0)): [polow(x->B1(x) - alpha/2 ,0,1,0.0001),polow(x->1- B1(x) - alpha/2 ,0,1,0.0001)]: puf := plots[display]([curve([ [%[1],0],[%[2],0] ],color = red,thickness=4), curve([ [S/n,0],[S/n,d] ],color = gold,thickness=2)]): plots[display](puf,plot([bbb(lambda0,mu0,p),bbb(lambda1,mu1,p)], p = 0..1,color = [green,red],axes = BOXED,title = cat("lambda_1 = ",convert(lambda1,string),", mi_1 = ", convert(mu1,string)))); end proc: eta := proc(a,b,n,S,alpha) local B1,puf,d,phi0,phi1,m,ss: phi0 := (a,b,p) -> piecewise(a < p and p < b,1/(b-a)): phi1 := p -> piecewise(a < p and p < b, p^S*(1-p)^(n-S)/int(x^S*(1-x)^(n-S),x = a..b)): m := int(phi1(p)*p, p = a..b): ss := sqrt(int(phi1(p)*p^2, p = a..b) - m^2): B1 := x -> int(phi1(p), p = 0..x): [polow(x->B1(x) - alpha/2 ,a,b,0.0001),polow(x->1- B1(x) - alpha/2 ,0,1,0.0001)]: d := 0.1*evalf(phi1((%[1]+%[2])/2)): puf := plots[display]([curve([ [%%[1],0],[%%[2],0] ],color = red,thickness=4), curve([ [S/n,0],[S/n,d] ],color = gold,thickness=2)]): plots[display](puf,plot([phi0(a,b,p),phi1(p)], p = 0..1 ,discont = true,color = [green,red],axes = BOXED,title = cat("Nadzieja = ",convert(m,string),", Odch. stand. = ", convert(ss,string)))); end proc: BayesII:=proc(N,K,alpha,mu0,lambda0,a,b,rodzaj) if rodzaj=1 then bbeta(mu0,lambda0,N,K,alpha): elif rodzaj=2 then eta(a,b,N,K,alpha): end if; end proc: Display(BayesowskieII);