2017-10-18 17 views
1

Je voudrais effectuer une régression logistique sur chaque paire de variables de mon jeu de données, en excluant les paires qui ont déjà été régressées. Toutes les variables sont binomiales. La sortie devrait inclure la paire testée et les statistiques de test. Comme j'ai différents ensembles de données sur lesquels je dois l'utiliser, j'essaie d'écrire un script qui fonctionnera sur différents ensembles de données contenant un certain nombre de variables binomiales.Régression logistique double boucle R

L'ensemble de données échantillon contient 6 variables nommées Var1: Var6 avec 50 observations chacune.

Var1 = c(rbinom(50,1,0.5)) 
Var2 = c(rbinom(50,1,0.25)) 
Var3 = c(rbinom(50,1,0.6)) 
Var4 = c(rbinom(50,1,0.2)) 
Var5 = c(rbinom(50,1,0.3)) 
Var6 = c(rbinom(50,1,0.8)) 

dt = data.table(Var1, Var2, Var3, Var4, Var5, Var6) 
head(dt) 

    Var1 Var2 Var3 Var4 Var5 Var6 
1 1 0 1 1 0 1 
2 1 0 0 0 0 1 
3 0 0 1 0 0 1 
4 1 0 1 0 1 0 
5 1 0 1 1 0 1 
6 0 1 1 1 0 0 

Je voudrais régressent Var1 sur Var2: Var6, Var2 sur Var3: Var6 etc. Le tableau de sortie doit contenir Dependent_var, Independent_var, Estimation, Stat, P_Value.

J'ai fait une table de sortie:

n = ncol(dt)  
output <- data.table(matrix(nrow=(n*(n+1))/2, ncol=5)) 
names(output) = c("Dependent_var", "Independent_var", "Estimate", "Stat", "P_value") 
head(output) 

Dependent_var Independent_var Estimate Stat P_value 
1:   NA    NA  NA   NA  NA 
2:   NA    NA  NA   NA  NA 
3:   NA    NA  NA   NA  NA 
4:   NA    NA  NA   NA  NA 
5:   NA    NA  NA   NA  NA 
6:   NA    NA  NA   NA  NA 

Maintenant, je ne suis pas sûr de savoir comment faire une boucle avec une variable tout et boucle sur tous ... Et puis remplir correctement la table de sortie. .. Toute aide est fortement appréciée!

Répondre

1

J'ébauché une procédure simple, voir si elle aide:

my_func <- function(x) { 
    for (i in 1:ncol(x)) { 
    fit <- glm(x[, i] ~ ., data = x, family = binomial(link = "logit")) 
    print(summary(fit)) 
    } 
} 

Le paramètre x est une trame de données.

+0

Merci pour votre réponse rapide @jsb! – Panda

+0

Il semble que je fasse quelque chose de mal ... J'ai donc transformé mon dt en un dataframe et j'ai ensuite essayé de lancer la boucle. Je ne reçois pas de données, comment puis-je le chatouiller? p.s. Désolé, je n'arrive pas à obtenir le code correctement formaté dans la section des commentaires. 'dt <- data.frame (dt) my_func <- function (dt) { for (i in 1: Ncol (dt)). { fit <- glm (dt [i] ~, = données dt, family = binomial (link = "logit")) impression (résumé (en forme))} } ' – Panda