r语言 多元回归后怎样提取方程的p_value

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了r语言 多元回归后怎样提取方程的p_value相关的知识,希望对你有一定的参考价值。

参考技术A 数字太小,提不出来
p值可以直接写成 <某个数,这在一些更复杂的模型中很常见

非要算的话
fs = reg$fstatistic;
1 - pf(fs[1], fs[2], fs[3])

按lz样本和模型的结果就是0
这是因为太小了超出了软件内置的f检验表的范围,所以我才说提不出来

至于p.value,我用的3.0版的,没有这个属性本回答被提问者采纳
参考技术B 同问,知道怎么做了吗 参考技术C summary(reg)$p.value 参考技术D summary(reg)$coefficients[*,4],* is numbers,like 1,2,3

python sklearn 多元线性回归显示r-squared

【中文标题】python sklearn 多元线性回归显示r-squared【英文标题】:python sklearn multiple linear regression display r-squared 【发布时间】:2017-06-21 09:13:00 【问题描述】:

我计算了我的多元线性回归方程,我想查看调整后的 R 平方。我知道 score 函数可以让我看到 r-squared,但它没有调整。

import pandas as pd #import the pandas module
import numpy as np
df = pd.read_csv ('/Users/jeangelj/Documents/training/linexdata.csv', sep=',')
df
       AverageNumberofTickets   NumberofEmployees   ValueofContract Industry
   0              1                    51                  25750    Retail
   1              9                    68                  25000    Services
   2             20                    67                  40000    Services
   3              1                   124                  35000    Retail
   4              8                   124                  25000    Manufacturing
   5             30                   134                  50000    Services
   6             20                   157                  48000    Retail
   7              8                   190                  32000    Retail
   8             20                   205                  70000    Retail
   9             50                   230                  75000    Manufacturing
  10             35                   265                  50000    Manufacturing
  11             65                   296                  75000    Services
  12             35                   336                  50000    Manufacturing
  13             60                   359                  75000    Manufacturing
  14             85                   403                  81000    Services
  15             40                   418                  60000    Retail
  16             75                   437                  53000    Services
  17             85                   451                  90000    Services
  18             65                   465                  70000    Retail
  19             95                   491                  100000   Services

from sklearn.linear_model import LinearRegression
model = LinearRegression()
X, y = df[['NumberofEmployees','ValueofContract']], df.AverageNumberofTickets
model.fit(X, y)
model.score(X, y)
>>0.87764337132340009

我手动检查了它,0.87764 是 R 平方;而 0.863248 是调整后的 R 平方。

【问题讨论】:

【参考方案1】:

计算R^2adjusted R^2的方法有很多种,以下是其中几种(根据您提供的数据计算):

from sklearn.linear_model import LinearRegression
model = LinearRegression()
X, y = df[['NumberofEmployees','ValueofContract']], df.AverageNumberofTickets
model.fit(X, y)

SST = s-s-r + SSE (ref definitions)

# compute with formulas from the theory
yhat = model.predict(X)
SS_Residual = sum((y-yhat)**2)       
SS_Total = sum((y-np.mean(y))**2)     
r_squared = 1 - (float(SS_Residual))/SS_Total
adjusted_r_squared = 1 - (1-r_squared)*(len(y)-1)/(len(y)-X.shape[1]-1)
print r_squared, adjusted_r_squared
# 0.877643371323 0.863248473832

# compute with sklearn linear_model, although could not find any function to compute adjusted-r-square directly from documentation
print model.score(X, y), 1 - (1-model.score(X, y))*(len(y)-1)/(len(y)-X.shape[1]-1)
# 0.877643371323 0.863248473832 

另一种方式:

# compute with statsmodels, by adding intercept manually
import statsmodels.api as sm
X1 = sm.add_constant(X)
result = sm.OLS(y, X1).fit()
#print dir(result)
print result.rsquared, result.rsquared_adj
# 0.877643371323 0.863248473832

另一种方式:

# compute with statsmodels, another way, using formula
import statsmodels.formula.api as sm
result = sm.ols(formula="AverageNumberofTickets ~ NumberofEmployees + ValueofContract", data=df).fit()
#print result.summary()
print result.rsquared, result.rsquared_adj
# 0.877643371323 0.863248473832

【讨论】:

仅供参考,您可以在公式中使用 model.coef_ 而不是 X.shape[1]。那样解释更清楚 非常感谢! @ManuelG 不正确,即使您的意思是 len(model.coef_)(我假设您这样做);这也将包括 LR 的常数项,但情况并非如此。 您也可以这样做from sklearn.metrics import explained_variance_score, r2_score。 r^2 explained_variance_score & 调整后的 r^2 r2_score.【参考方案2】:
regressor = LinearRegression(fit_intercept=False)
regressor.fit(x_train, y_train)
print(f'r_sqr value: regressor.score(x_train, y_train)')

【讨论】:

考虑添加更多细节或解释你的答案。 我不确定这个答案有什么帮助

以上是关于r语言 多元回归后怎样提取方程的p_value的主要内容,如果未能解决你的问题,请参考以下文章

怎样用SPSS做一元线性回归?具体怎么检验相关性

多元线性回归公式推导及R语言实现

多元线性回归的计算公式是怎样的?

r语言如何最小二乘线性回归分析

线性回归和线性回归方程是怎样的呢?

线性回归之前要做几次检验