2017-10-15 12 views
0

私を許して、私は非常にこれに新しいです。多くの列で自動機能を実行するR

私は、300の変数、いくつかの結果/症状(従属変数)といくつかの入力(独立変数)の150,000の観測値を持つデータテーブルを持っています。 )。それぞれの症状について、説明的な統計と、各入力への関連性のカイ2乗検定の結果が必要です。

わかりやすい統計情報については、「symptom.matrix」という結果変数のマトリックスを作成し、「適用」を使用してこれを管理しました。

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 

カイ二乗を得るために、私は次のように成果と入力の個々のペアにchisq.testを使用しますが、私はsymptom.matrix

result1<-(chisq.test(symptom1,input1)); 
print (c(result1$statistic, result1$p.value)) 
にこれを適用する方法を見ることができません

これは、symptom.matrixで動作するようにどのようにスケールアップするのですか? chisq.testを使用することは可能ですか?それとも、自分自身の統計情報を作成するための基礎に戻るのが良いでしょうか?

+0

方法*症状を提示してください*と* input *はデータテーブルで識別されます。それらは接頭辞/接尾辞ですか? 'dput(head(mydatatable))' – Parfait

+0

_symptoms_と_input_は、データテーブルでそのように識別されません。そこで、私はデータテーブルから症状を呼んだ: 'symptom.matrix <-with(mydatatable、matrix(c、Vision、Voice、Del、Paranoia、...)、ncol = 8))' –

+0

*? – Parfait

答えて

0

は、ネストされたリストのリターンで入力列のすべての組み合わせを挟ん症状を反復するためにlapplyの呼び出しを入れ子に考えてみましょう。 lapplyへの入力オブジェクトは、すべての症状の列と、すべての入力の元のデータフレームの列に分割されます。

OPは以下の、実際のデータのサンプルを提供していないので、ランダムなデータを示しています(最初のリスト項目の)

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))) 

出力

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 
関連する問題