黄土:参数预测器上的斜率的奇怪值取决于局部加权回归参数

时间:2015-10-23 16:15:57

标签: r regression linear-regression loess

这是我在StackOverflow中的第一个问题,所以我希望能够做到正确......

我正在尝试使用两个预测变量来拟合黄土模型,其中一个是局部加权的,而另一个是参数化的。一旦模型拟合,我想得到参数预测器上回归线的斜率,调节非参数预测器的某个值。当使用回归线I中的任何两个值计算该斜率时,应获得对应于斜率的常数值。但是,如果我用每两个连续值计算斜率,我得到的曲线类似于抛物线的大部分。这里有一些代码来展示这个问题:

## DATA

criterion <- c(
  -1.8914741214789, -0.864604956700496, 2.43013372852099, -1.32227168040904, 
  0.861585875211724, -1.25506145955845, 1.1201893940246, -1.18560159611826, 
  1.24871681364416, -1.24362634687504, -2.22058652097061, -0.67920682239687, 
  -1.14096010679208, 0.228758533000768, -1.3607742780652, 0.473165865126464, 
  0.0438948075908679, -1.14355404117161, 2.60406860120487, 0.539583593348819, 
  -0.599388766026817, -1.14918693916554, -0.17334788506616, -0.836478866743926, 
  2.88908329995278, -0.401016464464891, -0.292311619619775, 1.12804091879547, 
  3.6733647991105, -3.31190363769332, -0.672558641084861, 0.498844902537884, 
  -0.037062115762172, -1.02017987978252, -0.854805324374525, 1.34168735130207, 
  -0.242996720017973, 1.14871933640721, -0.736312690622741, -2.51965992948912, 
  -3.16327863554555, -0.269020543067839, 0.552150179356176, 0.320523449469915, 
  1.14736382025547, 0.891590469554733, -0.717678520852477, 3.15631635301073, 
  -0.225648864790169, -1.35189421566795, -0.558073572773821, -1.33356547103824, 
  -2.01215450549957, 1.63719762873429, -2.0218275161466, 0.513289109719022, 
  -1.30263029019454, 1.85949704911488, -1.22544429584118, 0.336732253617053, 
  -2.45126282746359, -4.94155955259729, 0.743231639698684, 1.04320562270113, 
  3.99232225357353, -1.07752259470057, -0.353671379249384, -0.748973055922694, 
  0.467443998802691, 0.966013090920868, 1.32739645813748, 1.07159468103619, 
  -1.8542024758483, 0.360922743179635, -4.99642432601298, 0.596072047320551, 
  -1.48256500350222, -0.251689130094422, -0.104867519535428, -3.23675187957067, 
  1.15657910171856, -0.640772355492231, 2.21198640279181, -0.229386564567888, 
  -2.8014148535931, 0.325261825780768, 1.65431768179619, -0.701353356393564, 
  1.56301740126489, -2.91989037858617, 0.560634128846807, -3.40972988669857, 
  0.519955616184439, -0.673752119923202, -0.126511467211613, -1.49156456253545, 
  2.68041989003066, -3.18246878051744, -1.05338046600476, -0.122679130411665, 
  0.619202563903638, -2.80132012240656, -1.50106228060585, -1.78428153598023, 
  -0.17959372353835, -3.7657930817963, 1.74830598714522, 0.199267717912346, 
  -0.187088254090319, -0.431926901631399, -2.50168001668916, -0.715294537723936, 
  4.8050892573889, 3.48017935641437, -2.29413209640673, 1.88045620792631, 
  -0.125724128270772, -0.514660621563394, 1.28920199656138, -0.888250921411933, 
  -1.53336797414911, 0.566890809767711, 2.18492239723917, 1.45986142278563, 
  2.29475550546227, -2.91360806155925, -1.28474245565384, -1.15236199251384, 
  -2.68344935749574, -1.0406761060411, 0.236606541573282, -1.0577344636865
)


lw.predictor <- c(
  3.97543828892376, 3.74367045733871, 2.8031293667213, 3.12721154621725, 
  3.57809163186571, 3.85490258924953, 3.04509486547235, 3.06527167000886, 
  3.42172751371031, 3.48342454710053, 3.03382754767655, 3.29840143930276, 
  3.42532870135535, 3.3466401061363, 4.19719410513314, 4.27624851591474, 
  3.90521253346176, 3.66434131328865, 3.78008480009251, 3.26961939052607, 
  3.37557706887951, 3.07887188021758, 3.20615845753053, 3.25681582455448, 
  3.07575583761175, 3.4678563115072, 3.63412290863538, 2.7341072520575, 
  3.04486992771651, 4.0244118093156, 2.75978954925269, 2.94469571886678, 
  3.64916954335701, 3.23529338509991, 3.09993371559714, 3.92201374051927, 
  2.63693470862178, 3.19438720086359, 4.10395732841177, 4.14695795420843, 
  3.37963279191973, 2.75059146814963, 3.05430305033533, 4.07380539679535, 
  3.41070032578776, 3.52175236580135, 3.9922870844146, 2.83689005875791, 
  3.59280102122038, 3.744585131656, 4.07464596327428, 2.94632345777042, 
  3.79563556141373, 2.92157773101387, 3.60631105869347, 3.90380916892684, 
  3.4349134104059, 2.86428168814471, 2.80459505537921, 3.52738795051305, 
  3.90100092529829, 3.95557522270349, 2.88144750533953, 3.4177217437656, 
  2.72281079587565, 3.44307922077723, 3.58191805968554, 2.85374063580388, 
  3.61825659978916, 3.35154840518957, 2.78055872970075, 3.31559205647068, 
  3.72845408487401, 3.45439961676827, 3.47673283886995, 3.38348122582045, 
  2.88524826215121, 3.37314129436951, 4.17608980116535, 2.78621853030773, 
  4.23989532049638, 2.65428059546312, 2.75954135557898, 3.90836826127649, 
  3.70911502202012, 3.9502037401938, 2.72934334016319, 3.56908337873796, 
  3.53107535330031, 4.10445798400541, 3.37029733251965, 2.77784779211612, 
  4.00205426701893, 3.390559011573, 3.75061638769833, 3.67591196400612, 
  4.00034245109432, 4.19507212536165, 2.64290209936905, 2.84965751366817, 
  2.93584367468566, 3.5792399897338, 3.87103752330681, 4.11112756588916, 
  3.69820393282565, 3.47909608792875, 3.021611653787, 3.38833615773409, 
  3.53688974115618, 3.86802841711593, 3.04014239032067, 3.83441517392514, 
  2.78055872970075, 2.95676609717858, 3.46963343371941, 2.69652236718191, 
  4.21169279083643, 3.59508797308864, 2.90229007358549, 3.74055889165213, 
  4.22533130742836, 3.10942006661772, 2.81532012340698, 3.39540382330109, 
  3.11580153059886, 2.73435775434875, 3.80464748245529, 3.63431137604942, 
  4.09744323888573, 2.77908036429911, 3.30047734198123, 3.7238586557053
)


par.predictor <- c(
  94.3333333333333, 105.333333333333, 135.666666666667, 113.666666666667, 
  116.333333333333, 112.666666666667, 117.333333333333, 100.333333333333, 
  118, 118.333333333333, 119.666666666667, 109.666666666667, 116.333333333333, 
  107.666666666667, 110.666666666667, 97, 99.6666666666667, 108.666666666667, 
  118.333333333333, 119, 106.333333333333, 121.666666666667, 103, 
  132, 99, 121.666666666667, 99.6666666666667, 104.666666666667, 
  124.333333333333, 106.666666666667, 118.666666666667, 111, 125, 
  101.666666666667, 101, 103, 102, 108.333333333333, 119.333333333333, 
  131.333333333333, 105.666666666667, 118.666666666667, 124.333333333333, 
  111.333333333333, 108.333333333333, 126.666666666667, 111, 107.333333333333, 
  118.666666666667, 120.333333333333, 114, 117.666666666667, 118, 
  104.666666666667, 115.333333333333, 117.666666666667, 101.666666666667, 
  118, 103.333333333333, 120, 105, 106.666666666667, 104.333333333333, 
  112.333333333333, 109.333333333333, 103.333333333333, 114, 112, 
  122.333333333333, 115, 135.666666666667, 102.666666666667, 116, 
  115.333333333333, 118, 107, 104, 113.666666666667, 130, 128.333333333333, 
  110.333333333333, 127.666666666667, 129.333333333333, 107, 110.666666666667, 
  97.3333333333333, 120.333333333333, 90.6666666666667, 122.333333333333, 
  104, 93.6666666666667, 102.333333333333, 111.333333333333, 121.666666666667, 
  127.666666666667, 115, 103, 91.6666666666667, 150.666666666667, 
  127, 126.333333333333, 111.666666666667, 117.666666666667, 109, 
  103, 104, 103.666666666667, 109, 122.666666666667, 122, 116.333333333333, 
  117.333333333333, 102, 156, 105.666666666667, 106.333333333333, 
  124.333333333333, 105.333333333333, 121.333333333333, 92.6666666666667, 
  117.666666666667, 122.666666666667, 88.3333333333333, 119, 121.333333333333, 
  97, 107, 109.333333333333, 113.666666666667, 103.666666666667, 
  117, 112.666666666667
)

# Predictor variables are standardized prior to fitting the loess model
data <- data.frame(criterion = criterion, lw.predictor = scale(lw.predictor), par.predictor = scale(par.predictor))


## MODEL FIT

lwr.fit <- loess(
  criterion ~ lw.predictor * par.predictor, data,
  parametric = "par.predictor",
  span = .7,
  family = "gaussian", degree = 2, drop.square = "par.predictor",
  normalize = FALSE
)


## PREDICTION ON GRID

# Statistics to standardize axes (based on the sample)
par.mean <- mean(par.predictor)
par.sd <- sd(par.predictor)
lw.mean <- mean(lw.predictor)
lw.sd <- sd(lw.predictor)

# Axes
pred.lw.axis <- (sqrt(seq(7, 18.25, by = 1/12)) - lw.mean) / lw.sd
pred.par.axis <- (89:156 - par.mean) / par.sd


# Grid generation
std.prediction.values <- expand.grid(
  lw.predictor = pred.lw.axis,
  par.predictor = pred.par.axis
)

# Prediction
lwr.prediction <- predict(lwr.fit, std.prediction.values, se = TRUE)


## GRAPHIC REPRESENTATION OF THE PARAMETRIC REGRESSION

# Slope computing
test.values <- lwr.prediction$fit[1, ]
slopes <- (test.values[-1] - test.values[-length(test.values)]) / (pred.par.axis[-1] - pred.par.axis[-length(pred.par.axis)])

plot(slopes, type = "l", ylab = "Slopes")

好吧,如果你运行这段代码,你会得到一条(近)抛物线的曲线。在我看来,这很奇怪;人们可能认为这是由于量化误差,但我怀疑这是因为它会以某种方式随机而且值要小得多。我可能错了,但我认为情节应该显示一个恒定的线。另一方面,我也试过改变黄土模型的参数,但问题似乎是持久的。我希望有人可以帮助我,我在论坛中搜索过这个主题,但没有发现任何类似的问题。

提前非常感谢你。

0 个答案:

没有答案