2013-01-16 23 views
0

我試圖用tapply()函數以幾個類別運行模型,但沒有太多成功。我的數據有20個診所,我想在每個診所運行模型。在R中使用tapply()的迴歸模型BY

繼承人我的模型:

attach(qregdata) 
rq(logA~ dose+ chtcm + cage +raceth + sex,tau=.9) 

我作爲一個變量診所數據(其值1-20)。在其他統計軟件包中,有人知道如何在R的診所運行該模型嗎?

回答

0

完成此操作的一般方法如下所示。 ddply函數爲每個運行提供的函數(在這種情況下爲lm)。您也可以在更復雜的數據橫截面上運行它。例如。 .(clinic,level)將在和level的每個組合上運行單獨的模型。術語lm(y~x)$coef[1]獲取線性模型的截距。我認爲沒有簡單的方法來一次保存每個模型的所有輸出。

n <- 10 
clinic <- factor(rep(1:3,each=n)) 
x <- rep(0:(n-1),3) 
y <- rnorm(3*n)*x 
d <- data.frame(clinic,x,y) 

# plot data and linear fits 
library(ggplot2) 
ggplot(d,aes(x,y)) + geom_point() + facet_wrap(~clinic) + stat_smooth(method='lm') 

# run a separate model for each clinic 
library(plyr) 
ddply(d,.(clinic),summarize,intercept=lm(y~x)$coef[1],slope=lm(y~x)$coef[2]) 
0

您可以在診所的獨特價值中使用'lappy',並使用子集來提取該診所的數據集部分。然後,將模型擬合到子集。

這將返回一個模型列表,然後您可以進一步處理。