2017-10-15 2 views
0

Pardonnez-moi, je suis très nouveau à ce sujet. Si quelqu'un peut m'aider ou me diriger vers une ressource pour aider, je serais très reconnaissant:Exécution de fonctions automatisées sur plusieurs colonnes dans R

J'ai une table de données avec 150 000 observations de 300 variables, un certain résultat/symptôme (variables dépendantes) et une certaine entrée (variables indépendantes). Pour chaque symptôme, je veux des statistiques descriptives, et les résultats d'un test du chi-carré pour l'association à chaque entrée.

Pour les statistiques descriptives, j'ai réussi à faire cela en faisant une matrice des variables de résultat appelée «symptom.matrix» et utilisé «apply».

Desc.stats<-matrix(c(apply(symptom.matrix,2,sum), 
        apply(symptom.matrix,2,mean), 
        apply(symptom.matrix,2,function(x) 
          {return(sqrt((mean(x)*(1-mean(x)))/length(x)))})), 
        ncol=3,         
        dimnames=list(c(...), 
        c("N","prev","s.e."))); Desc.stats 

Pour obtenir le chi carré, j'utilise le chisq.test sur des paires individuelles de résultat et l'entrée de la manière suivante, mais je ne vois pas comment appliquer cela au symptom.matrix

result1<-(chisq.test(symptom1,input1)); 
print (c(result1$statistic, result1$p.value)) 

Comment puis-je mettre à l'échelle cela pour travailler sur le symptom.matrix? Est-il possible d'utiliser le chisq.test, ou serais-je mieux de revenir aux bases pour écrire une fonction pour les statistiques moi-même?

+0

S'il vous plaît montrer comment * symptômes * et * input * sont identifiés dans le tableau de données. Sont-ils préfixés/suffixés? Peut-être même afficher l'ensemble de données ou la publication d'origine pour que nous puissions l'exécuter: 'dput (head (mydatatable))' – Parfait

+0

_symptoms_ et _input_ ne sont pas identifiés comme tels dans la table de données. J'ai donc appelé les symptômes de la table de données ainsi: 'symptom.matrix <-with (mydatatable, matrice (c (Vision, Voix, Del, Paranoia, ...), ncol = 8))' –

+0

Et qu'en est-il des * entrées *? – Parfait

Répondre

0

lapply appels imbriqués Pensez à itérer chaque symptôme à travers toutes les combinaisons de entrée colonnes avec le retour d'une liste imbriquée. Et les objets d'entrée à lapply seraient la fraction de toutes les colonnes symptôme et toutes les colonnes entrées à partir de données d'origine.

Puisque OP ne fournit pas un échantillon de données réelles, ci-dessous montre avec des données aléatoires:

set.seed(788) 
symptoms <- sapply(1:7, function(i,s) LETTERS[sample(26, 26, replace=TRUE)[s]], 1:26) 
colnames(symptoms) <- c("Vision.Symptom","Voice.Symptom","Delofreference.Symptom","Paranoia.Symptom", 
         "VisionorVoice.Symptom","Delusion.Symptom","UEAny.Symptom") 

set.seed(992) 
inputs <- sapply(1:7, function(i,s) LETTERS[sample(26, 26, replace=TRUE)[s]], 1:26) 
colnames(inputs) <- c("Vision.Input","Voice.Input","Delofreference.Input","Paranoia.Input", 
         "VisionorVoice.Input","Delusion.Input","UEAny.Input") 

df <- data.frame(symptoms, inputs) 

# LIST OF 7 ITEMS, EACH NESTED WITH THE 7 INPUTS 
# CHANGE grep() to c() OF ACTUAL COLUMN NAMES 
chi_sq_list <- lapply(df[grep("\\.Symptom", names(df))], function(s) 
         lapply(df[grep("\\.Input", names(df))], function(i) chisq.test(s,i))) 

sortie(de premier élément de la liste)

chi_sq_list$Vision.Symptom 

$Vision.Input 

    Pearson's Chi-squared test 

data: s and i 
X-squared = 241.22, df = 240, p-value = 0.4657 


$Voice.Input 

    Pearson's Chi-squared test 

data: s and i 
X-squared = 247, df = 240, p-value = 0.3644 


$Delofreference.Input 

    Pearson's Chi-squared test 

data: s and i 
X-squared = 289.25, df = 256, p-value = 0.07502 


$Paranoia.Input 

    Pearson's Chi-squared test 

data: s and i 
X-squared = 322.11, df = 288, p-value = 0.08131 


$VisionorVoice.Input 

    Pearson's Chi-squared test 

data: s and i 
X-squared = 215.22, df = 208, p-value = 0.351 


$Delusion.Input 

    Pearson's Chi-squared test 

data: s and i 
X-squared = 218.47, df = 224, p-value = 0.5916 


$UEAny.Input 

    Pearson's Chi-squared test 

data: s and i 
X-squared = 254.22, df = 256, p-value = 0.5196