2013-01-14 6 views
1

통계 분석을 위해 rpy (R, Python에서 실행되는 프로그램)에서 실행할 데이터 세트를 준비 중입니다.for 루프 (Python)에 새 배열 만들기

data = [[0, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 1, 0, 0, 1, 0, 0, 0, 0], 
[0, 1, 1, 0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 1, 0, 0, 0, 0, 1], 
[0, 0, 1, 1, , 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 1, 0, 0, 0, 0], 
[1, 0, 0, 0, 0, 0, 0, 1, 0, 0], [0, 1, 0, 0, 0, 1, 0, 0, 0, 0], 
[0, 0, 0, 0, 1, 0, 0, 0, 1, 0]] 

이 데이터를 사용하려면 종속 변수 (y)를 독립 변수 (x)와 분리해야합니다. 1 년 동안 각 열에 대해 새 목록을 만들어야합니다.

y = data[:,9] 
x1 = data[:,0] 
x2 = data[:,1] 
x3 = data[:,2] 
x4 = data[:,3] 
x5 = data[:,4] 
x6 = data[:,5] 
x7 = data[:,6] 
x8 = data[:,7] 
x9 = data[:,8] 
x10 = data[:,9] 

데이터에 67 개의 열이 있다고 가정합니다. 모든 열을 반복하고 모든 열을 입력하지 않고도 자동으로 각 열을 만드는 방법이 있습니까? 나는 모든 배열을 하드 코딩이의 라인을 따라 최대 67

뭔가를 싶지 않아,하지만 작동하지 않습니다

:

i=0 
for d in data: 
    "x%d"%i = data[:,i-1] 
    i+=1 

이 코드의 나머지 부분입니다 절대적으로 필수적인 일이다 않는

x = [] 

for d in xrange(0,66): 
    x.append(data[:,d]) 

:

rpy.set_default_mode(rpy.NO_CONVERSION) 
linear_model = rpy.r.lm(rpy.r("y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10"), data = rpy.r.data_frame(x1=x1,x2=x2,x3=x3,x4=x4,x5=x5,x6=x6,x7=x7,x8=x8,x9=x9,x10=x10,y=y)) 
rpy.set_default_mode(rpy.BASIC_CONVERSION) 
print linear_model.as_py()['coefficients'] 
summary = rpy.r.summary(linear_model) 
+1

예상되는 결과는 무엇입니까? 질문을하기가 어려웠습니다. – Sibi

+0

x1 = data [:, 1], x2 = data [:, 2] .... x67 = data [:, 67]까지 하드 코딩하지 않아도됩니다. – ono

+0

의존 변수'y'가'y = x10'으로 생성 될 때'x10'을 독립 변수로 포함 하시겠습니까? – lgautier

답변

3

왜 열을 바꾸어이 같은 시도하지 각 항목에 대한 별도의 데이터 구조가에서 별도의 오며 자료 구조를 죄다 필요가 왜 ...

편집을 모르겠지만 :

for d in xrange(1,68): 
    exec 'x%s = data[:,%s]' %(d,d-1) 
: 여기 설명 정확하게 방식으로 작동 할 게 아니에요 경우
0

rpy 코드를 약간 보여 주므로 rpy2로 어떻게 보이는지 보여줄 수 있다고 생각했습니다.

# build a DataFrame 
from rpy2.robjects.vectors import IntVector 
d = dict(('x%i' % (i+1), IntVector(data[:, i]) for i in range(68) if i != 9) 
d['y'] = data[:, 9] 
from rpy2.robjects.vectors import DataFrame 
dataf = DataFrame(d) 
del(d) # dictionary no longer needed 

# import R's stats package 
from rpy2.robjects.packages import importr 
stats = importr('stats') 

# fit model 
dep_var = 'y' 
formula = '%s ~ %s ' % (dep_var, '+'.join(x for x in dataf.names if x != dep_var)) 
linear_model = stats.lm(formula, data = dataf) 
+0

이것은 작동합니다. 내 목표는 최종 결과에서 계수를 얻는 것입니다. 그러나, 내가 얻은 것 중 많은 것은 (67 개 중) NaN입니다. 어떻게 해석합니까? 내 데이터에 문제가 있습니까? – ono

+0

이것은 계수 중 일부는 추정 할 수 없기 때문에 이는 독립 변수 중 일부는 다른 독립 변수의 선형 조합이기 때문일 수 있습니다. 정확한 데이터 세트에 대해 더 많이 알지 못하면 어쨌든 선형 모델에 적합하도록 많은 독립 변수가 필요하다고 생각합니다. 당신은 그 (것)들을 모두 필요로 하시겠습니까? 변수 선택을 시도 했습니까? 이것은 "cross-validated"stackexchange 사이트에 대해 더 많은 질문이되고 있습니다 ... – lgautier

+0

그러면 의미가 있습니다. NaN 변수는 덜 중요합니다. 데이터 세트가 커질수록 더 적은 NaN 계수가 나타납니다. 나를위한 목표는 어떤 변수가 가장 중요한지 알아내어 전체 세트를 제공해야합니다. 나는 현재 곡선 y = Ax1 + Bx2 + Cx3에 맞는 데이터를 가지고있다. 나는 logistic과 같은 다른 방정식이 더 잘 작동한다고 가정한다. 나는 잘 모르겠다. – ono