2015-12-01 5 views
2

Привета StackOverflow Пользователей,Runnng ой функция для каждой строки матрицы

У меня возникли проблемы при запуске функции ой в R на каждую строке в моих матрицах, и я бы очень хотелось, если у меня не был, чтобы запустить его вручную 1000 раз. Итак, в основном у меня есть 2 матрицы со строками (1: 1000) и cols (1: 100), и я хотел бы запустить lm-функцию для каждой строки в x для репрезентативной строки по y.

Мой код:

sigmaianden=1 
Beta=1 
set.seed(seed=20) 
xi=rnorm(100) 
capn=100 
capm=1000 
xi.1=matrix(c(rep(c(xi),each=capm)),nrow=capm,ncol=capn) 
epsiloni.1=NULL 
for (i in 1:100000) { 
epsiloni.1[i]=rnorm(1,0,sigmaianden*xi.1[i]^2) 
} 
epsiloni.11=matrix(epsiloni.1,nrow=1000,ncol=100) 
yi.1=Beta*xi.1+epsiloni.11 

Лично я думал, что-то вроде:

for (i in 1:1000){ 
model[i]=lm(yi.1[i,1:100]~xi.1[i,1:100]) 
} 

Но это даже не дает мне результат. Буду благодарен за любую помощь.

ответ

1

Вы близко. lm возвращает list, так что то, что вы хотите сделать, это поместить свои модели в другой список:

models <- vector("list", 1000) 
for (i in 1:1000) 
    models[[i]] <- lm(yi.1[i,1:100] ~ xi.1[i,1:100]) 

Тогда вы можете повторять снова и извлекать resid(models[[i]]) или coef(models[[i]]) или что-нибудь еще. Однако теперь models довольно удобно использовать, так что вместо петель for вы можете использовать только, например.

R <- sapply(models, resid) 
dim(R) 
[1] 100 1000 

или

C <- sapply(models, coef) 
dim(C) 
[1] 2 1000 
+0

Wow хорошо, я пошел спать после того, как думать об этом, как час или около того, и проснулся к этому. Приветственный помощник. Поэтому, чтобы я мог вынуть все остатки, оценки и стандартное отклонение, мне нужно запустить цикл for с каждой моделью [[i]] (сводка для остатков) правильно? – Witte

+0

@Witte, это правильно – Julius

Смежные вопросы