-1

我想计算两个变量(indiv_mass_log2bo 和 total_number_sum)之间的斜率和调整后的 R 平方。我的问题是我有一个包含 1000 个湖泊的庞大数据库,其中获得了这两个变量。所以,我认为它可以与函数有关,for但我不知道如何计算它。

在这里,我附上 1000 个湖泊中的两个:

    lake_name        indiv_mass_log2bo  total_number_sum
   621974-134428_Bandsj�n   3,00    15,00
   621974-134428_Bandsj�n   4,00    45,00
   621974-134428_Bandsj�n   5,00    51,00
   621974-134428_Bandsj�n   6,00    98,00
   621974-134428_Bandsj�n   7,00    27,00
   623161-140769_Lerjesj�n  4,00    8,00
   623161-140769_Lerjesj�n  5,00    5,00
   623161-140769_Lerjesj�n  6,00    7,00
   623161-140769_Lerjesj�n  7,00    12,00
   623161-140769_Lerjesj�n  8,00    3,00
4

2 回答 2

1

类似的东西

library(plyr)
sumFun <- function(x) {
  fit <- lm(total_number_sum ~ indiv_mass_log2bo, data=x)
  data.frame(slope=coef(fit)[2],adjrsq=summary(fit)$adj.r.sq)
} 
ddply(myData,"lake",sumFun)
于 2013-10-10T15:19:28.187 回答
1

对每个湖执行一项操作的最简单方法是从中创建一个data.table(您必须安装data.table包):

library(data.table)
lakes.dt = data.table(lakes)

然后编写一个函数来执行线性回归并获得所需的结果,并将它们作为列表返回:

linreg = function(formula) {
    m = lm(formula)
    list(slope=coefficients(m)[2], adj.r2=summary(m)$adj.r.squared)
}

并用于by=在每个湖中执行操作:

regression.results = lakes.dt[, linreg(total_number_sum ~ indiv_mass_log2bo), by=lake_name]
于 2013-10-10T15:20:16.617 回答