[英]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平方。 我们将使用内置在R
的mtcars
数据集。
假设使用自变量“ 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.