log中的logit模型

时间:2014-08-19 10:08:28

标签: r

我正在尝试在R中创建logit模型,但是我遇到了一些问题。

我的数据看起来像那样

head(duomframe)

 DNSB.Ražuva X1 X1.1 X0 X0.1 X40 X8013.54 X1.2 X0.2 X0.3 X0.4 X0.5
1 UAB Antakalnio būstas  1    1  0    0  51   511.55    0    1    0    0    0
2 UAB Antakalnio būstas  1    0  1    0  54   519.46    0    1    0    0    0
3 UAB Antakalnio būstas  1    0  1    0  42   492.70    0    1    0    0    0
4 UAB Antakalnio būstas  1    0  1    0  51   515.68    0    0    0    0    0
5 UAB Antakalnio būstas  1    0  1    0  49  2308.78    0    1    0    0    0
6 UAB Antakalnio būstas  1    0  1    0  63   381.75    0    1    0    0    0
  X0.6 X7197.16 X78.23 X4 X1.3 X0.7 X0.8 X7783.31 X2 X1.4 X42.22 X14 X33.33
1    0     0.00  86.80  2    4    0    0   173.36  1    1  58.31   5 189.79
2    0     0.00  53.67  1    2    0    3   204.85  0    1  66.29   2 140.00
3    0     0.00  52.13  2    3    0    0   160.73  0    2  93.69   2 119.03
4    1   415.68  45.19  3    1    2    0   641.54  0    1  53.56   6 102.11
5    0     0.00 103.44  3    1    3    0   113.08  0    2 122.45   5 527.61
6    0     0.00  49.75  4    3    0    0   384.62  0    3  75.09   3  69.46
  X0.9 X12
1    0   4
2    1   3
3    2   4
4    0   6
5    0   5
6    1   4

我将变量类型更改为数字:

duomframe[,-1] <- lapply(duomframe[,-1], function(x) {as.numeric(gsub(",", "", x)

并且这些是二项式我改变因素,因为我发现我应该这样做

gyvenvietefac<-as.factor(gyvenviete)
vyrasfac<-as.factor(vyras)
moterisfac<-as.factor(moteris)
juridinisfac<-as.factor(juridinis)
dirbamafac<-as.factor(dirbama)
atsiskaitytafac<-as.factor(atsiskaityta)
nerateisiniofac<-as.factor(nerateisinio)
nesuejesterminasfac<-as.factor(nesuejesterminas)
notarasfac<-as.factor(notaras)
perrasytasfac<-as.factor(perrasytas)

而不是我试图创建模型:

glm.out = glm((moketa_menesiu/laikotarpis) ~ gyvenvietefac + vyrasfac + moterisfac + 
               juridinisfac + amzius + dirbamafac + atsiskaitytafac + nerateisiniofac +
               nesuejesterminasfac + notarasfac + perrasytasfac + (neapmoketaslikutis/skola) + (neapmoketaslikutis/einamojiskola) + 
               moketa_kartu + plotas + gyvsk + kiekvekseliuturejo + kiekperrasytas + (mokejimuvidurkis/priskaitymuvidurkis), 
               gyvenvietefac="binomial", vyrasfac="binomial", moterisfac="binomial", juridinisfac="binomial", dirbamafac="binomial", atsiskaitytafac="binomial", nerateisiniofac="binomial", 
               nesuejesterminasfac="binomial", notarasfac="binomial", perrasytasfac="binomial", data=duomframe[,1])

但是就这样,R给了我一个错误:

Error in glm.control(gyvenvietefac = "binomial", vyrasfac = "binomial",  : 
  unused arguments (gyvenvietefac = "binomial", vyrasfac = "binomial", moterisfac = "binomial", juridinisfac = "binomial", dirbamafac = "binomial", atsiskaitytafac = "binomial", nerateisiniofac = "binomial", nesuejesterminasfac = "binomial", notarasfac = "binomial", perrasytasfac = "binomial")

我找到了另一种方法,我应该使用二项式(“logit”)而不是“二项式”,但它给我一个错误:

Error in glm.control(gyvenvietefac = list(family = "binomial", link = "logit",  : 
  unused arguments (gyvenvietefac = list(family = "binomial", link = "logit", linkfun = function (mu) 
.Call(C_logit_link, mu), linkinv = function (eta) 
.Call(C_logit_linkinv, eta), variance = function (mu) 
mu * (1 - mu), dev.resids = function (y, mu, wt) 
.Call(C_binomial_dev_resids, y, mu, wt), aic = function (y, n, mu, wt, dev) 
{
    m <- if (any(n > 1)) n else wt
    -2 * sum(ifelse(m > 0, (wt/m), 0) * dbinom(round(m * y), round(m), mu, log = TRUE))
}, mu.eta = function (eta) 
.Call(C_logit_mu_eta, eta), initialize = expression({
    if (NCOL(y) == 1) {
        if (is.factor(y)) y <- y != levels(y)[1]
        n <- rep.int(1, nobs)
        y[weights == 0] <- 0
        if (any(y < 0 | y > 1)) stop("y values must be 0 <= y <= 1")
        mustart <- (weights * y + 0.5)/(weights + 1)
        m <- weights * y
        if (any(abs(m - round(m)) > 0.001)) warning("non-integer #successes in a binomial glm!")
    } else if (NCOL(y) == 2) {
        if (any(abs(y - round(y)) > 0.001)

请告知我应该如何使用这个。 谢谢

2 个答案:

答案 0 :(得分:1)

如果没有reproducible data,很难复制错误。

试试这个:

glm.out = glm(formula = (moketa_menesiu/laikotarpis) ~ gyvenvietefac + 
                vyrasfac + moterisfac + juridinisfac + amzius + dirbamafac + 
                atsiskaitytafac + nerateisiniofac + nesuejesterminasfac + 
                notarasfac + perrasytasfac + (neapmoketaslikutis/skola) + 
                (neapmoketaslikutis/einamojiskola) + moketa_kartu + plotas + 
                gyvsk + kiekvekseliuturejo + kiekperrasytas + 
                (mokejimuvidurkis/priskaitymuvidurkis),
              family=binomial(logit),
              data=duomframe[,1])

答案 1 :(得分:0)

logit模型的标准代码包含3个变量:

logit.ll <- function(beta,y,x){
z <- beta[1] + x %*% beta[2:3]
p <- 1/(1+exp(-z))
prob <- ifelse (y==1,p,1-p)
-sum(log(prob))
}

然后对于结果表,您可以使用以下内容:

covvar <- solve(m$hessian)
t.stat <- estimate/sd
p.value <- 2*pnorm(-abs(t.stat))