我有一个包含许多列的数据集。第一列是结果(Test)(因变量,y)。第2-32列是混淆因素。最后,第33-54列是miRNA(表达)(自变量,x)。
我想在每个自变量和因变量之间进行线性回归(以获得p值和估计值)。
我不想把它们都放在同一个模型中,我想要不同的模型,一个接一个。即:
- 模型1:试验与miRNA1
- 模型2:试验与miRNA2
- […]
- 模型21:试验与miRNA21**
我发现了这个,我发现它非常有用:
应用(df[-1],2,函数(x)摘要(lm(x~df$Test))$coeff[1,c(1,4)])
*估计-160.0660000-382.2870000 136.4690000 106.9820000
Pr(>|t|)0.6069965 0.3886881 0.7340981 0.7030296*
然而,现在我想通过所有的混杂因素来调整我的模型(第2-32列)。
- 模型1:测试与miRNA1+混杂因素
- 模型2:测试与miRNA2+混杂因素
- […]
- 模型21:测试与miRNA21+混杂因素
我尝试添加apply(df[-1],2,function(x)summary(lm(x~df$Test+混杂因素))$coeff[1,c(1,4)])但它不起作用?
知道吗?
谢谢!:)
我认为一个好的方法是创建一个辅助函数来获得您想要的结果。此函数依赖于y
列和X
列,它们可以是单个字符串或字符串向量:
# data
n <- 10000
nc <- 30
nm <- 20
y <- rnorm(n = n)
X <- matrix(rnorm(n = n*(nc+nm)), ncol = nc + nm)
df <- data.frame(y = y, X)
# variable names
confounders <- colnames(df)[2:31]
mirnas <- colnames(df)[32:51]
# auxiliar regression function
lm_fun <- function(data, y_col, X_cols) {
formula <- as.formula(paste(y_col, "~", paste(X_cols, collapse = "+")))
reg <- lm(formula = formula, data = data)
reg_summary <- summary(reg)$coef
return(reg_summary)
}
# simple linear regressions
lm_list1 <- lapply(X = mirnas, FUN = lm_fun, data = df, y_col = "y")
lm_list1[[1]]
# adjusting by confounders
lm_list2 <- lapply(X = mirnas, FUN = function(x) lm_fun(data = df, y_col = "y", X_cols = c(confounders, x)))
lm_list2[[1]]
我试图做一些类似的分析,但这次是偏相关的。我修改了你的脚本来做相关性分析,我得到了。但现在我想根据年龄、性别和其他混杂因素调整模型(与回归模型中的相同)。
和以前一样,我想对不同的miRNA重复同样的分析。即:
- 模型1:miRNA1与测试,通过混杂因素调整
- 模型2:miRNA2与测试,由confoudners调整
- 模型3:miRNA3与测试,通过混杂因素进行调整
- Etc
我尝试使用pcor.test函数进行部分相关。我用了";spearman";,因为它不遵循正态分布。
我修改了剧本,但不起作用。请帮忙?谢谢
#data
n <- 10000
nc <- 30
nm <- 20
y <- rnorm(n = n)
X <- matrix(rnorm(n = n*(nc+nm)), ncol = nc + nm)
df <- data.frame(y = y, X)
#variable names
confounders <- colnames(df)[2:31]
mirnas <- colnames(df)[32:51]
#auxiliar regression function
pcor_fun <- function(data, y_col, X_cols) {
formula <- as.formula(paste(y_col, X_cols))
pcor <- pcor.test(formula = formula, data = data, method = "spearman")
pcor_summary <- summary(pcor)$coef
return(pcor_summary)
}
#simple linear regressions
lm_list1 <- lapply(X = mirnas, FUN = pcor_fun, data = df, y_col = "y")
lm_list1[[1]]
#adjusting by confounders
lm_list2 <- lapply(X = mirnas, FUN = function(x) pcor_fun(data = df, y_col = "y", X_cols = c(confounders, x)))
lm_list2[[1]]