2013-11-26 76 views
2

我必須完成以下工作:生成一個隨機矩陣,應用一個線性模型,然後洗牌矩陣,應用線性模型,然後再次洗牌矩陣並應用一個線性模型.... ,20次,每次我必須保存p值。這項工作必須完成1000次。我寫了下面這段代碼,但我無法在for循環中運行for循環。這裏是我寫的:置換測試的循環

B=1000 
n=100 
b =20 
my.seed=1  
my.intercept<-0  
my.slope<-1  
res <- data.frame(matrix(ncol = 4, nrow = B))  
colnames(res) <- c("Estimate", "St_Err", "t_val", "P_val")  

for (i in 1:B)  
    for (j in 1:b){ 
     x1=rbinom(n, 1, 0.5)  
     e=rnorm(n, 1, 1)  
     my_model=lm(y~x1)  
     y <- true.intercept + true.slope*x1+e  
     res[i,] <- data.frame(summary(lm(y ~x1))$coefficients) 
    } 
}  

我不知道如何保存的結果爲週期對J和然後在最後保存,以便在總投資1000種排列的20個置換的P值有最後一個數據幀有20行(因爲初始矩陣是混洗20次)和1000列(因爲排列是1000)

任何人都可以幫助我嗎?

+0

您的第一個for循環缺少開放{方括號。 – Thomas

+0

[bootstrap](http://cran.r-project.org/web/packages/bootstrap/bootstrap.pdf)? – zx8754

+0

@Thomas或刪除最後一個關閉的'}'括號。 – zx8754

回答

1

所以你想要一個輸出矩陣p_vals[i,j]?然後,而不是res[i,]<- stuff,你可以從summary.lm打印方法偷一些代碼:

[print " p-value:",] format.pval(pf(x$fstatistic[1L], 
       x$fstatistic[2L], x$fstatistic[3L], lower.tail = FALSE) 

其中pf從彙總抓取數據(LM(ETC))$ fstatistic

,所以你會做

fstats<- summary(lm(y ~x1))$fstatistic 
pvals[i,j]<- pf(fstats[1L], fstats[2L], fstats[3L], lower.tail = FALSE)