R - lm和r平方

时间:2012-06-07 11:04:44

标签: java r statistics lm

我一直在浏览本网站和其他人的问题,我只是想确保我理解我正确地进行此操作然后我会想要一些建议来分析结果。

我正在将一个m乘以二进制矩阵从Java导出到R(使用jri),然后我想对预期的0向量运行lm()。

这是将矩阵输入R

的导出函数
REXP x = re.eval("selectionArray <- c()");

for (int j = 0; j < currentSelection.length; j++){
    boolean result = re.assign("currentSNPs", currentSelection[j]);
        if (result == true){
             x = re.eval("selectionArray <- rbind(selectionArray, currentSNPs)");
        }
}

那么我想执行lm()函数来获得r平方值

            x = re.eval("fm = lm(selectionArray ~ 0)");

我知道我需要在此时使用摘要(fm)来获得r平方值,但我不知道如何将它们拉出来或者它们在这一点上意味着什么。我想知道每列偏离预期0值的重要性。

谢谢!

2 个答案:

答案 0 :(得分:2)

从名为'm'的'lm'对象中提取R ^ 2值

summary(m)$r.squared

您始终可以使用str()函数查看R中对象的结构;在这种情况下,您需要str(summary(m))

然而,目前尚不清楚你在这里想要完成什么。在lm()函数的公式参数中,您指定selectionArray ~ 0,这有两个原因没有意义:1)如前所述,公式右侧的0对应于模型其中预测变量是零向量,并且无法定义与此预测变量对应的β系数。 2)你的结果,selectionArray,是一个矩阵。据我所知,lm()并未设置为有多种结果。

您是否尝试测试每列selectionArray与0的不同之处?如果是这样,其中至少有一个成功(1)的任何列与0列明显不同。如果您对每列中成功概率的置信区间感兴趣,请使用以下代码。请注意,这不适用于多重比较。

首先让我们从玩具示例开始来演示概念

v1 <- rbinom(100,size=1,p=.25)  
#create a vector, length 100, 
#where each entry corresponds to the 
#result of a bernoulli trial with probability p

binom.test(sum(v1), n=length(v1), p = 0)
##let's pretend we didn't just generate v1 ourselves, 
##we can use binom.test to determine the 95% CI for p

#now in terms of what you want to do...
#here's a dataset that might be something like yours:
selectionArray <- sapply(runif(10), FUN=function(.p) rbinom(100,size=1,p=.p))
#I'm just generating 10 vectors from a binomial distribution 
#where each entry corresponds to 1 trial and each column 
#has a randomly generated p between 0 and 1

#using a for loop
#run a binomial test on each column, store the results in binom.test.results
binom.test.results <- list()
for(i in 1:ncol(selectionArray)){
    binom.test.results[[i]] <- binom.test(sum(selectionArray[,i]), 
        n=nrow(selectionArray), p=0)
}

#for loops are considered bad programming in r, so here's the "right" way to do it:
binom.test.results1 <- lapply(as.data.frame(selectionArray), function(.v){
    binom.test(sum(.v), n=nrow(selectionArray), p = 0)
})

#using str() on a single element of binom.test.result will help you 
#identify what results you'd like to extract from each test

答案 1 :(得分:0)

我对Java知之甚少,所以我不是在谈论它。

那么,你有一个0和1值的矩阵,没有其他二进制数?

你想知道列的方法是否有意义。不同于0?

这意味着,您应该进行假设检验,而不一定是回归。然而,回归可以等同于这样的测试。

lm(y~0)没有意义。如果您只想要拦截,则应使用lm(y~1)。但是,这相当于t检验,这在统计学上是不正确的。

我怀疑使用fit<-glm(y~1,family=binomial)并提取p值p<-summary(fit)$coef[4]会更好,但我不是统计学家。