作者supa666w (灰色哲學)
看板Statistics
標題[程式] Hansen2000門檻模型與R
時間Wed May 11 01:18:03 2011
------------------------------------------------------------------------
[軟體程式類別]:R
[程式問題]:程式碼
[軟體熟悉度]:
新手(不到1個月)
[問題敘述]:
小弟利用R來跑Hansen2000年發表的論文裡面的資料
data與code都是作者公佈的 他在code裡面有設定
可在同質變數或是異質變數的假設下跑回歸
code分別是h <-1(假設異質) 或h <-0(假設同質)
在h<-1的情況下我可以跑出完整的報表
可是當我輸入h <-0再輸入回歸式時就出現
錯誤在b1 - ser1 * z : 非調和陣列
可是我只是在h那裡改0或1而已 其他都設定好了也沒變動
不知道哪位前輩可以為小弟解惑?
第一次在板上po文 無理之處煩請見諒
[程式範例]:
# Load procedures and data #
source("C:/r/thr_het.R")
source("c:/r/thr_est.R")
data <- read.table("c:/r/dur_john.dat")
# Exclude missing variables and oil states #
k <- ncol(data)
indx <- as.matrix(1-(data[,5]== -999))%*%matrix(c(1),1,k)
data <- as.matrix(data[indx>0])
data <- matrix(data,nrow=nrow(data)/k,ncol=k)
indx <- as.matrix(1-(data[,6]== -999))%*%matrix(c(1),1,k)
data <- as.matrix(data[indx>0])
data <- matrix(data,nrow=nrow(data)/k,ncol=k)
indx <- as.matrix(1-(data[,10]== -999))%*%matrix(c(1),1,k)
data <- as.matrix(data[indx>0])
data <- matrix(data,nrow=nrow(data)/k,ncol=k)
indx <- as.matrix(1-(data[,11]== -999))%*%matrix(c(1),1,k)
data <- as.matrix(data[indx>0])
data <- matrix(data,nrow=nrow(data)/k,ncol=k)
indx <- as.matrix(data[,2]== 1)%*%matrix(c(1),1,k)
data <- as.matrix(data[indx>0])
data <- matrix(data,nrow=nrow(data)/k,ncol=k)
# Make data transformations #
diff <- log(data[,6])-log(data[,5])
q <- data[,5]
gdp60 <- log(q)
iony <- log(data[,9]/100)
pgro <- log(data[,8]/100+.05)
sch <- log((data[,10])/100)
lit <- data[,11]
dat <- cbind(diff,gdp60,iony,pgro,sch,q,lit)
# Program switches #
rep <- 1000
h <- 1 ------------->問題所在
na <- rbind("GNP_Gwth","GDP_1960","Inv/GDP","Pop_Gwth","School","GDP_1960",
"Literacy")
dum <- rbind(2,3,4,5)
# Estimate First Sample Split, Using Output as Threshold #
qhat1 <- thr_est(dat,na,1,dum,6,h)
---------------------------------------------------------------------------
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.194.244.102
1F:→ gsuper:as.matrix(1-(data[,5]== -999))%*%matrix(c(1),1,k) 05/11 01:30
2F:→ gsuper:這行非常詭異 05/11 01:30
3F:→ gsuper:首先 data[,5] 是向量 , data[,5]== -999 是0,1的向量 05/11 01:31
4F:→ gsuper:1-(data[,5]== -999) 變成 0,-1 的向量 05/11 01:31
5F:→ gsuper:再來是 matrix(c(1),1,k) 是 k個1 05/11 01:32
6F:→ gsuper:所以在 0,-1的向量中 , 找 1 這個數值,sum(indx)恆等於0 05/11 01:33
7F:→ gsuper:我想你會不會是程式碼哪裡貼錯了? 05/11 01:33
8F:→ gsuper:或是非調和陣列的原因 , 出自於 data 中有missing variable 05/11 01:35
9F:→ gsuper:因為第二段程式真的很怪 05/11 01:35
10F:→ supa666w:第二段程式碼的標題是去除Missing variables 05/11 01:40
11F:→ supa666w:所以是沒問題的 我貼的code是作者公佈的 網址如下 05/11 01:41
12F:推 gsuper:我發現我把 %*% 看成 %in% , 我再想想看好了 05/11 01:44
14F:→ supa666w:謝謝你熱心的回覆:) 05/11 01:44
15F:推 Wush978:看起來問題在 thr_est.r 裡面有一段 05/11 10:49
16F:→ Wush978: if (h==0){ 05/11 10:49
17F:→ Wush978:ser1 <- as.matrix(sqrt(diag(mi1)*(t(e1)%*%e1)/(nrow(y1 05/11 10:49
18F:→ Wush978:厄... 第239行 05/11 10:49
19F:→ Wush978:(nrow(y1)-k) 05/11 10:49
20F:→ Wush978:這時候y1 的資料型態已經不再是matrix 05/11 10:50
21F:→ Wush978:nrow(y1) return numeric(0) 05/11 10:50
22F:→ Wush978:邏輯的部份我不細看了, 請自行解決吧 :) 程式的問題在這 05/11 10:50
23F:→ supa666w:謝謝你的回覆 我會試試看的! 05/12 10:49