我想估计具有二元因变量的非线性模型的系数。出现非线性是因为两个回归量A
和B
分别依赖于数据集的子集以及两个参数lambda1
和lambda2
:
y = alpha + beta1 * A(lambda1) + beta2 * B(lambda2) + delta * X + epsilon
对于每次观察 i ,我们有
a
和Rs
是data.frame
中的变量。回归量B(lambda2)
以类似的方式定义。
此外,我需要在Stata中包含被称为 pweights 的内容,即调查权重或抽样权重。出于这个原因,我正在使用Thomas Lumley的R包survey。
首先,我为A
(和B
)创建了一个函数,即:
A <- function(l1){
R <- as.matrix(data[,1:(80)])
a <- data[,169]
N = length(a)
var <- numeric(N)
for (i in 1:N) {
ai <- rep(a[i],a[i]-1) # vector of a(i)
k <- 1:(a[i]-1) # numbers from 1 to a(i)-1
num <- (ai-k)^l1
den <- sum((ai-k)^l1)
w <- num/den
w <- c(w,rep(0,dim(R)[2]-length(w)))
var[i] <- R[i,] %*% w
}
return(var)
}
B <- function(l2){
C <- as.matrix(data[,82:(161-1)])
a <- data[,169]
N = length(a)
var <- numeric(N)
for (i in 1:N) {
ai <- rep(a[i],a[i]-1) # vector of a(i)
k <- 1:(a[i]-1) # numbers from 1 to a(i)-1
num <- (ai-k)^l2
den <- sum((ai-k)^l2)
w <- num/den
w <- c(w,rep(0,dim(C)[2]-length(w)))
var[i] <- C[i,] %*% w
}
return(var)
}
但问题是我不知道如何在模型中(或在调查设计中使用函数svydesign
)包含非线性回归量:
d_test <- svydesign(id=~1, data = data, weights = ~data$hw0010)
因为,当我尝试估计模型时:
# loglikelihood function:
LLsvy <- function(y, model, lambda1, lambda2){
aux1 <- y * log(pnorm(model))
aux2 <- (1-y) * log(1-pnorm(model))
LL <- (aux1) + (aux2)
return(LL)
}
fit <- svymle(loglike=LLsvy,
formulas=list(~y, model = ~ A(lambda1)+B(lambda2)+X,lambda1=~1,lambda2=~1),
design=d_test,
start=list(c(0,0,0,0),c(lambda1=11),c(lambda2=8)),
na.action="na.exclude")
我收到错误消息:
Error in eval(expr, envir, enclos) : object 'lambda1' not found
我认为问题在于包含非线性部分,因为如果我为某些A
和B
修复了lambda1
和lambda2
,那么一切正常。模型变成线性的:
lambda1=11
lambda2=8
data$A <- A(lambda1)
data$B <- B(lambda2)
d_test <- svydesign(id=~1, data = data, weights = ~data$hw0010)
LLsvylin <- function(y, model){
aux1 <- y * log(pnorm(model))
aux2 <- (1-y) * log(1-pnorm(model))
LL <- (aux1) + (aux2)
return(LL)
}
fitlin <- svymle(loglike=LLsvylin,
formulas=list(~y, model = ~A+B+X),
design=d_test,
start=list(0,0,0,0),
na.action="na.exclude")
相反,如果我不使用采样权重,我可以使用包mle
中的函数stats4
或函数mle2
轻松估算我的非线性模型包bbmle
。
总结一下,
如何在估算非线性模型(我可以使用svymle
或mle
进行)时组合采样权重(mle2
)?
=============================================== ==========================
使用函数svyglm
(具有固定lambda1
和lambda2
时,模型的非线性部分也会出现问题,以便为{{1}获得良好的起始值}):
svymle
因为我收到错误消息:
lambda1=11
lambda2=8
model0 = y ~ A(lambda1) + B(lambda2) + X
probit1 = svyglm(formula = model0,
data = data,
family = binomial(link=probit),
design = d_test)
答案 0 :(得分:0)
这不是svymle
所做的-它适用于广义线性模型,该模型具有线性预测变量和可能复杂的似然或损失函数。您需要具有简单损失函数但复杂的预测变量的非线性加权最小二乘法。
在调查包中没有实现设计加权的非线性最小二乘法,这可能是因为以前没有人要求一个。您可以尝试通过电子邮件发送软件包作者。
答案 1 :(得分:0)
即将推出的调查软件包的第4版将具有功能svynls
,因此,如果您知道如何在不使用nls
进行权重抽样的情况下拟合模型,则可以通过抽样权重对其进行拟合。