R中

2014-04-11 69 views
0

创建系数从COEF功能的矩阵从这个代码:R中

treatment  <- factor(rep(c(1, 2), c(43, 41)), 
         levels = c(1, 2), 
         labels = c("placebo", "treated")) 
improved  <- factor(rep(c(1, 2, 3, 1, 2, 3), c(29, 7, 7, 13, 7, 21)), 
         levels = c(1, 2, 3), 
         labels = c("none", "some", "marked"))  
numberofdrugs <- rpois(84, 10) + 1  
healthvalue <- rpois(84, 5) 
y    <- data.frame(healthvalue, numberofdrugs, treatment, improved) 
test   <- glm(healthvalue~numberofdrugs+treatment+improved + treatment:improved, y, family=poisson) 
summary(test) 

我们得到了使用COEF下列()函数:

> coef(test) 
        (Intercept)     numberofdrugs    treatmenttreated 
        1.549172817      0.004261529      0.014634807 
        improvedsome     improvedmarked treatmenttreated:improvedsome 
        0.201150827     -0.129251907     -0.258841251 
treatmenttreated:improvedmarked 
        0.051326071 

我想安排的系数变量转换成矢量,并将相互作用的系数转换成矩阵,以便更容易地处理它们。

例如:

coef.intercept=(1.5491) 

coef.numberofdrugs=(0.00426) 

coef.treatment=(0, 0.01463) 

coef.improved=(0, 0.2011, -0.1292) 

,并用作为治疗的行的相关矩阵的和改进的为列,例如:

coef.correlation =

(0  0  0 ) 

(0 -0.2588 -0.2588) 

是否有任何有效的方式去做这个?

请注意,coef()函数中未列出的任何系数都应设置为零,并缩短了上面的一些数字。

+0

写一个函数?这似乎不是一件常见的事情。比如,为什么使用四个对象而不是一个对象更容易?此外,那些互动条款不相关 – rawr

+0

对不起,互动条款。 – Erosennin

+0

我想这样做是为了在R中手动预测,而不是使用predict()函数。因此,我宁愿创建一个相互作用系数的矩阵... – Erosennin

回答

1

我相信从effectsallEffects可能感兴趣的:

library(effects) 
allEffects(test) 
model: healthvalue ~ numberofdrugs + treatment + improved + treatment:improved 

numberofdrugs effect 
numberofdrugs 
     6  8  10  12  14  16  18  20 
4.050962 4.322559 4.612365 4.921601 5.251570 5.603662 5.979360 6.380247 

treatment*improved effect 
     improved 
treatment  none  some marked 
    placebo 4.416773 3.713517 5.461153 
    treated 4.596433 4.902746 5.309627 
+0

看起来我只需要编写一个函数 – Erosennin

+0

必须有一种方法来“调用”特定的交互系数......如何预测()函数如何执行此操作? – Erosennin

+0

我想通了:使用as.list(coef(test)),你可以调用所需的系数,因此创建一个矩阵。 – Erosennin