[SOLVED] Binomial test on examples whose attributes specify the parameters
tennenrishin
New Altair Community Member
Pardon me if this is a silly question.
Suppose I have an ExampleSet with two attributes, eg:
TC SC
005 3
010 7
150 83
etc...
...where TC is the (Bernoulli) "Trial Count" and SC is the "Success Count", and the probability of success at each trial is 0.5. I would like to perform the binomial test on each example. In other words, I would like to generate a new attribute SS (Statistical Significance) indicating (for each example) the probability that TC trials will result in at least SC successes. How should I approach this?
I can't see how I could construct the cumulative binomial distribution from the functions available in the Generate Attributes operator, except perhaps if TC is small, and using loops. I'm going to look into how much Hoeffding's inequality and Chernoff's inequality can help, but am I overlooking any simpler way of doing this? Perhaps some statistical tests already implemented in one of the RM extensions?
Thanks in advance.
Suppose I have an ExampleSet with two attributes, eg:
TC SC
005 3
010 7
150 83
etc...
...where TC is the (Bernoulli) "Trial Count" and SC is the "Success Count", and the probability of success at each trial is 0.5. I would like to perform the binomial test on each example. In other words, I would like to generate a new attribute SS (Statistical Significance) indicating (for each example) the probability that TC trials will result in at least SC successes. How should I approach this?
I can't see how I could construct the cumulative binomial distribution from the functions available in the Generate Attributes operator, except perhaps if TC is small, and using loops. I'm going to look into how much Hoeffding's inequality and Chernoff's inequality can help, but am I overlooking any simpler way of doing this? Perhaps some statistical tests already implemented in one of the RM extensions?
Thanks in advance.
Tagged:
0
Answers
-
Hello
It's very likely R will have something (I haven't checked ). If so it's not too hard to call an R script from an RM process.
Alternatively, does a Java library exist to do this calculation? If so, you could use a Groovy script.
regards
Andrew0 -
Thanks Andrew! I've installed R and set up the R extension.
I've never used R before. I'm willing to learn, but do I need to take on the full learning curve at this point, or is it possible to give me some pointers to get me up and running quickly on this particular application?
Best,
Isak0 -
Hello
Here's an example of an R script being called
http://rapidminernotes.blogspot.co.uk/2011/06/counting-clusters-part-r.html
You'll have to do a bit of Googling to find the right R library for your specific requirement
regards
Andrew0 -
Simpler than I thought!
This R extension really opens up a new dimension on the span of problems that RM can tackle. Thanks for your help, Andrew.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<process version="5.2.008">
<context>
<input/>
<output/>
<macros/>
</context>
<operator activated="true" class="process" compatibility="5.2.008" expanded="true" name="Process">
<process expanded="true" height="431" width="681">
<operator activated="true" class="generate_data_user_specification" compatibility="5.2.008" expanded="true" height="60" name="Generate Data by User Specification" width="90" x="45" y="30">
<list key="attribute_values">
<parameter key="TC" value="5"/>
<parameter key="SC" value="3"/>
</list>
<list key="set_additional_roles"/>
</operator>
<operator activated="true" class="generate_data_user_specification" compatibility="5.2.008" expanded="true" height="60" name="Generate Data by User Specification (2)" width="90" x="45" y="120">
<list key="attribute_values">
<parameter key="TC" value="10"/>
<parameter key="SC" value="7"/>
</list>
<list key="set_additional_roles"/>
</operator>
<operator activated="true" class="generate_data_user_specification" compatibility="5.2.008" expanded="true" height="60" name="Generate Data by User Specification (3)" width="90" x="45" y="210">
<list key="attribute_values">
<parameter key="TC" value="150"/>
<parameter key="SC" value="83"/>
</list>
<list key="set_additional_roles"/>
</operator>
<operator activated="true" class="append" compatibility="5.2.008" expanded="true" height="112" name="Append" width="90" x="246" y="120"/>
<operator activated="true" class="r:execute_script_r" compatibility="5.2.000" expanded="true" height="76" name="Execute Script (R)" width="90" x="447" y="120">
<parameter key="script" value="attach(inp) SS <- pbinom(SC,TC,0.5,lower.tail=F) out <- data.frame(SC=SC,TC=TC,SS=SS) detach(inp)"/>
<enumeration key="inputs">
<parameter key="name_of_variable" value="inp"/>
</enumeration>
<list key="results">
<parameter key="out" value="Data Table"/>
</list>
</operator>
<connect from_op="Generate Data by User Specification" from_port="output" to_op="Append" to_port="example set 1"/>
<connect from_op="Generate Data by User Specification (2)" from_port="output" to_op="Append" to_port="example set 2"/>
<connect from_op="Generate Data by User Specification (3)" from_port="output" to_op="Append" to_port="example set 3"/>
<connect from_op="Append" from_port="merged set" to_op="Execute Script (R)" to_port="input 1"/>
<connect from_op="Execute Script (R)" from_port="output 1" to_port="result 1"/>
<portSpacing port="source_input 1" spacing="0"/>
<portSpacing port="sink_result 1" spacing="0"/>
<portSpacing port="sink_result 2" spacing="0"/>
</process>
</operator>
</process>0 -
For anyone who references this in future, the R script for generating an attribute could actually just be a one-liner:
... if input and output are both named 'data'.
data$SS <- pbinom(data$SC-1,data$TC,0.5,lower.tail=F)0