R 当我提供分析梯度时,为什么optim()会给我初始值?

R 当我提供分析梯度时,为什么optim()会给我初始值?,r,optimization,gradient,R,Optimization,Gradient,我编写了一个函数,用optim在R中求解最大似然优化: dt<-structure(list(FARM = c(1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10), A

我编写了一个函数,用optim在R中求解最大似然优化:

dt<-structure(list(FARM = c(1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 
3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 
6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 
10, 10, 10, 10, 10), AGEL = c(10, 10, 10, 10, 10, 10, 10, 10, 
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 
10, 10, 10, 10), YEAR = c(93, 94, 95, 96, 97, 98, 93, 94, 95, 
96, 97, 98, 93, 94, 95, 96, 97, 98, 93, 94, 95, 96, 97, 98, 93, 
94, 95, 96, 97, 98, 93, 94, 95, 96, 97, 98, 93, 94, 95, 96, 97, 
98, 93, 94, 95, 96, 97, 98, 93, 94, 95, 96, 97, 98, 93, 94, 95, 
96, 97, 98), YIT = c(11.2070387, 11.4214679, 11.6826514, 11.6213672, 
11.6120375, 11.7844553, 11.6797018, 11.7577679, 11.8947124, 12.0041645, 
12.005198, 12.0408442, 11.5370813, 11.7748127, 11.8076973, 11.7950471, 
11.8535391, 12.1119652, 12.911746, 13.1003918, 13.1731591, 13.2100702, 
13.2538494, 13.2064177, 11.6230526, 11.543862, 11.7496642, 11.8953607, 
11.8827289, 11.7417727, 11.9285785, 11.9940545, 12.1364117, 12.0369733, 
11.979103, 12.043236, 11.7952733, 12.0445121, 12.2373581, 12.3413856, 
12.3717693, 12.3734032, 11.8997513, 12.0806681, 12.2331672, 12.1984638, 
12.1695072, 12.2869888, 12.9730812, 13.0168517, 13.1557382, 13.2580789, 
13.3012524, 13.3181472, 12.3470426, 12.3593687, 12.5377082, 12.6183975, 
12.5887194, 12.5560321), Cons = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1), X1 = c(-0.2508472, -0.0827881, -0.0995015, 
-0.1279935, -0.1396215, -0.0082855, 0.0319209, 0.0319209, 0.1123425, 
0.1697534, 0.1697534, 0.2401758, -0.0031704, 0.1213923, 0.2560492, 
0.2281032, 0.2521044, 0.2832353, 1.0358796, 1.1723399, 1.1707639, 
1.1754846, 1.2408077, 1.2525037, -0.1164991, -0.0501765, -0.0772784, 
-0.0395381, 0.0120197, -0.0185949, 0.1567942, 0.2199731, 0.2240464, 
0.1524369, 0.1258867, 0.1611326, 0.4324477, 0.4056903, 0.5086751, 
0.5056123, 0.5025401, 0.5505974, 0.294664, 0.3022112, 0.3781971, 
0.3920382, 0.324517, 0.4056903, 1.150046, 1.231945, 1.2697952, 
1.3612017, 1.3414512, 1.4316711, 0.4776167, 0.5358261, 0.5268574, 
0.5936456, 0.5766481, 0.5328454), X2 = c(-0.3812693, -0.3812693, 
-0.3812693, -0.3812693, -0.5148007, -0.4866298, -0.2634863, -0.1189051, 
-0.0904671, -0.0904671, -0.0998569, -0.2200012, -0.0628156, -0.0628156, 
0.0241958, -0.0628156, 0.1419788, 0.2134378, 0.6303316, 0.6303316, 
0.6303316, 0.6747833, 0.6747833, 0.6747833, -0.0628156, -0.0628156, 
-0.0628156, -0.0628156, -0.0183638, -0.0183638, -0.2634863, -0.2634863, 
-0.2634863, -0.2634863, -0.2634863, -0.2634863, -0.1581258, 0.0488884, 
-0.1581258, -0.2634863, 0.2801292, 0.2801292, -0.0447971, 0.6747833, 
0.171178, 0.171178, 0.0241958, 0.0241958, 1.1003352, 1.1003352, 
1.1003352, 1.1003352, 1.1003352, 1.0946372, 0.2801292, 0.2929498, 
0.2929498, 0.2929498, 0.40149, 0.3486918), X3 = c(0.2360746, 
0.2360742, 0.2360746, 0.2360752, 0.2360754, 0.2360749, 0.2360746, 
0.236075, 0.2360744, 0.2360744, 0.2360749, 0.6415397, 0.4592182, 
0.459218, 0.4592182, 0.4592187, 0.459218, 0.4592182, 0.4592182, 
0.4592182, 0.4592181, 0.4592183, 0.4592182, 0.4592181, -0.0516074, 
-0.0516078, -0.0516074, -0.0516077, -0.051607, -0.051607, 0.4592182, 
0.4592184, 0.459218, 0.4592184, 0.4592186, 0.4592184, 0.2360746, 
0.2360744, 0.2360746, 0.2360751, 0.2360744, 0.2360749, -0.0516074, 
-0.0516076, -0.0516074, -0.0516071, -0.0516074, -0.0516075, 0.6415397, 
0.6415401, 0.6415398, 0.6415396, 0.6415398, 0.6415399, 0.2360746, 
0.2360746, 0.2360745, 0.2360748, 0.2360745, 0.2360746), X4 = c(-0.2680185, 
-0.1702716, 0.2141804, 0.1485103, 0.154448, 0.3005485, 0.2090403, 
0.1734267, 0.339429, 0.4863562, 0.4594159, 0.5207343, -0.030207, 
0.367867, 0.2944762, 0.2277587, 0.244321, 0.7610341, 1.5027406, 
1.5825834, 1.8124528, 1.9158651, 1.8773012, 1.7974122, 0.1279725, 
0.1203183, 0.3468252, 0.4655212, 0.5699703, 0.2376632, 0.3851576, 
0.5189973, 0.6831419, 0.6937942, 0.5597348, 0.5964109, 0.1733808, 
0.556151, 0.8324679, 0.8772814, 0.9770936, 0.7515107, 0.2701763, 
0.419759, 0.7536951, 0.8138994, 0.7269556, 1.0568626, 1.1164991, 
1.5104721, 1.4868396, 1.7310326, 1.7218132, 1.7676257, 0.9002175, 
0.8183035, 0.9410059, 1.116553, 1.0732073, 1.0853705), X11 = c(0.0314622, 
0.0034269, 0.0049503, 0.0081912, 0.0097471, 3.43e-05, 0.0005095, 
0.0005095, 0.0063104, 0.0144081, 0.0144081, 0.0288422, 5e-06, 
0.007368, 0.0327806, 0.0260155, 0.0317783, 0.0401111, 0.5365233, 
0.6871904, 0.685344, 0.690882, 0.7698019, 0.7843828, 0.006786, 
0.0012588, 0.002986, 0.0007816, 7.22e-05, 0.0001729, 0.0122922, 
0.0241941, 0.0250984, 0.0116185, 0.0079237, 0.0129819, 0.0935055, 
0.0822923, 0.1293752, 0.1278219, 0.1262733, 0.1515787, 0.0434134, 
0.0456658, 0.0715165, 0.076847, 0.0526556, 0.0822923, 0.6613029, 
0.7588443, 0.80619, 0.926435, 0.8997457, 1.0248411, 0.1140588, 
0.1435548, 0.1387894, 0.1762076, 0.1662615, 0.1419621), X22 = c(0.0726832, 
0.0726832, 0.0726832, 0.0726832, 0.1325099, 0.1184043, 0.0347125, 
0.0070692, 0.0040922, 0.0040922, 0.0049857, 0.0242003, 0.0019729, 
0.0019729, 0.0002927, 0.0019729, 0.010079, 0.0227778, 0.198659, 
0.198659, 0.198659, 0.2276663, 0.2276663, 0.2276663, 0.0019729, 
0.0019729, 0.0019729, 0.0019729, 0.0001686, 0.0001686, 0.0347125, 
0.0347125, 0.0347125, 0.0347125, 0.0347125, 0.0347125, 0.0125019, 
0.001195, 0.0125019, 0.0347125, 0.0392362, 0.0392362, 0.0010034, 
0.2276663, 0.0146509, 0.0146509, 0.0002927, 0.0002927, 0.6053688, 
0.6053688, 0.6053688, 0.6053688, 0.6053688, 0.5991153, 0.0392362, 
0.0429098, 0.0429098, 0.0429098, 0.0805971, 0.060793), X33 = c(0.0278656, 
0.0278655, 0.0278656, 0.0278657, 0.0278658, 0.0278657, 0.0278656, 
0.0278657, 0.0278656, 0.0278656, 0.0278657, 0.2057866, 0.1054407, 
0.1054406, 0.1054407, 0.1054409, 0.1054406, 0.1054407, 0.1054407, 
0.1054407, 0.1054406, 0.1054407, 0.1054407, 0.1054407, 0.0013317, 
0.0013317, 0.0013317, 0.0013317, 0.0013316, 0.0013316, 0.1054407, 
0.1054408, 0.1054406, 0.1054408, 0.1054409, 0.1054408, 0.0278656, 
0.0278656, 0.0278656, 0.0278657, 0.0278656, 0.0278657, 0.0013317, 
0.0013317, 0.0013317, 0.0013316, 0.0013317, 0.0013317, 0.2057866, 
0.2057868, 0.2057867, 0.2057866, 0.2057867, 0.2057867, 0.0278656, 
0.0278656, 0.0278656, 0.0278657, 0.0278656, 0.0278656), X44 = c(0.035917, 
0.0144962, 0.0229366, 0.0110277, 0.0119271, 0.0451647, 0.0218489, 
0.0150384, 0.057606, 0.1182712, 0.1055315, 0.1355821, 0.0004562, 
0.067663, 0.0433581, 0.025937, 0.0298464, 0.2895865, 1.1291146, 
1.2522852, 1.6424926, 1.8352695, 1.7621298, 1.6153454, 0.0081885, 
0.0072383, 0.0601439, 0.108355, 0.1624331, 0.0282419, 0.0741732, 
0.1346791, 0.2333414, 0.2406752, 0.1566515, 0.177853, 0.0150305, 
0.1546519, 0.3465014, 0.3848113, 0.477356, 0.2823842, 0.0364976, 
0.0880988, 0.2840281, 0.3312161, 0.2642322, 0.5584792, 0.6232851, 
1.140763, 1.105346, 1.498237, 1.4823203, 1.5622503, 0.4051957, 
0.3348103, 0.4427461, 0.6233453, 0.5758869, 0.5890146), X12 = c(0.0956403, 
0.0315645, 0.0379369, 0.0488, 0.0718773, 0.004032, -0.0084107, 
-0.0037956, -0.0101633, -0.0153571, -0.016951, -0.052839, 0.0001992, 
-0.0076253, 0.0061953, -0.0143284, 0.0357935, 0.0604531, 0.6529476, 
0.7389629, 0.7379694, 0.7931974, 0.8372764, 0.8451687, 0.007318, 
0.0031519, 0.0048543, 0.0024836, -0.0002207, 0.0003415, -0.0413131, 
-0.0579599, -0.0590332, -0.040165, -0.0331694, -0.0424562, -0.0683811, 
0.0198335, -0.0804346, -0.1332219, 0.1407761, 0.1542384, -0.0132001, 
0.2039271, 0.064739, 0.0671083, 0.0078519, 0.009816, 1.2654361, 
1.3555525, 1.3972004, 1.4977782, 1.476046, 1.5671604, 0.1337944, 
0.1569702, 0.1543428, 0.1739084, 0.2315184, 0.1857988), X13 = c(-0.0592187, 
-0.0195441, -0.0234898, -0.0302161, -0.0329612, -0.001956, 0.0075357, 
0.0075357, 0.0265212, 0.0400744, 0.0400745, 0.1540823, -0.0014559, 
0.0557455, 0.1175824, 0.1047493, 0.1157709, 0.1300668, 0.4756948, 
0.5383598, 0.5376359, 0.539804, 0.5698015, 0.5751724, 0.0060122, 
0.0025895, 0.0039881, 0.0020405, -0.0006203, 0.0009596, 0.0720028, 
0.1010157, 0.1028862, 0.0700018, 0.0578095, 0.0739951, 0.1020899, 
0.0957731, 0.1200853, 0.1193625, 0.1186369, 0.1299822, -0.0152069, 
-0.0155964, -0.0195178, -0.020232, -0.0167475, -0.0209367, 0.7378002, 
0.7903421, 0.8146242, 0.8732649, 0.8605944, 0.9184741, 0.1127532, 
0.1264949, 0.1243776, 0.1401448, 0.1361319, 0.1257913), X14 = c(0.0672317, 
0.0140965, -0.0213113, -0.0190084, -0.0215643, -0.0024902, 0.0066728, 
0.0055359, 0.0381323, 0.0825606, 0.0779874, 0.1250678, 9.58e-05, 
0.0446562, 0.0754004, 0.0519525, 0.0615944, 0.2155517, 1.5566583, 
1.8553257, 2.1219542, 2.2520698, 2.3293698, 2.2512656, -0.0149087, 
-0.0060371, -0.0268021, -0.0184058, 0.0068509, -0.0044193, 0.0603905, 
0.1141655, 0.1530555, 0.1057598, 0.0704632, 0.0961013, 0.0749781, 
0.225625, 0.4234557, 0.4435643, 0.4910287, 0.4137798, 0.0796112, 
0.1268559, 0.2850453, 0.3190797, 0.2359094, 0.4287589, 1.2840253, 
1.8608186, 1.8879819, 2.3562846, 2.3097284, 2.5306587, 0.4299589, 
0.4384683, 0.4957759, 0.6628368, 0.6188629, 0.5783347), X23 = c(-0.090008, 
-0.0900079, -0.090008, -0.0900082, -0.1215318, -0.1148811, -0.0622024, 
-0.0280705, -0.021357, -0.021357, -0.0235737, -0.1411395, -0.0288461, 
-0.0288461, 0.0111111, -0.0288461, 0.0651992, 0.0980145, 0.2894597, 
0.2894597, 0.2894596, 0.3098729, 0.3098728, 0.3098728, 0.0032418, 
0.0032418, 0.0032418, 0.0032418, 0.0009477, 0.0009477, -0.1209977, 
-0.1209977, -0.1209977, -0.1209978, -0.1209978, -0.1209978, -0.0373295, 
0.0115413, -0.0373295, -0.0622025, 0.0661313, 0.0661315, 0.0023119, 
-0.0348239, -0.0088341, -0.008834, -0.0012487, -0.0012487, 0.7059088, 
0.7059091, 0.7059089, 0.7059087, 0.7059089, 0.7022534, 0.0661314, 
0.069158, 0.069158, 0.0691581, 0.0947815, 0.0823173), X24 = c(0.1021872, 
0.0649193, -0.0816604, -0.0566224, -0.07951, -0.1462559, -0.0550792, 
-0.0206213, -0.0307072, -0.0439992, -0.0458758, -0.1145622, 0.0018975, 
-0.0231078, 0.0071251, -0.0143068, 0.0346884, 0.1624334, 0.9472248, 
0.9975523, 1.1424462, 1.2927938, 1.2667716, 1.2128639, -0.0080387, 
-0.0075579, -0.021786, -0.029242, -0.0104668, -0.0043644, -0.1014837, 
-0.1367487, -0.1799985, -0.1828053, -0.1474824, -0.1571461, -0.027416, 
0.0271893, -0.1316346, -0.2311516, 0.2737124, 0.2105201, -0.0121031, 
0.2832464, 0.129016, 0.1393217, 0.0175893, 0.0255716, 1.2285233, 
1.6620256, 1.636022, 1.9047161, 1.8945717, 1.9349088, 0.2521772, 
0.2397219, 0.2756675, 0.327094, 0.430882, 0.3784598), X34 = c(-0.0632724, 
-0.0401967, 0.0505626, 0.0350596, 0.0364614, 0.070952, 0.0493491, 
0.0409417, 0.0801305, 0.1148162, 0.1084566, 0.3340718, -0.0138716, 
0.1689311, 0.1352288, 0.1045911, 0.1121966, 0.3494807, 0.6900858, 
0.7267511, 0.8323111, 0.8798003, 0.8620908, 0.8254043, -0.0066043, 
-0.0062094, -0.0178988, -0.0240245, -0.0294144, -0.0122651, 0.1768714, 
0.2383331, 0.3137111, 0.3186031, 0.2570406, 0.2738829, 0.0409308, 
0.131293, 0.1965246, 0.2071043, 0.2306668, 0.1774128, -0.0139431, 
-0.0216627, -0.0388963, -0.042003, -0.0375163, -0.0545421, 0.7162785, 
0.9690284, 0.9538669, 1.110526, 1.1046117, 1.1340024, 0.2125185, 
0.1931807, 0.2221475, 0.26359, 0.2533568, 0.2562285)), row.names = c(NA, 
-60L), class = c("tbl_df", "tbl", "data.frame"))


y <- matrix(dt$YIT)
cons <- dt$Cons
x1 <- dt$X1
x2 <- dt$X2
x3 <- dt$X3
x4 <- dt$X4
x11 <- dt$X11
x22 <- dt$X22
x33 <- dt$X33
x44 <- dt$X44
x12 <- dt$X12
x13 <- dt$X13
x14 <- dt$X14
x23 <- dt$X23
x24 <- dt$X24
x34 <- dt$X34

x <- cbind(cons,x1,x2,x3,x4,x11,x22,x33,x44,x12,x13,x14,x23,x24,x34)

library(MASS)
xt <- t(x)
b_ols <- ginv((xt%*%x))%*%(xt%*%y);
startv <- c(b_ols,10, 0.1)

library(optimx)


n2 <- ncol(x)
n <-nrow(x)


ALSExg<- function(z) {
  beta <- z[1:n2]
  tet <- z[n2+1]
  sv <- z[n2+2]
  sv2 <- sv^2
  tet2<- tet^2

eps <- y-x%*%beta

f<- -(n*log(tet)+0.5*n*sv2*tet2+sum((eps*tet)+log(pnorm(-eps/sv-sv*tet))))
}

grr<- function(z) {
  beta <- z[1:n2]
  tet <- z[n2+1]
  sv <- z[n2+2]
  sv2 <- sv^2
  tet2<- tet^2

eps <- y-x%*%beta
  
  gg<- matrix(0,n,n2+2)

for (i in (1:n)){
    ci <- -eps[i]/sv-sv*tet
  deli <- dnorm(ci)%/%pnorm(ci)
  gg[i,]<- t(deli*matrix(c(x[i,],-sv,eps[i]/sv2-tet))+matrix(c(-tet*x[i,],1/tet+tet*sv2+eps[i],tet2*sv)))
}
 g<- -(colSums(gg))
  

}


res<-optim(startv,ALSExg,grr,method = "BFGS")
res

library(numDeriv)

H <- hessian(func = ALSExg, x = res$par)
g <- grad(func = ALSExg, x = res$par)
View(g)

当我不提供分析梯度时(使用具有不同参数化()的相同目标函数),该函数可以正常工作,但当我提供梯度时,它总是为我提供初始值(无论采用哪种方法)。收敛码为零,这表明它是收敛的,并且没有给出任何错误

不知道有没有人能帮我

非常感谢,,
Abbas

你在哪里定义
x
startv
?@J.C.Wahl我在另一块中定义了它们。在运行此区块之前,已经在环境中加载了。您是否可以将其添加到您的问题中以使其可复制?@J.C.Wahl当然可以。但我不知道如何共享excel文件?很好。上传(至少一个样本)数据的一种方法是使用
dput
(请参见
?dput
)并将结果粘贴到问题中。
function f=ALS(z) 
    
beta=z(1:n2);tet=z(n2+1);sv=z(n2+2);
eps=y-x*beta;

sv2=sv^2;tet2=tet^2;
f=-(n*log(tet)+.5*n*sv2*tet2+sum((eps*tet)+...
    log(normcdf(-eps/sv-sv*tet))));

end