2017-10-06 6 views
1

[R] 私は14の定量的な予測子を持つテーブルボストンを持っています。私は、すべての予測変数を反復処理するためにポリ関数を使いたい。 すべてのプレディクタに個別に使用する。私が使用してみました 、データフレーム内のマルチプル変数のポリ機能の使用

colnames(Boston) = > 
[1] "crim" "zn"  "indus" "chas" "nox"  "rm"  "age"... 

for(index in colnames(Boston)){ 
    lm(crim~poly(index,3)) 
} 

私はエラーを取得する:すべての予測変数をループ内のトラブルを持つ lm(crim~poly(nox,3))

ポリ エラー(A =インデックス、3): '程度は' より小さくなければなりませんユニークなポイントの数

インデックス内の変数名をループ内で正しく参照する方法はありますか?

答えて

0

次ループは、しかし、あなたは、ユニーク(列)点の長さが3未満である場合に度(多項式)を下げる必要があり、私のために働く

data(Boston) 

nams = colnames(Boston)[-1] 

for (i in nams) { 

    cat(i, " ", length(unique(Boston[, i])), '\n') 

    degree = 3 

    if (length(unique(Boston[, i])) < degree) { 

    degree = length(unique(Boston[, i])) - 1 
    } 

    tmp_formula = as.formula(paste(c('crim ~ poly(', i, ",", degree, ")"), collapse = "")) 

    print(tmp_formula) 

    fit = lm(tmp_formula, data = Boston) 
} 

出力例:

zn 26 
crim ~ poly(zn, 3) 
indus 76 
crim ~ poly(indus, 3) 
chas 2 
crim ~ poly(chas, 1) 
nox 81 
crim ~ poly(nox, 3) 
rm 446 
crim ~ poly(rm, 3) 
age 356 
crim ~ poly(age, 3) 
dis 412 
crim ~ poly(dis, 3) 
rad 9 
crim ~ poly(rad, 3) 
tax 66 
crim ~ poly(tax, 3) 
ptratio 46 
crim ~ poly(ptratio, 3) 
black 357 
crim ~ poly(black, 3) 
lstat 455 
crim ~ poly(lstat, 3) 
medv 229 
crim ~ poly(medv, 3) 
+0

ありがとう@lampros! –

関連する問題