2013-10-10 39 views
-1

我想調整兩個變量(indiv_mass_log2bo和total_number_sum)之間的斜率和調整的R平方。我的問題是,我有一個擁有1000個湖泊的巨大數據庫,其中獲得了這兩個變量。所以,我認爲它可以使用函數for,但我不知道如何計算它。R在一個因子的每個級別內執行線性迴歸

在這裏,我連接兩個出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

您正在尋找' lm(total_number_sum〜indiv_mass_log2bo,data = mydata)'? –

+0

是的!但是我必須在每個湖中做這個以獲得斜率和R方向 – Rinot

+0

你可以運行dput(head(lakes,10))'來創建一個可重現的例子,並將其粘貼到你的問題中? –

回答

1

最簡單的辦法東西線執行一個操作每湖是創建一個data.table出來的(您必須安裝data.table包):

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

然後w儀式執行的線性迴歸,並得到想要的結果出來,回到它們作爲一個列表的功能:

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] 
+0

非常感謝您的幫助! – Rinot

+0

@Rinot,如果此答案解決了您的問題,請考慮點擊複選標記以接受它。 –

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) 
相關問題