在使用pls包的R中,如何通过组/因子获得系数的估计

时间:2016-04-21 15:45:31

标签: r regression coefficients

我开始关注pls套餐&我不确定如何通过group/factor提取单独的系数。我可以为每个组运行单独的模型,或者考虑X ~ group交互项,但这不是我之后的事情。

我使用以下语法:

model1 <- plsr(outcome ~ pred * group, data =plsDATA,2)

我尝试过使用以下内容:

model2 <- plsr(outcome ~ embed(pred:as.factor(group)), data=plsDATA,2)

但这会导致此错误:

  

model.frame.default中的错误(formula = outcome~eded(pred:as.factor(group)),:     变量长度不同(找到&#39;嵌入(pred:as.factor(group))&#39;)   另外:警告信息:   1:在pred:as.factor(group):     数值表达式有640个元素:只有第一个使用   2:在pred:as.factor(group):     数值表达式有32个元素:只使用第一个

我不确定为什么我得到变量长度错误,因为运行以下命令会提供兼容的尺寸:

dim(group)
[1] 32  1

dim(outcome)
[1] 32  1

dim(pred)
[1] 32 20

代码如下:

library(pls) #Dummy Data 
setwd("/Users/John/Documents") 
Data <- read.csv("SamplePLS.csv") #Define each of the inputs pred is X, group is the factor & outcome is Y 
pred <- as.matrix(Data[,3:22]) 
group <- as.matrix(Data[,1]) 
outcome <- as.matrix(Data[,2]) #now combine the matrices into a single dataframe 
plsDATA <- data.frame(SampN=c(1:nrow(Data))) 
plsDATA$pred <- pred 
plsDATA$group <- group 
plsDATA$outcome <-outcome #define the model - ask for two components 
model1 <- plsr(outcome ~ pred * group, data=plsDATA,2)#Get coefficients from this object

2 个答案:

答案 0 :(得分:0)

根据您的问题,您想要提取系数。有一个功能,&#39; coef()&#39;这将很容易将它们拉出来。请参阅下面的结果。

  

数据&lt; - read.csv(&#34; SamplePLS.csv&#34;)#Define每个输入pred是X,group

is the factor & outcome is Y 
> pred <- as.matrix(Data[,3:22]) 
> group <- as.matrix(Data[,1]) 
> outcome <- as.matrix(Data[,2]) #now combine the matrices into a single dataframe 
> plsDATA <- data.frame(SampN=c(1:nrow(Data))) 
> plsDATA$pred <- pred 
> plsDATA$group <- group 
> plsDATA$outcome <-outcome #define the model - ask for two components 
> model1 <- plsr(outcome ~ pred * group, data=plsDATA,2)
> coef(model1)
, , 2 comps

                       outcome
predpred1        -1.058426e-02
predpred2         2.634832e-03
predpred3         3.579453e-03
predpred4         1.135424e-02
predpred5         3.271867e-04
predpred6         4.438445e-03
predpred7         8.425997e-03
predpred8         3.001517e-03
predpred9         2.111697e-03
predpred10       -9.264594e-04
predpred11        1.885554e-03
predpred12       -2.798959e-04
predpred13       -1.390471e-03
predpred14       -1.023795e-03
predpred15       -3.233470e-03
predpred16        5.398053e-03
predpred17        9.796533e-03
predpred18       -8.237801e-04
predpred19        4.778983e-03
predpred20        1.235484e-03
group             9.463735e-05
predpred1:group  -8.814101e-03
predpred2:group   9.013430e-03
predpred3:group   7.597494e-03
predpred4:group   1.869234e-02
predpred5:group   1.462835e-03
predpred6:group   6.928687e-03
predpred7:group   1.925111e-02
predpred8:group   3.752095e-03
predpred9:group   2.404539e-03
predpred10:group -1.288023e-03
predpred11:group  4.271393e-03
predpred12:group  6.704938e-04
predpred13:group -3.943964e-04
predpred14:group -5.468510e-04
predpred15:group -5.595737e-03
predpred16:group  1.090501e-02
predpred17:group  1.977715e-02
predpred18:group -3.013597e-04
predpred19:group  1.169534e-02
predpred20:group  3.389127e-03

通过调用model1$coefficientsmodel1[[1]]也可以获得相同的结果。基于这个问题,我认为这是您正在寻找的结果。

答案 1 :(得分:0)

实际上,我刚刚想出来了。你需要对分组变量进行虚拟编码&amp;使其成为结果(即预测变量)。在这种情况下,我有两列代表组成员资格。在每种情况下,组中的成员资格用1表示,非成员资格用0表示。然后我将前两列称为组(即组&lt; - as.matrix(Data [,1:2]))&amp;在替换group for results之前运行其余的代码。