Free Statistics

of Irreproducible Research!

Author's title

Author*The author of this computation has been verified*
R Software Modulerwasp_logisticregression.wasp
Title produced by softwareBias-Reduced Logistic Regression
Date of computationMon, 22 Oct 2012 15:33:50 -0400
Cite this page as followsStatistical Computations at FreeStatistics.org, Office for Research Development and Education, URL https://freestatistics.org/blog/index.php?v=date/2012/Oct/22/t13509344606xckxytvk1vxjk9.htm/, Retrieved Fri, 03 May 2024 21:41:45 +0000
Statistical Computations at FreeStatistics.org, Office for Research Development and Education, URL https://freestatistics.org/blog/index.php?pk=182208, Retrieved Fri, 03 May 2024 21:41:45 +0000
QR Codes:

Original text written by user:
IsPrivate?No (this computation is public)
User-defined keywords
Estimated Impact59
Family? (F = Feedback message, R = changed R code, M = changed R Module, P = changed Parameters, D = changed Data)
-       [Bias-Reduced Logistic Regression] [WS6 2 vraag 1] [2012-10-22 19:33:50] [074a00bbc2315ea54a3f557bcf69eecf] [Current]
Feedback Forum

Post a new message
Dataseries X:
255
280.2
299.9
339.2
374.2
393.5
389.2
381.7
375.2
369
357.4
352.1
346.5
342.9
340.3
328.3
322.9
314.3
308.9
294
285.6
281.2
280.3
278.8
274.5
270.4
263.4
259.9
258
262.7
284.7
311.3
322.1
327
331.3
333.3
321.4
327
320
314.7
316.7
314.4
321.3
318.2
307.2
301.3
287.5
277.7
274.4
258.8
253.3
251
248.4
249.5
246.1
244.5
243.6
244
240.8
249.8
248
259.4
260.5
260.8
261.3
259.5
256.6
257.9
256.5
254.2
253.3
253.8
255.5
257.1
257.3
253.2
252.8
252
250.7
252.2
250
251
253.4
251.2
255.6
261.1
258.9
259.9
261.2
264.7
267.1
266.4
267.7
268.6
267.5
268.5
268.5
270.5
270.9
270.1
269.3
269.8
270.1
264.9
263.7
264.8
263.7
255.9
276.2
360.1
380.5
373.7
369.8
366.6
359.3
345.8
326.2
324.5
328.1
327.5
324.4
316.5
310.9
301.5
291.7
290.4
287.4
277.7
281.6
288
276
272.9
283
283.3
276.8
284.5
282.7
281.2
287.4
283.1
284
285.5
289.2
292.5
296.4
305.2
303.9
311.5
316.3
316.7
322.5
317.1
309.8
303.8
290.3
293.7
291.7
296.5
289.1
288.5
293.8
297.7
305.4
302.7
302.5
303
294.5
294.1
294.5
297.1
289.4
292.4
287.9
286.6
280.5
272.4
269.2
270.6
267.3
262.5
266.8
268.8
263.1
261.2
266
262.5
265.2
261.3
253.7
249.2
239.1
236.4
235.2
245.2
246.2
247.7
251.4
253.3
254.8
250
249.3
241.5
243.3
248
253
252.9
251.5
251.6
253.5
259.8
334.1
448
445.8
445
448.2
438.2
439.8
423.4
410.8
408.4
406.7
405.9
402.7
405.1
399.6
386.5
381.4
375.2
357.7
359
355
352.7
344.4
343.8
338
339
333.3
334.4
328.3
330.7
330
331.6
351.2
389.4
410.9
442.8
462.8
466.9
461.7
439.2
430.3
416.1
402.5
397.3
403.3
395.9
387.8
378.6
377.1
370.4
362
350.3
348.2
344.6
343.5
342.8
347.6
346.6
349.5
342.1
342
342.8
339.3
348.2
333.7
334.7
354
367.7
363.3
358.4
353.1
343.1
344.6
344.4
333.9
331.7
324.3
321.2
322.4
321.7
320.5
312.8
309.7
315.6
309.7
304.6
302.5
301.5
298.8
291.3
293.6
294.6
285.9
297.6
301.1
293.8
297.7
292.9
292.1
287.2
288.2
283.8
299.9
292.4
293.3
300.8
293.7
293.1
294.4
292.1
291.9
282.5
277.9
287.5
289.2
285.6
293.2
290.8
283.1
275
287.8
287.8
287.4
284
277.8
277.6
304.9
294
300.9
324
332.9
341.6
333.4
348.2
344.7
344.7
329.3
323.5
323.2
317.4
330.1
329.2
334.9
315.8
315.4
319.6
317.3
313.8
315.8
311.3




Summary of computational transaction
Raw Inputview raw input (R code)
Raw Outputview raw output of R engine
Computing time1 seconds
R Server'Gertrude Mary Cox' @ cox.wessa.net
R Engine error message
Error in family$linkfun(mustart) : 
  Argument mu must be a nonempty numeric vector
Calls: brglm -> fit.proc -> glm.fit -> 
Execution halted

\begin{tabular}{lllllllll}
\hline
Summary of computational transaction \tabularnewline
Raw Input & view raw input (R code)  \tabularnewline
Raw Output & view raw output of R engine  \tabularnewline
Computing time & 1 seconds \tabularnewline
R Server & 'Gertrude Mary Cox' @ cox.wessa.net \tabularnewline
R Engine error message & 
Error in family$linkfun(mustart) : 
  Argument mu must be a nonempty numeric vector
Calls: brglm -> fit.proc -> glm.fit -> 
Execution halted
\tabularnewline \hline \end{tabular} %Source: https://freestatistics.org/blog/index.php?pk=182208&T=0

[TABLE]
[ROW][C]Summary of computational transaction[/C][/ROW]
[ROW][C]Raw Input[/C][C]view raw input (R code) [/C][/ROW]
[ROW][C]Raw Output[/C][C]view raw output of R engine [/C][/ROW]
[ROW][C]Computing time[/C][C]1 seconds[/C][/ROW]
[ROW][C]R Server[/C][C]'Gertrude Mary Cox' @ cox.wessa.net[/C][/ROW]
[ROW][C]R Engine error message[/C][C]
Error in family$linkfun(mustart) : 
  Argument mu must be a nonempty numeric vector
Calls: brglm -> fit.proc -> glm.fit -> 
Execution halted
[/C][/ROW] [/TABLE] Source: https://freestatistics.org/blog/index.php?pk=182208&T=0

Globally Unique Identifier (entire table): ba.freestatistics.org/blog/index.php?pk=182208&T=0

As an alternative you can also use a QR Code:  

The GUIDs for individual cells are displayed in the table below:

Summary of computational transaction
Raw Inputview raw input (R code)
Raw Outputview raw output of R engine
Computing time1 seconds
R Server'Gertrude Mary Cox' @ cox.wessa.net
R Engine error message
Error in family$linkfun(mustart) : 
  Argument mu must be a nonempty numeric vector
Calls: brglm -> fit.proc -> glm.fit -> 
Execution halted



Parameters (Session):
Parameters (R input):
R code (references can be found in the software module):
library(brglm)
roc.plot <- function (sd, sdc, newplot = TRUE, ...)
{
sall <- sort(c(sd, sdc))
sens <- 0
specc <- 0
for (i in length(sall):1) {
sens <- c(sens, mean(sd >= sall[i], na.rm = T))
specc <- c(specc, mean(sdc >= sall[i], na.rm = T))
}
if (newplot) {
plot(specc, sens, xlim = c(0, 1), ylim = c(0, 1), type = 'l',
xlab = '1-specificity', ylab = 'sensitivity', main = 'ROC plot', ...)
abline(0, 1)
}
else lines(specc, sens, ...)
npoints <- length(sens)
area <- sum(0.5 * (sens[-1] + sens[-npoints]) * (specc[-1] -
specc[-npoints]))
lift <- (sens - specc)[-1]
cutoff <- sall[lift == max(lift)][1]
sensopt <- sens[-1][lift == max(lift)][1]
specopt <- 1 - specc[-1][lift == max(lift)][1]
list(area = area, cutoff = cutoff, sensopt = sensopt, specopt = specopt)
}
roc.analysis <- function (object, newdata = NULL, newplot = TRUE, ...)
{
if (is.null(newdata)) {
sd <- object$fitted[object$y == 1]
sdc <- object$fitted[object$y == 0]
}
else {
sd <- predict(object, newdata, type = 'response')[newdata$y ==
1]
sdc <- predict(object, newdata, type = 'response')[newdata$y ==
0]
}
roc.plot(sd, sdc, newplot, ...)
}
hosmerlem <- function (y, yhat, g = 10)
{
cutyhat <- cut(yhat, breaks = quantile(yhat, probs = seq(0,
1, 1/g)), include.lowest = T)
obs <- xtabs(cbind(1 - y, y) ~ cutyhat)
expect <- xtabs(cbind(1 - yhat, yhat) ~ cutyhat)
chisq <- sum((obs - expect)^2/expect)
P <- 1 - pchisq(chisq, g - 2)
c('X^2' = chisq, Df = g - 2, 'P(>Chi)' = P)
}
x <- as.data.frame(t(y))
r <- brglm(x)
summary(r)
rc <- summary(r)$coeff
try(hm <- hosmerlem(y[1,],r$fitted.values),silent=T)
try(hm,silent=T)
bitmap(file='test0.png')
ra <- roc.analysis(r)
dev.off()
te <- array(0,dim=c(2,99))
for (i in 1:99) {
threshold <- i / 100
numcorr1 <- 0
numfaul1 <- 0
numcorr0 <- 0
numfaul0 <- 0
for (j in 1:length(r$fitted.values)) {
if (y[1,j] > 0.99) {
if (r$fitted.values[j] >= threshold) numcorr1 = numcorr1 + 1 else numfaul1 = numfaul1 + 1
} else {
if (r$fitted.values[j] < threshold) numcorr0 = numcorr0 + 1 else numfaul0 = numfaul0 + 1
}
}
te[1,i] <- numfaul1 / (numfaul1 + numcorr1)
te[2,i] <- numfaul0 / (numfaul0 + numcorr0)
}
bitmap(file='test1.png')
op <- par(mfrow=c(2,2))
plot((1:99)/100,te[1,],xlab='Threshold',ylab='Type I error', main='1 - Specificity')
plot((1:99)/100,te[2,],xlab='Threshold',ylab='Type II error', main='1 - Sensitivity')
plot(te[1,],te[2,],xlab='Type I error',ylab='Type II error', main='(1-Sens.) vs (1-Spec.)')
plot((1:99)/100,te[1,]+te[2,],xlab='Threshold',ylab='Sum of Type I & II error', main='(1-Sens.) + (1-Spec.)')
par(op)
dev.off()
load(file='createtable')
a<-table.start()
a<-table.row.start(a)
a<-table.element(a,'Coefficients of Bias-Reduced Logistic Regression',5,TRUE)
a<-table.row.end(a)
a<-table.row.start(a)
a<-table.element(a,'Variable',header=TRUE)
a<-table.element(a,'Parameter',header=TRUE)
a<-table.element(a,'S.E.',header=TRUE)
a<-table.element(a,'t-stat',header=TRUE)
a<-table.element(a,'2-sided p-value',header=TRUE)
a<-table.row.end(a)
for (i in 1:length(rc[,1])) {
a<-table.row.start(a)
a<-table.element(a,labels(rc)[[1]][i],header=TRUE)
a<-table.element(a,rc[i,1])
a<-table.element(a,rc[i,2])
a<-table.element(a,rc[i,3])
a<-table.element(a,2*(1-pt(abs(rc[i,3]),r$df.residual)))
a<-table.row.end(a)
}
a<-table.end(a)
table.save(a,file='mytable.tab')
a<-table.start()
a<-table.row.start(a)
a<-table.element(a,'Summary of Bias-Reduced Logistic Regression',2,TRUE)
a<-table.row.end(a)
a<-table.row.start(a)
a<-table.element(a,'Deviance',1,TRUE)
a<-table.element(a,r$deviance)
a<-table.row.end(a)
a<-table.row.start(a)
a<-table.element(a,'Penalized deviance',1,TRUE)
a<-table.element(a,r$penalized.deviance)
a<-table.row.end(a)
a<-table.row.start(a)
a<-table.element(a,'Residual Degrees of Freedom',1,TRUE)
a<-table.element(a,r$df.residual)
a<-table.row.end(a)
a<-table.row.start(a)
a<-table.element(a,'ROC Area',1,TRUE)
a<-table.element(a,ra$area)
a<-table.row.end(a)
a<-table.row.start(a)
a<-table.element(a,'Hosmer–Lemeshow test',2,TRUE)
a<-table.row.end(a)
a<-table.row.start(a)
a<-table.element(a,'Chi-square',1,TRUE)
phm <- array('NA',dim=3)
for (i in 1:3) { try(phm[i] <- hm[i],silent=T) }
a<-table.element(a,phm[1])
a<-table.row.end(a)
a<-table.row.start(a)
a<-table.element(a,'Degrees of Freedom',1,TRUE)
a<-table.element(a,phm[2])
a<-table.row.end(a)
a<-table.row.start(a)
a<-table.element(a,'P(>Chi)',1,TRUE)
a<-table.element(a,phm[3])
a<-table.row.end(a)
a<-table.end(a)
table.save(a,file='mytable1.tab')
a<-table.start()
a<-table.row.start(a)
a<-table.element(a,'Fit of Logistic Regression',4,TRUE)
a<-table.row.end(a)
a<-table.row.start(a)
a<-table.element(a,'Index',1,TRUE)
a<-table.element(a,'Actual',1,TRUE)
a<-table.element(a,'Fitted',1,TRUE)
a<-table.element(a,'Error',1,TRUE)
a<-table.row.end(a)
for (i in 1:length(r$fitted.values)) {
a<-table.row.start(a)
a<-table.element(a,i,1,TRUE)
a<-table.element(a,y[1,i])
a<-table.element(a,r$fitted.values[i])
a<-table.element(a,y[1,i]-r$fitted.values[i])
a<-table.row.end(a)
}
a<-table.end(a)
table.save(a,file='mytable2.tab')
a<-table.start()
a<-table.row.start(a)
a<-table.element(a,'Type I & II errors for various threshold values',3,TRUE)
a<-table.row.end(a)
a<-table.row.start(a)
a<-table.element(a,'Threshold',1,TRUE)
a<-table.element(a,'Type I',1,TRUE)
a<-table.element(a,'Type II',1,TRUE)
a<-table.row.end(a)
for (i in 1:99) {
a<-table.row.start(a)
a<-table.element(a,i/100,1,TRUE)
a<-table.element(a,te[1,i])
a<-table.element(a,te[2,i])
a<-table.row.end(a)
}
a<-table.end(a)
table.save(a,file='mytable3.tab')