将 SAS 代码转换为 R 代码

Converting SAS code to R code

我一直在尝试转换计算简单回归和混合模型的 SAS 代码。我已经实现了转换简单的回归,但是当涉及到混合模型时,我的试验失败了。下面显示的SAS代码是我尝试转换的代码

"parc" "m" "dap" "ht"分别是dataset的header labes.

data algoritmo ;
input parc m dap ht ;
lnH = LOG(ht-1.3);
lnD = LOG(dap) ;
cards ;
8   1   24.3    26.7
8   1   29.9    30.7
8   1   32.6    31.7
8   1   35.9    33.7
8   1   36.5    32.5
22  2   22.3    21.0
22  2   26.9    23.1
22  2   26.9    20.5
22  2   32.4    21.5
22  2   33.5    25.0
85  3   33.6    33.5
85  3   36.0    33.0
85  3   37.0    35.0
85  3   40.8    35.0

;
run ;

/* Simpre Regression Model */
PROC REG DATA=algoritmo ;
model lnH = lnD ;
output out=out p=pred ;
run ; quit ;

/* Mixed-Effects Model */
PROC MIXED DATA=algoritmo COVTEST METHOD=REML  ;
TITLE ' lnH = (B0+bok)+(B1+b1k)*lnd ' ;
MODEL lnH = lnD / S OUTPM=outpm OUTP=outp ;
RANDOM intercept lnD /SUBJECT=m s G TYPE=UN ;
RUN ;

这是我转换的部分代码。这部分代码非常适合我。

data1= read.table(file.choose(), header=T, sep=",")
attach(data1)
lnH=log(ht-1.3)
lnD =log(dap)
data2 = cbind(data1,lnH, lnD)
#Simple Linear Model
model1 = lm(lnH~lnD,data=data2)
summary(model1)

但剩下的我卡住了。

model2 = lme(lnH~lnD ,data=data2,random=~1|lnD / m, method= "REML",  weights=varPower(0.2,form=~dap))
summary(model2)

在 Roland 的帮助下,将 random=~1|lnD 替换为 random=~lnD|m 效果很好。