2016-02-18 5 views
-1

Я хотел бы знать, как я могу циклически регрессировать n раз и каждый раз с помощью другого набора переменных извлекать data.frame, где каждый столбец является регрессией и каждая строка представляет собой переменную.Как извлечь коэффициенты выходов из линейной регрессии с помощью цикла

В моем случае у меня есть data.frame из:

dt_deals <- data.frame(Premium=c(1,3,4,5),Liquidity=c(0.2,0.3,1.5,0.8),Leverage=c(1,3,0.5,0.7)) 

Но у меня есть еще одна пояснительная фиктивная переменная называется Высокомерие, что является продуктом биномиального распределения, с 0,25 среднего. Как что:

n <- 10 
hubris_dataset <- data.frame(replicate(n, rbinom(4,1,0.25)) 

В этом смысле то, что мне нужно сделать п моделирование высокомерия, так что я могу, сделать п регрессионный каждый с Diferent набором случайных биномиального распределения и выход каждого distribuition мне нужно поместить в data.frame, как объяснено.

До сих пор я мог бы достичь этого:

# define n as the number of simulations i want 
n=10 
# define beta as a data.frame to put every coefiecient from the lm regression 
beta=NULL 

for(i in 1:n) { 
    dt_deals2 <- dt_deals 
    beta[[i]] <- coef(lm(dt_deals$Premium ~ dt_deals$Liquidity + dt_deals$Leverage + hubris_dataset[,i], data=dt_deals2)) 
    beta <- cbind(reg$coefficients) 
} 

Но этот способ это только генерировать первый набор коэффициентов, а не сделать еще десять колонн для data.frame

+1

просто использовать 'replicate' – MichaelChirico

+0

Ваш код запутанный и запутанный. Цикл for присваивает значениям коэффициентов 'beta [[i]]'. Подмножество с двойной скобкой используется для объектов 'list', а не векторов, созданных с помощью' beta = NULL'. –

+0

Вы также пишете все с помощью 'beta <- cbind (reg $ rates)'. Таким образом, вы назначаете значения в 'beta [[i]] <-', тогда вы переписываете все это в следующей строке. –

ответ

1

@jogo отдавания идея изменить метод for-loop и использовать sapply и изменить объект beta на list(). Это был результат:

beta <- sapply(1:n, function(i) coef(lm(Premium ~ Liquidity +Leverage+ hubris_dataset[,i], data=dt_deals2))) 

И это сработало

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