繁体   English   中英

R中的自定义回归方程

[英]Custom regression equation in R

我在R中有一组数据,我想运行回归以使用自定义系数测试相关性。

例:

x = lm(a ~ b + c + d, data=data, weights=weights)

这给了我b,c和d的系数,但是我只想给b,c和d我自己的系数并找到例如r ^ 2。 我该怎么办?

假设您的预定系数是一个三元素的数字矢量,名为: vec ,而a,b,c都不是因子或字符矢量:

 #edit ... add a sum() function
(x = lm(a ~ 1, data=data, offset=apply(data, 1, function(x) {sum( c(1,x) * vec))} )

这将产生一个具有指定估计值的模型。 您可能需要这样做:

 summary(x)

一如既往...如果您要测试的代码,请提供测试数据集。 使用mtcars数据框:

m1 = lm(mpg ~ carb + wt, data=mtcars)
vec <- coef(m1)
(x = lm(mpg ~ 1, data=mtcars, 
                 offset=apply( mtcars[c("carb","wt")], 1, 
                                    function(x){ sum( c(1,x) *vec)} )))

Call:
lm(formula = mpg ~ 1, data = mtcars, offset = apply(mtcars[c("carb", 
    "wt")], 1, function(x) {
    sum( c(1, x) * vec)
}))

Coefficients:
(Intercept)  
  -7.85e-17  

因此,偏移量模型(在偏移量中使用了系数)实质上是对m1模型的精确拟合。

从长远来看,@ BondedDust的方法将更有效,但仅出于说明目的,这是一个简单示例,说明如何创建自己的函数以为您选择的任何回归系数计算R平方。 我们将使用内置在Rmtcars数据集。

假设使用自变量“ carb”和“ wt”预测“ mpg”的回归模型。 a,b和c是我们需要提供给函数的三个回归参数。

# Function to calculate R-squared
R2 = function(a,b,c) {   

  # Calculate the residual sum of squares from the regression model
  SSresid =  sum(((a + b*mtcars$carb + c*mtcars$wt) - mtcars$mpg)^2)

  # Calculate the total sum of squares
  SStot = sum((mtcars$mpg - mean(mtcars$mpg))^2)

  # Calculate and return the R-squared for the regression model
  return(1 - SSresid/SStot)
}

现在让我们运行该函数。 首先,让我们看看我们的函数是否与lm计算的R平方匹配。 我们将通过在R创建一个回归模型来进行此操作,然后使用该模型中的系数并使用我们的函数计算R平方,然后查看它是否与lm的输出匹配:

# Create regression model
m1 = lm(mpg ~ carb + wt, data=mtcars)
summary(m1)

Call:
  lm(formula = mpg ~ carb + wt, data = mtcars)

Residuals:
  Min      1Q  Median      3Q     Max 
-4.5206 -2.1223 -0.0467  1.4551  5.9736 

Coefficients:
  Estimate Std. Error t value Pr(>|t|)    
(Intercept)  37.7300     1.7602  21.435  < 2e-16 ***
  carb         -0.8215     0.3492  -2.353   0.0256 *  
  wt           -4.7646     0.5765  -8.265 4.12e-09 ***
  ---
  Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.839 on 29 degrees of freedom
Multiple R-squared:  0.7924,  Adjusted R-squared:  0.7781 
F-statistic: 55.36 on 2 and 29 DF,  p-value: 1.255e-10

从摘要中,我们可以看到R平方为0.7924。 让我们看看我们从刚刚创建的函数中得到了什么。 我们需要做的就是将上面总结中列出的三个回归系数提供给函数。 我们可以对这些数字进行硬编码,也可以从模型对象m1提取系数(这是我在下面所做的事情):

R2(coef(m1)[1], coef(m1)[2], coef(m1)[3])
[1] 0.7924425

现在,我们为回归系数的其他选择计算R平方:

a = 37; b = -1; c = -3.5
R2(a, b, c)
[1] 0.5277607

a = 37; b = -2; c = -5
R2(a, b, c)
[1] 0.0256494

要一次检查大量参数值,可以使用sapply 下面的代码将以0.1的增量返回c范围从-7到-3的c值的R平方(其他两个参数设置为lm返回的值:

sapply(seq(-7,-3,0.1), function(x) R2(coef(m1)[1],coef(m1)[2],x))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM