R 从列中读取数据时遇到问题
我有大约280个个体的数据和两个称为“外来”和“prevgrad”的虚拟协变量。数据如下:R 从列中读取数据时遇到问题,r,max,apply,R,Max,Apply,我有大约280个个体的数据和两个称为“外来”和“prevgrad”的虚拟协变量。数据如下: Name Program foreign prevgrad ******* ******* 0 0 ******* ******* 0 0 ******* ******* 1 1 ******* ******* 0 0 ******* ******* 1 1
Name Program foreign prevgrad
******* ******* 0 0
******* ******* 0 0
******* ******* 1 1
******* ******* 0 0
******* ******* 1 1
******* ******* 0 1
每个人都属于一个程序集群,A或B。我将数据分为两个子集,A和B。我正在尝试生成一个简单的最大似然估计,并尝试执行以下操作:
##The density function for subset A
PrA <- function(u, piA0, piA1, piA2, piB0, piB1, piB2, z1, z2) {
(1/sqrt(2*pi)*exp(-u^2/2))*3*exp(piA0+piA1*z1+piA2*z2+u /(3*exp(piA0+piA1*z1+piA2*z2 + u)+5*exp(piB0+piB1*z1+piB2*z2))
}
logIntA <- function(a0, a1, a2, b0, b1, b2, zee1, zee2) {
log(integrate(function(u, piA0=a0, piA1=a1, piA2=a2, piB0=b0, piB1=b1, piB2=b2, z1=zee1, z2=zee2) PrA(u, piA0 = piA0, piA1 =piA1, piA2=piA2, piB0 = piB0, piB1 =piB1, piB2=piB2, z1=z1, z2=z2), lower=-10, upper=10)$integral)
}
#The density function for subset B
PrB <- function(u, piA0, piA1, piA2, piB0, piB1, piB2, z1, z2) {
(1/sqrt(2*pi)*exp(-u^2/2))*5*exp(piB0+piB1*z1+piB2*z2)/(3*exp(piA0 + piA1*z1 +piA2*z2 + u)+5*exp(piB0+piB1*z1+piB2*z2))
}
logIntB <- function(a0, a1, a2, b0, b1, b2, zee1, zee2) {
log(integrate(function(u, piA0=a0, piA1=a1, piA2=a2, piB0=b0, piB1=b1, piB2=b2, z1=zee1, z2=zee2) PrB(u, piA0 = piA0, piA1 =piA1, piA2=piA2, piB0 = piB0, piB1 =piB1, piB2=piB2, z1=z1, z2=z2), lower=-10, upper=10)$integral)
}
##The maximum likelihood statistic
toMax2 <- function(t) {
piA0=t[1]
piA1=t[2]
piA2=t[3]
piB0=t[4]
piB1=t[5]
piB2=t[6]
(sum(apply(studentsA[,c('foreign','prevgrad')],1, function(s) logIntA(piA0, piA1, piA2, piB0, piB1, piB2, s['foreign'], s['prevgrad'])))+sum(apply(students.AB[,c('foreign','prevgrad')],1, function(s) logIntB(piA0, piA1, piA2, piB0, piB1, piB2, s['foreign'], s['prevgrad']))))
}
子集A的密度函数
PrA我不认为为行向量
s
编制索引是你的问题。如果在base R中使用integrate(…)
函数,则返回的列表中没有$integral
元素。您需要的是$value
。我怀疑这会导致您使用日志(NULL)
,这会导致该错误。顺便说一句:R中有几个软件包可以使您尝试执行的操作更轻松。请参见stats4包中的包和mle(…)
,以及base R中的logLik(…)
。