2011-05-02 79 views
1

我需要做一个循环(我以前没做过)并给出了观察结果(第1列),我需要计算出(i)变量中的哪些组合(s1- s5)是显着的(P < 0.05),(ii)仅保留具有相应p值的变量间显着的组合。我认为这将是一个很好的方式来学习如何做一个循环,R.原始数据是大是类似于此:在R中做循环

ob <- c(120,100,85,56,87) 
s1 <- c("ab","aa","ab","aa","bb") 
s2 <- c("aa","aa","ab","bb","bb") 
s3 <- c("bb","ab","aa","ab","ab") 
s4 <- c("aa","ab","bb","ab","aa") 
s5 <- c("bb","ab","aa","ab","bb") 
dset <- data.frame(ob,s1,s2,s3,s4,s5) 

DSET

ob s1 s2 s3 s4 s5 
120 ab aa bb aa bb 
100 aa aa ab ab ab 
85 ab ab aa bb aa 
56 aa bb ab ab ab 
87 bb bb ab aa bb 

任何帮助将是不胜感激!

巴兹

+0

你如何确定重要性?列s1 - s5如何发挥重要作用?几乎肯定有一个矢量化的解决方案,不需要在这里使用for-loop,但是我可能会错误的。 – Chase 2011-05-02 23:56:39

+0

@Chase,显着性水平将是P <0.05,S1-S5是被认为影响牛群在牛群中的表现的剪辑集合。 – baz 2011-05-03 00:12:33

+0

所以你现在想要对s1到s5的所有组合进行线性回归?是对的吗? – Chase 2011-05-03 02:00:51

回答

1

也许我失去了一些东西,但我没有看到它是如何有意义的你data.frame增加p值的列而不调换的data.frame。你怎么知道哪个p值对应于哪个独立变量,如果他们在不同的列?下面是使用一个for循环运行ANOVA对每个独立变量,并将它们存储在一个新的载体的一种方法:

#Use grep to return the columns that match the pattern "s". This returns their column index. 
#This is what we'll use in the for loop 
vars <- grep("s", names(dset)) 

#Create a new vector to hold the anova results and name it 
dat <- vector("integer", length = ncol(dset)) 
names(dat) <- colnames(dset) 

#Run for loop, assigning the p-value from the anova to the proper spot in the vector we made 
for (var in vars) { 
    dat[var] <- anova(lm(ob ~ dset[, var], data = dset))$"Pr(>F)"[1] 
} 

上述所有会产生:

> dat 
     ob  s1  s2  s3  s4  s5 
0.0000000 0.7219532 0.3108441 0.4668372 0.6908916 0.6908916 

你看着办吧由您决定如何将其与原始数据帧相关联。

+0

是的,你是对的!这个问题令人困惑,我为此道歉。我刚编辑它,希望它现在是有道理的,我希望! – baz 2011-05-03 01:59:36