2016-10-19 5 views
0

У меня есть матрица и векторКак случайным образом обменять столбцы внутри функции?

set.seed(1) # I added this to have a reproducible values 
X <- matrix(rexp(200, rate=.1), ncol=20) 
Y <- matrix(rexp(10, rate=.1), ncol=1) 

Затем я случайным образом выбрать 5 из столбцов X Как @Laterow предложил # выбрать 5 случайных столбцы из X температуры < - образец (Ncol (Х), 5) X1 < - X [, температура]

Тогда я объединить X1 с моим Y

mydata <- data.frame(cbind(Y,X1)) 

Тогда я построить регрессию

fit = lm(Y~.,data=mydata) 

Тогда я получить SD

se <- sqrt(diag(vcov(fit))) 

Теперь то, что я хочу сделать, это изменить столбец с наибольшим таковой со всеми остальными столбцами мой оригинал X и держите его самым низким se

, например, если вы бежите выше, в се, у меня есть X3 с самой большой стоимостью

  X3 
7.348126e-18 

так что я изменить столбец 3 из X1 со всех других столбцов, кроме себя от X

Теперь я хочу автоматически изменять столбец 3 со всеми другими столбцами кроме себя от X

если вы делаете

> temp 
#[1] 18 4 9 8 10 

это столбец X1 3 изменен все столбцы X, кроме 9

+1

Итак ... Почему бы вам просто не хранить информацию, например? 'temp <- sample (ncol (X), 5)', чтобы вы могли позже проверить, в каких столбцах они были?(edit: а затем, очевидно, измените код на 'X [, temp]') – Laterow

+0

@Laterow Спасибо Я отредактировал свой вопрос сейчас – nik

ответ

0

Это очень трудно понять, что вы хотите для того чтобы достигнуть

  1. «кроме 9» не может включать в себя 1 колонку дважды в лм (без transormation) -collinearity. Поэтому вам нужно изменить X3 на все столбцы, кроме уже использованных.

Но, может быть, что:

temp <- c(18 , 4 , 9, 8, 10) # your sample 
X1 <- X[,temp] 
mydata <- data.frame(cbind(Y,X1)) 
fit = lm(Y~.,data=mydata) 
worst_se=which.max(summary(fit)$coefficients[-1,2]) # find max se without interceprt 

Xm=X[,-temp] # all not used X 

res2=lapply(1:ncol(Xm),function(i){ 
    mydata[[worst_se]] <- Xm[ , i] 
    summary(lm(Y~.,data=mydata))$coefficients[names(worst_se),"Std. Error"] # return se of changed X3 
}) 

Вы можете быть должны видеть, о ?step, который используется для того чтобы достигнуть "лучшего" модель или here (вы задача очень подобное с ней)

PS

Высшее se не означает худший коэф. (есть некоторые тесты для проверки значимости коэффикса в статистике)

+0

Можно ли сделать это автоматически с самого начала? до расчета темпа? также какой тип теста, когда вы говорите «есть какой-то тест для проверки значимости коэффициента в статистике» – nik

+0

Вы читаете о «шаге» и о том, что он делает? Например, 't-test' может использоваться для проверки значимости. ('p-value' показывает значимость коэффа). вам нужно сказать словами, что вы хотите достичь (найти лучшую модель с 5 коэф. из матрицы?) (как насчет коллинеарности и других характеристик?) – Batanichek

+0

Я хочу найти, какая переменная из этих 5 менее важна, а затем меняю ее с помощью X один за другим и держите лучше, а вместо этого – nik

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