如何使用相关或协方差矩阵而不是使用 R 的数据框来获得回归系数和模型拟合?

Jer*_*lim 6 regression r linear-regression lm

我希望能够通过提供相关或协方差矩阵而不是 data.frame 来从多元线性回归中回归系数。我意识到您丢失了一些与确定截距等相关的信息,但即使是相关矩阵也应该足以获得标准化系数和解释的方差估计。

例如,如果您有以下数据

# get some data
library(MASS)
data("Cars93")
x <- Cars93[,c("EngineSize", "Horsepower", "RPM")]
Run Code Online (Sandbox Code Playgroud)

您可以按如下方式运行回归:

lm(EngineSize ~ Horsepower + RPM, x)
Run Code Online (Sandbox Code Playgroud)

但是如果没有数据而是相关矩阵或协方差矩阵怎么办:

corx <- cor(x)
covx <- cov(x)
Run Code Online (Sandbox Code Playgroud)
  • R 中的什么函数允许您基于相关或协方差矩阵运行回归?理想情况下,它应该类似于 ,lm以便您可以轻松获得 r 平方、调整后的 r 平方、预测值等。据推测,对于其中一些事情,您还需要提供样本大小以及可能的均值向量。但那样也好。

即,类似:

lm(EngineSize ~ Horsepower + RPM, cov = covx) # obviously this doesn't work
Run Code Online (Sandbox Code Playgroud)

请注意,Stats.SE上的这个答案提供了为什么它是可能的理论解释,并提供了一些用于计算系数的自定义 R 代码的示例?

Phi*_*ker 3

使用 lavaan 您可以执行以下操作:

library(MASS)
data("Cars93")
x <- Cars93[,c("EngineSize", "Horsepower", "RPM")]

lav.input<- cov(x)
lav.mean <- colMeans(x)

library(lavaan)
m1 <- 'EngineSize ~ Horsepower+RPM'
fit <- sem(m1, sample.cov = lav.input,sample.nobs = nrow(x), meanstructure = TRUE, sample.mean = lav.mean)
summary(fit, standardize=TRUE)
Run Code Online (Sandbox Code Playgroud)

结果是:

Regressions:
                   Estimate    Std.Err  Z-value  P(>|z|)   Std.lv    Std.all
  EngineSize ~                                                              
    Horsepower          0.015    0.001   19.889    0.000      0.015    0.753
    RPM                -0.001    0.000  -15.197    0.000     -0.001   -0.576

Intercepts:
                  Estimate    Std.Err  Z-value  P(>|z|)   Std.lv    Std.all
   EngineSize          5.805    0.362   16.022    0.000      5.805    5.627

Variances:
                  Estimate    Std.Err  Z-value  P(>|z|)   Std.lv    Std.all
    EngineSize          0.142    0.021    6.819    0.000      0.142    0.133
Run Code Online (Sandbox Code Playgroud)

  • 我想念你想要 R 平方值。所以:“summary(fit, standardize=TRUE, rsquare=TRUE)”会给你你想要的。与 lm 相关的大多数其他功能都可以使用,包括“predict”和“anova”等。加上 lavaan 的所有优点,因此“:=”可用于在模型中定义新参数,而不是在拟合后使用 car 中的“deltaMethod”。 (2认同)