楼主: 文雅13
18840 124

[问答] R2winbugs到出数据时出现错误 [推广有奖]

81
epoh 发表于 2013-1-19 16:13:42
文雅13 发表于 2013-1-19 14:08
数据有问题,希望您能帮忙
这还是少了个function Mv()
你没一并根作者要吗?
# Mv is a function written in the WinBUGS development
# interface for computing smooth function estimates
# with low-rank thin-plate bases
betasex<-Mv(a1[1:2], d1[1:9], knotD[],OMEGAu[],v)

82
文雅13 发表于 2013-1-19 16:36:17
程序是正确的,就是data loading时有问题

83
epoh 发表于 2013-1-19 20:48:19
文雅13 发表于 2013-1-19 16:36
程序是正确的,就是data loading时有问题
应该少一个.odc file
类似底下ObservedPlus.odc
定义出function

(*1*) MODULE WBDevObservedPlus;
IMPORT
WBDevVector,
Math;
TYPE
Function = POINTER TO RECORD (WBDevVector.Node) END;
Factory = POINTER TO RECORD (WBDevVector.Factory)END;
VAR
fact-: WBDevVector.Factory;
PROCEDURE (func: Function) DeclareArgTypes
(OUT args: ARRAY OF CHAR);
BEGIN
(*2*) args := "ss";
END DeclareArgTypes;
PROCEDURE (func: Function) Evaluate
(OUT values: ARRAY OF REAL);
CONST
(*3*) in = 0; ik = 1;
VAR
(*4*) n,
k: INTEGER;

BEGIN
(*5*) n := SHORT(ENTIER(func.arguments[in][0].Value()));
k := SHORT(ENTIER(func.arguments[ik][0].Value()));
(*6*) n:=n+10;
k:=k+1;
values[0] := n;
values[1] := k;
END Evaluate;
PROCEDURE (f: Factory) New (option: INTEGER): Function;
VAR
func: Function;
BEGIN
NEW(func); func.Initialize; RETURN func;
END New;
PROCEDURE Install*;
BEGIN
WBDevVector.Install(fact);
END Install;
PROCEDURE Init;
VAR
f: Factory;
BEGIN
NEW(f); fact := f;
END Init;
BEGIN
Init;
(*7*) END WBDevObservedPlus.

84
文雅13 发表于 2013-1-19 21:06:17
epoh 发表于 2013-1-19 20:48
应该少一个.odc file
类似底下ObservedPlus.odc
定义出function
有点糊涂了。意思是还缺个函数?

85
epoh 发表于 2013-1-19 21:22:54
文雅13 发表于 2013-1-19 21:06
有点糊涂了。意思是还缺个函数?
嗯,没错

86
文雅13 发表于 2013-1-19 21:25:46
epoh 发表于 2013-1-19 21:22
嗯,没错
什么函数

87
epoh 发表于 2013-1-19 21:55:22
文雅13 发表于 2013-1-19 21:25
什么函数
你自己看看就知道了
  http://bugsmodellibrary.googleco ... ckBoxWinBUGS/WBDev/

88
文雅13 发表于 2013-1-19 22:01:14
epoh 发表于 2013-1-19 21:55
你自己看看就知道了
  http://bugsmodellibrary.googlecode.com/svn-history/r2/trunk/BUGSModelLibrary ...
老师你直接告我是个什么函数,我找找看看有没有。

89
epoh 发表于 2013-1-19 23:06:40
文雅13 发表于 2013-1-19 22:01
老师你直接告我是个什么函数,我找找看看有没有。
函数主要写在Mv.odc

90
epoh 发表于 2013-1-20 15:55:09
文雅13 发表于 2013-1-19 22:01
老师你直接告我是个什么函数,我找找看看有没有。
就以Minmax而言,有三个文件
  code file   : Minmax.ocf
  document  : Minmax.odc (最重要)
  symbol file : Minmax.osf
你没有给出Mv.odc,你自己可以比对一下
####
Minmax.ocf

MODULE WBDevMinmax
processor: 80x86
meta size: 432
desc size: 492
code size: 356
data size: 4
compiled: 2013/1/20  ¤U¤&Egrave; 12:44:15
5 imports:
        WBDevVector         Factory, Factory^, Install, Node, Node^
        GraphNodes         Node^
        GraphVector        
        GraphLogical        
        Math        

####
Minmax.odc
(*1*)        MODULE WBDevMinmax;

                IMPORT
                        WBDevVector,
(*2*)                        Math;
                        
                TYPE
                        Function = POINTER TO RECORD (WBDevVector.Node) END;
                        Factory = POINTER TO RECORD (WBDevVector.Factory) END;
                        
                VAR
                        fact-: WBDevVector.Factory;
                        
(*3*)                PROCEDURE (func: Function) DeclareArgTypes (OUT args: ARRAY OF CHAR);
(*4*)                BEGIN
(*5*)                        args := "v";
(*6*)                END DeclareArgTypes;
               
(*7*)                PROCEDURE (func: Function) Evaluate (OUT values: ARRAY OF REAL);
(*10*)                VAR
(*11*)                        len, i: INTEGER;
                        min, max: REAL;
(*13*)                BEGIN
(*14*)                        len := LEN(func.arguments[0]);
                        min := func.arguments[0][0].Value();
                        max := func.arguments[0][0].Value();
(*19*)                        i := 1;
(*20*)                        WHILE i < len DO;
                                min := MIN(min, func.arguments[0].Value());
                                max := MAX(max, func.arguments[0].Value());
(*31*)                                INC(i);
(*32*)                        END;
                        values[0] := min; values[1] := max
(*33*)                END Evaluate;
               
                PROCEDURE (f: Factory) New (option: INTEGER): Function;
                VAR
                        func: Function;
                BEGIN
                        NEW(func); func.Initialize; RETURN func;
                END New;
               
                PROCEDURE Install*;
                BEGIN
                        WBDevVector.Install(fact);
                END Install;
               
                PROCEDURE Init;
                VAR
                        f: Factory;
                BEGIN
                        NEW(f); fact := f;
                END Init;
               
        BEGIN
                Init;
(*1*)        END WBDevMinmax.
####
Minmax.osf

DEFINITION WBDevMv;
        IMPORT WBDevScalar;
        VAR
                fact-: WBDevScalar.Factory;

        PROCEDURE Install;
END WBDevMv.

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 14:02