2016-04-19 39 views
1

私のデータセットにGAM(一般化加算モデル)を使用しています。このデータセットには、6つの予測変数と応答変数(すなわち、電力)を持つ32の観測値があります。 gam()mgcvパッケージの機能を使用してモデルに適合しています。 、私はモデルに合うようにしようとするたびに、私のようにエラーメッセージが表示されます実行します。このエラーメッセージからmgcv gam()エラー:モデルにデータよりも多くの係数があります

Error in gam(formula.hh, data = data, na.action = na.exclude, : 
    Model has more coefficients than data 

、私は観察数と比較して、私はより多くの予測変数を持っていることを推測します。私はこのエラーが相互検証手順中に生成されると思います。このエラーを処理する方法はありますか?私はこのために次のコードを使用してい

、ここで

library(mgcv) 
formula.hh <- as.formula(power ~ s(temperature) 
           + s(prevday1) + s(prevday2) 
           + s(prev_2_hour) + s(prev_instant1)) 
model <- gam(formula.hh, data = data, na.action = na.exclude) 

は、私が実際にdput()機能

> dput(data) 
data <- structure(list(power = c(250.615931666667, 252.675878333333, 
1578.209605, 186.636575166667, 1062.07912666667, 1031.481235, 
1584.38902166667, 276.973836666667, 401.620463333333, 1622.50827666667, 
273.825153333333, 1511.37474333333, 291.460865, 215.138178333333, 
247.509348333333, 1140.21383833333, 1680.63441666667, 1742.44168333333, 
592.162706166667, 1610.7307, 615.857495, 1664.13551, 464.973065, 
1956.2482, 1767.94469333333, 1869.02678333333, 1806.731, 1746.3731, 
549.216605, 1425.42390166667, 1900.32575, 1766.18103333333), 
    temperature = c(31, 30, 28, 28, 27, 31, 32, 32, 30.5, 33, 
    33, 30, 32, 24, 30, 26, 28, 32, 34, 25, 32, 33, 35, 36, 36, 
    37, 35, 33, 35, 33, 35, 32), prevday1 = c(NA, 250.615931666667, 
    252.675878333333, 1578.209605, 186.636575166667, 1062.07912666667, 
    1031.481235, 1584.38902166667, 276.973836666667, 401.620463333333, 
    1622.50827666667, 273.825153333333, 1511.37474333333, 291.460865, 
    215.138178333333, 247.509348333333, 1140.21383833333, 1680.63441666667, 
    1742.44168333333, 592.162706166667, 1610.7307, 615.857495, 
    1664.13551, 464.973065, 1956.2482, 1767.94469333333, 1869.02678333333, 
    1806.731, 1746.3731, 549.216605, 1425.42390166667, 1900.32575 
    ), prevday2 = c(NA, NA, 250.615931666667, 252.675878333333, 
    1578.209605, 186.636575166667, 1062.07912666667, 1031.481235, 
    1584.38902166667, 276.973836666667, 401.620463333333, 1622.50827666667, 
    273.825153333333, 1511.37474333333, 291.460865, 215.138178333333, 
    247.509348333333, 1140.21383833333, 1680.63441666667, 1742.44168333333, 
    592.162706166667, 1610.7307, 615.857495, 1664.13551, 464.973065, 
    1956.2482, 1767.94469333333, 1869.02678333333, 1806.731, 
    1746.3731, 549.216605, 1425.42390166667), prev_instant1 = c(NA, 
    237.211388333333, 455.932271666667, 367.837349666667, 1230.40137333333, 
    1080.74080166667, 1898.06056666667, 326.103031666667, 302.770571666667, 
    1859.65283333333, 281.700161666667, 1684.32288333333, 291.448878333333, 
    214.838578333333, 254.042623333333, 1380.14074333333, 824.437228333333, 
    1660.46284666667, 268.004111666667, 1715.02763333333, 1853.08503333333, 
    1821.31845, 1173.91945333333, 1859.87353333333, 1887.67635, 
    1760.29563333333, 1876.05421666667, 1743.10665, 366.382048333333, 
    1185.16379, 1713.98534666667, 1746.36006666667), prev_instant2 = c(NA, 
    275.55167, 242.638122833333, 220.635857, 1784.77271666667, 
    1195.45020333333, 590.114391666667, 310.141536666667, 1397.3184605, 
    1747.44398333333, 260.10318, 1521.77355833333, 283.317726666667, 
    206.678135, 231.428693833333, 235.600631666667, 232.455201666667, 
    281.422625, 256.470893333333, 1613.82088333333, 1564.34841666667, 
    1795.03498333333, 1551.64725666667, 1517.69289833333, 1596.66556166667, 
    2767.82433333333, 2949.38005, 328.691775, 389.83789, 1805.71815333333, 
    1153.97645666667, 1752.75968333333), prev_2_hour = c(NA, 
    219.024983, 313.393630708333, 263.748829166667, 931.193606666667, 
    699.399163791667, 754.018962083334, 272.22309625, 595.954508875, 
    1597.21487208333, 512.64361, 1236.42579666667, 281.200373333334, 
    196.983981666666, 230.327737625, 525.483920416666, 391.120302791667, 
    610.101280416667, 247.710625543785, 978.741044166665, 979.658926666667, 
    1189.25306041667, 814.840889166667, 989.059700416665, 1352.2367025, 
    1770.20417833333, 1847.11590666667, 843.191556416666, 363.50806625, 
    904.924465041666, 841.746712500002, 1747.73452958333)), .Names = c("power", 
"temperature", "prevday1", "prevday2", "prev_instant1", "prev_instant2", 
"prev_2_hour"), class = "data.frame", row.names = c(NA, 32L)) 
+1

このような小さなデータセットには、非常に多くのスムーザーを合わせることはできません。このモデルは、あなたが観察した以上に自由度があります。 – Roland

+3

あなたは結び目の数を減らすことができます。例えば: 's(温度、k = 4)' –

答えて

2

This dataset has 32 observations.

でデータを添付しています、唯一の30 2などの行がNAを持っています。

From this error message, I infer that I have more predictor variables as compared to the number of observations.

はい。既定では、s()は、1Dスムーザーの場合は基本ディメンション(またはランク)を10に選択し、10の生のパラメーターを指定します。センタリング制約(?identifiabilityを参照)の後、パラメータは1つ少なくなりますが、各スムージンには9つのパラメータがあります。 5つのスムーズがあることに注意してください。したがって、滑らかな用語とインターセプトのための45のパラメータがあります。これはあなたの30データよりも大きいです。

I guess this error is generated during cross-validation procedures.

いいえこのエラーは、GAM式が解釈され、モデルフレームが構築されるとすぐに検出されます。実際の基礎建設の前でさえ、我々はすでにn(データ数)と何がp(パラメータの数)であるかを知ることができます。

Is there any way to handle this error?

デフォルトではなく手動でkを減らしてください。しかし、立方体スプラインの場合、最小値はkです。たとえば、s(temperature, bs = 'cr', k = 3)を使用します。また、薄板回帰スプラインのデフォルトのbs = 'tp'ではなく、自然立方スプラインを使用するようにbs = 'cr'を設定しました。あなたはもちろんそれを使用することができますが、1Dのために滑らかな"cr"は自然な選択です。

関連する問題