On Jul 10, 2009, at 9:46 AM, Peter Schüffler wrote:

Hi,

I have a question about logistic regression in R.

Suppose I have a small list of proteins P1, P2, P3 that predict a two-class target T, say cancer/noncancer. Lets further say I know that I can build a simple logistic regression model in R

model <- glm(T ~ ., data=d.f(Y), family=binomial) (Y is the dataset of the Proteins).

This works fine. T is a factored vector with levels cancer, noncancer. Proteins are numeric.

Now, I want to use predict.glm to predict a new data.

predict(model, newdata=testsamples, type="response") (testsamples is a small set of new samples).

The result is a vector of the probabilites for each sample in testsamples. But probabilty WHAT for? To belong to the first level in T? To belong to second level in T?

Is this fallowing expression
factor(predict(model, newdata=testsamples, type="response") >= 0.5)
TRUE, when the new sample is classified to Cancer or when it's classified to Noncancer? And why not the other way around?

Thank you,

Peter

As per the Details section of ?glm:

A typical predictor has the form response ~ terms where response is the (numeric) response vector and terms is a series of terms which specifies a linear predictor forresponse. ***For binomial and quasibinomial families the response can also be specified as a factor (when the first level denotes failure and all others success)*** or as a two-column matrix with the columns giving the numbers of successes and failures. A terms specification of the form first + second indicates all the terms in first together with all the terms in second with any duplicates removed.


So, given your description above, you are predicting "noncancer"...that is, you are predicting the probability of the second level of the factor ("success"), given the covariates.

If you want to predict "cancer", alter the factor levels thusly:

  T <- factor(T, levels = c("noncancer", "cancer"))

By default, R will alpha sort the factor levels, so "cancer" would be first.

Think of it in terms of using a 0,1 integer code for absence,presence, where you are predicting the probability of a '1', or the presence of the event or characteristic of interest.

BTW, using 'T' as the name of the response vector is not a good habit:

> T
[1] TRUE

'T' is shorthand for the built in R constant TRUE. R is generally smart enough to know the difference, but it is better to avoid getting into trouble by not using it.

HTH,

Marc Schwartz

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to