我在R中有一组数据,我想运行回归以使用自定义系数测试相关性。
示例:
x = lm(a ~ b + c + d, data=data, weights=weights)
这给出了b,c和d的系数,但我只想给出b,c和d我自己的系数,并找到例如r ^ 2。我该怎么做?
答案 0 :(得分:3)
假设您的预定系数是一个名为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模型完全吻合。
答案 1 :(得分:1)
@ BondedDust的方法从长远来看会更有效,但仅举例说明,这是一个简单的示例,说明如何创建自己的函数来计算您选择的任何回归系数的R平方。我们将使用内置于mtcars
的{{1}}数据集。
假设使用自变量“carb”和“wt”预测“mpg”的回归模型。 a,b和c是我们需要为函数提供的三个回归参数。
R
现在让我们运行该功能。首先让我们看看我们的函数是否与# 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)
}
计算的R平方相匹配。我们将通过在lm
中创建回归模型来实现这一点,然后我们将使用该模型中的系数并使用我们的函数计算R平方,并查看它是否与R
的输出匹配:
lm
从摘要中我们可以看出R平方为0.7924。让我们看看我们从刚刚创建的函数中得到了什么。我们需要做的就是为我们的函数提供上面摘要中列出的三个回归系数。我们可以对这些数字进行硬编码,或者我们可以从模型对象# 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
中提取系数(这是我在下面所做的):
m1
现在让我们计算回归系数的其他选择的R平方:
R2(coef(m1)[1], coef(m1)[2], coef(m1)[3])
[1] 0.7924425
要一次检查参数的大量值,您可以使用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
的值的R平方,范围从-7到-3,增量为0.1(其他两个参数设置为c
返回的值:
lm