R语言,如何使用bootstraps生成最大似然和AICc?
R language, how to use bootstraps to generate maximum likelihood and AICc?
抱歉问了一个很愚蠢的问题。我正在通过自举数据的相关性对形态特征进行多重比较。我很好奇这种多重比较是否会影响我的推理水平,以及我数据中潜在多重共线性的影响。也许,一个合理的选择是使用我的引导程序来生成最大似然,然后生成 AICc-s 来与我的所有参数进行比较,看看最重要的是什么......问题是虽然我有(更多或不太清楚)方式,我不知道如何在 R 中实现这一点。任何人都可以为我提供一些启示吗?
到目前为止,这里有一个示例(使用 R 语言,但不是我的数据):
library(boot)
data(iris)
head(iris)
# The function
pearson <- function(data, indices){
dt<-data[indices,]
c(
cor(dt[,1], dt[,2], method='p'),
median(dt[,1]),
median(dt[,2])
)
}
# One example: iris$Sepal.Length ~ iris$Sepal.Width
# I calculate the r-squared with 1000 replications
set.seed(12345)
dat <- iris[,c(1,2)]
dat <- na.omit(dat)
results <- boot(dat, statistic=pearson, R=1000)
# 95% CIs
boot.ci(results, type="bca")
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 1000 bootstrap replicates
CALL :
boot.ci(boot.out = results, type = "bca")
Intervals :
Level BCa
95% (-0.2490, 0.0423 )
Calculations and Intervals on Original Scale
plot(results)
我还有几对比较
更多的是交叉验证问题。
如果您只是评估两个变量之间的关系(在您的案例中是相关性),那么多重共线性应该不是问题。只有在拟合模型时,多重共线性才会成为问题,例如多元回归,具有几个高度相关的预测变量。
虽然多重比较总是一个问题,因为它会增加您的 I 型错误。解决这个问题的方法是进行多重比较校正,例如Bonferroni-Holm 或不太保守的 FDR。不过这也有它的缺点,特别是如果你有很多预测变量和很少的观察结果——它可能会大大降低你的功效,以至于你无法找到任何效果,无论它有多大。
在这样的高维环境中,最好的选择可能是使用某种正则化回归方法。使用正则化,您可以立即将所有预测变量放入您的模型中,类似于进行多元回归,但是,诀窍在于您限制模型,以便所有回归斜率都被拉向零,因此只有那些具有大影响的回归斜率"survive"。正则化回归的机器学习版本称为 ridge、LASSO 和弹性网,它们可以使用 glmnet
package. There is also Bayesian equivalents in so-called shrinkage priors, such as horseshoe (see e.g. https://avehtari.github.io/modelselection/regularizedhorseshoe_slides.pdf) 进行拟合。您可以使用 brms
包拟合贝叶斯正则化回归。
抱歉问了一个很愚蠢的问题。我正在通过自举数据的相关性对形态特征进行多重比较。我很好奇这种多重比较是否会影响我的推理水平,以及我数据中潜在多重共线性的影响。也许,一个合理的选择是使用我的引导程序来生成最大似然,然后生成 AICc-s 来与我的所有参数进行比较,看看最重要的是什么......问题是虽然我有(更多或不太清楚)方式,我不知道如何在 R 中实现这一点。任何人都可以为我提供一些启示吗? 到目前为止,这里有一个示例(使用 R 语言,但不是我的数据):
library(boot)
data(iris)
head(iris)
# The function
pearson <- function(data, indices){
dt<-data[indices,]
c(
cor(dt[,1], dt[,2], method='p'),
median(dt[,1]),
median(dt[,2])
)
}
# One example: iris$Sepal.Length ~ iris$Sepal.Width
# I calculate the r-squared with 1000 replications
set.seed(12345)
dat <- iris[,c(1,2)]
dat <- na.omit(dat)
results <- boot(dat, statistic=pearson, R=1000)
# 95% CIs
boot.ci(results, type="bca")
BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 1000 bootstrap replicates
CALL :
boot.ci(boot.out = results, type = "bca")
Intervals :
Level BCa
95% (-0.2490, 0.0423 )
Calculations and Intervals on Original Scale
plot(results)
我还有几对比较
更多的是交叉验证问题。
如果您只是评估两个变量之间的关系(在您的案例中是相关性),那么多重共线性应该不是问题。只有在拟合模型时,多重共线性才会成为问题,例如多元回归,具有几个高度相关的预测变量。
虽然多重比较总是一个问题,因为它会增加您的 I 型错误。解决这个问题的方法是进行多重比较校正,例如Bonferroni-Holm 或不太保守的 FDR。不过这也有它的缺点,特别是如果你有很多预测变量和很少的观察结果——它可能会大大降低你的功效,以至于你无法找到任何效果,无论它有多大。
在这样的高维环境中,最好的选择可能是使用某种正则化回归方法。使用正则化,您可以立即将所有预测变量放入您的模型中,类似于进行多元回归,但是,诀窍在于您限制模型,以便所有回归斜率都被拉向零,因此只有那些具有大影响的回归斜率"survive"。正则化回归的机器学习版本称为 ridge、LASSO 和弹性网,它们可以使用 glmnet
package. There is also Bayesian equivalents in so-called shrinkage priors, such as horseshoe (see e.g. https://avehtari.github.io/modelselection/regularizedhorseshoe_slides.pdf) 进行拟合。您可以使用 brms
包拟合贝叶斯正则化回归。