我想计算斜率并调整两个变量之间的R平方(indiv_mass_log2bo和total_number_sum)。我的问题是我有一个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
答案 0 :(得分: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)
答案 1 :(得分: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]