我正在研究一个程序来研究某些类星体的星等和红移之间的关系,我正在使用
statsmodels
和
scipy.stats.linregress
计算数据统计;
状态模型
计算
r-squared
(除其他参数外),以及
stats.linregress
计算
r
(等等)。
一些示例输出是:
W1 r-squared: 0.855715
W1 r-value : 0.414026
W2 r-squared: 0.861169
W2 r-value : 0.517381
W3 r-squared: 0.874051
W3 r-value : 0.418523
W4 r-squared: 0.856747
W4 r-value : 0.294094
Visual minus WISE r-squared: 0.87366
Visual minus WISE r-value : -0.521463
我的问题是,为什么
R
和
R方
值不匹配
(即,对于W1波段,0.414026**2!= 0.855715)?
我的计算函数代码如下:
def computeStats(x, y, yName):
from scipy import stats
import statsmodels.api as sm
# Compute model parameters
model = sm.OLS(y, x, missing= 'drop')
results = model.fit()
# Mask NaN values in both axes
mask = ~np.isnan(y) & ~np.isnan(x)
# Compute fit parameters
params = stats.linregress(x[mask], y[mask])
fit = params[0]*x + params[1]
fitEquation = '$(%s)=(%.4g \pm %.4g) \\times redshift+%.4g$'%(yName,
params[0], # slope
params[4], # stderr in slope
params[1]) # y-intercept
print('%s r-squared: %g'%(name, arrayresults.rsquared))
print('%s r-value : %g'%(name, arrayparams[2]))
return results, params, fit, fitEquation
我对统计数据的解释有误吗?还是两个模块使用不同的方法计算回归?