用于从线性回归计算 R 平方的 NP 数组

NP Arrays Used in Calculating R-Squared from Linear Regression

我没看清楚。假设我有以下函数,每个函数的 X 和 Y 形状为 (366,1) 的数组(函数中需要)。

 def rsquared(X, Y): #arrays
     """ Return R^2 where x and y are array-like."""

     slope, intercept, r_value, p_value, std_err = sp.stats.linregress(X, Y)
     return r_value**2

 print(rsquared(X,Y))

我正在尝试打印 r 平方值,但我一直收到此错误:

Traceback (most recent call last):

File "<ipython-input-912-af88c88367fe>", line 6, in <module>
print(rsquared(X,Y))

File "<ipython-input-912-af88c88367fe>", line 4, in rsquared
slope, intercept, r_value, p_value, std_err = sp.stats.linregress(X, Y)

File "C:\Users\U321103\AppData\Local\Continuum\anaconda3\envs\Stats\lib\site- 
packages\scipy\stats\_stats_mstats_common.py", line 116, in linregress
ssxm, ssxym, ssyxm, ssym = np.cov(x, y, bias=1).flat

ValueError: too many values to unpack (expected 4)

看起来代码期望 X 和 Y 的形状为 (366, ) vs (366,1)。如果是,那么如何删除不需要的列?

这是 X 数组变量的前 4 行,Y 变量看起来很相似。感谢您的帮助。

X
array([[ 3.06833333],
       [ 7.93583333],
       [ 8.00458333],
       [11.06458333],

使用这个来传递单一维度 XY 以避免错误:

print(rsquared(X[:,0],Y[:,0]))

它与sklearn有点不同,所以一种解决方案是在函数中转置它:

import scipy as sp
import numpy as np 
def rsquared(X, Y): #arrays
     slope, intercept, r_value, p_value, std_err = sp.stats.linregress(X.T,Y.T)
     return r_value**2

np.random.seed(111)
X = np.random.uniform(0,1,(50,1))
Y = np.random.uniform(0,1,(50,1))
print(rsquared(X,Y))

0.07042849841609072