首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环遍历函数参数(与multcomp::glht的一系列对比)

循环遍历函数参数(与multcomp::glht的一系列对比)
EN

Stack Overflow用户
提问于 2022-03-31 01:05:30
回答 1查看 47关注 0票数 0

我希望编写一个在回归模型上运行反差的函数,并引导这些结果以获得置信区间,并在一个对比列表上循环该函数。

我尝试过嵌套在函数中的循环,应用,映射.似乎没有人能得到我想要的结果(只返回列表中的第一个对比或最后一个对比的结果)。

对于对比列表中的一个对比,代码如下所示:

代码语言:javascript
复制
df <- data.frame(

  H0013301_new_data = c(0,2,3,6,0,4,2,4,8,1),
  drink_stat94_KEYES_2 = c("Heavy","Abstainer","Occasional","Moderate","Abstainer","Occasional","Heavy","Moderate","Moderate","Abstainer"),
  drink_stat02_KEYES_2 = c("Heavy","Abstainer","Occasional","Abstainer","Abstainer","Heavy","Heavy","Moderate","Moderate","Abstainer"),
  drink_stat06_KEYES_2 = c("Occasional","Abstainer","Occasional","Abstainer","Occasional","Heavy","Heavy","Moderate","Moderate","Heavy"),
FIN_weight_survPS_trimmed=
c(.5,2.4,.6,4.8,1.2,.08,.34,.56,1.6,.27)
)

#reordering factors
df$drink_stat94_KEYES_2<-fct_relevel(df$drink_stat94_KEYES_2, "Abstainer", "Occasional", "Moderate", "Heavy")
contrasts(df$drink_stat94_KEYES_2)<-contr.treatment(4,base=1)
df$drink_stat02_KEYES_2<-fct_relevel(df$drink_stat02_KEYES_2, "Abstainer", "Occasional", "Moderate", "Heavy")
contrasts(df$drink_stat02_KEYES_2)<-contr.treatment(4,base=1)
df$drink_stat06_KEYES_2<-fct_relevel(df$drink_stat06_KEYES_2, "Abstainer", "Occasional", "Moderate", "Heavy")
contrasts(df$drink_stat06_KEYES_2)<-contr.treatment(4,base=1)



#defining contrast
c1 <- rbind("A,A,A"=c(1,0,0,0,0,0,0,0,0,0)
                ) 

#defining function to feed to boostrap
fc_2<-function(d,i){
 TrialOutcomeModel_M<-lm(H0013301_new_data ~ drink_stat94_KEYES_2 + drink_stat02_KEYES_2 + drink_stat06_KEYES_2, weights=FIN_weight_survPS_trimmed, data = d[i,]) 
 test <- multcomp::glht(TrialOutcomeModel_M, linfct=c1) 
 return(coef(test))
}
boot_out<-boot(data=df, fc_2, R=500) 
boot.ci(boot_out, type="perc")

但是,让我们假设,不只是c1,我想运行我的函数(并引导结果)在下面的对比列表:

代码语言:javascript
复制
c1 <- rbind("A,A,A"=c(1,0,0,0,0,0,0,0,0,0)
                ) 
c2 <- rbind("A,A,O"=c(1,0,0,0,0,0,0,1,0,0)
                ) 
c3 <- rbind("A,A,M"=c(1,0,0,0,0,0,0,0,1,0)
                ) 

c_vector<-list(c1,c2,c3)

我该怎么做有什么建议吗?(P.S.我知道linfct参数可以采用一个对比矩阵,但我专门寻找循环/lapply解决方案)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-31 02:03:46

(在下面的示例代码中,我将引用您创建的对象)

计划有两个步骤:

  1. 正在准备一个函数fun_boot(),该函数fun_boot()接受一个对比对象(如c1),并基于该对象和df数据返回boot对象;

  1. 将该函数应用于对比列表c_vector .

因此,implementation有两个元素:

代码语言:javascript
复制
# [!] Assume all required libraries loaded
# [!] Assume all necessary data exists

# Step 1
fun_boot <- function(contrast)
{
    # Make statistic function
    fun_statistic <- function(d, i)
    {
        TrialOutcomeModel_M <- lm(
           formula = H0013301_new_data ~ drink_stat94_KEYES_2 + drink_stat02_KEYES_2 + drink_stat06_KEYES_2,
           data    = d[i,],
           weights = FIN_weight_survPS_trimmed
        ) 
        test <- multcomp::glht(
           TrialOutcomeModel_M,
           linfct = contrast
        )
        return(coef(test))
    }

    # Make boot call (hehe)
    return (boot(
       data      = df,
       statistic = fun_statistic,
       R         = 500
    ))
}

# Step 2
boot_out_vector <- lapply(
   X   = c_vector,
   FUN = fun_boot
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71685744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档