이미 이와 같은 질문이 있지만 수정을 원하며 행운이별로없는 몇 가지 방법을 시도했습니다.예측 잔차를 추가하고 팬더 데이터 프레임에 rsquared - 그룹별로
나는 데이터를 가지고 있으며 판다 데이터 프레임에 그룹별로 회귀의 R 제곱을 별도의 열로 추가하려고합니다. 여기서주의해야 할 점은 각 그룹 내에서 극단적 인 잔여 값을 가지지 않는 값 (즉, 1 표준 편차 이내 또는 -1과 1 z 점수 사이)에 대한 회귀를 수행하기만을 원한다는 것입니다. 지금은 다른 게시물에 있던 대답은 나를 그룹에 잔류를 얻기 위해 작동하는 등이다
df = pd.DataFrame({'gp': [1,1,1,1,1,2,2,2,2,2],
'x1': [3.17, 4.76, 4.17, 8.70, 11.45, 3.17, 4.76, 4.17, 8.70, 1.45],
'x2': [23, 26, 73, 72, 16, 26, 73, 72, 16, 25],
'y': [880.37, 716.20, 974.79, 322.80, 1054.25, 980.37, 816.20, 1074.79, 522.80, 1254.25]},
index=np.arange(10, 30, 2))
: 여기
는 SAMPLE 데이터 프레임이다. 나는 각 그룹 내에서 선형 회귀의 잔류를 제공하는 열 잔차를 가지고 있기 때문에import pandas as pd
import numpy as np
import statsmodels.formula.api as sm
regmodel = 'y ~ x1 + x2'
def groupreg(g):
g['residual'] = sm.ols(formula=regmodel, data=g).fit().resid
return g
df = df.groupby('gp').apply(groupreg)
print(df)
지금이 중대하다 :이 솔루션이었다. 잔류 내 + 1/-1 zscore 이내이다
그러나 지금은 을 I 만 점 각 그룹 내의 R은 회귀 제곱 추가 할 R 제곱 인 다른 열을 추가 할 각 그룹 내에. 따라서 목표는 회귀에서 극단적 인 특이 치를 제거하는 R- 제곱을 추가하는 것입니다 (모든 데이터를 사용하여 R- 제곱 값의 R- 제곱 값을 향상시켜야 함). 어떤 도움을 주시면 감사하겠습니다.
은 참고
그냥 보통의 R이 기능이 될 것 제곱 추가 ** 편집 :import pandas as pd
import numpy as np
import statsmodels.formula.api as sm
df = pd.DataFrame({'gp': [1,1,1,1,1,2,2,2,2,2],
'x1': [3.17, 4.76, 4.17, 8.70, 11.45, 3.17, 4.76, 4.17, 8.70, 1.45],
'x2': [23, 26, 73, 72, 16, 26, 73, 72, 16, 25],
'y': [880.37, 716.20, 974.79, 322.80, 1054.25, 980.37, 816.20, 1074.79, 522.80, 1254.25]},
index=np.arange(10, 30, 2))
regmodel = 'y ~ x1 + x2'
def groupreg(g):
g['residual'] = sm.ols(formula=regmodel, data=g).fit().resid
return g
df = df.groupby('gp').apply(groupreg)
print(df)
df['z_score'] = df.groupby('gp')['residual'].apply(lambda x: (x - x.mean())/x.std())
:이 여기에
**
내 코드def groupreg(g):
g['residual'] = sm.ols(formula=regmodel, data=g).fit().resid
g['rsquared'] = sm.ols(formula=regmodel, data=g).fit().rsquared
return g
EDIT입니다
출력 :
gp x1 x2 y residual z_score
10 1 3.17 23 880.37 -43.579309 -0.173726
12 1 4.76 26 716.20 -174.532201 -0.695759
14 1 4.17 73 974.79 318.634921 1.270214
16 1 8.70 72 322.80 -287.710952 -1.146938
18 1 11.45 16 1054.25 187.187542 0.746209
20 2 3.17 26 980.37 -67.245089 -0.822329
22 2 4.76 73 816.20 -96.883281 -1.184770
24 2 4.17 72 1074.79 104.400010 1.276691
26 2 8.70 16 522.80 21.017543 0.257020
28 2 1.45 25 1254.25 38.710817 0.473388
그래서 여기에서는 Z 점수가 1보다 크고 -1보다 작은 점수를 사용하지 않고 그룹당 R 제곱의 다른 열을 사용하고자합니다 (예 : 색인 14, 16, 22 및 24는 사용하지 않을 것입니다. r square 계산에 의한 그룹. , 삭제하려면 다음을 시도합니다 (z_score
열을 만든 후) 현재 코드의 맨 끝에, 그리고
def groupreg(g):
g['residual'] = sm.ols(formula=regmodel, data=g).fit().resid
g['rsquared'] = sm.ols(formula=regmodel, data=g).fit().rsquared
return g
: