2013-11-26 2 views
2

Мне нужно выполнить следующую работу: создать случайную матрицу, применить линейную модель, затем перетасовать матрицу, применить линейную модель, затем снова перетасовать матрицу и применить линейную модель, .... , в 20 раз и каждый раз мне нужно сохранить значение p. Эта работа должна выполняться в 1000 раз. Я написал следующий фрагмент кода, но я не могу запустить цикл 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, а затем сохранить р значения 20 перестановок на полных 1000 перестановок, чтобы в конце концов, чтобы иметь наконец, data.frame с 20 строками (из-за начальной матрицы перетасовывается 20 раз) и 1000 столбцов (потому что перестановки 1000)

Может ли кто-нибудь мне помочь?

+0

В вашей первой петле отсутствует отверстие {скобка. – 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 захватывает данные из резюме (лм (и т.д.)) $ fstatistic

так что вы бы

fstats<- summary(lm(y ~x1))$fstatistic 
pvals[i,j]<- pf(fstats[1L], fstats[2L], fstats[3L], lower.tail = FALSE) 
Смежные вопросы