1

統計分析のためにプログラム rpy (Python で実行される R) で実行するデータ セットを準備しています。次のようになります。

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) から分離する必要があります。年ごとに各列の新しいリストを作成する必要があります。

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

これはコードの残りの部分です:

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)
4

2 に答える 2

11

列を転置するために次のようなことを試してみませんか:

x = []

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

個別のデータ構造が必要な理由はわかりませんが、アイテムごとに個別のデータ構造が存在することが絶対に不可欠でない限り...

編集:ここにない場合は、あなたが説明したとおりに正確に機能するはずです:

for d in xrange(1,68):
    exec 'x%s = data[:,%s]' %(d,d-1)
于 2013-01-14T22:18:05.803 に答える
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) 
于 2013-01-15T09:54:35.410 に答える