我正在尝试在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)
请告知我应该如何使用这个。 谢谢
答案 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))