【问题标题】:R - lm and r squaredR - lm 和 r 平方
【发布时间】:2012-06-11 10:23:23
【问题描述】:

我一直在处理这个网站和其他网站上的问题,我只是想确保我理解我的做法是正确的,然后我需要一些建议来分析结果。

我正在将 m x n 二进制矩阵从 Java 导出到 R(使用 jri),然后我想针对预期的 0s 向量运行 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)");

我知道此时我需要使用 summary(fm) 来获取 r 平方值,但我不知道如何将它们拉出来或它们在这一点上的含义。我想知道每列偏离预期值 0 的意义。

谢谢!

【问题讨论】:

    标签: java r statistics lm


    【解决方案1】:

    我对 Java 了解不多,所以我不讨论这个。

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

    并且您想知道列的均值是否有效。不同于0?

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

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

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

    【讨论】:

      【解决方案2】:

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

      summary(m)$r.squared

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

      但是,尚不清楚您要在这里完成什么。在lm() 函数的公式参数中,您指定selectionArray ~ 0,这没有意义有两个原因:1) 如前所述,公式右侧的 0 对应于您的预测变量的模型是一个零向量,无法定义对应于该预测变量的 beta 系数。 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
      

      【讨论】:

        猜你喜欢
        • 2019-01-08
        • 2014-04-17
        • 2019-12-16
        • 1970-01-01
        • 1970-01-01
        • 2019-08-23
        • 2017-09-24
        • 2016-03-27
        相关资源
        最近更新 更多