[程式] Hansen2000門檻模型與R

看板Statistics作者 (灰色哲學)時間14年前 (2011/05/11 01:18), 編輯推噓2(2021)
留言23則, 3人參與, 最新討論串1/1
------------------------------------------------------------------------ [軟體程式類別]: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

05/11 01:30, , 1F
as.matrix(1-(data[,5]== -999))%*%matrix(c(1),1,k)
05/11 01:30, 1F

05/11 01:30, , 2F
這行非常詭異
05/11 01:30, 2F

05/11 01:31, , 3F
首先 data[,5] 是向量 , data[,5]== -999 是0,1的向量
05/11 01:31, 3F

05/11 01:31, , 4F
1-(data[,5]== -999) 變成 0,-1 的向量
05/11 01:31, 4F

05/11 01:32, , 5F
再來是 matrix(c(1),1,k) 是 k個1
05/11 01:32, 5F

05/11 01:33, , 6F
所以在 0,-1的向量中 , 找 1 這個數值,sum(indx)恆等於0
05/11 01:33, 6F

05/11 01:33, , 7F
我想你會不會是程式碼哪裡貼錯了?
05/11 01:33, 7F

05/11 01:35, , 8F
或是非調和陣列的原因 , 出自於 data 中有missing variable
05/11 01:35, 8F

05/11 01:35, , 9F
因為第二段程式真的很怪
05/11 01:35, 9F

05/11 01:40, , 10F
第二段程式碼的標題是去除Missing variables
05/11 01:40, 10F

05/11 01:41, , 11F
所以是沒問題的 我貼的code是作者公佈的 網址如下
05/11 01:41, 11F

05/11 01:44, , 12F
我發現我把 %*% 看成 %in% , 我再想想看好了
05/11 01:44, 12F

05/11 01:44, , 13F
05/11 01:44, 13F

05/11 01:44, , 14F
謝謝你熱心的回覆:)
05/11 01:44, 14F

05/11 10:49, , 15F
看起來問題在 thr_est.r 裡面有一段
05/11 10:49, 15F

05/11 10:49, , 16F
if (h==0){
05/11 10:49, 16F

05/11 10:49, , 17F
ser1 <- as.matrix(sqrt(diag(mi1)*(t(e1)%*%e1)/(nrow(y1
05/11 10:49, 17F

05/11 10:49, , 18F
厄... 第239行
05/11 10:49, 18F

05/11 10:49, , 19F
(nrow(y1)-k)
05/11 10:49, 19F

05/11 10:50, , 20F
這時候y1 的資料型態已經不再是matrix
05/11 10:50, 20F

05/11 10:50, , 21F
nrow(y1) return numeric(0)
05/11 10:50, 21F

05/11 10:50, , 22F
邏輯的部份我不細看了, 請自行解決吧 :) 程式的問題在這
05/11 10:50, 22F

05/12 10:49, , 23F
謝謝你的回覆 我會試試看的!
05/12 10:49, 23F
文章代碼(AID): #1DoNDE_V (Statistics)