2014-10-31 64 views
0

問題轉換SAS代碼類似於一個在下面的帖子:要使用PROC nlmixed至R代碼中使用NLME

troubles converting proc nlmixed (SAS) to nlme (R)

+0

您嘗試過哪些R代碼? – Thomas 2014-10-31 08:53:51

+0

有用的編輯方式是在SAS中創建一個樣本數據集,運行分析(不超過20條記錄,說),顯示結果,然後我們就知道我們要拍攝的目標是什麼(特別是如果你給我們也是樣本數據集)。根據我的經驗,與R許可證相比,此處很少有ppl的SAS許可證... – Spacedman 2014-10-31 13:28:04

回答

2

這看起來並不像一個混合模型根本 - 什麼是隨機效應?它看起來像一個有點不尋常的廣義線性模型:我認爲這會做到這一點。

glm((1-p)~d1+d2+d3+d4-1,family=binomial(link="log")) 

(你必須自己翻轉參數的符號)。

Tiwari et al. 2006適合這種類型的模型。

[R相當於:

dd <- read.table("sas_vals.txt",header=TRUE,na.string=".") 
g1 <- glm((1-Y)~d1+d2+d3+d4-1,family=binomial(link="log"),data=dd, 
    start=rep(-0.1,4)) 

這是一個有點困難,可能因微小的數據集的一部分(我認爲這纔是真正的數據的一個子集 - 擬合4個參數21點二進制意見將是一個非常糟糕的主意......)

或者:

library("bbmle") 
g2 <- mle2(Y~dbinom(prob=1-exp(-p),size=1), 
      parameters=list(p~d1+d2+d3+d4-1), 
      start=list(p=0.1), 
      data=dd) 

對數似然表明mle2配合較好,並重新安裝glm符合那些起始值更好的作品:

g3 <- update(g1,start=-coef(g2)) 
g4 <- mle2(Y~dbinom(prob=1-(exp(-p)^exp(b*Treat)),size=1), 
      parameters=list(p~d1+d2+d3+d4-1), 
      start=list(p=0.1,b=0), 
      data=dd) 
summary(g4) 
##  Estimate Std. Error z value Pr(z) 
## p.d1 0.106163 0.088805 1.1955 0.2319 
## p.d2 0.241029 0.178263 1.3521 0.1763 
## p.d3 0.105970 0.113455 0.9340 0.3503 
## p.d4 0.179232 0.189951 0.9436 0.3454 
## b 0.559624 0.740500 0.7557 0.4498 

這似乎與SAS結果相當吻合。

+0

這很難 - 我認爲你不會輕易找到允許廣義非線性混合模型的R包。您可能需要轉到AD Model Builder等系統。你可以問一個單獨的問題,或者詢問'r-sig-mixed-models @ r-project.org' ... – 2014-11-05 12:03:01