2014-07-24 32 views
1

我正在嘗試使用R來運行學生t檢驗和卡方檢驗與大型數據集。由於我對R相當陌生,因此我的經驗不足使我在自己的代碼中取得了很大的成功。循環學生T檢驗和Chi-Squared中缺失數據R

兩組數據有丟失的數據,並期待這樣的:

AA    assayX activity  assayY1 activity  assayY2 activity 
    chemical 1   TRUE      0    12.2  
    chemical 2   TRUE          0 
    chemical 3          45.2    35.6 
    chemical 4   FALSE      0    0 

AB    assayX activity  assayY1 activity  assayY2 activity 
chemical 1   TRUE      FALSE    TRUE 
chemical 2   TRUE           FALSE 
chemical 3          TRUE    TRUE 
chemical 4   FALSE      FALSE    FALSE 

既然是我想創建一個代碼,我可以比較assayX所有assayYs大型數據集。我希望爲第一個數據集創建一個學生t檢驗循環,併爲卡方循環創建第二個數據集。我以前曾經成功地爲相關性分析創建了一個循環代碼,所以我根據這個想法創建了我的代碼。

x<- na.omit(mydata1[, c(assayX)]) 
y<- na.omit(mydata1[, c(assayY1:assayYend)]) 
lapply(y, function(x)t.test(y~x)) 

x<-na.omit(mydata2[, c(assayX)]) 
y<- na.omit(mydata2[, c(assayY1:assayYend)] 
lapply(y, x=x, chisq.test) 

問題與第一個代碼是: 無效變量y

問題與第二代碼: x和y必須具有相同的長度

我已經在這裏做了小的調整和在那裏,並且剛剛得到不同類型的錯誤,例如不夠「y」觀察等等。我一直主要使用這個網站來弄清楚R是如何工作的,所以我希望你們能爲新人提供一個聰明的小解決方案。

回答

1

經過很長時間並在R中獲得經驗,我可以回答我自己的問題。首先是將數據文件更改爲空白。

df1 <- read.csv("data2.csv", header=T, na.strings=c("","NA")) 

那麼對於student.t

df1.p= rep(NA, 418) 
for (i in length(df1$Assays)){ 
test= t.test(df1[,c(i)]~df1$assay.activity) 
current.p.val= test$p.value 
p.df1[i]=current.p.val 
} 

然後添加皮爾森或卡平方(實際上並不適合這個數據集,但正如一位前)

df1.p.2= rep(NA, length(df1$Assays)) 
df1.r.2= rep(NA, length(df1$Assays)) 
for (i in length(df1$Assays)){ 
    test2= cor.test(df1$assay.activity, df1[,c(i)], mehtod='pearson') 
    current.p.val2= test2$p.value 
    current.rval = test2$estimate 
    df1.p.2[i] = current.p.val2 
    df1.r.2[i] = current.rval 
} 
df2= cbind(df1$Assays, df1.p, df1.p.2, df1.r.2) 

我然後將其過濾僅用於具有0.1重要性的測定,但這不是問題。如果你想知道,只是問一個問題,我會發布答案:)

0

我不認爲你的數據正確地傳遞給測試。 t.test有數據是否配對的參數(默認值爲false),以及如何處理NAs。你可能應該先使用這些而不是省略NAs。數據中有NAs的示例:

set.seed(1) 
y <- runif(30, 0, 1) 
y.NA <- c(3,24,27) 
y[y.NA] <- NA 
x <- runif(30, 0, 1) 
x.NA <- c(1,3,8,12,21) 
x[x.NA] <- NA 
t.test(x,y) 

對於chisq.test,您可以使用表函數。 chisq.test(table(x,y))$ p.value

+0

感謝您的答覆。對於卡方檢驗,我得到一個錯誤,說明x和y的值必須是相同的長度,並且t檢驗的可變長度也會有差異。無論如何圍繞它? – ephackett

+0

我認爲問題在於如何構建數據集並將其發送到假設檢驗。我將用測試數據集進行更新。 –