1

LARS アルゴリズムから作成された線形回帰で、比較的小さなデータセット (n = 22、p = 17) で Leave-one-out 交差検証を実行しようとしています。基本的に、標準化されたデータの n 行列を作成する必要があります (各列は、平均値を中心とし、列の SD によって標準化されたエントリで構成されます)。

これまでリストを使用したことはありませんが、さまざまなマトリックスの列を操作/標準化できる限り、リストを作成することにオープンです。

Rで試したのは次のとおりです。

for (i in 1:n)
{
  x.standardized.i <- matrix(data = NA, nrow = (n-1), ncol = p)  #creates n matrices, all n-1 x p
  for (j in 1:p)
  {
    x.standardized.i[,j] <- ((x[-i,j]-mean(x[-i,j]))/sd(x[-i,j])) #and standardizes the p variables with the ith row missing in each n matrix (i increments from 1 to n)
  }
}

クラスの成績に関連しているため、データを共有できるかどうかはわかりませんが、コードを実行すると、ループを通過し、最後の行が x.standardized.i として欠落している標準化された行列を割り当てることで停止します.

4

1 に答える 1

0

sapplyこれは、 andを使用して非常に簡単に実行できますscale

# Create dummy data
m <- matrix(runif(200), ncol=10)

# Leave each row out in turn, and scale each column
A <- sapply(seq_len(nrow(m)), function(i) scale(m[-i, ]), simplify='array')

デフォルトでは、scale各列をその平均で中央揃えし、その sd で除算します。

上記の例では、19 行、10 列、20 スライスの配列になります。

特定のスライス (クロス検証トレーニング フォールド) にアクセスするには、次のようにサブセット化できます。

A[,, 1] # all rows, all cols, first slice
A[,, 10] # all rows, all cols, tenth slice

列が平均を中心に配置され、1 つの標準偏差で標準化されていることを確認するには:

apply(A, c(2, 3), mean)
apply(A, c(2, 3), sd)
于 2014-07-14T02:22:15.363 に答える